Stromzähler auslesen und Werte in DB schreiben

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 Hofei ich möchte am SDM72DM Werte auslesen und versuche gerade alles nach Anweisung abzuarbeiten.

    python3 smartmeter.py hab ich ausgeführt und Text laut anzeige bekommen.

    in die smartmeter config geschaut und am ende tauchen die zu messenden Parameter auf mit dem Intervall von 1.

    Dann steht dienst wieder starten.

    Da ich nicht so bewandert bin hab ich das mit dem gleichen code

    python 3 smartmeter.py versucht.

    bekomme allerdings dabei folgende fehlermeldung:

    hab ich da jetzt den falschen befehl zum starten benutzt oder ist hab ich anderweitig einen fehler drin?

    Einmal editiert, zuletzt von hyle (8. Dezember 2021 um 17:51)

  • Hab aber auch gleich noch ein paar fragen zur config datei.

    An meinem SDM hab ich die busadresse 1 und baudrate von 9600 eingestellt.

    Muss ich bei serieal_if_baud dann auch 9600 reinschreiben oder die 19200 lassen?

    Wenn alles lauft sollen 3 von diesen Zählern ausgelesen werden.

    Liest diese config nur einen Zähler aus?

    Muss ich in diesem Fall die Datai 3 mal kopieren und dementsprechend bei zeile 7 die slave addr auf 2 und 3 setzten oder geht das in der jetzigen config?

    Ich benutze eine mysql Datenbank bereits für einige werte die ich über ip symcon einlese.

    habe somit die gleichen zugangsdaten wie in symcon eingestellt.

    Unter database wird der name der datenbank eingetragen die das programm dann automatisch in mysql anlegt?

    Unter device hab ich mein sdm72dm eingetragen

    Was ich noch gern wüsste.

    Kann man die zeiten bei

    messintervall

    schnelles messintervall

    dauer schnelles messintervall

    und intervall daten senden

    ändern?

    und was genau sind die unterschiede der 4 intervalle genau?

  • Annahme: In der Configdatei muss <db_adapter> durch sqlite3, mysql oder postgresql ersetzt werden.

    Platzhalter, die durch vorgegebene Werte ersetzt werden müssen, werden meistens in spitzen Klammern geschrieben.

  • Anschließend die smartmeter_cfg.toml anpassen.
    Konfigurationsdatei muss im selben Ordner wie die Skripte mit dem Namen smartmeter_cfg.toml gespeichert werden
    Bei der Anpassung sind < > zu entfernen - " " müssen stehen bleiben.

    Ja, @DeaD_EyE hat Recht, du musst die Konfigurationsdatei, wie auch in der Anleitung beschrieben ist, anpassen und deinen Gegebenheiten anpassen.

    An meinem SDM hab ich die busadresse 1 und baudrate von 9600 eingestellt.

    Muss ich bei serieal_if_baud dann auch 9600 reinschreiben oder die 19200 lassen?

    Die Konfigurationsdatei muss deinen Einstellungen entsprechen.

    Liest diese config nur einen Zähler aus?

    Ja das Skript ist aktuell nur für 1 Zähler ausgelegt.

    Ja die Zeiten können je nach Wunsch angepasst werden.

    • messintervall
      Die Zeit in Sekunden, in welchem zeitlichen Abstand standardmäßig die Messwerte ausgelesen werden.
    • schnelles_messintervall
      Die Zeit in Sekunden, in welchem zeitlichen Abstand die Messwerte ausgelesen werden, nachdem von dem Telegrambot ein Signal gesendet worden ist das Intervall zu verkürzen.
      Verkürzt sich natürlich nur, wenn die Zeit hier kleiner ist als bei dem standardmäßigen Messintervall
    • dauer_schnelles_messintervall
      Die Zeit in Sekunden, wie lange das schnelle Messintervall aktiv bleibt, nach Ablauf der Zeit tritt das standardmäßige Messintervall wieder in Kraft
    • intervall_daten_senden
      Die Zeit in Sekunden, in welchem zeitlichen Abstand die bis dahin erfassten Messwerte an die Datenbank übertragen wird.
  • db adapter hab ich übersehen gehabt und jetzt mysql eingetragen.

    mit python3 smartmeter.py bekomme ich jetzt folgende meldungen.

  • Nein, ließ dir mal folgen Links durch. Es ist wichtig in Linux die Rechte und Benutzerverwaltung zu verstehen

    https://wiki.ubuntuusers.de/Rechte/

    https://wiki.ubuntuusers.de/Benutzer_und_Gruppen/

    https://wiki.ubuntuusers.de/chmod/

    Vorallem bei pip ist es wichtig, dass mit dem Benutzer die Pakete installiert werden, welcher das Skript dann später auch startet.

  • ok danke werd ich mir dann durchlesen.

    pymysql hab ich jetzt installiert.

    mit python3 smartmeter.py bekomme ich jetzt allerdings dies angezeigt.

    Code
    Traceback (most recent call last):
      File "smartmeter.py", line 9, in <module>
        import toml
    ModuleNotFoundError: No module named 'toml'
  • bis inbetriebnahme erstmaliger test hat soweit auch alle geklappt.

    anscheinend hab ich nur die martmeter_cfg.toml nicht richtig angepasst.

    Das dürfte ich jetzt hoffentlich richtig angestellt haben.

    Um das programm neu zu starten ist jetzt eigentlich das erneute eingeben von python3 smartmeter.py richtig oder muss ich das durch einen anderen befehl machen?

    entschuldige meine doch sehr anfängerhaften fragen.

  • den befehl hab ich mit sudo ausgeführt gehabt.

    hab jetzt alles nochmal ab dem pip3 install...

    jetzt alles ohne sudo nach Anleitung ausgeführt.

    hab die smartmeter_cfg. tml nochmals aus der vorlage kopiert und Sie angepasst.

    dann python3 smartmeter.py ausgeführt.

    bekomme jetzt folgende meldung

    Traceback (most recent call last):

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

    CONFIG = load_config()

    File "smartmeter.py", line 26, in load_config

    config = toml.loads(conffile.read())

    File "/home/pi/.local/lib/python3.7/site-packages/toml/decoder.py", line 340, in loads

    raise TomlDecodeError("Unbalanced quotes", original, i)

    toml.decoder.TomlDecodeError: Unbalanced quotes (line 12 column 63 char 200)

  • das der Fehler was mit Ausführungszeichen zu tun hat.

    aus einer toml Datei in zeile 12.

    hab die smartmeter_cfg gerade offen gehabt und hab gesehen das ich dort in Zeile 12 die Ausrufezeichen aus versehen mit gelöscht habe.

    mit pythone3... siehts wieder so aus wie es laut anleitung an der stelle aussehen soll mit der rückmeldung.

    Um das program jetzt nochmal neu zu starten muss ich den gleichen befehl nochmal benutzen python3...?

Jetzt mitmachen!

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