#!/bin/sh # A simple script that will receive events from an RTL433 SDR and resend the data via MQTT # Author: Chris Kacerguis # Modification for hass.io add-on: James Fry # Below are rtl_433 options and the supported device protocols as of 25/10/2017 # **NOTE that the protocol number is NOT persistent and seems to change** # Hence always verify protocol numbers in logs when starting the add-on # The key arguments required are: # -F json --> this sets JSON formatted output for easier MQTT # -R --> this tells rtl_433 which protocol(s) to scan for # Usage: = Tuner options = # [-d ] (default: 0) # [-g ] (default: 0 for auto) # [-f ] [-f...] Receive frequency(s) (default: 433920000 Hz) # [-H ] Hop interval for polling of multiple frequencies (default: 600 seconds) # [-p ] Set sample rate (default: 250000 Hz) # [-S] Force sync output (default: async) # = Demodulator options = # [-R ] Enable only the specified device decoding protocol (can be used multiple times) # [-G] Enable all device protocols, included those disabled by default # [-l ] Change detection level used to determine pulses [0-16384] (0 = auto) (default: 0) # [-z ] Override short value in data decoder # [-x ] Override long value in data decoder # [-n ] Specify number of samples to take (each sample is 2 bytes: 1 each of I & Q) # = Analyze/Debug options = # [-a] Analyze mode. Print a textual description of the signal. Disables decoding # [-A] Pulse Analyzer. Enable pulse analyzis and decode attempt # [-I] Include only: 0 = all (default), 1 = unknown devices, 2 = known devices # [-D] Print debug info on event (repeat for more info) # [-q] Quiet mode, suppress non-data messages # [-W] Overwrite mode, disable checks to prevent files from being overwritten # [-y ] Verify decoding of demodulated test data (e.g. "{25}fb2dd58") with enabled devices # = File I/O options = # [-t] Test signal auto save. Use it together with analyze mode (-a -t). Creates one file per signal # Note: Saves raw I/Q samples (uint8 pcm, 2 channel). Preferred mode for generating test files # [-r ] Read data from input file instead of a receiver # [-m ] Data file mode for input / output file (default: 0) # 0 = Raw I/Q samples (uint8, 2 channel) # 1 = AM demodulated samples (int16 pcm, 1 channel) # 2 = FM demodulated samples (int16) (experimental) # 3 = Raw I/Q samples (cf32, 2 channel) # Note: If output file is specified, input will always be I/Q # [-F] kv|json|csv Produce decoded output in given format. Not yet supported by all drivers. # append output to file with : (e.g. -F csv:log.csv), defaults to stdout. # [-C] native|si|customary Convert units in decoded output. # [-T] specify number of seconds to run # [-U] Print timestamps in UTC (this may also be accomplished by invocation with TZ environment variable set). # [] Save data stream to output file (a '-' dumps samples to stdout) # # Supported device protocols: # [01]* Silvercrest Remote Control # [02] Rubicson Temperature Sensor # [03] Prologue Temperature Sensor # [04] Waveman Switch Transmitter # [05]* Steffen Switch Transmitter # [06]* ELV EM 1000 # [07]* ELV WS 2000 # [08] LaCrosse TX Temperature / Humidity Sensor # [09]* Template decoder # [10]* Acurite 896 Rain Gauge # [11] Acurite 609TXC Temperature and Humidity Sensor # [12] Oregon Scientific Weather Sensor # [13] Mebus 433 # [14]* Intertechno 433 # [15] KlikAanKlikUit Wireless Switch # [16] AlectoV1 Weather Sensor (Alecto WS3500 WS4500 Ventus W155/W044 Oregon) # [17] Cardin S466-TX2 # [18] Fine Offset Electronics, WH2 Temperature/Humidity Sensor # [19] Nexus Temperature & Humidity Sensor # [20] Ambient Weather Temperature Sensor # [21] Calibeur RF-104 Sensor # [22]* X10 RF # [23]* DSC Security Contact # [24]* Brennenstuhl RCS 2044 # [25] GT-WT-02 Sensor # [26] Danfoss CFR Thermostat # [27]* Energy Count 3000 (868.3 MHz) # [28]* Valeo Car Key # [29] Chuango Security Technology # [30] Generic Remote SC226x EV1527 # [31] TFA-Twin-Plus-30.3049 and Ea2 BL999 # [32] Fine Offset Electronics WH1080/WH3080 Weather Station # [33] WT450 # [34] LaCrosse WS-2310 Weather Station # [35] Esperanza EWS # [36] Efergy e2 classic # [37]* Inovalley kw9015b, TFA Dostmann 30.3161 (Rain and temperature sensor) # [38] Generic temperature sensor 1 # [39] WG-PB12V1 # [40]* Acurite 592TXR Temp/Humidity, 5n1 Weather Station, 6045 Lightning # [41]* Acurite 986 Refrigerator / Freezer Thermometer # [42] HIDEKI TS04 Temperature, Humidity, Wind and Rain Sensor # [43] Watchman Sonic / Apollo Ultrasonic / Beckett Rocket oil tank monitor # [44] CurrentCost Current Sensor # [45] emonTx OpenEnergyMonitor # [46] HT680 Remote control # [47] S3318P Temperature & Humidity Sensor # [48] Akhan 100F14 remote keyless entry # [49] Quhwa # [50] OSv1 Temperature Sensor # [51] Proove # [52] Bresser Thermo-/Hygro-Sensor 3CH # [53] Springfield Temperature and Soil Moisture # [54] Oregon Scientific SL109H Remote Thermal Hygro Sensor # [55] Acurite 606TX Temperature Sensor # [56] TFA pool temperature sensor # [57] Kedsum Temperature & Humidity Sensor # [58] blyss DC5-UK-WH (433.92 MHz) # [59] Steelmate TPMS # [60] Schrader TPMS # [61]* LightwaveRF # [62] Elro DB286A Doorbell # [63] Efergy Optical # [64] Honda Car Key # [65]* Template decoder # [66] Fine Offset Electronics, XC0400 # [67] Radiohead ASK # [68] Kerui PIR Sensor # [69] Fine Offset WH1050 Weather Station # [70] Honeywell Door/Window Sensor # [71] Maverick ET-732/733 BBQ Sensor # [72]* RF-tech # [73] LaCrosse TX141TH-Bv2 sensor # [74] Acurite 00275rm,00276rm Temp/Humidity with optional probe # [75] LaCrosse TX35DTH-IT Temperature sensor # [76] LaCrosse TX29IT Temperature sensor # [77] Vaillant calorMatic 340f Central Heating Control # [78] Fine Offset Electronics, WH25 Temperature/Humidity/Pressure Sensor # [79] Fine Offset Electronics, WH0530 Temperature/Rain Sensor # [80] IBIS beacon # [81] Oil Ultrasonic STANDARD FSK # [82] Citroen TPMS # [83] Oil Ultrasonic STANDARD ASK # [84] Thermopro TP11 Thermometer # [85] Solight TE44 # [86] Wireless Smoke and Heat Detector GS 558 # [87] Generic wireless motion sensor # [88] Toyota TPMS # [89] Ford TPMS # [90] Renault TPMS # [91]* inFactory # [92] FT-004-B Temperature Sensor # [93] Ford Car Key # [94] Philips outdoor temperature sensor # [95] Schrader TPMS EG53MA4 # [96] Nexa # [97] Thermopro TP12 Thermometer # [98] GE Color Effects # [99] X10 Security # [100] Interlogix GE UTC Security Devices # [101]* Dish remote 6.3 # * Disabled by default, use -R n or -G export LANG=C PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin" CONFIG_PATH=/data/options.json MQTT_HOST="$(jq --raw-output '.mqtt_host' $CONFIG_PATH)" MQTT_USER="$(jq --raw-output '.mqtt_user' $CONFIG_PATH)" MQTT_PASS="$(jq --raw-output '.mqtt_password' $CONFIG_PATH)" MQTT_TOPIC="$(jq --raw-output '.mqtt_topic' $CONFIG_PATH)" PROTOCOL="$(jq --raw-output '.protocol' $CONFIG_PATH)" FREQUENCY="$(jq --raw-output '.frequency' $CONFIG_PATH)" GAIN="$(jq --raw-output '.gain' $CONFIG_PATH)" OFFSET="$(jq --raw-output '.frequency_offset' $CONFIG_PATH)" # Start the listener and enter an endless loop echo "Starting RTL_433 with parameters:" echo "MQTT Host =" $MQTT_HOST echo "MQTT User =" $MQTT_USER echo "MQTT Password =" $MQTT_PASS echo "MQTT Topic =" $MQTT_TOPIC echo "RTL_433 Protocol =" $PROTOCOL echo "RTL_433 Frequency =" $FREQUENCY echo "RTL_433 Gain =" $GAIN echo "RTL_433 Frequency Offset =" $OFFSET #set -x ## uncomment for MQTT logging... /usr/local/bin/rtl_433 -F json -R $PROTOCOL -f $FREQUENCY -g $GAIN -p $OFFSET | while read line do DEVICE="$(echo $line | jq --raw-output '.model' | tr -s ' ' '_')" # replace ' ' with '_' DEVICEID="$(echo $line | jq --raw-output '.id' | tr -s ' ' '_')" MQTT_PATH=$MQTT_TOPIC if [ ${#DEVICE} > 0 ]; then MQTT_PATH=$MQTT_PATH/"$DEVICE" fi if [ ${#DEVICEID} > 0 ]; then MQTT_PATH=$MQTT_PATH/"$DEVICEID" fi # Create file with touch /tmp/rtl_433.log if logging is needed [ -w /tmp/rtl_433.log ] && echo $line >> rtl_433.log echo $line | /usr/bin/mosquitto_pub -h $MQTT_HOST -u $MQTT_USER -P $MQTT_PASS -i RTL_433 -r -l -t $MQTT_PATH done