Zigbee Steckdosen, Grafana Sankey und Wasserverbrauch

Nachdem ich mich mit den Zigbee Thermostaten und Temperatursensoren so angefreundet habe, hab ich mir jetzt vier Zigbee Steckdosen zum Testen geholt. Sonoff S60ZBTPF, die haben neben dem schaltbaren Relay auch einen Stromzähler eingebaut. 53 Euro für alle vier, also gut 13 Euro pro Stück.

Angeschlossen sind jetzt Kühlschrank, Gefrierschrank, TV-Schrank und die Enthärtungsanlage. Die Geräte tauchen per Zigbee2MQTT direkt in MQTT auf, Telegraf schluckt die Werte und schreibt sie nach InfluxDB, genau wie bei den Thermostaten, nur mit einem eigenen inputs.mqtt_consumer-Block in der Telegraf-Config weil die Steckdosen ein anderes Topic-Format haben:

[[inputs.mqtt_consumer]]
servers = ["tcp://mosquitto:1883"]
topics = [
"zigbee2mqtt/Kühlschrank",
"zigbee2mqtt/TV Schrank",
"zigbee2mqtt/Gefrierschrank",
"zigbee2mqtt/Enthärtungsanlage",
]
topic_tag = "device"
data_format = "json"
name_override = "zigbee"

fieldinclude = [
"power",
"energy",
"energy_today",
"energy_yesterday",
"current",
"voltage",
"linkquality"
]

Das eigentlich Interessante war danach der Sankey in Grafana. Der zeigt jetzt schön wie der Strom fließt: PV rein, was geht ins Netz, was verbrauchen die einzelnen Geräte:

[[img:1]]

Auf dem Screenshot sieht man gerade 2,29 kW PV-Produktion, 586 W Verbrauch und 1,70 kW gehen ins Netz. Spannend ist der Block „Unbekannt" mit 204 W, das ist alles was noch keine Steckdose hat. Den will ich mit der Zeit kleiner kriegen.

Heute hab ich auch noch den Wasserverbrauch in Grafana eingebaut, und das hat eine längere Vorgeschichte.

Als ich Anfang April mit dem RTL-SDR und dem Flightradar-Setup angefangen hab, hab ich mich gefragt ob man damit nicht auch den Wasserzähler auslesen kann. Moderne Zähler funken ihre Werte per wMBus (Wireless M-Bus), ein Protokoll das genau im ISM-Band liegt, das ein RTL-SDR problemlos empfangen kann. Dumm nur: die Telegramme sind verschlüsselt und der Key liegt bei den Stadtwerken.

Also hab ich am 13.04. eine E-Mail an meine Stadt geschickt und nach dem Schlüssel gefragt. Heute kam die Antwort und ich hab direkt angefangen. Der Zähler ist ein Kamstrup Multical 21. Das wmbusmeters-Image bekommt per Docker den RTL-SDR Dongle durchgereicht und braucht dafür privileged: true:

services:
watermeter:
image: docker.io/wmbusmeters/wmbusmeters:latest
privileged: true
devices:
- /dev/bus/usb:/dev/bus/usb
volumes:
- ./config:/wmbusmeters_data/etc
- ./logs:/wmbusmeters_data/logs
- ./influx_write.sh:/wmbusmeters_data/influx_write.sh:ro

In der wmbusmeters.conf steht welcher SDR-Dongle und welches Protokoll genutzt wird — t1 ist der wMBus-Mode den die meisten Wasserzähler nutzen:

device=rtlwmbus:t1
format=json
meterfiles=/wmbusmeters_data/logs/meter_readings
meterfilesaction=overwrite

Und pro Zähler eine eigene Config-Datei mit Zähler-ID, Typ und dem Key von den Stadtwerken:

name=main
id=XXXXXXXX
key=********************************
type=multical21

wmbusmeters ruft bei jedem neuen Telegramm ein Shell-Script auf und übergibt den Zählerstand, das Script schreibt ihn dann nach InfluxDB:

#!/bin/sh
total_m3="$1"
[ -z "${total_m3}" ] && exit 0
curl -s --max-time 10 \
-XPOST "http://influx:8086/write?db=vault&u=api&p=****" \
--data-binary "watermeter,meter=main total_m3=${total_m3}"

Eine Stunde Arbeit.

[[img:2]]

Zählerstand gesamt und Verlauf über den Tag. Macht Sinn wenn man auf lange Sicht sehen will ob irgendwo was tropft.