Stromzähler SDM230 auslesen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Ausgelagert aus Stromzähler mit Raspberry Pi und ModBus auslesen


    Hallo,

    danke zunächst einmal für das Projekt.

    Stecke nach Installation und Anpassung der Konfigurationsdatei leider bei einem Syntax Fehler fest:

    File "./smartmeter.py", line 94

    self.headers = {f"Authorization": "{user} {token}".format(user=CONFIG["db"]["postgrest"]["user"],

    ^

    SyntaxError: invalid syntax

    Wahrscheinlich ein Anfängerproblem. Hoffe, dass mir jemand weiterhelfen kann.

    Vielen Dank vorab schon für die Hinweise/Unterstützung.

    2 Mal editiert, zuletzt von hyle (13. Februar 2020 um 09:32)

  • Welche Pythonversion verwendest du?

    Danke - Sorry - Anfängerfehler. Es war 3.5 installiert (jetzt 3.7.2)

    Bekomme jetzt Kommunikationsfehler.

    12.02.2020 17:06:36 ERROR: Kommunikationserror Nr. 1

    12.02.2020 17:06:37 ERROR: Kommunikationserror Nr. 2

    12.02.2020 17:06:37 ERROR: Kommunikationserror Nr. 3

    12.02.2020 17:06:38 ERROR: Kommunikationserror Nr. 4

    12.02.2020 17:06:38 ERROR: Kommunikationserror Nr. 5

    12.02.2020 17:06:39 ERROR: Kommunikationserror Nr. 6

    12.02.2020 17:06:39 ERROR: Schwerwiegender Fehler aufgetreten

    Traceback (most recent call last):

    File "/home/pi/smartmeter/electric_meter.py", line 393, in read_input_values

    numberOfRegisters=self.input_register[key]["digits"])

    File "/usr/local/lib/python3.7/site-packages/minimalmodbus.py", line 392, in read_float

    return self._genericCommand(functioncode, registeraddress, numberOfRegisters=numberOfRegisters, payloadformat='float')

    Verkabelung und Leitungseinstellungen habe ich gecheckt

    Muss ich irgendwo in der config noch eintragen, dass ich das SDM230 und nicht das 530 verwende?

  • Also hab die Klasse von SDM230 noch nie getestet da ich das Modell nicht habe.


    aber hast du die Einstellungen des Stromzählers mit den der Config Datei angeglichen? Baudrate Parität etc müssen am Gerät und in der Config übereinstimmen, ansonsten kommt es zu einen Kommunikationsfehler.

  • Änder mal in dieser Zeile das so ab:

    Code
        smartmeter = electric_meter.SDM230(serial_if=CONFIG["modbus"]["serial_if"],
                                           serial_if_baud=CONFIG["modbus"]["serial_if_baud"],
                                           serial_if_byte=CONFIG["modbus"]["serial_if_byte"],
                                           serial_if_par=CONFIG["modbus"]["serial_if_par"],
                                           serial_if_stop=CONFIG["modbus"]["serial_if_stop"],
                                           slave_addr=CONFIG["modbus"]["slave_addr"],
                                           logger=LOGGER)

    Das ist noch statisch Programmiert, das muss ich ändern.

  • Danke für deine Hilfe! - Jetzt funktioniert es soweit, dass smartmeter.py Werte in die slqlite Datenbank ablegt.

    Das Kommunikationsproblem mit dem SDM230 ist also behoben. :thumbup:

    Allerdings erhalte ich nach ein paar Durchläufen eine Fehlermeldung:

    13.02.2020 13:33:06 INFO: Durchlaufdauer: 0:00:07.444858

    13.02.2020 13:33:15 INFO: Messdauer: 0:00:05.737898

    13.02.2020 13:33:15 INFO: Durchlaufdauer: 0:00:05.793293

    13.02.2020 13:33:26 INFO: Messdauer: 0:00:05.803286

    13.02.2020 13:33:26 ERROR: Schwerwiegender Fehler aufgetreten

    Traceback (most recent call last):

    File "/home/pi/.local/lib/python3.7/site-packages/peewee.py", line 2593, in _generate_insert

    raise KeyError

    KeyError

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):

    File "smartmeter.py", line 209, in <module>

    main()

    File "smartmeter.py", line 200, in main

    Wenn ich die von die vorgeschlagene Änderung

    smartmeter = electric_meter.SDM530…. in

    smartmeter = electric_meter.SDM230 druchführe kommt sofort eine Fehlermeldung


    pi@raspberry:~/smartmeter $ python3.7 smartmeter.py

    13.02.2020 13:42:15 ERROR: Schwerwiegender Fehler aufgetreten

    Traceback (most recent call last):

    File "smartmeter.py", line 209, in <module>

    main()

    File "smartmeter.py", line 186, in main

    messwerte = smartmeter.read_input_values(messauftrag)

    File "/home/pi/smartmeter/electric_meter.py", line 178, in read_input_values

    self.log.debug("try: key='{}', reg='{}', digits='{}'".format(key, self.input_register[key]["port"],

    KeyError: 'Spannung_L1'

    Traceback (most recent call last):

    File "smartmeter.py", line 209, in <module>

    main()

    File "smartmeter.py", line 186, in main

    messwerte = smartmeter.read_input_values(messauftrag)

    File "/home/pi/smartmeter/electric_meter.py", line 178, in read_input_values

    self.log.debug("try: key='{}', reg='{}', digits='{}'".format(key, self.input_register[key]["port"],

    KeyError: 'Spannung_L1'

    Ich denke mal, dass das Datenbankschema ebenfalls angepasst werden muss

    Danke nochmals für deine Unterstützung!

    Einmal editiert, zuletzt von nusso (13. Februar 2020 um 19:41)

  • Ich denke mal, dass das Datenbankschema ebenfalls angepasst werden muss

    DB sollte passen, aber die Klasse für den SDM230 passt nicht, habs mir gerade angeschaut.

    Gerne aber würde ich mit deiner Hilfe das ganze soweit funktionsfähig machen sofern du die Lust/Zeit hast mich dabei zu unterstützen. Wie gesagt, hatte ich selbst das Model SDM230 nie, und konnte somit mein Modul damit nie testen.

  • DB sollte passen, aber die Klasse für den SDM230 passt nicht, habs mir gerade angeschaut.

    Gerne aber würde ich mit deiner Hilfe das ganze soweit funktionsfähig machen sofern du die Lust/Zeit hast mich dabei zu unterstützen. Wie gesagt, hatte ich selbst das Model SDM230 nie, und konnte somit mein Modul damit nie testen.

    Hallo, gerne sag einfach Bescheid welche Info Du benötigst.

  • So, Code bitte von GitHub aktualisieren, aber die Änderung aus Beitrag #6 wieder ausführen. Will jetzt nicht an zu vielen Stellen gleichzeitig ändern.

    Guten Morgen!

    Code aktualisiert. (Aus Github und Änderung in Beitrag oben)

    Gibt eine neue Fehlermeldung bzgl des Feldes Spannung_L2, das zwar im Datenbankschema angelegt ist, jedoch nicht in der SDM230 Definition (Logisch, ist ja nur ein einphasiger Zähler) - Hier die Fehlermeldung:

    pi@raspberry:~/smartmeter $ python3.7 smartmeter.py

    14.02.2020 07:15:46 ERROR: Schwerwiegender Fehler aufgetreten

    Traceback (most recent call last):

    File "smartmeter.py", line 218, in <module>

    main()

    File "smartmeter.py", line 195, in main

    messwerte = smartmeter.read_input_values(messauftrag)

    File "/home/pi/smartmeter/electric_meter.py", line 172, in read_input_values

    self.log.debug("try: key='{}', reg='{}', digits='{}'".format(key, self.input_register[key]["port"],

    KeyError: 'Spannung_L2'

    Traceback (most recent call last):

    File "smartmeter.py", line 218, in <module>

    main()

    File "smartmeter.py", line 195, in main

    messwerte = smartmeter.read_input_values(messauftrag)

    File "/home/pi/smartmeter/electric_meter.py", line 172, in read_input_values

    self.log.debug("try: key='{}', reg='{}', digits='{}'".format(key, self.input_register[key]["port"],

    KeyError: 'Spannung_L2'

    pi@raspberry:~/smartmeter $

    Grüße....

  • Ne, die Datenbank hat damit nichts zu tun, sondern die Konfigurationsdatei.

    Stimmt, die musst du anpassen, du musst alle Einträge entfernen welche in deinem Stromzähler nicht vorkommen:

    In der Konfigurationsdatei dieser Abschnitt ist der ausschlaggebende Punkt:

    Ist der entsprechende Punkt in der Klasse nicht verfügbar, kommt dein oben genannter Fehler.

    Entweder löschen oder einfach den Wert auf false setzen.

  • Hallo,

    danke soweit hab den Abschnitt mal wie folgt angepasst:

    Spannung_L1= 1

    Strom_L1= 1

    Wirkleistung_L1= 1

    Scheinleistung_L1= 1

    Blindleistung_L1= 1

    Leistungsfaktor_L1= 1

    Phasenwinkel_L1= 1

    Frequenz= 1

    Import_Wh_seit_reset= 1

    Export_Wh_seit_reset= 1

    Import_VArh_seit_reset= 1

    Export_VArh_seit_reset= 1

    Gesamtwirkleistung= 1

    Max_Gesamtwirkleistung= 1

    CurrentSystemPositivePowerDemand=false

    MaximumSystemPositivePowerDemand=false

    CurrentSystemReversePowerDemand=false

    Strom_L1_demand=1

    Max_Strom_L1_demand=1

    Total_kwh = 1

    Total_kvarh = 1

    Zwei offene Punkte:

    1. Wie bekomme ich die Werte CurrentSystemPositivePowerDemand in die Aufzeichnung. Sobald ich das auf tue setze gibts eine Fehlermeldung

    AttributeError: type object 'Smartmeter' has no attribute 'currentsystempositivepowerdemand'

    2. Es fehlen noch einige Register gemäss der Doku (siehe Anlage)

    Falls ich nerve - sag Bescheid ;)

  • danke soweit hab den Abschnitt mal wie folgt angepasst:

    Funktioniert das dann auch?

    Sobald ich das auf tue setze gibts eine Fehlermeldung

    Wo setzt du das auf True? in der Konfigdatei muss entweder false oder eine Zahl stehen.

    Current system positive power demand -> Oje, das gabs beim SDM530 nicht, und ich hab natürlich die Register nach diesem gebaut...

    Was soll dieser Wert darstellen? Bzw. wie unterscheidet sich dieser zu Active power

  • Hallo,

    ja alles funktioniert nach obiger Anpassung :thumbup:

    ich hab keinen Dunst was die Werte bedeuten.:) Hab keine weitere Doku (außer das pdf von #14).

    Falls das eine größere Programmanpassung nach sich zieht, dann verzichten wir einfach auf die vollständige Implementation aller Werte aus den Registern des SD230. - Mir reichen ohnehin die kWh, da ich damit nur ein gepimptes Balkonkraftwerk überwachen möchte.

    Grüße & Danke!

  • Falls das eine größere Programmanpassung nach sich zieht, dann verzichten wir einfach auf die vollständige Implementation aller Werte aus den Registern des SD230. - Mir reichen ohnehin die kWh, da ich damit nur ein gepimptes Balkonkraftwerk überwachen möchte.

    Genau:

    Wenn du nicht alle Werte benötigst, dann kommentiere die aus.

    Die Abfragen dauern dank des recht langsamen ModBus-IF ja recht lange, wenn du nur die kWh benötigst, dann holst du eben nur die (mache ich z.B. auch so), zumal z.B. bestimmte Werte ("xxx_seit_reset") vermutlich 'eh gaga sind, da der Zähler wohl eher selten rückgesetzt wird...

  • Also Zwecks der Vollständigkeit kann/werde ich die fehlenden Register mit aufnehmen.

    Kann ja mittels dem false Wert jeder entscheiden was er verwenden will oder nicht. Wobei ich da bei Zentris bin, loggen würde ich nur die Werte, die einem auch interessieren oder "nicht gagga sind".

    Bzgl deiner verwendeten Datenbank sqlite3, solltest du Grafana verwenden wollen, empfehle ich dir eine andere Datenbank, denn sqlite3 ist mit Grafana meines Kenntnissstands nicht kompatibel.

  • Hallo,

    Danke zuerst für das Projekt.

    nachdem ich das ganze installiert habe, wurde folgende Fehler ausgetreten:

    Kann mir jemand BITTE weiterhilfen.

    2 Mal editiert, zuletzt von hikal (18. März 2020 um 13:43)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!