Kommunikationsfehler mit SDM630

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Ausgelagert aus Stromzähler mit Raspberry Pi und ModBus auslesen


    Hallo zusammen,

    ich habe mir auch einen Stromzähler SD630 zugelegt und ebenfalls alles installiert. Ich bekomme nun folgende Fehlermeldung:

    root@raspberrypi:/home/pi/smartmeter# python3 smartmeter-own.py

    06.05.2021 11:45:04 INFO: Initialisierung abgeschlossen - Start Messungen

    06.05.2021 11:45:05 ERROR: Kommunikationserror Nr. 1

    06.05.2021 11:45:11 ERROR: Kommunikationserror Nr. 2

    06.05.2021 11:45:16 ERROR: Kommunikationserror Nr. 3

    Beim Abbruch mit CTRL C bekomme ich folgende Ausgabe und einen Fehler bei der Checksum im rtu mode:

    ----------------------------------------------------------------------------------------------------------------

    root@raspberrypi:/home/pi/smartmeter# python3 smartmeter-own.py

    06.05.2021 11:45:04 INFO: Initialisierung abgeschlossen - Start Messungen

    06.05.2021 11:45:05 ERROR: Kommunikationserror Nr. 1

    06.05.2021 11:45:11 ERROR: Kommunikationserror Nr. 2

    06.05.2021 11:45:16 ERROR: Kommunikationserror Nr. 3

    ^C06.05.2021 11:45:17 ERROR: Schwerwiegender Fehler aufgetreten

    Traceback (most recent call last):

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

    "digits"])

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

    payloadformat=_PAYLOADFORMAT_FLOAT,

    File "/root/.local/lib/python3.7/site-packages/minimalmodbus.py", line 1170, in _generic_command

    payload_from_slave = self._perform_command(functioncode, payload_to_slave)

    File "/root/.local/lib/python3.7/site-packages/minimalmodbus.py", line 1244, in _perform_command

    response, self.address, self.mode, functioncode

    File "/root/.local/lib/python3.7/site-packages/minimalmodbus.py", line 1756, in _extract_payload

    raise InvalidResponseError(text)

    minimalmodbus.InvalidResponseError: Checksum error in rtu mode: ':m' instead of '\x13Î' . The response is: '\x01\x10C«f:m' (plain response: '\x01\x10C«f:m')

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):

    File "smartmeter-own.py", line 246, in <module>

    main()

    File "smartmeter-own.py", line 222, in main

    messwerte = smartmeter.read_input_values(messauftrag)

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

    sleep(5)

    KeyboardInterrupt

    Traceback (most recent call last):

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

    "digits"])

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

    payloadformat=_PAYLOADFORMAT_FLOAT,

    File "/root/.local/lib/python3.7/site-packages/minimalmodbus.py", line 1170, in _generic_command

    payload_from_slave = self._perform_command(functioncode, payload_to_slave)

    File "/root/.local/lib/python3.7/site-packages/minimalmodbus.py", line 1244, in _perform_command

    response, self.address, self.mode, functioncode

    File "/root/.local/lib/python3.7/site-packages/minimalmodbus.py", line 1756, in _extract_payload

    raise InvalidResponseError(text)

    minimalmodbus.InvalidResponseError: Checksum error in rtu mode: ':m' instead of '\x13Î' . The response is: '\x01\x10C«f:m' (plain response: '\x01\x10C«f:m')

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):

    File "smartmeter-own.py", line 246, in <module>

    main()

    File "smartmeter-own.py", line 222, in main

    messwerte = smartmeter.read_input_values(messauftrag)

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

    sleep(5)

    KeyboardInterrupt

    ---------------------------------------------------------------------------

    Hat einer von euch einen Rat?

    Vielen Dank und Grüsse

    Einmal editiert, zuletzt von hyle (6. Mai 2021 um 19:07)

  • Ich habe den SDM630 mit dem USB Stick verbunden + mit + und - mit -. Ebenfalls auf beiden Seiten einen 120 Ohm Widerstand angeschlossen.

    Auch die Parameter in der Datei habe ich richtig gesetzt. Eben auch nochmal mkt dem SDM630 verglichen.

    Auch der Error ist unterschiedlich:

    1. Versuch:

    minimalmodbus.InvalidResponseError: Checksum error in rtu mode: '\x15\x86' instead of '0N' . The response is: '\x01\x10C-\x19\x15\x86' (plain response: '\x01\x10C-\x19\x15\x86')

    2. Versuch:

    minimalmodbus.InvalidResponseError: Checksum error in rtu mode: '¨¥' instead of '\x90x' . The response is: '\x01\x10C\xadP¨¥' (plain response: '\x01\x10C\xadP¨¥')


    Meine Config:

    [modbus]

    serial_if="/dev/ttyUSB0"

    serial_if_baud=19200

    serial_if_byte=8

    serial_if_par="E"

    serial_if_stop=2

    slave_addr=1

    timeout=0.6


    [db]

    db = "postgresql" # "postgresql" | "mysql" | "sqlite" | "postgrest"

    [db.postgresql]

    database = "smartmeter"

    user = "pi"

    password = "XXXXXXXX"

    host = "localhost"

    port = 5432

    [db.mysql]

    database = "<db>"

    user = "<user>"

    password = "<pw>"

    host = "<host>"

    port = 0

    [db.sqlite]

    database = ":memory:" # Pfad zu Datenbankdatei oder :memory:

    [db.postgrest]

    url = "<url>"

    user = "<user>"

    token = "<token>"

    table = "<table>"


    [telegram_bot]

    token = false # Token oder false, false ohne " " schreiben


    [mess_cfg]

    # Auswahl des verwendeten Models

    # Verfügbar: DDS353B, SDM230, SDM530, SDM630

    device = "SDM630"

    messintervall = 10 # in Sekunden

    schnelles_messintervall = 1 # in Sekunden

    dauer_schnelles_messintervall = 30 # in Sekunden

    intervall_daten_senden = 30 # in Sekunden

    # Nach dem wievielten Durchlauf der jeweilige Wert ausgelesen werden soll

    # Ausschalten mit false

    # Eintraege werden automatisch nach dem ersten Start erstellt, Config anschließend nochmal prüfen

    [durchlaufintervall]

    Spannung_L1 = 1

    Spannung_L2 = 1

    Spannung_L3 = 1

    Strom_L1 = 1

    Strom_L2 = 1

    Strom_L3 = 1

    Wirkleistung_L1 = 1

    Wirkleistung_L2 = 1

    Wirkleistung_L3 = 1

    Scheinleistung_L1 = 1

    Scheinleistung_L2 = 1

    Scheinleistung_L3 = 1

    Blindleistung_L1 = 1

    Blindleistung_L2 = 1

    Blindleistung_L3 = 1

    Leistungsfaktor_L1 = 1

    Leistungsfaktor_L2 = 1

    Leistungsfaktor_L3 = 1

    Phasenwinkel_L1 = 1

    Phasenwinkel_L2 = 1

    Phasenwinkel_L3 = 1

    Durchschnittliche_Spannung_zu_N = 1

    Durchschnittlicher_Strom_zu_N = 1

    aktueller_Gesamtstrom = 1

    aktuelle_Gesamtwirkleistung = 1

    aktuelle_Gesamtscheinleistung = 1

    aktuelle_Gesamtblindleistung = 1

    aktueller_Gesamtleistungsfaktor = 1

    aktueller_Gesamtphasenwinkel = 1

    Frequenz = 1

    Import_Wh_seit_reset = 1

    Export_Wh_seit_reset = 1

    Import_VArh_seit_reset = 1

    Export_VArh_seit_reset = 1

    VAh_seit_reset = 1

    Ah_seit_reset = 1

    Gesamtwirkleistung = 1

    Max_Gesamtwirkleistung = 1

    Gesamtscheinleistung = 1

    Max_Gesamtscheinleistung = 1

    Gesamtstrom_Neutralleiter = 1

    Max_Strom_Neutralleiter = 1

    Spannung_L1_L2 = 1

    Spannung_L2_L3 = 1

    Spannung_L3_L1 = 1

    Durchschnittsspannung_L_L = 1

    Strom_Neutralleiter = 1

    THD_Spannung_L1 = 1

    THD_Spannung_L2 = 1

    THD_Spannung_L3 = 1

    THD_Strom_L1 = 1

    THD_Strom_L2 = 1

    THD_Strom_L3 = 1

    THD_Durchschnittliche_Spannung_zu_N = 1

    THD_Durchschnittlicher_Strom_zu_N = 1

    Strom_L1_demand = 1

    Strom_L2_demand = 1

    Strom_L3_demand = 1

    Max_Strom_L1_demand = 1

    Max_Strom_L2_demand = 1

    Max_Strom_L3_demand = 1

    THD_Spannung_L1_L2 = 1

    THD_Spannung_L2_L3 = 1

    THD_Spannung_L3_L1 = 1

    THD_Durchschnittliche_Spannung_zu_L_L = 1

    Total_kwh = 1

    Total_kvarh = 1

    Import_L1_kwh = 1

    Import_L2_kwh = 1

    Import_L3_kwh = 1

    Export_L1_kwh = 1

    Export_L2_kwh = 1

    Export_L3_kwh = 1

    Gesamtstrom_L1_kwh = 1

    Gesamtstrom_L2_kwh = 1

    Gesamtstrom_L3_kwh = 1

    Import_L1_kvarh = 1

    Import_L2_kvarh = 1

    Import_L3_kvarh = 1

    Export_L1_kvarh = 1

    Export_L2_kvarh = 1

    Export_L3_kvarh = 1

    Total_L1_kvarh = 1

    Total_L2_kvarh = 1

    Total_L3_kvarh = 1

  • serial_if_stop=2

    Sicher das die 2 passt und keine 1 hin muss? Hast du das mit dem Zähler abgeglichen? Wenn Werte am Zähler geändert werden, muss dieser meines Wissens spannungsfrei gemacht werden (so war es zumindest bei dem SDM530)

    serial_if="/dev/ttyUSB0"

    Hast du geprüft ob dies der richtige Wert ist?

    Außerdem verwirrst du mich, bei deinem ersten Post geht es um Kommunikationsprobleme, keine Checksumerrors.

  • Du hast recht bzgl. des Kommunikationsproblems... falsch ausgedrückt. Sorry.

    Ohhhhhh nach Neustart des SDM630 (also Strom aus und wieder an) scheint es zu gehen. Allerdings bekomme ich jetzt folgende Meldung.

    Fehlt noch ein Treiber? Obwohl der Init Lauf durchgelaufen ist? Per commandline kann ich mich konnektieren.

    Vielen Dank

    root@raspberrypi:/home/pi/smartmeter# python3 smartmeter.py

    06.05.2021 12:20:40 ERROR: Schwerwiegender Fehler aufgetreten

    Traceback (most recent call last):

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

    main()

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

    datenbankschnittstelle = Datenbankschnittstelle(CONFIG["db"]["db"], CONFIG["mess_cfg"]["device"])

    File "smartmeter.py", line 112, in __init__

    db.create_tables(self.db_tables)

    File "/home/pi/smartmeter/db_model.py", line 226, in create_tables

    DB_PROXY.create_tables(tables)

    File "/root/.local/lib/python3.7/site-packages/peewee.py", line 3332, in create_tables

    model.create_table(**options)

    File "/root/.local/lib/python3.7/site-packages/peewee.py", line 6668, in create_table

    and cls.table_exists():

    File "/root/.local/lib/python3.7/site-packages/peewee.py", line 6658, in table_exists

    return cls._schema.database.table_exists(M.table.__name__, M.schema)

    File "/root/.local/lib/python3.7/site-packages/peewee.py", line 3310, in table_exists

    return table_name in self.get_tables(schema=schema)

    File "/root/.local/lib/python3.7/site-packages/peewee.py", line 3810, in get_tables

    cursor = self.execute_sql(query, (schema or 'public',))

    File "/root/.local/lib/python3.7/site-packages/peewee.py", line 3142, in execute_sql

    cursor = self.cursor(commit)

    File "/root/.local/lib/python3.7/site-packages/peewee.py", line 3126, in cursor

    self.connect()

    File "/root/.local/lib/python3.7/site-packages/peewee.py", line 3080, in connect

    self._state.set_connection(self._connect())

    File "/root/.local/lib/python3.7/site-packages/peewee.py", line 3775, in _connect

    raise ImproperlyConfigured('Postgres driver not installed!')

    peewee.ImproperlyConfigured: Postgres driver not installed!

    Traceback (most recent call last):

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

    main()

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

    datenbankschnittstelle = Datenbankschnittstelle(CONFIG["db"]["db"], CONFIG["mess_cfg"]["device"])

    File "smartmeter.py", line 112, in __init__

    db.create_tables(self.db_tables)

    File "/home/pi/smartmeter/db_model.py", line 226, in create_tables

    DB_PROXY.create_tables(tables)

    File "/root/.local/lib/python3.7/site-packages/peewee.py", line 3332, in create_tables

    model.create_table(**options)

    File "/root/.local/lib/python3.7/site-packages/peewee.py", line 6668, in create_table

    and cls.table_exists():

    File "/root/.local/lib/python3.7/site-packages/peewee.py", line 6658, in table_exists

    return cls._schema.database.table_exists(M.table.__name__, M.schema)

    File "/root/.local/lib/python3.7/site-packages/peewee.py", line 3310, in table_exists

    return table_name in self.get_tables(schema=schema)

    File "/root/.local/lib/python3.7/site-packages/peewee.py", line 3810, in get_tables

    cursor = self.execute_sql(query, (schema or 'public',))

    File "/root/.local/lib/python3.7/site-packages/peewee.py", line 3142, in execute_sql

    cursor = self.cursor(commit)

    File "/root/.local/lib/python3.7/site-packages/peewee.py", line 3126, in cursor

    self.connect()

    File "/root/.local/lib/python3.7/site-packages/peewee.py", line 3080, in connect

    self._state.set_connection(self._connect())

    File "/root/.local/lib/python3.7/site-packages/peewee.py", line 3775, in _connect

    raise ImproperlyConfigured('Postgres driver not installed!')

    peewee.ImproperlyConfigured: Postgres driver not installed!

  • Fehlt noch ein Treiber?

    Ja für Postgres,

    pip3 install  --user psycopg2 (mit dem Benutzer ausführen, der später auch das Skript startet)

    Obwohl der Init Lauf durchgelaufen ist?

    Liegt daran, dass er jetzt erstmals Daten zur Datenbank schreiben wollte, und mit dem ersten Durchlauf nur die Register für die Konfig erstellt.

  • Hallo,

    hatte auch einen SDM 630 mit Hofei s Hilfe in Betrieb gesetzt. War das Thema:

    SDM630 oder SDM72DM auch möglich für SDM530 Strommesser?

    Welche Werte benutzt du aus dem SDM 630 und welchen Vorteil hast du damit? Ich brauchte ihn für die Leistung einer Pumpe in unserer Heizung.

    Mit dem alten modbustreiber hatte ich Probleme und habe die Baudrate heruntergesetzt. Wenn die Erfassung jetzt stabil läuft, erhöhe ich sie wieder und setze das Messintervall hoch.


    Nachtrag:

    Sorry hofei, sehe gerade, dass dies dein Projekt- Thread ist und kein Neuer von schmae :/

    2 Mal editiert, zuletzt von rpi-joe (6. Mai 2021 um 17:10)

Jetzt mitmachen!

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