Sign inSign up

maartenva/rtl433_mqtt_2_azure

By maartenva

•Updated over 7 years ago

BETA: receive data from 433Mhz weather stations and upload it to Azure Iot Hub

Image
0

248

maartenva/rtl433_mqtt_2_azure repository overview

A simple script that will receive events from a RTL433 SDR and forward it to Azure IOT hub

Author: Maarten van Achte Version 0.16: build upon maartenva_rtl433_2_mqtt

Use these variable when creating a container to specify the MQTT broker settings, set RTL433 frequency and other parameters ENV AZURE_HOST="" -> MQTT host DNS or IP

ENV AZURE_DEVICE_ID=""
	-> 	Azure IOT device ID

ENV AZURE_SAS_TOKEN=""
	->	Azure Sas Token ( https://github.com/Microsoft/vscode-azure-iot-toolkit/wiki/Generate-SAS-Token-for-IoT-Hub )
	
ENV RTL_FREQ="433805000"
	-> 	you can set the frequency the program listens to

ENV RTL_PARAM="-G -a"
	-> 	used to provided extra parameters to RTL433, see: https://github.com/merbanan/rtl_433#running
		example: -R 44
			
ENV MOSQUITTO_PARAM=""
	->	add extra parameters to mosquito client (example: -d for debug info)
	
ENV WIND_SENSOR="AlectoV1 Wind Sensor"
	->	filter dat input for this kind of sensor. See RTL433 for more information ( https://github.com/merbanan/rtl_433#running ) or use RTL433 -a to analyse incomming data

ENV TEMP_SENSOR="AlectoV1 Temperature Sensor"
	->	filter dat input for this kind of sensor. See RTL433 for more information ( https://github.com/merbanan/rtl_433#running ) or use RTL433 -a to analyse incomming data
	
ENV RAIN_SENSOR="AlectoV1 Rain Sensor"
	->	filter dat input for this kind of sensor. See RTL433 for more information ( https://github.com/merbanan/rtl_433#running ) or use RTL433 -a to analyse incomming data
	
ENV RAIN_INTERVAL="30"
	->	Rain meter outputs a lot data even when there is no rain. Only upload every X packets if rain data is the same

	
	
	

⁠-- rtl433_mqtt_2azure.sh

#!/bin/bash

⁠A simple script that will receive events from a RTL433 SDR and forward it to MQTT broker

⁠Author: Maarten van Achte

⁠Version: Azure 0.16

⁠Remove hash on next line for debugging

#set -x

export LANG=C PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin"

declare -i count declare -i lastrain

count=$RAIN_INTERVAL lastrain=0

/usr/local/bin/rtl_433 -F json -f $RTL_FREQ $RTL_PARAM | while read line

do

model=$(echo $line | jq -r '.model')
id=$(echo $line | jq -r '.id')
temperature=$(echo $line | jq -r '.temperature_C')
humidity=$(echo $line | jq -r '.humidity')
rain=$(echo $line | jq -r '.rain_total')
speed=$(echo $line | jq -r '.wind_speed')
gust=$(echo $line | jq -r '.wind_gust')
wind=$(echo $line | jq -r '.wind_direction')
battery=$(echo $line | jq -r '.battery')

echo $line
echo "Model: $model"
echo "Id: $id"
echo "Temperature: $temperature"
echo "Humidity: $humidity"
echo "rain_total: $rain"
echo "wind_direction: $wind"
echo "wind_speed: $speed"
echo "wind_gust: $gust"
echo "Battery: $battery"


	
# temp + humidity	
if [ "$model" == "$TEMP_SENSOR" ]
then	
	/usr/bin/mosquitto_pub $MOSQUITTO_PARAM -h $AZURE_HOST -i $AZURE_DEVICE_ID -V mqttv311 -u "$AZURE_HOST/$AZURE_DEVICE_ID/?api-version=2018-06-30" -p 8883 -P "$AZURE_SAS_TOKEN" -t "devices/$AZURE_DEVICE_ID/messages/events/" --capath /etc/ssl/certs/ -m "TEMP_SENSOR:temp=$temperature&humidity=$humidity&battery=$battery"
	
	echo "TEMP_SENSOR:temp=$temperature&humidity=$humidity&battery=$battery"
fi

#wind
if [ "$model" == "$WIND_SENSOR" ]
then	
	/usr/bin/mosquitto_pub $MOSQUITTO_PARAM -h $AZURE_HOST -i $AZURE_DEVICE_ID -V mqttv311 -u "$AZURE_HOST/$AZURE_DEVICE_ID/?api-version=2018-06-30" -p 8883 -P "$AZURE_SAS_TOKEN" -t "devices/$AZURE_DEVICE_ID/messages/events/" --capath /etc/ssl/certs/ -m "WIND_SENSOR:speed=$speed&direction=$wind&gust=$gust&battery=$battery"
	

	echo "WIND_SENSOR:speed=$speed&direction=$wind&gust=$gust&battery=$battery"

fi

#rain
if [ "$model" == "$RAIN_SENSOR" ]
then
	#check if rain data is same as previous data
	if [ "$rain" == "$lastrain" ]
	then
		if [ "$count" eq 0 ]
		then
			count=$RAIN_INTERVAL
			echo "Old rain data"
			echo "RAIN_SENSOR:rain=$rain&battery=$battery"
		fi
	
		if [ "$count" eq $RAIN_INTERVAL ]
		then
	
			/usr/bin/mosquitto_pub $MOSQUITTO_PARAM -h $AZURE_HOST -i $AZURE_DEVICE_ID -V mqttv311 -u "$AZURE_HOST/$AZURE_DEVICE_ID/?api-version=2018-06-30" -p 8883 -P "$AZURE_SAS_TOKEN" -t "devices/$AZURE_DEVICE_ID/messages/events/" --capath /etc/ssl/certs/ -m "RAIN_SENSOR:rain=$rain&battery=$battery"
		
			echo "Publish recurring rain data"
			echo "RAIN_SENSOR:rain=$rain&battery=$battery"
		fi	
		
		
		let "count--"	
	else
		lastrain=$rain
	
		/usr/bin/mosquitto_pub $MOSQUITTO_PARAM -h $AZURE_HOST -i $AZURE_DEVICE_ID -V mqttv311 -u "$AZURE_HOST/$AZURE_DEVICE_ID/?api-version=2018-06-30" -p 8883 -P "$AZURE_SAS_TOKEN" -t "devices/$AZURE_DEVICE_ID/messages/events/" --capath /etc/ssl/certs/ -m "RAIN_SENSOR:rain=$rain&battery=$battery"
		
		echo "Publish new rain data"
		echo "RAIN_SENSOR:rain=$rain&battery=$battery"		
		
	fi
	
	echo "Rain count= $count"
	echo "Last rain= $lastrain"
		
fi

echo "____________________________"	

done

Tag summary

Content type

Image

Digest

Size

171.2 MB

Last updated

over 7 years ago

docker pull maartenva/rtl433_mqtt_2_azure:0.21