NEWS
(gelöst) PZEM-004T direkt am Raspberry pi mit iobroker?
-
Guten Abend
Wie in der Überschrift ersichtlich, möchte ich gerne einen PZEM-004T direkt am Raspberry pi, auf dem iobroker läuft, betreiben. Der Raspi befindet sich in meinem Sicherungskasten und ließt dort den Stromzähler aus. Zusätzlich möchte ich den Stromverbrauch meines Aquariums erfassen. Das ist extra abgesichert und da bietet sich ein PZEM-004T förmlich an. Was weniger Sinn macht ist die Lösung mit ESP8266. Der Empfänger der Daten sitzt schließlich nur wenige Zentimeter entfernt.
Frage ist nun: wie mache ich das? Vielleicht geht ja was mit USB zu TTL Wandler und mit dem MODBUS Adapter. Aber wie die Register einstellen. Hat jemand eine Idee?Gruß
edition -
@edition
Das könnte funktionieren. Welche Version vom PZEM hast du? Ich habe die V3.0. Im Netz habe ich eine Doku dazu gefunden, in der die Register beschrieben sind. Ich benutze den PZEM allerdings mit einem WEMOS D1 Mini. Insofern kann ich zu der Modbus-Anbindung nicht sagen.
PZEM-004T-V3.0-Datasheet-User-Manual.pdf
Bei mir waren auch noch TTL-USB-Adapter dabei. Die brauchte ich, um die Modbus-Adresse einzustellen, da ich drei PZEM an einem WEMOS hängen habe. -
Ich habe auch die V3.0 Variante. Die Register habe ich auch schon gefunden. Aber wie binde ich die im MODBUS Adapter ein? Ich habe schon ein wenig herumprobiert und eine Verbindung hergestellt. Nur habe ich keine Werte zu sehen bekommen.
Mit dem D1 habe das auch schon zum laufen gebracht. Ich finde es aber unnötig, die Daten per WLAN über den Router an iobroker zu senden, wo die Geräte doch quasi nebeneinander verbaut sind. -
@edition
Klar, ich würde auch versuchen, dass auf dem Raspi laufen zu lassen. Waren bei dir auch die passenden USB-TTL-Adapter dabei? Die könntest du dann am Raspi anschließen und evtl. erkennt er diesen und du kannst in ihm MB-Adapter als "Serial" auswählen.
der USB-TTL-Adapter sieht so aus:
Falls du keinen hast, könnte ich dir evtl. einen überlassen. Hab drei Stück, da ich drei PZEM im Einsatz habe und das Kabel nur zur erstmaligen Vergabe einer MB-Adresse brauchte. -
USB-TTL Adapter habe ich. Ich hatte das Teil auch schon mal angeschlossen, an einen Raspi A, auf dem ich zum testen mit iobroker installiert habe. Leider habe ich keine Werte bekommen. Vermutlich waren die Register nicht richtig gesetzt. Ich hatte das dann erst mal verworfen und die ESP Variante mit Tasmota aufgebaut. Da das funktioniert hat, wollte ich mich jetzt wieder um die USB Variante kümmern.
Ich werde das mal wieder zusammenstecken und mich mit dem MODBUS Adapter ein wenig intensiver auseinandesetzen. -
So, ich habe das ganze wieder aufgebaut. Raspi A mit iobroker, PZEM am USB angeschlossen und mit 230V versorgt, Stromwandler ist angeschlossen. Es ist kein Verbraucher am Stromwandler.
MODBUS Adapter ist installiert, Instanz ist eingestellt:
Damit leuchtet die RX LED am PZEM. Verbindung besteht allerdings nicht.
Wenn ich jetzt einen diskreten Eingang mit der Adresse 0 hinzufüge, steht die Verbindung mit Gerät oder Dienst. Ich bekomme aber die Fehlermeldung:2022-11-07 08:53:35.326 - error: modbus.0 (10414) Invalid discreteInputs address: -10001 2022-11-07 08:53:35.330 - error: modbus.0 (10414) Invalid data discreteInputs/0: {"_address":"0","name":"","description":"","formula":"","role":"level","room":"","cw":"","isScale":"","address":-10001,"deviceId":1,"fullId":"modbus.0.0"} 2022-11-07 08:53:35.332 - error: modbus.0 (10414) Invalid object: {"type":"state","common":{"name":"","role":"level","type":"boolean","read":true,"write":false,"def":false},"native":{"regType":"disInputs","address":-10001,"deviceId":1}} 2022-11-07 08:53:35.406 - info: modbus.0 (10414) Can not execute task "add" for ID undefined: The id is empty! Please provide a valid id. ({"name":"add","obj":{"type":"state","common":{"name":"","role":"level","type":"boolean","read":true,"write":false,"def":false},"native":{"regType":"disInputs","address":-10001,"deviceId":1}}} 2022-11-07 08:53:35.761 - info: modbus.0 (10414) Connected to slave
Jetzt die Frage: Was muss ich einstellen?
-
@edition
Du versucht binäre EIngänge von Adresse 10001 (Alias angehakt) zu lesen. Ich meine der PZEM hat keine binären Werte. Nimm mal die Eingangsregister und trag da mal die Adressen aus der Doku ein.Edit: sehe gerade, dass er sich über -10001 beschwert. Das kann auch nicht funktionieren, abgesehen davon, dass das kein Eingangsregister ist.
-
Das ich keine Ahnung von dem habe, was ich hier machen muss, brauche ich wohl nicht zu erwähnen!
Also gut: Nehmen wir die Eingangsregister. Laut Doku soll die Registeradresse 0X0000 die Spannung wiedergeben. 0X000 ist Hexadezimal und muss in Dezimal umgerechnet werden, also 0? Gebe ich nun bei Adresse 0 ein und den Namen aus der Doku, sieht das so aus:
Starte ich den Adapter neu, erhalte ich folgende Fehlermeldung:2022-11-08 07:28:00.834 - error: modbus.0 (19251) Invalid inputRegisters address: -30001 2022-11-08 07:28:00.839 - error: modbus.0 (19251) Invalid data inputRegisters/0: {"_address":0,"name":"Voltage value","description":"Spannung","unit":"V","type":"","len":1,"factor":1,"offset":0,"formula":"","role":"value","room":"","cw":false,"isScale":"","address":-30001,"deviceId":1,"fullId":"modbus.0.0"} 2022-11-08 07:28:00.841 - error: modbus.0 (19251) Invalid object: {"type":"state","common":{"name":"Spannung","role":"value","type":"number","read":true,"write":false,"def":0,"unit":"V"},"native":{"regType":"inputRegs","address":-30001,"deviceId":1,"type":"","len":1,"offset":0,"factor":1}} 2022-11-08 07:28:00.948 - info: modbus.0 (19251) Can not execute task "add" for ID undefined: The id is empty! Please provide a valid id. ({"name":"add","obj":{"type":"state","common":{"name":"Spannung","role":"value","type":"number","read":true,"write":false,"def":0,"unit":"V"},"native":{"regType":"inputRegs","address":-30001,"deviceId":1,"type":"","len":1,"offset":0,"factor":1}}}
Was ist mit "The ID is empty!" gemeint? Ich sehe kein Feld mit ID! Muss ich bei Typ was auswählen? Oder ist bei den Allgemeinen Enstellungen noch was falsch?
-
Aaaah! Erfolg!
Es scheint nicht Dezimal, sondern Binär zu sein. Somit ergibt 0X0000 = 0000. Aussedrdem habe ich den Haken bei Aliases benutzen rausgenommen und schon funktioniert es!
Danke für die Hilfe!
-
@edition
Sehr schön
Dann markier den Thread doch bitte als gelöst. -
Mache ich natürlich!
Allerdings stellt sich mir gerade eine Frage. Ich kann die Energiedaten ja per Befehl zurück setzen und ich kann das Teil kallibrieren. Wie sende ich denn den solch einen Befehl?
Gruß
edition -
@edition
Wenn ich die Doku richtig interpretiere geht das mit ioBroker nicht, da der nur die "üblichen" Function Codes beherrscht. FC42 ist kein Standard Modbus FC. Wenn du den PZEM an den PC anschließt, müsste das mit der PZEM-Software gehen. Damit habe ich damals auch meine Modbus-Adressen eingestellt. -
Hallo zusammen.
Ich würde gerne ein ähnliches Setup machen. Raspi hängt neben dem Sicherungskasten und ich würde gerne den Stromverbrauch im iobroker haben.
Kann jemand einem Modbus noob wie mir erklären, wie ich das ganze anschließen muss und welche Einstellungen ich angeben muss?