Ankündigung

Einklappen
Keine Ankündigung bisher.

Node-RED Flow für EASTRON SDM72DM V2 Stromzähler mit Modbus

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Node-RED Flow für EASTRON SDM72DM V2 Stromzähler mit Modbus

    Ich habe mein Raspberry Pi 4B mit einem USB RS-485 Interface (https://www.reichelt.de/raspberry-pi...5-p242783.html) erweitert um meinen neuen Stromzähler auszulesen. Der SDM72DM V2 von EASTRON ist mit 65€ relativ günstig und hat alles was man braucht. Bisher habe ich im Forum einige Nachfragen zu diesem Zähler gefunden, ich kann hier bestätigen dass er mit Modbus problemlos funktioniert.
    Die Anleitung war bzgl. Modbus-Register sogar korrekt und ich habe alle Werte erst in Excel erfasst und dann in einem Flow implementiert. Die Abfrage ist in 4 Blöcke aufgeteilt weil der Zähler max. 30 zusammenhängende Werte pro Abfrage zurückgibt und die Register etwas über den Adressbereich verstreut sind. Aus den buffer parser Nodes kommen dann alle Werte als float mit entsprechenden Topics raus.

    Benötigt werden die Nodes:
    • node-red-contrib-modbus
    • node-red-contrib-buffer-parser
    Viel Spaß beim Ausprobieren. Eventuell muss im Modbus-Read Node die Konfiguration angepasst werden (falls euer Interface nicht /dev/ttyUSB0 heißt)

    Screenshot 2022-01-23 190418.png


    Gruß,
    Alex
    Angehängte Dateien

    #2
    Hi,

    bin grad da drüber gestolpert und sehr interessiert. Ich habe jetzt drei dieser Zähler im Einsatz. Einen für meine Wärmepumpe + Heizstab und jeweils einen in jeder Garage.
    Nutzt Du das nur mit node-red oder hast du noch weitere Auswertungen dahinter?
    Also influx/Grafana beispielsweise.

    Für mich ist Modbus Neuland.
    Ich muss die Garagenzähler z.B. dahingehend auswerten wieviel Stromverbauch ich exakt jeden Monat habe, da ich das abrechnen muss. Möchte mir da mit einem RasPi die Arbeit erleichtern aber muss ja mal irgendwo nun starten.
    Die Garagen sind komplett autark, also nicht an meinem Haus/KNX anfgebunden und Internet ginge nur über Mobilfunk-Gateway.
    Ideal wäre es mittels node-red die Daten über Mobilfunk und http ins Haus zu bringen und dort dann auszuwerten. Vielleicht hat jemand ja was ähnliches schon realisiert um Zählerdaten per Modbus -> Mobilfunk/Internet -> Influx zu bringen?
    Wegen Zeitstempeln der Daten, verwendest du noch eine externe Zeitquelle oder RTC mit dem RasPi?

    Grüße,

    Uwe
    Zuletzt geändert von cybersmart; 19.10.2022, 16:20.
    Beste Grüße,

    Uwe

    Kommentar


      #3
      Ich speichere das in InfluxDB und werte mit Grafana aus, richtig. Mit Node-Red generiere ich zusätzlich noch EOD/EOM (end-of-day/month) Werte, die separat in die InfluxDB gehen.
      Mein RasPi hat ja eine Netzwerkverbindung, daher kriegt der seine Zeit über NTP. Falls das bei dir nicht geht, schau mal hier: https://www.raspberry-pi-geek.de/aus...-1-zeitserver/
      Wegen der Vernetzung: Wie weit sind denn Garage und Haus entfernt? Kommt LoRaWAN in Betracht? Wenn über Mobilfunk, dann sinnvollerweise über eine sichere Verbindung (VPN). Ist das Problem gelöst, würde ich MQTT zur Übermittlung der Daten nutzen. Wie man das dann in die InfluxDB reinbekommt ist Geschmackssache. Entweder wieder Node-Red (wenn das bei dir zu Hause eh läuft) oder mit Telegraf o.ä. Plugins für InfluxDB.

      Kommentar


        #4
        Danke schonmal für Deine Antwort, das mit DCF 77 schaue ich mir mam an, wenn ich aber eh einen LTE Router verwenden sollte kann ich auch NTP nutzen, dann ist das gelöst. OpenVPN schwebt mir hier vor am Raspi. Da ich in Haus einen S1 habe könnte ich darüber dann die VPN Verbindung abbilden, leider wird mein neuer Internet-Provider mit IPv4 nur noch per DS-Lite zur Verfügung stellen …
        Wenn die Verbindung steht würdest Du also MQTT verwenden, nicht Modbus TCP. Diese Protokolle sind alle allerdings Neuland für mich - Zielsystem wäre mein Timberwolf im Haus den ich schon da habe aber noch nicht in Betrieb.

        Vorteil dieser Kopplung - ich könnte die Garage voll ins Smarthome integrieren …. inkl. Torantrieb etc.
        Nur die Zeit finden das alles wieder zu basteln :-( evtl. ne gute Winteraufgabe.
        Beste Grüße,

        Uwe

        Kommentar


          #5
          Zitat von atbs Beitrag anzeigen
          Ich habe mein Raspberry Pi 4B mit einem USB RS-485 Interface (https://www.reichelt.de/raspberry-pi...5-p242783.html) erweitert um meinen neuen Stromzähler auszulesen. Der SDM72DM V2 von EASTRON ist mit 65€ relativ günstig und hat alles was man braucht. Bisher habe ich im Forum einige Nachfragen zu diesem Zähler gefunden, ich kann hier bestätigen dass er mit Modbus problemlos funktioniert.
          Die Anleitung war bzgl. Modbus-Register sogar korrekt und ich habe alle Werte erst in Excel erfasst und dann in einem Flow implementiert. Die Abfrage ist in 4 Blöcke aufgeteilt weil der Zähler max. 30 zusammenhängende Werte pro Abfrage zurückgibt und die Register etwas über den Adressbereich verstreut sind. Aus den buffer parser Nodes kommen dann alle Werte als float mit entsprechenden Topics raus.

          Benötigt werden die Nodes:
          • node-red-contrib-modbus
          • node-red-contrib-buffer-parser
          Viel Spaß beim Ausprobieren. Eventuell muss im Modbus-Read Node die Konfiguration angepasst werden (falls euer Interface nicht /dev/ttyUSB0 heißt)

          Gruß,
          Alex
          Hallo Alex,

          vielen Dank für die Beschreibung. Der Zähler läuft jetzt auch bei uns und wird über Modbus ausgelesen.

          (Hat sich erledigt - die V2 Version des Zählers erlaubt des zurücksetzen des Zählers nicht.)

          Viele Grüße
          Wolfgang
          Zuletzt geändert von wok; 29.12.2022, 07:59.

          Kommentar


            #6
            Zitat von wok Beitrag anzeigen
            die V2 Version des Zählers erlaubt des zurücksetzen des Zählers nicht
            Die V2 Version hat die folgenden Modbus Register

            30385 resettable total active energy
            30389 resettable import active energy
            30391 resettable export active energy

            Diese lassen sich per ModBus-Write zurücksetzen.

            Kommentar


              #7
              Zitat von jonofe Beitrag anzeigen
              Die V2 Version hat die folgenden Modbus Register

              30385 resettable total active energy
              30389 resettable import active energy
              30391 resettable export active energy

              Diese lassen sich per ModBus-Write zurücksetzen.
              Ja - das sind zurücksetzbare Zähler - z.B. Tageszähler - nicht der Hauptzähler. Das Zurücksetzen der Tageszähler klappt jetzt mit folgendem Function node:

              Code:
              msg.payload = {
              'value': msg.payload,
              'fc': 0x10,
              'unitid': 0x01,
              'address': 0xF010,
              'quantity': 1
              }
              return msg;​
              Ein Inject-node sendet den Wert [3] als msg.payload, die wird vom function-node ergänzt und dann über einen flex-write node auf den Modbus geschrieben. Vorheriges Senden eines Passwortes ist nicht erforderlich !

              P.S.: Es gibt verschiedene Versionen des SDM72DM V2 Stromzählers - die Version von einem Händler aus Deutschland ist spezifiziert bis 80 A pro Phase, andere Versionen sind spezifiziert mit 100 A pro Phase. Die Hardware sei laut Auskunft von Eastron UK identisch - lediglich das Label sei unterschiedlich. Ich verwende einen Zähler, den ich bei Amazon gekauft habe (Eastron Store), die geeichte Version (MID) ist bis 100 A spezifiziert, wurde mir innerhalb von wenigen Tagen geliefert und funktioniert tadellos.
              Angehängte Dateien
              Zuletzt geändert von wok; 29.12.2022, 10:36.

              Kommentar


                #8
                Anbei noch der verbesserte Flow fürs Zurücksetzen des Zählers: Es war nötig einen Delay einzufügen, damit das Schreiben auf den Modbus nicht zeitgleich mit dem Lesen vom Modbus passiert. Das hat nicht immer funktioniert.

                Screenshot 2023-01-07 at 17.12.00.png

                Code:
                [
                    {
                        "id": "ac8690d6540a69cf",
                        "type": "modbus-flex-write",
                        "z": "33e1f0e5.130ee",
                        "name": "",
                        "showStatusActivities": false,
                        "showErrors": false,
                        "showWarnings": true,
                        "server": "881c983a.3c799",
                        "emptyMsgOnFail": false,
                        "keepMsgProperties": false,
                        "delayOnStart": false,
                        "startDelayTime": "",
                        "x": 770,
                        "y": 720,
                        "wires": [
                            [
                                "be50a4bde9ff2e24"
                            ],
                            [
                                "be50a4bde9ff2e24"
                            ]
                        ]
                    },
                    {
                        "id": "5bd9b1a55f913459",
                        "type": "function",
                        "z": "33e1f0e5.130ee",
                        "name": "FC16",
                        "func": "msg.payload = { \n    'value': msg.payload,\n    'fc': 0x10,\n    'unitid': 0x01,\n    'address': 0xF010,\n    'quantity': 1 \n} \nreturn msg;",
                        "outputs": 1,
                        "noerr": 0,
                        "initialize": "",
                        "finalize": "",
                        "libs": [],
                        "x": 570,
                        "y": 720,
                        "wires": [
                            [
                                "ac8690d6540a69cf"
                            ]
                        ]
                    },
                    {
                        "id": "3fe62d2de7c04356",
                        "type": "inject",
                        "z": "33e1f0e5.130ee",
                        "name": "clear resettable registers",
                        "props": [
                            {
                                "p": "payload"
                            },
                            {
                                "p": "topic",
                                "vt": "str"
                            }
                        ],
                        "repeat": "",
                        "crontab": "58 23 * * *",
                        "once": false,
                        "onceDelay": 0.1,
                        "topic": "reset",
                        "payload": "[3]",
                        "payloadType": "json",
                        "x": 170,
                        "y": 720,
                        "wires": [
                            [
                                "b0031cbc131649e6"
                            ]
                        ]
                    },
                    {
                        "id": "be50a4bde9ff2e24",
                        "type": "debug",
                        "z": "33e1f0e5.130ee",
                        "name": "",
                        "active": true,
                        "tosidebar": true,
                        "console": false,
                        "tostatus": false,
                        "complete": "true",
                        "targetType": "full",
                        "statusVal": "",
                        "statusType": "auto",
                        "x": 990,
                        "y": 720,
                        "wires": []
                    },
                    {
                        "id": "b0031cbc131649e6",
                        "type": "delay",
                        "z": "33e1f0e5.130ee",
                        "name": "",
                        "pauseType": "delay",
                        "timeout": "2",
                        "timeoutUnits": "seconds",
                        "rate": "1",
                        "nbRateUnits": "1",
                        "rateUnits": "second",
                        "randomFirst": "1",
                        "randomLast": "5",
                        "randomUnits": "seconds",
                        "drop": false,
                        "allowrate": false,
                        "outputs": 1,
                        "x": 380,
                        "y": 720,
                        "wires": [
                            [
                                "5bd9b1a55f913459"
                            ]
                        ]
                    },
                    {
                        "id": "881c983a.3c799",
                        "type": "modbus-client",
                        "name": "Modbus-RS485",
                        "clienttype": "serial",
                        "bufferCommands": true,
                        "stateLogEnabled": true,
                        "queueLogEnabled": false,
                        "tcpHost": "127.0.0.1",
                        "tcpPort": "502",
                        "tcpType": "DEFAULT",
                        "serialPort": "/dev/ttyUSB0",
                        "serialType": "RTU-BUFFERD",
                        "serialBaudrate": "9600",
                        "serialDatabits": "8",
                        "serialStopbits": "1",
                        "serialParity": "none",
                        "serialConnectionDelay": "100",
                        "unit_id": "2",
                        "commandDelay": "1",
                        "clientTimeout": "1000",
                        "reconnectOnTimeout": true,
                        "reconnectTimeout": "2000",
                        "parallelUnitIdsAllowed": true
                    }
                ]​
                Zuletzt geändert von wok; 07.01.2023, 17:16.

                Kommentar


                  #9
                  Ich wärme das mal wieder auf.

                  Wollte meinen Modbus Zähler in der Garage nun mit dem Flow anbinden über Modbus TCP. Umstellung auf Modbus TCP war einfach, aber die buffer parser zeigen nun Fehler mit Ausnahme des letzten buffer parser, da kommt ein korrekter Wert zumindest für den Zählerstand.
                  Hat das jemand schon mit Modbus TCP und einem SDM72 mal umgesetzt?

                  Stehe da grad auf dem Schlauch warum das vom Aufbau her anders sein sollte als bei einer RTU- Anbindung (habe natürlich ein TCP-Gateway dazwischen und die Verbindung ist erfolgreich da).
                  Angehängte Dateien
                  Zuletzt geändert von cybersmart; 24.02.2024, 14:18.
                  Beste Grüße,

                  Uwe

                  Kommentar


                    #10
                    falscher post - kann gelöscht werden
                    Zuletzt geändert von cybersmart; 24.02.2024, 14:08.
                    Beste Grüße,

                    Uwe

                    Kommentar

                    Lädt...
                    X