Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. [Gelöst] Adapter Smartmeter per ser2net und socat

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Gelöst] Adapter Smartmeter per ser2net und socat

    This topic has been deleted. Only users with topic management privileges can see it.
    • LevyKo
      LevyKo last edited by LevyKo

      Hallo zusammen,

      ich bräuchte mal etwas Hilfe oder einen Denkanstoß in Sachen Smartmeter Adapter 😵

      Was bisher geschah:

      ioBroker läuft hier in einer VM (VMM, nicht Docker) auf einem Synology NAS (Intel Architektur). Da das NAS samt aller anderer Netzwerk-Komponenten in einem Rack im Serverraum steht, aber unser Stromzähler im Hausanschlußraum untergebracht ist, kann ich die Smartmeter-Anbindung nur per Netzwerk (LAN-Dosen sind im HAR vorhanden) realisieren. In diversen Einträgen habe ich nun schon gelesen, dass es in einer ioBroker-Multihost-Umgebung funktioniert, aber ich möchte ungern noch eine zusätzliche Instanz und somit Baustelle (nicht negativ gemeint) aufmachen. Darüber hinaus soll die finale Konstellation mit einem Arduino Uno und WLAN-Shield abgebildet werden.

      Der erste Schritt war also der Bau des Lesekopfs: TEKT5400S Fototransistor (lag hier eh noch in der Bastelkiste), 1k Widerstand, etwas Kabel, Lochrasterplatine, Lötkolben und fertig war die Laube. Das Ganze dann an P1, P6 und P10 an einem Pi3, Bluetooth deaktivieren und per raspi-config anpassen. Den Lesekopf mit Tape auf die Schnittstelle am eHZ-HW8E, Pi3 Neustart und ein cat /dev/ttyAMA0 liefert wunderbar Daten.

      Zur Verifizierung, dass nicht nur Müll gelesen wird, habe ich vzlogger installiert, konfiguriert, gestartet und mich darüber gefreut, dass im vzlogger.log tatsächlich die Daten korrekt angezeigt werden (in diesem Fall 1.8.0, 1.8.1, 1.8.2 und 15.7.0). Somit war die erste Hürde genommen.

      In Erinnerung an die guten alten Mainframe-Zeiten kam mir ser2net in den Sinn. Also installiert und per Config mit "192.168.55.72,9999:raw:0:/dev/ttyAMA0:9600 8DATABITS NONE 1STOPBIT" als TCP-Stream auf Port 9999 bereitgestellt.

      Nun ging es an den ioBroker-Host. Hier das passende Gegenstück (socat) installiert, als Service eingerichtet und mit "/usr/bin/socat pty,link=/dev/ttyVSP0 tcp:192.168.55.72:9999" hochgefahren.

      Das Resultat: Ein "cat /dev/ttyVSP0 | od -tx1" liefert Daten. Auch hier dann wieder den vzlogger installiert und geprüft, ob die Daten korrekt sind.

      Somit habe ich nun also auf dem ioBorker ein serielles Device, welches mir die notwendigen Daten für den Adapter liefert.

      Nun kommt aber das Problem:
      Im Adapter habe ich die Einstellungen gemäß Screenshot vorgenommen.

      Bildschirmfoto 2019-08-31 um 12.50.22.png

      Der Adapter (im Debug-Modus) bringt mir folgende Einträge im ioBroker-Log:

      Bildschirmfoto 2019-08-31 um 12.56.59.png

      Korrekte Daten kommen definitiv alle 2 Sekunden an. Diese kann ich im vzlogger.log sehen:

      Bildschirmfoto 2019-08-31 um 12.59.13.png

      Der vzlogger ist natürlich nur kurz zum Testen gestartet und dann sofort wieder beendet. Das Serial-Device ist also nicht blockiert bzw. gelockt.

      Hat jemand noch eine Idee?

      Vielen Dank und beste Grüße
      Levy

      LevyKo 1 Reply Last reply Reply Quote 0
      • LevyKo
        LevyKo @LevyKo last edited by LevyKo

        Das Problem ist gelöst!

        Dies ist das Device oder besser gesagt der Symlink, welcher von "socat" angelegt wird:

        lrwxrwxrwx  1 root root          10 Sep  1 14:53 ttyVSP0 -> /dev/pts/1
        

        Folgt man dem Symlink, kommt das dabei heraus:

        crw--w----  1 root tty  136, 1 Sep  1 14:53 1
        

        Da ioBroker unter dem Benutzer iobroker läuft, hat der Smartmeter-Adapter also gar keine Möglichkeit, das serielle Device anzusprechen.

        Gegenprobe: Auf der Konsole als root (oder per sudo) den folgenden Befehl ausführen. Dieser sollte den Smartmeter-Adapter starten, die Datenpunkte im ioBroker anlegen und natürlich auch die Werte aktualisieren.

        node smartmeter.js --force --logs
        

        Um die Berechtigungen dahingehend anzupassen, dass auch ioBroker auf das Device zugreifen darf, kann sollte man direkt ein chmod auf /dev/pts/1 ausführen und danach die Datei /etc/fstab anpassen. Nach Anpassung der Datei werden die entsprechenden Recht direkt bei Systemstart eingetragen bzw. die Devices werden direkt mit den richtigen Rechten angelegt.

        Von nun an funktioniert der Smartmeter-Adapter einwandfrei.

        Viele Grüße
        Levy

        LevyKo 1 Reply Last reply Reply Quote 1
        • LevyKo
          LevyKo @LevyKo last edited by

          Meinen vorigen Post bitte ignorieren! Diese Lösung ist a) nicht dauerhaft und b) widerspricht den Regeln für ein sicheres Linux-System.

          Hier nun die korrekte Lösung für das Problem:

          Damit socat als Dienst/Service startet, muss eine Datei socat.service im Verzeichnis /etc/systemd/system/ mit folgendem Inhalt anlegt werden:

          [Unit]
          Description=SOCAT Listen Service
          After=network.target redis.service
          Wants=redis.service
          
          [Service]
          Type=simple
          User=iobroker
          ExecStart=/bin/bash -c '/usr/bin/socat pty,link=/tmp/ttyCOM tcp:192.168.55.72:9999'
          Restart=on-failure
          
          [Install]
          WantedBy=multi-user.target
          

          Die IP-Adresse sowie der Port sollten den Angaben in ser2net angepasst sein.

          Danach folgendes in der Shell ausführen:

          root@iobroker:~# systemctl daemon-reload
          root@iobroker:~# systemctl start socat
          root@iobroker:~# systemctl status socat
          ● socat.service - SOCAT Listen Service
             Loaded: loaded (/etc/systemd/system/socat.service; disabled; vendor preset: enabled)
             Active: active (running) since Fri 2019-09-06 18:30:09 CEST; 4s ago
           Main PID: 26865 (socat)
              Tasks: 1 (limit: 4915)
             CGroup: /system.slice/socat.service
                     └─26865 /usr/bin/socat pty,link=/tmp/ttyCOM tcp:192.168.55.72:9999
          
          Sep 06 18:30:09 iobroker systemd[1]: Started SOCAT Listen Service.
          root@iobroker:~# 
          

          Sofern man nicht direkt als root arbeitet, sollte vor jedem Befehl sudo stehen.

          Nun in der Instanz im ioBroker nur noch unter "Serielles Gerät: Name:" /tmp/ttyCOM eintragen.

          So läuft socat unter dem Benutzer iobroker und funktioniert einwandfrei.

          Viele Grüße
          Levy

          1 Reply Last reply Reply Quote 0
          • arteck
            arteck Developer Most Active last edited by

            ich mach das Thema mal auf

            es gibt ein Problem wenn socat die Verbindung verliert
            diese wird nicht wieder eaufgemacht.. somit verliert auch Smartmeter die Verbindung

            LevyKo 2 Replies Last reply Reply Quote 0
            • LevyKo
              LevyKo @arteck last edited by

              @arteck
              An dieser Problematik sitze ich jetzt auch schon eine Weile. ser2net läuft ziemlich stabil, aber socat verliert ab und zu die Verbindung. Leider habe ich bisher noch keinen Weg gefunden, dies zu überwachen und im Fall der Fälle einen Reload bzw. Restart auszuführen. Ich hatte es mal mit der Dienstüberwachung probiert (auch per externem Script), aber leider zeigt socat ein "Alles in Ordnung" an, obwohl die Verbindung nicht da ist. Per Status oder PID fällt somit eine Überwachung weg.

              Am Optimalsten wäre es immer noch, wenn der smartmeter-Adapter selbst eine socat-Anbindung anbieten könnte. Der Adapter "sieht" ja, wenn keine Daten kommen und könnte den Dienst neu starten.

              1 Reply Last reply Reply Quote 0
              • LevyKo
                LevyKo @arteck last edited by

                @arteck
                Aaaaarggghhh... die Lösung ist so nah! Bitte vergiss socat. Das braucht man mittlerweile nicht mehr. Auf der einen Seite ser2net ist korrekt und dann im smartmeter-Adapter einfach die Konfiguration in der Zeile "Datenübertragung" auf "Netzwerk/TCP-Daten werden nur gelesen" setzen.

                Dann kann man im mittleren Bereich unter "TCP Server" und "TCP Port" die Daten von ser2net eintragen und es läuft.

                Vielen Dank @apollon77 für dieses Feature!!! Muss socat trotzdem installiert bleiben, weil der Adapter diesen Dienst lokal nutzt oder kann das weg?

                arteck 1 Reply Last reply Reply Quote 0
                • arteck
                  arteck Developer Most Active @LevyKo last edited by arteck

                  @levyko na super... klasse DANKE..

                  socat kann weg..

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate
                  FAQ Cloud / IOT
                  HowTo: Node.js-Update
                  HowTo: Backup/Restore
                  Downloads
                  BLOG

                  886
                  Online

                  31.9k
                  Users

                  80.2k
                  Topics

                  1.3m
                  Posts

                  raspberry smartmeter vzlogger
                  2
                  7
                  2093
                  Loading More Posts
                  • Oldest to Newest
                  • Newest to Oldest
                  • Most Votes
                  Reply
                  • Reply as topic
                  Log in to reply
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                  The ioBroker Community 2014-2023
                  logo