Ankündigung

Einklappen
Keine Ankündigung bisher.

Plugin remote starten

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] Plugin remote starten

    Hallo,
    langsam verzweifel ich ;-)

    Mein Vorhaben:
    Auf einem RasPi läuft ein Python-Script, das ein Plugin auf dem Wiregate starten soll.

    Idee:
    RasPi: UDP-Packet über Python senden
    Wiregate: Plugin hört auf Socket

    So weit so gut, ich bekomms aber nicht hin, mit den Hilfen im Forum leider auch nicht - meist bezieht sich das m.E. darauf, dass das Wiregate Pakete sendet!?

    Python-Script (Auszug):
    import socket

    def doKlingel():
    # addressing information of target
    IPADDR = 'IP_des_Wiregate'
    PORTNUM = 8993

    # enter the data content of the UDP packet
    PACKETDATA = 1

    # initialize a socket, think of it as a cable
    # SOCK_DGRAM specifies that this is UDP
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
    # TCP Socket: SOCK_STREAM
    # s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)

    try:
    # connect the socket, think of it as connecting the cable to the address location
    try:
    s.connect((host, port))
    except:
    print 'Socket nicht aufgebaut'
    sys.exit()

    # send the command
    s.send(PACKETDATA)
    print "Packet gesendet " + str(PACKETDATA)
    except:
    pass
    print "Packet nicht gesendet"

    # close the socket
    s.close()
    Wiregate-Plugin (Auszug):
    if (!$socket[$socknum]) { # socket erstellen
    $socket[$socknum] = IO::Socket::INET->new(LocalPort => $recv_port,
    Proto => "udp",
    LocalAddr => $recv_ip,
    #PeerPort => $send_port,
    #PeerAddr => $send_ip,
    #ReuseAddr => 1
    )
    or return ("open of $recv_ip : $recv_port failed: $!");

    $socksel->add($socket[$socknum]); # add socket to select

    $plugin_socket_subscribe{$socket[$socknum]} = $plugname; # subscribe plugin
    return "opened Socket $socknum";
    } elsif ($fh) {
    my $line = <$fh>;
    chomp($line);

    if (!$line) { # catch empty line
    if ($debug==1) {plugin_log($plugname, "line ist leer!"); }
    return;
    }

    if ($debug==1) { # for debug : printout received string as hex and ascii
    my $str = unpack('H*', "$line");
    plugin_log($plugname, $str);
    plugin_log($plugname, $line);
    }

    foreach my $element (@elements) {
    knx_write($element->{ga},$element->{value},$element->{dpt});
    if ($debug == 1) { plugin_log($plugname, "$element->{name} auf $element->{value} gesetzt"); }
    }
    }
    Und dann muss ich am Wiregate-WebIf noch einen Socket erstellen!?
    2015-07-05 14_28_10-Seriell_LAN_Socketverbindungen.png
    Die 192.168.100.63 ist der RasPi, Port 8993 ist noch frei.

    Wo ist mein Fehler, was vergesse ich?
    Danke schon mal!!!
    ...good byte...

    #2
    Muss es ein Plugin sein?
    Dann würde ich auf dem Pi ein KNX Telegramm erzeugen (-> eibd) auf dass das Plugin hört.

    Nur irgend einen Befehl auf dem Wiregate?
    Dann würde ich einen SSH Key-Exchange machen und einfach remote starten

    (Wenn Du den eibd (bzw. seine Tools) nicht auf dem Pi installieren möchtest, dann kann man das auch kombinieren - der Pi sendet per SSH Remote-Befehl ein KNX-Telegramm auf dem WireGate auf das sein Plugin auf dem Wiregate hört)

    Das wäre zumindest eine KISS-Lösung...
    TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

    Kommentar


      #3
      Danke, Chris für deine Ideen.
      Das WG Plugin soll das ein oder andere KNX-Telegramm senden. Wollte das über ein WG-Plugin lösen, und die Verwaltung zentral zu lassen...wenns nicht anders geht, würde ich auch den Weg über den eibd auf dem Pi gehen.

      Aber ist dafür nicht eigentlich der subscribe auf Sockets für die Plugins einsetzbar? Oder versteh ich das falsch?
      danke!
      ...good byte...

      Kommentar


        #4
        Natürlich kannst Du ein Socket dafür verwenden. Aus diesem Zusammenhang klingt das auch dafür passend.

        Der Hintergrund meiner Antwort war eher, dass das Hören auf KNX Pakete zig fach genutzte Plugin Funktionalität ist, Sockets dagegen zum Advanced Bereich gehören. Wie Du alleine an Deinem initialen Posting sehen kannst, ist das auch nicht ganz simpel
        TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

        Kommentar


          #5
          Nicht ganz simpel triffst
          gibts ne Doku, die etwas ausführlicher ist als die Onlinehilfe des WG?
          würde das gerne besser verstehen.

          danke.
          ...good byte...

          Kommentar


            #6
            Makki hatte mal einen Thread dazu, d.h. SuFu Nutzen

            Außerdem könnte ich mir vorstellen, dass in den Code-Schnipseln was dazu steht.
            TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

            Kommentar


              #7
              kannst du den Teil vom RPI nicht auf dem Wiregate z.B. als Plugin laufen lassen?
              --
              Gruß
              Lothar

              Kommentar


                #8
                Zitat von lo4dro Beitrag anzeigen
                kannst du den Teil vom RPI nicht auf dem Wiregate z.B. als Plugin laufen lassen?
                nein, leider nicht...zum Hintergrund
                Am Pi ist ein Touchscreen mit einer tkinter-GUI. Wenn jemand die Buttons auf den Touchscreens berührt, sollen u.a. WG-Plugins ausgeführt werden, da KNX-Telegramme zu versenden sind. Außerdem wird ein Telefonanruf (über einen Asterisk-Server) gestartet etc.

                @Chris
                SuFu habe ich schon durch...hab auch einige Threads gefunden, m.E. aber nur, dass das WG Sockets zu anderen Geräten aufbaut, nicht unbedingt Empfänger von UDP-Paketen ist...oder ich habs falsch verstanden.
                Etwas mehr Hintergrundinformationen wären mir schon mal ne super Hilfe!

                Danke!
                ...good byte...

                Kommentar


                  #9
                  Vielleicht hilft dir das weiter.

                  https://knx-user-forum.de/forum/suppo...5-denon-plugin

                  Dort setzt Makki Socket zum senden und empfangen ein.

                  Wenn ich mich richtig erinnere, musst du deine Socket beim Plugin anmelden, so das das Plugin gestartet wird wenn auf der Socket Daten anstehen.

                  Code:
                  $socksel->add($socket[$socknum]); # add socket to select
                   oder  
                  $plugin_socket_subscribe{$socket[$socknum]} = $plugname; # subscribe plugin
                  Mit diesem Stück Code kann man gezielt herausfinden, warum das Script gestartet wurde
                  Code:
                  ### Start des Scriptes durch
                  my $event=undef;
                  if (!$plugin_initflag) {
                      $event='restart'; # Restart des daemons / Reboot
                  } elsif ($plugin_info{$plugname.'_lastsaved'} > $plugin_info{$plugname.'_last'}) {
                      $event='modified'; # Plugin modifiziert
                  } elsif (%msg) {
                       $event='bus'; # Bus
                  } elsif ($fh) {
                      $event='socket'; # Netzwerktraffic
                  } else {
                      $event='cycle'; # Zyklus
                  }
                  if ($debug == 1){
                      plugin_log($plugname, "1 Startgrund - Event: ".$event)
                  }
                  Zuletzt geändert von lo4dro; 08.07.2015, 15:47.
                  --
                  Gruß
                  Lothar

                  Kommentar


                    #10
                    Alternativ-Vorschlag: das WireGate spricht das CometVisu Protokoll (vgl. https://github.com/CometVisu/CometVisu/wiki/Protokoll). Hier kannst Du KNX Pakete durch einen einfachen Aufruf einer URL versenden.

                    (Du könntest natürlich auch gleich die CometVisu nutzen - dann hättest Du auch gleich Status-Rückmeldungen auf dem Touchscreen...)

                    Zum Plugin:
                    Schau auch mal im Thread https://knx-user-forum.de/forum/supp...s20-fht-hms-co
                    TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

                    Kommentar


                      #11
                      @ChrisM: Ich glaube das können sich nur "Wiregate-Beta-Tester" anschauen, ich habe jedenfalls nicht die Erlaubnis diesen thread anzuschauen.
                      Viele Grüße Jens

                      Kommentar


                        #12
                        Stimmt, ich kann das auch nicht lesen.
                        --
                        Gruß
                        Lothar

                        Kommentar


                          #13
                          OK, mist. Ich hatte gehofft, dass der schon in einen allgemeinen Bereich (z.B. Code Schnipsel oder DIY) verschoben wurde.

                          Du kannst aber mal in den Code im Repository schauen: https://github.com/OpenAutomationPro...generic/cul868
                          TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

                          Kommentar


                            #14
                            Zitat von Chris M. Beitrag anzeigen
                            Alternativ-Vorschlag: das WireGate spricht das CometVisu Protokoll (vgl. https://github.com/CometVisu/CometVisu/wiki/Protokoll). Hier kannst Du KNX Pakete durch einen einfachen Aufruf einer URL versenden.
                            das wars, DANKE!!!
                            GET kann ich aus Python ohne Probleme aufrufen - wusste nicht, dass das Wiregate das "einfach so" verarbeitet...

                            wen's interessiert ein Beispiel: IP.des.Wire.Gate/cgi-bin/w?a=1/1/1&v=81
                            die KNX-Adressen werden wohl als Standard-Protokoll gesehen, habe ich nicht deklarieren müssen
                            81 für eine 1
                            80 für die 0

                            Das ist mir sogar fast noch lieber als ne Socket-Verbindung...
                            ...good byte...

                            Kommentar

                            Lädt...
                            X