Ankündigung

Einklappen
Keine Ankündigung bisher.

WG Plugin per socat UDP Broadcast einlesen

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

    [wiregate] WG Plugin per socat UDP Broadcast einlesen

    Hallo

    Ich möchte per Plugin und socat, UDP Broadcast Telegramme einlesen.
    Wenn ich in der WG-Konsole folgendes eingebe kann ich die Telegramme einlesen.
    "socat -x - UDP4-RECVFROM:1202,broadcast,fork"

    Wie muss ich das unter "Seriell/LAN/Socketverbindungen" eintragen,
    so das ich es im Plugin per Event auslesen auslesen kann?

    Unter Socket1steht = "udp-recvfrom Socket: 255.255.255.255:1202,broadcast,fork"
    Das Plugin habe ich nach makkis "https://knx-user-forum.de/forum/supportforen/wiregate/20850-%E2%88%9A-wie-solarregler-steca-tr-603mc-per-rs232-einbinden"
    erstellt.
    Die Ampel unter Socketverbindungen ist rot.

    Gruß NetFritz



    You do not have permission to view this gallery.
    This gallery has 1 photos.
    KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
    WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
    PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

    #2
    Hallo

    Nach einigen Versuchen in der WG-Konsole kann ich mit:
    socat UDP4-RECVFROM:1202,fork UDP4-SENDTO:localhost:50015
    im Plugin die Daten empfangen.


    Wie sieht denn jetzt im Webif die Einstellungen der Socketverbindungen aus?
    Gruß NetFritz


    KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
    WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
    PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

    Kommentar


      #3
      Hallo
      Muss wohl ein schwieriges Thema sein?

      Nach weiteren Versuchen habe ich die Verbindung im Webif eingetragen bekommen.

      Im Plugin bekomme ich nur Daten angezeigt wenn ich mit der Codesys-SPS Netzvars im Zyklustakt der SPS sende.
      Das Plugin empfängt keine Daten wenn ich ein einzelnes Telegramm mit 22byte sende.
      Kann das mit dem Empfangsspeicher zusammenhängen, das er erst voll sein muss.

      Ich habe das Plugin hier mal angehängt.
      Vielleicht fällt jemand noch was ein.

      Gruß NetFritz

      Code:
      #return;
      use Data::Dumper;
      # liest von Codesys die Netzvar ein
      $plugin_info{$plugname.'_cycle'}=0;
      my $socknum=15;
      
      # Configure socket
      if (!$socket[$socknum]) {
          if (defined $socket[$socknum]) { #debug
          if ($socket[$socknum]->opened) { $socket[$socknum]->close(); }
              undef $socket[$socknum];
          }  #debug
          $socksel->remove($socket[$socknum]);
      
          $socket[$socknum] = IO::Socket::INET->new(
              LocalAddr => "localhost",
              LocalPort => '500'.$socknum,
              Proto => 'udp'
          ) || return ("open socket failed: $!");
          $socksel->add($socket[$socknum]);        
      
          $plugin_socket_subscribe{$socket[$socknum]} = $plugname;
          return "opened UDP-Socket $socknum";
      }
      if ($fh) {
             my $hex = unpack "H*", <$fh>;         # ganzen hex String
             my @hex_byte    = ($hex =~ /(..)/g);  # in byte aufteilen
             return Dumper(@hex_byte);
          }
      return;
      You do not have permission to view this gallery.
      This gallery has 1 photos.
      KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
      WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
      PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

      Kommentar


        #4
        Hallo
        Nach weiteren Versuchen habe ich die Verbindung im Webif, die Socketverbindungen nochmal geändert.
        socat.png
        Im Plugin am Ende die elsif Abfrage geändert.
        Code:
        }elsif ($fh) { # Readline
            my $buf = <$fh>;
            return "Plugin $plugname bekam $buf";
        }
        return;
        Das Verhalten des Plugins hat sich nicht geändert.
        Es empfängt einfach keine Daten wenn ich einzelne Telegramme an das Plugin sende.
        Zähle ich in Codesys in jeden Zyklus eine Variable um +1 hoch und sende sie dann zum WG-Plugin,
        dann bekommt das Plugin es mit.
        Auf meinen PC habe ich ein UDP Test Tool laufen, das empfängt in beiden Fällen das Telegramm.
        Wenn ich in der WG-Konsole socat so aufrufe: "socat -u -x udp-recv:1202 -" werden mir in beiden
        Fällen die Telegramme im Hex-Format angezeigt.

        Da ich hier ein Plugin (WG tauscht mit einer CODESYS-SPS über Netzwerkvariablen Daten aus)
        entwickle das ich dem Forum zur Verfügung stelle wollte und auch Elaborated Networks davon profitiert.
        Ich aber weiter keine Antwort bekomme werde ich die Entwicklung des Plugin einstellen und die Entwicklung auf einem Raspberry Pi2 weiter verfolgen.

        Wie verwende ich plugin_socket_subscribe mit UDP Broadcast ?
        Das Forum habe ich schon mehrmals durchsucht.

        Gruß NetFritz

        KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
        WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
        PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

        Kommentar


          #5
          Hallo
          So ich habe es hingekommen.
          Ich möchte mich nochmal für den außerordentlichen Service von Elaborated Networks bedanken.
          Gruß NetFritz
          Zuletzt geändert von NetFritz; 29.03.2015, 16:53.
          KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
          WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
          PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

          Kommentar


            #6
            Hi,
            ich versuche die notwendigen Änderungen bzgl. plugin_socket_subscribe gerade zusammenzufassen:
            Und die Lösung war -> ??
            Alle freuen sich, über einen kompletten Code

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

            Kommentar


              #7
              Hallo
              Code:
              $plugin_info{$plugname.'_cycle'} = 60;
              my $socknum = 8;                # Eindeutige Nummer des Sockets
              my @config = "";
              my @configs = "";
              
              my $recv_ip = "0.0.0.0"; # Empfangs-IP
              my $recv_port = "50010"; # Empfangsport
              if (!$socket[$socknum]) { # socket erstellen
                  if (defined $socket[$socknum]) { #debug
                      if ($socket[$socknum]->opened) { $socket[$socknum]->close(); }
                      undef $socket[$socknum];
                  }  #debug
                  $socksel->remove($socket[$socknum]);
                  $socket[$socknum] = IO::Socket::INET->new(LocalPort => $recv_port,
                                            Proto => "udp",
                                            LocalAddr => $recv_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    
              }
              if ($fh) { # incoming daten
                 my $buf;
                 $socket[$socknum]->recv($buf,128);
                 my $hex = unpack "H*", $buf;          # ganzen hex String
                 my @hex_byte    = ($hex =~ /(..)/g);  # in byte aufteilen
                #hier weiter mit den decodieren und senden an KNX
              Der Trick zum Daten empfangen hier:
              if ($fh) { # incoming daten
              my $buf;
              $socket[$socknum]->recv($buf,128);
              my $hex = unpack "H*", $buf; # ganzen hex String
              my @hex_byte = ($hex =~ /(..)/g); # in byte aufteilen

              @makkie Alle freuen sich, über einen kompletten Code
              Ich hätte mich auch auf Hilfe gefreut, sollte ja Freibier werden, ist erstmal auf Eis.
              Bin jetzt dran direkt auf den RPi2 mit Shared-Mem.

              Gruß NetFritz
              udp_recv.png
              KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
              WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
              PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

              Kommentar


                #8
                Hi NetFritz,

                danke für die schnelle AW, das wars zwar nicht 100% aber es hat auf die richtige Spur geführt; das Problem ist (ohne Änderungen) bereits gelöst, somit passts ja.
                Ein Hinweis: die kryptische Ausdrucksweise ist im Plugin-Kontext exakt dasselbe wie "my $buf = <$fh>;"
                Mit einem Unterschied: funktioniert auch mit mehr als 128 Byte.

                P.S.: Die Hex-Anzeige gibts in diversen Beispiel-Plugins im SVN, aber es führen eben viele Wege nach Rom, vor allem in Perl

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

                Kommentar

                Lädt...
                X