NEWS
(gelöst) PZEM-004T direkt am Raspberry pi mit iobroker?
-
@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?