Monitoring des
Stromverbrauch
Datum:
22.12.2021
Projektbeschreibung:
Die Idee zu
dieser Seite:
Bei der
Vorbereitung der Installation und Sizing sowie im
späteren Betrieb einer Solaranlage sind Verbrauchsmessungen nützlich und
notwendig. So kann unter Bezugnahme auf den Strom als Energiequelle
a.) die Dimension der Kollektoren
b.) die Energiespeicherung in
a. Batterien und
b. Warmwasserspeichern sowie der
c.) Mindestverbrauch durch ständige
Verbraucher wie
a. Kühlaggregate
b. Pumpen im Heizbetrieb etc
d.) der planbare Stromverbrauch von
optional aktivierbaren Verbrauchern wie
a. Spülmaschine
b. Waschmaschine
c. Wäschetrockner
d. Herd etc
e.) der Brutto Strombezug aus
a. dem Netz (am smart meter)
b. aus den Batterien
erhoben und
in Abhängigkeit von Jahreszeit und aktueller bzw. vorhergesagter Witterung bzw.
Sonnenabdeckung analysiert und optimiert werden. Alles unter der Maßgabe
möglichst viel an Solarstrom selbst zu verbrauchen. Denn die Einspeisung in das
öffentliche Netz wirft immer weniger Ertrag ab. Das macht nur Sinn, wenn
Erzeugung, Verbrauch und Pufferung in Energiespeichern in langfristige und ad
hoc Analysen und Steuerungen einfließen. Das kann nur auf Basis einer richtigen
Taxonomie und gesammelten Daten aus granular ausreichend gewählten Zeitperioden
erfolgen.
Hier
besprechen wir den ersten Schritt, nämlich die Messung von Stromverbrauchern.
Das geschieht unter Verwendung folgender Komponenten:
Hardware:
· Smart Sockets der Vertriebsfirma
„Nous“ für 3450 Watt mit ESP8266 Chip. Das sind Clones der Gosund
SP111.
· RaspBerry PI 4 B, wie er in der Industrie in
Produktionsprozessen verwendet wird. Mit 64 Bit OS RaspBian
vom 30.11.2021
· Zwei Shelly 1 PM
WLAN Schalter (eingebauter
ESP2866) mit Watt Messfunktion mit je bis zu drei Temperarursensoren GIAK DS18B20
· ESP2866 und BME280 zur Überwachung
der Temperaturumgebung der Speicherbatterie
Software:
· Mosquitto MQTT Broker
· Mosquitto Client (zum Testen)
· Telegraf Connector
· InfluxDB Zeitreihendatenbank
· Grafana Visualisierung der Daten auf Web
Frontend
· Tuya convert
ESP mit Tasmota firmware
via WLAN flashen (Heise ct) oder direkt per FTDI und
Draht. Das Device SP111 kann zu diesem Zweck einfach aufgeschraubt werden.
Protokolle
· MQTT als Transport
· JSON als Datenformat
· InfluxQL als Datenbankadministrations- und
Datenzugriffsprotokoll
· Die unten aufgezeigten
Konfigurationsdateien und Hinweise sollen Interessierten eine Erstinstallation
erleichtern und helfen, Zeit zu gewinnen. Security Aspekte habe ich ausgespart.
Die
Installation bleibt also im lokalen WLAN, wenn im Router eine Verbindung in die
Außenwelt für die Smart Sockets unterbunden wird (Stichwort Kindersicherung).
In DHCP auf dem Router für alle integrierten Komponenten feste DHCP Adressen
konfigurieren.
Auch die
smart sockets sind über das WLAN integriert:
Das Flashen der Messgeräte (nous
smart sockets) durch die Tasmota
firmware mittels tuya convert ist auf github auf dem ct
Link https://github.com/ct-Open-Source/tuya-convert
präzise beschrieben. Sogar noch etwas kleinteiliger hier: https://www.simon42.com/tuya-convert-tasmota-firmware-smart-life/.
Diesen
Schritt überspringen wir hier. Das Ergebnis sieht für die mqtt
Konfiguration des verwendeten Beispielsteckers so aus:
Das template aus https://templates.blakadder.com/plug.html
ist in unserem Gerät wie folgt:
{"NAME":"NOUS A1","GPIO":[320,0,576,0,2656,2720,0,0,2624,32,0,224,0,0],"FLAG":0,"BASE":45}
Hinweis: Sollte sich das Device nach dem Flashen irgendwann einmal „tot stellen“; dann hilft das 6
malige An-Aus Schalten (am besten auf einer schaltbaren Steckerleiste) und zwar so, dass jeweils die
Leuchtdioden nach dem Anschalten kurz aufblitzen. Danach ist das Device wieder
als Access Point aktiv und man kann die WLAN Konfiguration
mit SSID und pwd erneut eingeben. Beim Flashen über WLAN bzw. OTA (over the air) kann es angeblich noch Code Reste von
firmenseitiger Software geben. Dann mittels eines USB FTDI für ein paar Euro
per Kabel flashen.
Nun zu den
Konfigurationsdateien:
Ein Hinweis
vorweg: Keine loopback IP Adresse
127.1 oder localhost verwenden. Weder als Programmparameter
noch als Attribut in der Konfiguration. Immer die IP Adresse
oder den hostname verwenden. Ggfs
in den conf Dateien oder in den Skripten anpassen.
Als
Voraussetzung auf dem Raspberry folgende Komponenten zur Boot Zeit und in der
angegebenen Reihenfolge starten: Mosquitto, influxdb und telegraf.
# mosquitto.conf Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration
file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
pid_file /run/mosquitto/mosquitto.pid
allow_anonymous true
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d
listener 1883 raspi4
Wenn wir mehrere
topics Protokolle als mqtt_consumer
anmelden wollen, benötigen wir einfach mehrere Client_IDs in den
gleichnamigen Abschnitten.
#telegraf.conf
[global_tags]
[agent]
interval
= "10s"
round_interval
= true
metric_batch_size
= 1000
metric_buffer_limit
= 10000
collection_jitter
= "0s"
flush_interval
= "10s"
flush_jitter
= "0s"
precision
= ""
debug
= true
hostname
= ""
omit_hostname
= false
[[outputs.influxdb]]
urls
= ["http://raspi4:8086"]
database
= "consumer"
username
= "power"
password
= "Power"
skip_database_creation
= false
[[inputs.mqtt_consumer]] #Shelly 1PM
servers
= ["tcp://192.168.0.42:1883"]
# ## Topics that will be subscribed
to.
topics
= [
"shellies/temper2.topic06/ext_temperature/0",
"shellies/temper2.topic06/ext_temperature/1",
]
data_format = "value"
data_type = "float"
client_id = "CLIENT1"
[[inputs.mqtt_consumer]]
# ESP8266 mit BME280
servers
= ["tcp://192.168.0.42:1883"]
topics
= [
"Garage_0/SENSORS/#",
]
data_format = "value"
#data_format = "json"
data_type = "float"
client_id = "Garage"
# # Read metrics from MQTT topic(s)
[[inputs.mqtt_consumer]] #Gosund SP111 bzw. Nous A1
servers
= ["tcp://192.168.0.42:1883"]
topics
= [
"socket01topic01/SENSOR",
"socket02topic02/SENSOR",
"socket03topic03/SENSOR",
"socket04topic04/SENSOR",
]
data_format = "json"
client_id = "CLIENT2"
#data_format = "influx" data_format =
"json"
qos = 2
#Ende telegraf.conf
Das Format
der Werte in der Tasmota mqtt
Nachricht sieht so aus:
{"Time":"2021-12-22T13:14:43","ENERGY":{"TotalStartTime":"2021-12-17T15:01:43","Total":0.029,
"Yesterday":0.000,"Today":0.029,"Period":0,"Power":14,"ApparentPower":37,
"ReactivePower":34,"Factor":0.38,"Voltage":237,"Current":0.156}}
Zu den
einzelnen Werten und Einheiten siehe die Erklärung hier:
und https://tasmota.github.io/docs/
------------------------------------------------
#In influx Database Anmeldung mit Retention Strategie hinter
dem Datenbanknamen und Punkt als Trenner.
In der
SELECT Clause die "Tabelle" angeben, die
sich auf die mqtt telegraf input Konfiguration bezieht.
Nach
Aufruf von influx aus der shell:
> auth
User:
<userid>
Password:
<password>
> use consumer.autogen
> select * from mqtt_consumer
Output:
name: mqtt_consumer
time ENERGY_ApparentPower ENERGY_Current
ENERGY_Factor ENERGY_Period
ENERGY_Power ENERGY_ReactivePower
ENERGY_Today ENERGY_Total ENERGY_Voltage ENERGY_Yesterday
host topic
----
-------------------- -------------- ------------- ------------- ------------
-------------------- ------------ ------------ -------------- ----------------
---- -----
1640175493810959310 36 0.151 0.39 0 14 33 0.03 0.03 237 0 raspi4 socket01topic01/SENSOR
1640175523834772277 35 0.147 0.37 0 13 33 0.03 0.03 239 0 raspi4 socket01topic01/SENSOR
1640175553814674913 37 0.154 0.36 0 13 34 0.03 0.03 239 0 raspi4 socket01topic01/SENSOR
1640175583839373655 36 0.151 0.32 0 11 34 0.03 0.03 238 0 raspi4 socket01topic01/SENSOR
1640175613801732510 36 0.151 0.36 0 13 34 0.03 0.03 237 0 raspi4 socket01topic01/SENSOR
1640175643950973619 41 0.172 0.3 0 12 39 0.03 0.03 238 0 raspi4 socket01topic01/SENSOR
1640175673824570453 38 0.159 0.36 0 14 35 0.031 0.031 239 0 raspi4 socket01topic01/SENSOR
1640175703853490766 34 0.143 0.35 0 12 32 0.031 0.031 239 0 raspi4 socket01topic01/SENSOR
1640175733850503063 35 0.149 0.34 0 12 33 0.031 0.031 238 0 raspi4 socket01topic01/SENSOR
1640180143842280939 38 0.158 0.36 0 14 35 0.049 0.049 239 0 raspi4 socket01topic01/SENSOR
1640180173846093040 37 0.154 0.32 0 12 35 0.049 0.049 239
0 raspi4
socket01topic01/SENSOR
1640180203801818723 40 0.167 0.4 0 16 37 0.049 0.049 239 0 raspi4 socket01topic01/SENSOR
1640180233806270467 40 0.169 0.34 0 14 38 0.049 0.049 239 0 raspi4 socket01topic01/SENSOR
1640180263818522050 41 0.173 0.32 0 13 39 0.049 0.049 239 0 raspi4 socket01topic01/SENSOR
1640180294063959884 38 0.158 0.36 0 14 35 0.049 0.049 239 0 raspi4 socket01topic01/SENSOR
1640180323802163785 37 0.155 0.32 0 12 35 0.049 0.049 239 0 raspi4 socket01topic01/SENSOR
1640180353809689615 38 0.159 0.36 0 14 36 0.049 0.049 239 0 raspi4 socket01topic01/SENSOR
-----------------------
Hier ein
Teil der Web based Grafana
Konfiguration online mit diesem bzw. ähnlichen SELECT für die Nous A1 Smart
Sockets angeben in der Admin GUI
SELECT mean("ENERGY_Power")
FROM "autogen"."mqtt_consumer"
WHERE ("topic" = 'socket01topic01/SENSOR')
AND $timeFilter GROUP BY time($__interval)
fill(null)
Einheit Watt für das Display auswählen
Für die TemperaturMessung via BME280:
Im WebFrontEnd des mit ESPEasy geflashten ESP8266 das BME280 Device eintragen:
Humidity
ist auf 0, weil es sich um einen BMP280
handelt: Augen auf beim Komponentenkauf! Als MQTT Controller sollte openHAB gewählt sein.
Der mosquitto log verrät Quelle und Topic Name:
Received PUBLISH from Garage_0 (d0, q0, r0,
m0, 'Garage_0/SENSORS/Temperature', ... (5 bytes))
Hier nun die
Grafana Abfrage:
SELECT mean("value") FROM
"autogen"."mqtt_consumer" WHERE topic='Garage_0/SENSORS/Temperature' AND $timeFilter GROUP BY time($__interval)
fill(null)
Hier unten
eine einfache Grafana Dashboard Anzeige mit vier
eingesetzten Sockets.
Die
Zeitreihe der Verbrauchswerte über den Tag für jeden Socket einzeln.
Kühlschrank
weist das typische Muster eines Dauerverbrauchers auf – hier: (Tief)Kühl Kombi.
Spülmaschine
läuft und der Rest verbraucht 1 W für den Betrieb des Smart Socket.