ich habe einen Stromzähler (SDM72DM) gekauft, um die aktuelle importierte und exportierte Leistung auslesen zu können. Diese Daten möchte ich dann auswerten und bei zu viel Exportierter Leistung (PV-Anlage) einen Verbraucher automatisch hinzuschalten, um meinen Eigenverbrauch zu erhöhen. Ich hätte dabei an eine Ansteuerung einer Wallbox (GoE-Charger) per MQTT API gedacht...
Soweit so gut.. jedoch scheitert es gerade an dem Versuch die Daten des Stromzählers per RS485 auszulesen. Ich konnte die Daten bereits mit Dem Programm "Modbus Poll" , und einem USB-->RS485 Adapter am PC anzeigen lassen. Damit kann ich aber die daten nicht weiterverarbeiten.
Ich möchte den Zähler daher mit einem Python Programm auslesen.
Dieses Programm hätte ich gebastelt, jedoch bekomme ich als Ausgabe nur den Wert "0":
Zum Testen möchte ich hier das Input Register 3001 auslesen. Deshalb "adress= 0x0000", "count=2" da laut Datenblatt zweit 16 bit Register für einen Parameter benutzt werden. "slave=1", da ich die Adresse des Zählers auf 1 eingestellt ist.
Kann mir da jemand helfen, was ich falsch mache? Ein verdacht wäre, dass das Format "Float" Probleme verursacht.
ich habe dein Ratschlag befolgt, und ich denke das ist schonmal der richtige weg, ich bekomme natürlich als Ergebnis wieder nur eine "0" heraus, da ich ja gar keine Daten vom Bus Teilnehmer bekomme. Ich denke dass beim Auslesen des Registers irgendetwas schief läuft :(
Der Modbus-Standard schreibt Even Parity als Default vor. Schau mal, ob
die Einstellungen für den UART stimmen.
ich hab den kleinen Bruder von dem Stromzähler, den SDM230, an einem ESP32 Modbus RTU->TCP Gateway hängen, läuft bei mir mit 9600 8N1.
Aber: Das kann man am Zähler durch ewig lange Morsecode-Klickorgien sehr frei konfigurieren...
Also: Am Gerät nachschauen, wie's tatsächlich eingestellt ist.