Smart Meter Bindung - Stromzähler

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

nw378
Beiträge: 296
Answers: 5
Registriert: 22. Sep 2018 10:38

Re: Smart Meter Bindung - Stromzähler

Beitrag von nw378 »

ok.... mit MQTT habe ich noch keine Berührungspunkte.

Da muss ich mal blöd nachfragen, ob ich alles richtig mache.

libmosquitto-dev installiere ich mit

Code: Alles auswählen

sudo apt-get install libmosquitto-dev
.

Mosquitto läuft bereits:

Code: Alles auswählen

openhabian@openHABianDevice:~ $ sudo systemctl status mosquitto
● mosquitto.service - Mosquitto MQTT Broker
   Loaded: loaded (/lib/systemd/system/mosquitto.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/mosquitto.service.d
           └─override.conf
   Active: active (running) since Mon 2022-08-29 18:20:13 CEST; 1h 26min ago
     Docs: man:mosquitto.conf(5)
           man:mosquitto(8)
 Main PID: 763 (mosquitto)
    Tasks: 1 (limit: 3839)
   CGroup: /system.slice/mosquitto.service
           └─763 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

Aug 29 18:20:12 openHABianDevice systemd[1]: Starting Mosquitto MQTT Broker...
Aug 29 18:20:13 openHABianDevice systemd[1]: Started Mosquitto MQTT Broker.
den vzlogger muss ich neu installieren, damit beim kompilieren libmosquitto-dev mit verarbeitet wird?

Mit diesem Prozedere?

Code: Alles auswählen

sudo systemctl stop vzlogger
cd vzlogger
git pull
./install.sh vzlogger
sudo systemctl start vzlogger
Und wie muss die vzlogger.conf geändert werden? Bislang sah sie so aus:

Code: Alles auswählen

{
"retry" : 0,                   /* how long to sleep between failed requests, in seconds */
//"daemon": false, 
"verbosity" : 1,               /* between 0 and 15 */
"log" : "/var/log/vzlogger.log",/* path to logfile, optional */
 

"local" : {
        "enabled" : false,      /* should we start the local HTTPd for serving live readings? */
        "port" : 8090,            /* the TCP port for the local HTTPd */
        "index" : true,         /* should we provide a index listing of available channels? */
        "timeout" : 0,         /* timeout for long polling comet requests, 0 disables comet, in seconds */
        "buffer" : -1          /* how long to buffer readings for the local interface, in seconds */
},
 
	"meters" : [{
        "enabled" : true,       /* disabled meters will be ignored */
        "protocol" : "sml",     /* use 'vzlogger -h' for list of available protocols */
        "device" : "/dev/ttyUSB_emlog",
	"interval": 10,	
	//"baudrate": 9600,	
	//"parity": "8n1",
	"use_local_time": true,	
	//"aggtime" : -1, 
	//"aggfixedinterval" : false, 
        
	"channels": [{
	"api": "influxdb", // use the InfluxDB api        
	"uuid": "fde8f1d0-c5d0-11e0-856e-f9e4360ced10",
	//"middleware": "http://localhost/middleware.php",
	"identifier": "1-0:16.7.0", 
	"host": "127.0.0.1:8086",                       // This assumes that InfluxDB is running on localhost	
	"database": "openhab_db", 
	"username": "vzlogger",                        // Optional: When InfluxDB Auth is enabled you need to set the correct user and password
        "password": "vzlogger",	
	"measurement_name": "vz_verbrauch",
	//"aggmode": "none",
	"duplicates": 10 
	},{
	"api": "influxdb", // use the InfluxDB api	
	"uuid": "a8da012a-9eb4-49ed-b7f3-38c95142a90c",
	//"middleware": "http://localhost/middleware.php",
	"identifier": "1-0:1.8.0",
	"host": "127.0.0.1:8086",                       // This assumes that InfluxDB is running on localhost	
	"database": "openhab_db", 
	"username": "vzlogger",                        // Optional: When InfluxDB Auth is enabled you need to set the correct user and password
        "password": "vzlogger",	
	"measurement_name": "vz_zstand",
	//"aggmode": "none",
	"duplicates": 10
	}]
        }
]}
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

Benutzeravatar
udo1toni
Beiträge: 15249
Answers: 242
Registriert: 11. Apr 2018 18:05
Wohnort: Darmstadt

Re: Smart Meter Bindung - Stromzähler

Beitrag von udo1toni »

Ja, genau. in der install.sh ist das alles schon berücksichtigt und vzlogger wird entsprechend gebaut.

Du brauchst irgendwo im Netz einen mqtt Broker, der kann leicht auch auf dem Raspberry von openHAB mitlaufen. openHABian bringt auch ein Script zum Installieren von mosquitto mit, das ist der Broker. Alternativ kannst Du mosquitto aber auch von Hand z.B. mittels apt installieren.
In openHAB brauchst Du das mqtt Binding (logisch) und für die Kommunikation mit mosquitto brauchst Du eine mqtt Broker Bridge. Dort werden die Zugangsdaten eingetragen, also IP-Adresse (evtl. localhost), Port (1883), User und Passwort (muss man nicht unbedingt anlegen, aber wenn Du es bei der Installation von mosquitto gesetzt hast, musst es natürlich auch hier eintragen). Eine ClientID ist auch verpflichtend, wobei openHAB auch automatisch zufällige ClientIDs erzeugt, besser ist natürlich eine ID, welche fest gesetzt ist und damit openHAB identifizierbar macht.

In der vzlogger.conf musst Du folgenden Block eintragen:

Code: Alles auswählen

// mqtt client support (if ENABLE_MQTT set at cmake generation)
    "mqtt": {
        "enabled": true,               // enable mqtt client. needs host and port as well
        "host": "openhabian",          // mqtt server addr
        "port": 1883,                  // 1883 for unencrypted, 8883 enc, 8884 enc cert needed,
        "cafile": "",                  // optional file with server CA
        "capath": "",                  // optional path for server CAs. see mosquitto.conf. Specify only cafile or capath
        "certfile": "",                // optional file for your client certificate (e.g. client.crt)
        "keyfile": "",                 // optional path for your client certficate private key (e.g. client.key)
        "keypass": "",                 // optional password for your private key
        "keepalive": 30,               // optional keepalive in seconds.
        "topic": "vzlogger/data",      // optional topic dont use $ at start and no / at end
        "user": "",                    // optional user name for the mqtt server
        "pass": "",                    // optional password for the mqtt server
        "retain": false,               // optional use retain message flag
        "rawAndAgg": false,            // optional publish raw values even if agg mode is used
        "qos": 0,                      // optional quality of service, default is 0
        "timestamp": true              // optional whether to include a timestamp in the payload
  },
// ab hier folgen die meters
Parameter, die optional sind, musst Du auch nicht setzen.

Wenn Du Dir z.B. den MQTT Explorer installierst (kostenlos im MS Store oder auch direkt vom Programmierer), solltest Du nach einem Neustart von vzlogger schon ein Topic sehen können (mal vorausgesetzt, dass der MQTT Explorer ebenfalls als Client am Broker angemeldet ist).

Die MQTT Kommunikation läuft über sogenannte Topics ab. Der Client sendet sein Topic mitsamt der Payload (die Botschaft) an den Broker, dieser schaut nach, wer an dem Topic interessiert ist und sendet seinerseits das Topic an alle interessierten Empfänger.
Die Topics sind ähnlich einem Dateisystem organisiert, es gibt also Ordner und Unterordner. Ein / ist die Markierung für die nächste Ebene. Topics sind grundsätzlich Case Sensitive. Man sollte möglichst keine Sonderzeichen verwenden, insbesondere keine Leerzeichen.

Damit openHAB die Daten nun auch bekommt, muss es die Topics erst noch abonnieren. Dazu musst Du ein generic MQTT Thing anlegen und für jedes Topic, was Dich interessiert, einen Channel, in dem Du das gewünschte Topic (z.B. vzlogger/data/chn0/agg) als stateTopic einträgst. Übermittelt wird dabei jeweils der Zählerstand und ein Zeitstempel, verpackt als JSON Objekt. Deshalb brauchen wir noch JSONPATH um den eigentlichen Wert zu extrahieren. Im Channel definierst Du dafür die stateTranformation mit JSONPATH:$.value und schon bekommst Du im Channel direkt den Wert ausgeliefert. Den Channel definierst Du dafür direkt als Number Channel und verlinkst ein Number Item. Und schon hast Du einen im Zweifel sekundengenauen Zählerstand in openHAB.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

nw378
Beiträge: 296
Answers: 5
Registriert: 22. Sep 2018 10:38

Re: Smart Meter Bindung - Stromzähler

Beitrag von nw378 »

Ich glaube, ich bin auf der Zielgeraden.
* der MQTT Broker läuft
* der vzlogger liefert auf 2 Channels die Daten:
vzlogger.jpg
* die Bridge und das Generic Thing habe ich in openHAB erstellt.
* den Channel habe ich konfiguriert, aber das Item bleibt auf null:
item.jpg
Ich vermute die Transformation als Fehler?
JSON.jpg
Nachtrag: gelöst, der Channel muss so lauten: vzlogger/data/chn0/raw

Vielen Dank, Udo! Dein Wissensschatz ist unglaublich...
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

Benutzeravatar
udo1toni
Beiträge: 15249
Answers: 242
Registriert: 11. Apr 2018 18:05
Wohnort: Darmstadt

Re: Smart Meter Bindung - Stromzähler

Beitrag von udo1toni »

:) Immer gerne. In diesem Fall habe ich das ja sogar selbst im Einsatz.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

