Ankündigung

Einklappen
Keine Ankündigung bisher.

Aktion bei Gruppenadresse und Auslesen mehrerer Adressen

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

    Aktion bei Gruppenadresse und Auslesen mehrerer Adressen

    Moin zusammen,

    habe gestern erfolgreich knxd auf einem Raspberry installiert und auf der Konsole mit knxtool Gruppenadressen geschrieben und aus dem Cache ausgelesen.
    Als Schnittstelle benutze ich einen MDT IP Interface.

    Zwei Fragen habe ich bei denen ich nicht weiter komme:

    1. Würde nun gerne wenn eine bestimmte Adresse kommt (knxd lauscht ja ständig) eine Aktion starten (Script?) Kann mir jemand einen Wink in die richtige Richtung geben?

    2. Zusätzlich würde ich für eine Visu (Eigenbau, PHP), gerne mehrere Adressen (Stati) von knxd abfragen. Erster Ansatz: Mit groupcacheread einzeln auslesen und die Ausgabe in einem Script auseinanderpulen und weiterverarbeiten.
    Muss ich die Welt hier neu erfinden? Oder gibts ne API etc?


    Habe nach wirklich langem Googlen nichts gefunden, vielleicht reicht auch nur ein Stichwort?

    Vielen Dank!
    LG
    Tobias

    #2
    (1) da gibt es mehrere. Du willst entweder den knxd-Socket oder IP-Multicast verwenden und geeignet darauf lauschen. Ich selber mache das mit https://github.com/knxd/PyKNyX (Python). Brauchbare Beispiele sind dabei.

    (2) eibread-cgi. Das hängst du mit in deinen Webserver und es liefert deinem PHP brauchbares JSON. Die zu verwendenden Argumente sind leider ausreichend undokumentiert (vielleicht mag jemand anders an dieser Stelle aushelfen?). Eine vernünftige JSON-Schnittstelle ist in der Konzeptphase, aber aktuell habe ich leider zu viele andere Baustellen.
    Zuletzt geändert von Smurf; 27.06.2017, 12:46.
    DistKV, Home Assistant, 1wire, KNX, Python, Asterisk, SMD-Lötkolben

    Kommentar


      #3
      Moin, vielen Dank, mangels Zeit und vor allem wegen gefühlt eher sehr ungünstigem zu erwartendem Zeit/Erfolg-Verhältnis habe ich mich für eine Alternative entschieden. Wenn ich schon die stöhnenden User von vor ein paar Jahren über den Compiliermarathon und die vielen Hürden meckern lese (und generell habe ich nur sehr wenig Infos über beide Punkte gefunden), schreckt mich das eher ab.

      Früher hätte ich Nächte lang darüber gebrütet, heute bin ich froh wenn ich mal 2 Stunden am Stück in Ruhe am Rechner sitzen kann ;-)

      Daher jetzt erst mal so quick n dirty mit Werkzeugen mit denen ich vertraut bin:

      Log in eine Pipe schreiben...

      Code:
      #!/bin/bash
      pipe=/tmp/myfifo
      #
      /bin/rm $pipe
      /usr/bin/mkfifo $pipe
      /bin/chmod 777 $pipe
      #
      while true
      do
      tail -n0 -F /var/log/daemon.log > /tmp/myfifo
      done
      echo "E N D E"
      ... und diese auslesen, dann mit eigener Logik über das knxtool weitere benötigte Werle lesen und/oder schreiben...

      PHP-Code:
      #!/usr/bin/php
      <?php
      define
      ('FIFO_FILE''/tmp/myfifo');
      $pipe_read fopen(FIFO_FILE'r');
      if( ! 
      $pipe_read)
              die(
      'Error: Could not open the named pipe: 'posix_strerror(posix_errno()) . "\n");
      echo 
      "Pipe successfuly opened for reading!\n";

      while (
      1==1)
              {
              
      $output fgets($pipe_read);
              
      $_linevalues explode(" "$output);

              if(
      count($_linevalues 0))
                      {
                      if(
      $_linevalues[16] == "to" && $_linevalues[21] == "A_GroupValue_Write")
                              {
                              
      // ok
                              
      }
                      if(
      $_linevalues[17] == "to" && $_linevalues[22] == "A_GroupValue_Write"// trifft zu wenn Monatstag einstellig
                              
      {
                              
      $_linevalues[17] = $_linevalues[18]; // GA reparieren
                              
      $_linevalues[23] = $_linevalues[24]; // VALUE reparieren
                              
      $_linevalues[21] = "A_GroupValue_Write"//Fuer Check in den naechsten 3 Zeilen
                              
      $_linevalues[16] = "to";
                              }

                      if(
      $_linevalues[21] == "A_GroupValue_Write" && $_linevalues[16] == "to")
                              {
                              
      printf(" - linevalues 2nd check ok - ");
                              
      $groupaddress $_linevalues[17];
                              
      $the_value     $_linevalues[23];
                              
      printf("\nGA: %s VAL: %s"$groupaddress$the_value);

      // ab hier ist dann alles vorhanden was man braucht
      }}}

      LG
      Tobias
      Zuletzt geändert von tooooooobi; 06.08.2017, 08:24.

      Kommentar


        #4
        Zitat von tooooooobi Beitrag anzeigen
        Würde nun gerne wenn eine bestimmte Adresse kommt (knxd lauscht ja ständig) eine Aktion starten (Script?) Kann mir jemand einen Wink in die richtige Richtung geben?
        Geht ganz einfach mit linknx - Grundaufgabe einer Logic Engine. Mit PHP kannst du auch direkt mit dem linknx Daemon kommunizieren und alle Werte auslesen - Vorteil: alle Werte liegen bereits in der interpretierten Form vor. Schreiben von Werten geht ebenfalls.

        EIB/KNX, VISU mit knxd + linknx + knxweb, Steuerbefehle via SMS und Email mit postfix + procmail

        Kommentar

        Lädt...
        X