Ankündigung

Einklappen
Keine Ankündigung bisher.

Socket lauschen

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

    [wiregate] Socket lauschen

    Moin moin,

    so, nachdem ich nun mein frisches Wiregate hier liegen habe stellen sich gleich ein paar hoffentlich nicht zu komplizierte Fragen :-)

    Meine FritzBox gibt über Telnet IP.IP.IP.IP:1012 raus, was gerade so in der Anlage passiert.

    Wenn man das per Putty anwirft steht da z.B. für einen Hotline-Anruf bei den Jungs mit dem mangentafarbenen T:

    04.05.12 11:21:43;CALL;1;4;979434;08003301000;ISDN;
    04.05.12 11:21:45;CONNECT;1;4;08003301000;
    04.05.12 11:21:50;DISCONNECT;1;5;
    Ich habe also nach Anleitung zunächst einen Socket eingerichtet:


    Und folgendes Plugin geschrieben (naja, hauptsächlich zusammenkopiert):
    Code:
    my $socknum = 20; # Eindeutige Nummer des Sockets +1
    
    my $send_ip = "localhost"; # Sendeport (UDP, siehe in Socket-Einstellungen)
    my $send_port = "50134"; # Sendeport (UDP, siehe in Socket-Einstellungen)
    my $recv_ip = "localhost"; # Empfangsport (UDP, siehe in Socket-Einstellungen)
    my $recv_port = "50135"; # Empfangsport (UDP, siehe in Socket-Einstellungen)
    
    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";
        plugin_log($plugname,'Soket verbunden. Soketnummer: ' . $socknum);
    } elsif ($fh) { # Readline from USBSERIAL 
        
        my $sockInfo .= 'Ausgabe: ';
        my $cnt = 0;
        my $line;
        $line = <$fh>;
        return $line;	 
    }
    Es tut aber nicht was es soll und ich habe die leise Befürchtung, ich habe das Grundprinzip nicht ganz verstanden... Kann das evtl. jemand verständlich erklären mit den Sockets?

    Warum muss ich erst unter "Sockets" etwas anlegen und mich dann im Plugin darauf beziehen?

    Wie komme ich an die Daten, die ich über Telnet geschickt bekomme?

    Vielen Dank für jede Hilfe und schöne Grüße
    Christian

    #2
    Hoi

    Man kann Socket Einstellungen hiterlegen im Webmin.
    Bin leider nicht vor Ort.
    Grüsse Bodo
    Fragen gehören ins Forum, und nicht in mein Postfach;
    EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

    Kommentar


      #3
      Zitat von amaridian Beitrag anzeigen
      Meine FritzBox gibt über Telnet IP.IP.IP.IP:1012 raus, was gerade so in der Anlage passiert.

      Ich habe also nach Anleitung zunächst einen Socket eingerichtet:

      Wie komme ich an die Daten, die ich über Telnet geschickt bekomme?
      Telnet (und putty) verbinden über TCP, dein Plugin baut aber einen UDP Socket auf. Dass das wird nicht funktionieren kann, ist klar. Mangels Wiregate und in Unkenntnis von Plugins kann ich dir aber nicht konkret helfen. Der Weg muss aber über eine TCP-Verbindung gehen.

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

      Kommentar


        #4
        Auf die schnelle: Das passt schon so nur hast du die Ports falschrum; vertausch mal in den Socketeinstellungen 50134 und 50135..

        Makki
        EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
        -> Bitte KEINE PNs!

        Kommentar


          #5
          Ich rate jetzt einfach mal ins Blaue rein:

          Mit den Sockets im Wiregate-Menü holt man sich relativ flexibel eine beliebige Untermenge von "Krempel" auf einen Socket ins Wiregate. Diese Sockets kann man dann wiederum in den Plugins "abonieren" und über die eine Ecke Umweg mit der Außenwelt sprechen... ist das so in etwa richtig?

          Grüße
          Christian

          Kommentar


            #6
            Zitat von amaridian Beitrag anzeigen
            ist das so in etwa richtig?
            Ja.
            Im Falle der Fritzbox (kein langsames Frage-Warten-Antwort-Spiel) würde es vermutlich auch wunderbar direkt gehen.. Aber nicht alle sind so nett, Paradebeispiel Denon, der plappert mal, dann schickt er eine halbe Zeile in einem Frame, im nächsten 2,5, dann macht er spasseshalber zu weils ein murks-IP-Stack draufhat usw.. Da bekommt man schnell die Krise beim parsen und ist dem socat dankbar, das er einem die Häppchen richtig portioniert..

            -> Dem Plugin(_socket_subscribe) ist es aber erstmal egal, ob TCP oder UDP, geht beides.

            Die wesentlichen Vorteile von dem "vermeintlichen Umweg" über den socat:
            - Man muss sich im Plugin nicht/nur sehr marginal um den ganzen blutigen Mist kümmern: reconnect, 10s timeouts wenn der Gegner halt grad aus ist, ...;
            UDP-Port 1x beim initialisieren des Plugins aufmachen, bleibt bis zum Ende sauber, egal ob man zwischendrin den Netzwerkstecker zieht uvm.
            Natürlich geht auch ein Teil Sicherungsschicht verloren, man weiss erstmal im Plugin nicht wirklich, ob der Gegner auch "online" ist oder man auf einen toten Port lauscht aber hats dafür recht komfortabel, (fast) egal wie wirr der Gegner agiert.
            Das Verlustrisiko von UDP-Paketen dürfte sich auf dem loopback-Interface im für die heimische Raumfahrt akzeptablem Rahmen bewegen

            - Viel wichtiger: Komplette Datensätze (Zeilen) im Plugin! Dieses kleine "cr" im socat bewirkt das man im Plugin beim Aufruf immer (mindestens) eine komplette Zeile bekommt nicht wie bei TCP ggfs. das ganze in undeterministischen kleinen oder grossen Häppchen, die man dann im Plugin erst wieder aufwändig richtig zusammensetzen muss!

            Makki
            EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
            -> Bitte KEINE PNs!

            Kommentar


              #7
              Abend zusammen,

              kann mir mal jemand die richtige socat-Einstellungen verraten? Die Grafik oben ist nicht mehr zu sehen (zumindest für mich).

              Gruss,

              der Jan
              KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

              Kommentar


                #8
                Im Anhang der Denon, sollte relativ dasselbe sein..

                (und ladet Bilder bitte ins Forum hoch, irgendwelches Dropbox-Zeugs geht nach einer Zeit nicht mehr und fehlt damit dann im Kontext..)

                Makki
                Angehängte Dateien
                EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                -> Bitte KEINE PNs!

                Kommentar


                  #9
                  So, geht. Plugin für RSSlog folgt
                  KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

                  Kommentar

                  Lädt...
                  X