nw378
Beiträge: 296
Answers: 5
Registriert: 22. Sep 2018 10:38

Re: Smart Meter Bindung - Stromzähler

Beitrag von nw378 »

Eine Nachfrage:
Da landet eine Flut an Daten in events.log. Und Grafana sendet auch Fehlermeldung, weil es nicht mit der Erstellung der Diagramme nachkommt.
Kann man das Datenvolumen reduzieren? Den vzlogger alle 10 sec senden lassen, das Aktualisierungsintervall reduzieren?
(Oder zumindest die Item-Änderung aus dem Log kegeln?)
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

Benutzeravatar
udo1toni
Beiträge: 15249
Answers: 242
Registriert: 11. Apr 2018 18:05
Wohnort: Darmstadt

Re: Smart Meter Bindung - Stromzähler

Beitrag von udo1toni »

Äh, ja. Der Wert ist für Grafana nicht wirklich sinnvoll, es ist ja eher das Delta intererssant, nicht ein monoton wachsender Zählerstand.
Wenn Du den Wert dennoch in Grafana abbilden willst, wäre es vermutlich das einfachste, eine Strategy every10seconds anzulegen und nicht auf everyChange oder gar everyUpdate zu persistieren.
Was das Log betrifft, so kannst Du das halt nur für alle Items abstellen, wenn ich es richtig im Kopf habe. Wobei es bestimmt eine Möglichkeit gibt, das individuell pro Item zu tun.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

nw378
Beiträge: 296
Answers: 5
Registriert: 22. Sep 2018 10:38

Re: Smart Meter Bindung - Stromzähler

Beitrag von nw378 »

Doch, der Zählerstand ist interessant, den lasse ich von Grafana in Verbrauch pro Tag / Monat gestapelt darstellen.
strom_tag.png
Daneben wollte ich eben ein Verlaufsdiagramm der letzten Stunde und den Gesamtzählerstand.
strom_akt.png
So klappt das nun. Die Datenmenge habe ich reduziert, indem ich den vzlogger für den Zählerstand aggregierte Werte senden lasse, vzlogger.conf:

Code: Alles auswählen

"aggtime" : 5, 
"aggmode": "max",
Den Verbrauch persistiere ich nach deinem Ansatz mittels

Code: Alles auswählen

 Strategies
{every5Sec  : "0/5 * * * * ?"

Alles tiptop!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

Antworten