Benutzer-Werkzeuge

Webseiten-Werkzeuge


hardware:channels:heating_control:uvr1611

UVR

Die UVR1611 und ihr Nachfolger UVR16x2 sind nahezu frei programmierbare Heizkreisregler der Firma Technische Alternative.

Sie bietet auch diverse Systeme zur Anbindung an PC und Ethernet an. So z.B. den alten BL-Net (Bootloader), D-Logg und aktuell das C.M.I. die auch Datenlogging bieten.
Der BL-Net und D-Logg verfügt aber nur über wenig Speicherkapazität, was bedeutet dass die Daten regelmäßig abgeholt werden müssen oder im Ringspeicher verloren gehen.

Auslesen des C.M.I. ist mit der nachfolgenden Lösung nicht möglich!
Es gibt aber die cmi-json-api.

Sensoren auslesen

Um die Sensordaten in den Volkszähler zu übernehmen eignet sich dl-aktuelle-datenx github von Volker Römer.
Er stellt auch eine auf dem Raspberry lauffähige Version als Download zur Verfügung. Sie wird vorzugsweise unter /usr/local/bin/ abgelegt.

#!/bin/bash
# Daten aus der UVR1611 mittels dlogg und wget
# in die Datenbank  eines Volkszaehlers uebertragen
# 07.12.2016 Daniel Lauckner
# 10.08.2017 Änderung: Leere Datenrahmen verwerfen
 
# PATH fuer Cronjob setzen
PATH=/usr/local/bin:$PATH
 
# IP-Adresse der UVR
UVR_IP=192.168.1.100
 
# Datenrahmen der UVR (Standard=1)
UVR_DR=1
 
# Host des Volkszaehlers
HOST=localhost
 
# UUIDs den Daten zuordnen
# wenn kein Channel zugeordnet ist nach dem = einfach leer lassen
UUIDS[0]=12ab3456-789c-01d2-f34a-b56c78901234 # 1.Wert Aussentemperatur
UUIDS[1]= # 2.Wert
UUIDS[2]= # 3.Wert
UUIDS[3]= # 4.Wert
UUIDS[4]= # 5.Wert
UUIDS[5]= # 6.Wert
UUIDS[6]=654321ab-789c-01d2-f34a-b56c78901234 # 7.Wert Raumtemperatur
UUIDS[7]= # 8.Wert
UUIDS[8]= # 9.Wert
UUIDS[9]= # 10.Wert
#UUIDS[10]= # 11.Wert
#UUIDS[11]= # 12.Wert
#UUIDS[12]= # 13.Wert
#UUIDS[13]= # 14.Wert
#UUIDS[14]= # 15.Wert
#UUIDS[15]= # 16.Wert
 
# UVR auslesen
echo "Daten aus UVR holen"
UVR_DATEN=($(dl-aktuelle-datenx -i "$UVR_IP" -r "$UVR_DR" --rrd | sed 's/:/ /g') )
 
# Timestamp
TS=$(date +%s)
TS=$(($TS*1000))
 
# VZ schreiben
if [ -z ${UVR_DATEN[0]} ]
then
	# Gelegentlich erhält man von dlogg eine Antwort ohne Daten, eine solche Antwort wird verworfen
	echo "Datenrahmen ohne Inhalt!"
else
	echo "Daten an Volkszaehler uebergeben"
	I=0
	Z=${#UUIDS[@]}
	while [ $I -le $Z ]
	do
		if [ ${UUIDS[$I]} ]
		then
			# In VZ uebertragen
			echo wget -O - -q "http://$HOST/middleware.php/data/${UUIDS[$I]}.json?operation=add&ts=$TS&value=${UVR_DATEN[$I]}"
			wget -O - -q "http://$HOST/middleware.php/data/${UUIDS[$I]}.json?operation=add&ts=$TS&value=${UVR_DATEN[$I]}"
			printf "\n"
		fi
		I=$(($I+1))
	done
fi

Es wird ein aktueller Datenrahmen (enstpricht allen Ein- und Ausgängen einer UVR) abgerufen und entsprechend der UUID in den Volkszähler übertragen.
Die Kanäle sind meist vom Typ Temperatur mit Auflösung 1, die UVR kann aber auch etliche andere Sensoren verarbeiten.

Für jeden gewünschten Datenpunkt im Volkszähler wird das Script erneut aufgerufen.
Beispielsweise als cronjob alle 5 Minuten.

*/5 * * * * /home/pi/bin/uvr-dlogg.sh >> /home/pi/cronlog
hardware/channels/heating_control/uvr1611.txt · Zuletzt geändert: 2019/07/19 06:54 von thhoe