Fragen zur Nutzung, Features, usw..
bforpc
Beiträge: 107 Registriert: Mo Mär 28, 2022 3:34 pm
Beitrag
von bforpc » So Apr 03, 2022 1:29 pm
Hallo Forum,
ich habe unten stehendes Python script, welches mir die Ladeleistung auselsen soll (laut
https://openwb.de/main/wp-content/uploa ... openWB.pdf )
Leider bekomme ich dort immer nur 0 zurück, obwohl eine Auto dranhängt, welches auch geladen wird.
Code: Alles auswählen
#!/usr/bin/env python3
from pymodbus.constants import Defaults
from pymodbus.constants import Endian
from pymodbus.client.sync import ModbusTcpClient as ModbusClient
from pymodbus.payload import BinaryPayloadDecoder
from datetime import datetime
import urllib.request, sys, os, time, textwrap, subprocess, time, getopt, struct, json, ast, requests
client = ModbusClient("192.168.1.8", port='502')
val=client.connect()
msg = client.read_input_registers(10100, unit=1)
decoder = BinaryPayloadDecoder.fromRegisters(msg.registers, byteorder=Endian.Big)
msg = decoder.decode_16bit_int()
print(msg)
Gero
Beiträge: 2835 Registriert: Sa Feb 20, 2021 9:55 am
Beitrag
von Gero » So Apr 03, 2022 4:03 pm
Probier mal, ob der eingebaute modbustester Dir den erwarteten Wert zurückliefert:
http://openWB.fritz.box/openWB/web/tool ... dtest.html
Ich probiere bei sowas immer gerne mit Werten, die längere Zeit konstant bleiben. Sowas wie ConfiguredChargepoints.
openWB-series2, openWB-Buchse, E3/DC S10pro+19.5kWh, 30kWp Ost-Süd, Model 3 und Ion
bforpc
Beiträge: 107 Registriert: Mo Mär 28, 2022 3:34 pm
Beitrag
von bforpc » Mo Apr 04, 2022 5:15 am
Hallo,
mit dem Modbustester teste ich mich quasi selnbst, oder?
Hier die Ausgabe
Code: Alles auswählen
url /openWB/web/tools/trace/modtest.php?ip=192.168.1.8&start=10100&len=20&id=1&fun=3
parmeters parsed ip 192.168.1.8 start 10100 len 20 id 1 fun 3
04/04/2022, 07:13:58 opentrace read input register ip 192.168.1.8 start 10100 len 20 id 1
04/04/2022, 07:13:58 opentrace start 10100 + 0 inhalt 0 0X0
04/04/2022, 07:13:58 opentrace start 10100 + 1 inhalt 0 0X0
04/04/2022, 07:13:58 opentrace start 10100 + 2 inhalt 13 0XD
04/04/2022, 07:13:58 opentrace start 10100 + 3 inhalt 46552 0XB5D8
04/04/2022, 07:13:58 opentrace start 10100 + 4 inhalt 23040 0X5A00
04/04/2022, 07:13:58 opentrace start 10100 + 5 inhalt 23090 0X5A32
04/04/2022, 07:13:58 opentrace start 10100 + 6 inhalt 23060 0X5A14
04/04/2022, 07:13:58 opentrace start 10100 + 7 inhalt 0 0X0
04/04/2022, 07:13:58 opentrace start 10100 + 8 inhalt 0 0X0
04/04/2022, 07:13:58 opentrace start 10100 + 9 inhalt 0 0X0
04/04/2022, 07:13:58 opentrace start 10100 + 10 inhalt 1 0X1
04/04/2022, 07:13:58 opentrace start 10100 + 11 inhalt 1 0X1
04/04/2022, 07:13:58 opentrace start 10100 + 12 inhalt 0 0X0
04/04/2022, 07:13:58 opentrace start 10100 + 13 inhalt 0 0X0
04/04/2022, 07:13:58 opentrace start 10100 + 14 inhalt 1 0X1
04/04/2022, 07:13:58 opentrace start 10100 + 15 inhalt 0 0X0
04/04/2022, 07:13:58 opentrace start 10100 + 16 inhalt 0 0X0
04/04/2022, 07:13:58 opentrace start 10100 + 17 inhalt 0 0X0
04/04/2022, 07:13:58 opentrace start 10100 + 18 inhalt 0 0X0
04/04/2022, 07:13:58 opentrace start 10100 + 19 inhalt 0 0X0
Bfo
Becker
Beiträge: 765 Registriert: Mi Okt 07, 2020 4:34 pm
Beitrag
von Becker » Mo Apr 04, 2022 6:27 am
Ladeleistung ist Int32be:
openWB series2 Buchse (2021)
go-eCharger HOME+ 22 kW (2022)
bforpc
Beiträge: 107 Registriert: Mo Mär 28, 2022 3:34 pm
Beitrag
von bforpc » Mo Apr 04, 2022 1:54 pm
Moin,
was mich zu meiner ursprünglichen Frage bringt, warum das python Script bei
eine 0 ausgibt. Ein
zeigt mir den Fehler
struct.error: unpack requires a buffer of 4 bytes
Scheint also nur ein 8/16Bit Feld zu sein, oder habe ich das falsch verstanden?
Bfo
Becker
Beiträge: 765 Registriert: Mi Okt 07, 2020 4:34 pm
Beitrag
von Becker » Mo Apr 04, 2022 2:26 pm
Ja du brauchst 10100 + 10101 für das 32bit Register.
Manchmal hilft ein Bild mehr als Worte:
(ist zwar von SMA aber gleiches Prinzip)
oder du nimmst MQTT
openWB series2 Buchse (2021)
go-eCharger HOME+ 22 kW (2022)
bforpc
Beiträge: 107 Registriert: Mo Mär 28, 2022 3:34 pm
Beitrag
von bforpc » Di Apr 05, 2022 9:23 am
Hallo Becker,
danke für deine Antwort. Leider stehe ich jetzt völlig auf dem Schlauch.
Das Register 10100 ist laut openweb
Wofür ist 10101 (steht nicht in der Liste) und in wiefern brauche ich diesen zweiten?
Ich bin absoluter Neuling mit der openWB und mit python sowieso.
Mein Wunsch ist, mit dem python script aus dem 1. Post die aktuelle Ladeleistung vom LP1 und LP2 zu bekommen. Sonst nichts.
Kannst du mir bitte dahingehend einen Tip für das Script geben?
Bfo
LutzB
Beiträge: 3586 Registriert: Di Feb 25, 2020 9:23 am
Beitrag
von LutzB » Di Apr 05, 2022 9:47 am
Modbus ist leider nicht so trivial. Da müssen Werte in Registern richtig kombiniert werden, um nachher den richtigen Wert zu bekommen. Versuch es doch besser mit Mqtt. Da muss nicht interpretiert werden, sondern bekommt direkt den Wert. In Python ist das auch schnell umgesetzt.
bforpc
Beiträge: 107 Registriert: Mo Mär 28, 2022 3:34 pm
Beitrag
von bforpc » Di Apr 05, 2022 10:10 am
Das sagst so in deinem jugendlichen Leichtsinn
Dann müsste ich das halt kombinieren. Andererseits wäre es mit den richtigen Werten doch kein Problem die openWB abzugragen. Sei's drum.
Leider habe ich noch weniger Erfahrung mit Mqtt, genauer gesagt: gar keine.
Gibt es da irgend etwas fertiges, oder ein "snippet", um die 2 von mir gewünschten Werte zu bekommen?
Ich wundere mich, dass sonst noch keiner nach so einer "trivialen" Auswertung gefragt hat (also 2 Werte auslesen).
Bfo
rleidner
Beiträge: 871 Registriert: Mo Nov 02, 2020 9:50 am
Beitrag
von rleidner » Di Apr 05, 2022 10:24 am
es sollte so gehen
Code: Alles auswählen
#!/usr/bin/env python3
from pymodbus.constants import Defaults
from pymodbus.constants import Endian
from pymodbus.client.sync import ModbusTcpClient as ModbusClient
from pymodbus.payload import BinaryPayloadDecoder
from datetime import datetime
import urllib.request, sys, os, time, textwrap, subprocess, time, getopt, struct, json, ast, requests
client = ModbusClient("192.168.1.171", port='502')
val=client.connect()
msg = client.read_input_registers(10100, count=2, unit=1)
decoder = BinaryPayloadDecoder.fromRegisters(msg.registers, byteorder=Endian.Big)
msg = decoder.decode_32bit_int()
print(msg)
Wichtig sind "count=2" und "decode_32bit", ...
IMHO ist mqtt deutlich einfacher und klarer als das Gefummel in den Modbus Registern
openWB-2 Standard+ | openWB EVU Kit v2 MID| 9,9kWp mit Kostal Plenticore 8.5 plus | VW ID.3, Kia EV6, Smart EQ forfour