Ankündigung

Einklappen
Keine Ankündigung bisher.

Abfrage Status KNXD

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

    Abfrage Status KNXD

    Hi

    Gibt es in SHNG eine einfache Möglichkeit den Status des KNXD in ein/mehrere Item(s) zu bekommen?
    Richtig klasse wäre mehr oder weniger die Ausgabe von systemctl status... und knxd -V.
    Hat das schon jemand so oder so ähnlich gemacht?

    Gruß, Martin
    Zuletzt geändert von Sipple; 18.08.2021, 15:21.

    #2
    In einer Logik simpel:

    Code:
    import subprocess
    result = subprocess.run(['knxd', '-V'], stdout=subprocess.PIPE)
    item(result.stdout.decode('utf-8'))
    Anpassen und erweitern nach Bedarf...

    Kommentar


      #3
      Super, danke!
      Darauf kann ich aufbauen.

      Kommentar


        #4
        Klappt leider nur teilweise.

        Ich habe für "systenctl status knx.service" und ".socket" die Ausgabe in einem str item. Klappt wie gewünscht.
        Für "knxd -V" haut es nicht hin. Ich habe das in der python3 Konsole auch versucht:

        Code:
        Python 3.7.3 (default, Jan 22 2021, 20:04:44)
        [GCC 8.3.0] on linux
        Type "help", "copyright", "credits" or "license" for more information.
        >>> import subprocess
        >>> knxd_service = subprocess.run(['systemctl', 'status', 'knxd.service'], stdout=subprocess.PIPE)
        >>> print(knxd_service.stdout.decode('utf-8'))
        ● knxd.service - KNX Daemon
           Loaded: loaded (/lib/systemd/system/knxd.service; enabled; vendor preset: enabled)
           Active: active (running) since Sun 2021-08-15 09:25:29 CEST; 3 days ago
         Main PID: 30875 (knxd)
            Tasks: 1 (limit: 4915)
           CGroup: /system.slice/knxd.service
                   └─30875 /usr/bin/knxd -e 1.1.67 -E 1.1.96:1 -c -b ipt:192.168.178.69
        
        Aug 15 09:25:29 PI4B systemd[1]: Starting KNX Daemon...
        Aug 15 09:25:29 PI4B systemd[1]: Started KNX Daemon.
        Macht was es soll.

        Code:
        >>> knxd_version = subprocess.run(['knxd', '-V'], stdout=subprocess.PIPE)
        knxd 0.14.41
        >>> print(knxd_version.stdout.decode('utf-8'))
        
        >>>
        Das verhält sich anders. Der gewünschte String wird schon nach dem subprocess.run ausgegeben, aber knxd_version bleibt leer.
        Woran kann das liegen?

        Gruß, Martin

        Kommentar


          #5
          So klappt's:

          Code:
          >>> knxd_version = subprocess.run(['knxd', '-V'], capture_output=True)
          >>> print(knxd_version.stderr.decode('utf-8'))
          knxd 0.14.41
          
          >>>
          warum auch immer...

          Kommentar


            #6
            Das hängt von der verwendeten Version dex knxd ab. Ältere Versionen liefern das Ergebnis an stdout, neuere Versionen an stderr.
            Für die Ausgabe für,das Admin Interface berücksichtige ich deshalb beide Streams.
            Viele Grüße
            Martin

            There is no cloud. It's only someone else's computer.

            Kommentar


              #7
              Hab sowas vermutet und deshalb mal nachgesehen wohin das eigentlich ausgegeben wird.
              Verstehe zwar nicht, warum das geändert wurde, aber es wird schon seinen Grund haben.
              Mal sehen ob ich das auch noch so mache, damit ältere knxd Versionen korrekt abgefragt werden.
              Klappt jetzt jedenfalls erstmal alles.

              Kommentar

              Lädt...
              X