Unter der Bezeichnung EcoMeter werden von „Proteus“ und „Tekelek“ Funksensoren für Zisternen und Öltanks vertrieben deren Füllstandsanzeige über USB ausgewertet werden kann.
In der Anzeige steckt eine USB-UART Bridge CP2102 die auf 115200bd, 8N1 eingestellt ist. Über sie wird alle 60 oder 30 Minuten (außer kurzzeitig im „FastMode“) ein Telegramm mit 22 Byte Länge versandt in dem alle aktuellen Messwerte enthalten sind.
Teilweise sind diese schlampig parametriert und haben keine eindeutige PID und Seriennummer. Dem kann mittels USBXpress von Silabs abgeholfen werden. Mit eindeutiger Kennung kann, falls gewünscht, auch eine udev-Regel angelegt werden.
In der Middleware wird ein Kanal vom Typ "Füllstände" angelegt.
Das Script wird per crontab aufgerufen. Der Zeitabstand ist höher zu wählen als der EcoMeter sendet. Frühestens alle 3 Stunden.
* */3 * * * /home/pi/bin/ecometer.sh
Als Ergebnis wird der Füllstand in Litern ausgewertet (Byte 17 und 18).
#!/bin/bash #~/ecometer.sh # Daten aus einem Ecometer von Proteus per USB # an die Middleware eines volkszaehler.org uebergeben # 06.03.2019 Daniel Lauckner # Schnittstelle ECO_DEV=/dev/ttyUSB0 # VZ HOST=localhost UUID=12345678-1234-1234-1234-123456789012 # PATH fuer Cronjob setzen PATH=/usr/local/bin:$PATH # Schnittstelle konfigurieren stty < "$ECO_DEV" cs8 cstopb -ixon raw speed 115200 # Daten holen echo "Warte auf Daten" ECO_DATA=$(cat $ECO_DEV | xxd -l 22 -ps) # Timestamp TS=$(date +%s) TS=$(($TS*1000)) # Plausibilität ECO_HEAD=$(echo $ECO_DATA | cut -c1-4) if [ $ECO_HEAD=="5349" ]; # 0x5349 = "SI" then ECO_VALUE=$(printf "%d" "0x$(echo $ECO_DATA | cut -c33-36)") # Daten senden # echo wget -O - -q "http://$HOST/middleware.php/data/$UUID.json?operation=add&ts=$TS&value=$ECO_VALUE" wget -O - -q "http://$HOST/middleware.php/data/$UUID.json?operation=add&ts=$TS&value=$ECO_VALUE" printf "\n" else printf "Header 0x%s ungültig\n" $ECO_HEAD fi