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.
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