Modbus keine neuen Daten

Begonnen von JDelphi, 23 Januar 2019, 14:56:38

Vorheriges Thema - Nächstes Thema

JDelphi

Hallo Leute,
ich bin nun stolzer Besitzer eines/mehrerer Energiemessgeräte aus China.
Nun wollte ich sie über FHEM und RS485 sowie einem ModbusTCP Adapter auslesen.

Die Verbindung TCP → RS485 → Strommesswandler Funktioniert schon mal.
Mir ist es mit dem Experimentieren auch schon gelungen, einmal Werte in FHEM Anzuzeigen.
Leider bekomme ich keine neuen Werte vom Zähler rein.

Die Zähler sind vom Typ her PZEM-016 und fangen ab Modbusadresse Adresse 10 an.

Die Werte sind alle in Input Register abgelegt. Angefangen bei 0000 bis 0009

Mein Problem ist, das FHEM keine neuen Daten von den Zählern holt. Das Intervall hatte ich ja auf  60 Sekunden eingestellt.

Meine bisherige Konfiguration, sieht wie folgt aus:

define Zeahler10 ModbusAttr 10 60  192.168.99.237:502 TCP
attr Zeahler10 obj-i00000-expr $val/10
attr Zeahler10 obj-i00000-reading Volt
attr Zeahler10 obj-i00007-expr $val/10
attr Zeahler10 obj-i00007-reading Herz
attr Zeahler10 room Zeahler
attr Zeahler10 dev-h-combine 5
attr Zeahler10 dev-h-defPoll 1
attr Zeahler10 dev-h-defUnpack n
attr Zeahler10 stateFormat {sprintf("%.1f Volt", ReadingsVal($name,"Volt",0))}


Ich hoffe, mir kann jemand einen Denkanstoß geben, was ich noch vergessen habe.

JDelphi

Fehler gefunden.
Die Zeile attr Zeahler15 dev-i-defPoll 1 sollte besser attr Zeahler15 dev-h-defPoll 1 heißen.

Jetzt haben sich ein neues Problem ergeben.
Ampere, Power und Energy werden in zwei 16Bit variablen übergeben.
Leider war ich bisher zu blöd, diese zusammenzubasteln.

Mit der Aktuellen Konfig, kann ich daher nur bis 65 Ampere Messen / Auswerten.
Watt und kWh habe ich daher bisher besser nicht ausgewertet.
Falls mir jemand dabei einen Tipp geben kann, wie ich das verwurstel, wäre ich sehr dankbar.


Meine Aktuelle Konfiguration:
define Zeahler15 ModbusAttr 15 10 192.168.99.237:502 TCP
attr Zeahler15 dev-i-defPoll 1
attr Zeahler15 obj-i00000-expr $val/10
attr Zeahler15 obj-i00000-reading Volt
attr Zeahler15 obj-i00000-showGet 1
attr Zeahler15 obj-i00001-expr $val/1000
attr Zeahler15 obj-i00001-reading Ampere
attr Zeahler15 obj-i00001-showGet 1
attr Zeahler15 obj-i00007-expr $val/10
attr Zeahler15 obj-i00007-reading Herz
attr Zeahler15 obj-i00008-expr $val/100
attr Zeahler15 obj-i00008-reading PowerFac
attr Zeahler15 obj-i00009-expr $val/100
attr Zeahler15 room Zeahler
attr Zeahler15 stateFormat {sprintf("%.1f Volt %.1f Amp", ReadingsVal($name,"Volt",0), ReadingsVal($name,"Ampere",0))}

BrainHunter

Zitat von: JDelphi am 27 Januar 2019, 12:41:40
Jetzt haben sich ein neues Problem ergeben.
Ampere, Power und Energy werden in zwei 16Bit variablen übergeben.
Leider war ich bisher zu blöd, diese zusammenzubasteln.

Mit der Aktuellen Konfig, kann ich daher nur bis 65 Ampere Messen / Auswerten.
Watt und kWh habe ich daher bisher besser nicht ausgewertet.

Hast du das Problem inzwischen gelöst?
Ich versuche eben auch diese PZEM-016 zum laufen zu bringen. Dank deiner hilfe kommt wenigstens mal etwas  :-)


powerfan

Hallo zusammen,

da ich über diesen Eintrag gestolpert bin, als ich mein "Energiemessgerät aus China" in Betrieb nehmen wollte und es bis zum Erfolg doch einige Stunden gedauert hat, wollte ich euch hoffentlich etwas Arbeit ersparen und schreibe meine Erfahrungen hier nieder  :)

Das Gerät ist ein PEACEFAIR PZEM-016 mit externem Stromwandler und RS485 zu USB Adapter (1*Meter+ 1*open type CT+ 1*USB to 485).

Die Modbus-Adresse ist standardmässig "1" (und nicht 15 wie im obigen Beispiel).
1. USB-Adapter einstecken und auf der Konsole das Device suchen:
dmesg
[48613.433952] usb 1-1.2: new full-speed USB device number 5 using dwc_otg
[48613.567394] usb 1-1.2: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.54
[48613.567414] usb 1-1.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[48613.567429] usb 1-1.2: Product: USB2.0-Serial
[48613.674630] usbcore: registered new interface driver ch341
[48613.674746] usbserial: USB Serial support registered for ch341-uart
[48613.674864] ch341 1-1.2:1.0: ch341-uart converter detected
[48613.677388] usb 1-1.2: ch341-uart converter now attached to ttyUSB1


2. Adapter-Device in FHEM definieren:
define ModbusUSB1 Modbus /dev/ttyUSB1@9600

3. Modbus-Ziel-Device in FHEM definieren:
Achtung: hier ist "1" die Modbus-Adresse. 60 der Poll-Interval in Sekunden.

define VaultPower ModbusAttr 1 60


4. den Rest:

attr VaultPower dev-i-defPoll 1
attr VaultPower obj-i00000-expr $val/10
attr VaultPower obj-i00000-reading Voltage
attr VaultPower obj-i00001-expr $val/1000
attr VaultPower obj-i00001-reading Current
attr VaultPower obj-i00001-len 2
attr VaultPower obj-i00003-expr $val/10
attr VaultPower obj-i00003-reading Power
attr VaultPower obj-i00003-len 2
attr VaultPower obj-i00005-reading Energy
attr VaultPower obj-i00005-len 2
attr VaultPower obj-i00007-expr $val/10
attr VaultPower obj-i00007-reading Frequency
attr VaultPower obj-i00008-expr $val/100
attr VaultPower obj-i00008-reading PowerFactor
attr VaultPower obj-i00009-reading AlarmStatus
attr VaultPower dev-i-combine 9

dev-i-defPoll legt fest, dass die i-Felder in der definierten Frequenz (alle 60s) abgefragt werden
Das "Zusammenbasteln der Zählervariablen" soll eigentlich mittels attr VaultPower obj-i0000*-len 2 klappen...
dev-i-combine legt fest, wie viele Felder auf einmal abgefragt werden können - alle 9 zusammen klappt bei mir wunderbar.

für andere Geräte derselben Linie (Peacefair PZEM) sollte das wohl ähnlich funktionieren.
Leider habe ich seitdem das Problem, dass nach einiger Zeit in FHEM komplett keine Messdaten mehr erfasst werden und nur ein Reboot (des Hosts, nicht nur von FHEM) hilft, aber keine Ahnung woran dies liegen könnte.