Ankündigung

Einklappen
Keine Ankündigung bisher.

Wie verwende ich plugin_socket_subscribe ?

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

    [wiregate] Wie verwende ich plugin_socket_subscribe ?

    Hi Makki,

    ich versuche mich gerade an einem Plug-In um eine serielle Schnittstelle auszulesen. Ich bin über plugin_socket_subscribe gestolpert, aber leider hast Du ausser

    <Zitat>
    Dazu später mehr..
    <Zitat>

    leider nichts geschrieben. Ich möchte die Serielle Schnittstelle (/dev/ttyUSB0) nicht in meinem Plug-in jedes mal wieder aufmachen.

    Hast Du einen Tipp ?

    Gruss
    Steffen

    #2
    Sorry, da muss ich Dich noch etwas vertrösten. Ich hoffe das in den nächsten Tagen ein aussagekräftiges Beispiel dafür zur Verfügung steht..

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

    Kommentar


      #3
      Wiregate als KNX-Enocean Gateway

      OK. Das wäre toll. Ich habe vor, bzw. zum Teil tut es schon, den Wiregate als EnoceanGate aufzubohren.

      Mir waren die KNX-enocean Gateways zu teuer und da habe ich mit der TCM120 Antenne experimentiert. Da kann man das für ca 100€ selbst bauen.

      Aktueller Stand:
      - USB-seriell Adapter wird erkannt und Treiber geladen
      - Serielles Device wird angebunden /dev/ttyUSB0
      - Fenstergriff sendet Daten
      - Werte können mit Perl ausgelesen werden

      Gruss
      Steffen

      Kommentar


        #4
        Klingt interessant
        BTW, es gibt auch ein "fertiges" USB->TCM120 unter hundert, finds aber grade nicht..
        Ich hab das seit ewig rumliegen, komme aber nicht dazu Interessant fände ich, wie das "einlernen" usw. im Detail abläuft/machbar ist (?)

        Zu ttyUSB0, nebenbei, ganz schwierig, weil aus 0 auch mal schnell 1 oder 2 wird, nicht deterministisch!
        Daher werden im WireGate (wenn ich mich recht entsinne hast Du nämlich keines ) auch per udev-Rule ein symlink mit ttyUSB-PORT#-HUB#-PORT# erzeugt:

        Code:
        root@wiregate102:~/svntmp/wiregate# cat /etc/udev/rules.d/pl2303.rules 
        
        # PROLIFIC PL2303/FTDI USB to Serial unique port
        SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", \
        	ATTRS{product}=="USB-Serial Controller", \
        					SYMLINK+="usbserial-%b"
        SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", \
                ATTRS{product}=="USB-Serial Controller", \
                                                SYMLINK+="ttyUSB-%b"

        Also, mal im schnelldurchgang, unvollstänges Beispiel:

        Code:
        my $socknum = 1;                # Eindeutige Nummer des Sockets fuer das USBSERIAL; frei wählbar 0-99
        
        my $USBSERIAL_dev = "/dev/ttyUSB-x-y-z";    # Adresse / Port USBSERIAL/CUN ip:2323
        #my $USBSERIAL_dev = "192.168.1.191:2323";    # Adresse / Port ip:2323
        # Eigenen Aufruf-Zyklus setzen (Initialisierung/zyklisches prüfen)
        $plugin_info{$plugname.'_cycle'} = 600;
        # Gruppenadressen definieren - leer um Versand zu unterbinden
        ...
        
        #######################
        ### ENDE DEFINITION ###
        #######################
        
        # Hauptverarbeitung
        if (!$socket[$socknum] or (defined $fh and eof($socket[$socknum]))) { # socket erstellen
            $socksel->remove($socket[$socknum]);
            undef $socket[$socknum];
            if ($USBSERIAL_dev =~ /^\//) { # local device
        	   sysopen($socket[$socknum], $USBSERIAL_dev,2) # O_RDRW
        	     or return ("open of $USBSERIAL_dev  failed: $!");
            } else {
           	  $socket[$socknum] = IO::Socket::INET->new($USBSERIAL_dev)
        	     or return ("open of $USBSERIAL_dev  failed: $!");
            }
            syswrite($socket[$socknum],"X01\n"); # Init
            syswrite($socket[$socknum],"l01\n"); # LED on
            $socksel->add($socket[$socknum]); # add socket to select
            $plugin_socket_subscribe{$socket[$socknum]} = $plugname; # subscribe plugin, damit es bei eintreffenden Daten aufgerufen wird
            return "opened CU* $USBSERIAL_dev on socket $socknum";
        } elsif ($fh) { # Readline from USBSERIAL 
            my $buf = <$fh>;
            next if(!$buf || length($buf) < 1);            # Bogus messages
            chomp $buf;
            $buf =~ s/\r//;
        # Whatever.. $buf hat jetzt die empfangene Textzeile ohne CRLF
            return "Plugin $plugname bekam $buf";
        }
        Also, $plugin_socket_subscribe + $socksel->add($socket[$socknum]) s.o. (beides notwendig!), $fh ist beim Aufruf dann das Filehandle des Ports(Sockets), an dem die Daten anliegen.


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

        Kommentar


          #5
          Source Codeschmarotzer

          Hast natürlich Recht, ich gehöre zu den Source Codeschmarotzern.
          Aber ich werde natürlich mein Plugin veröffentlichen.

          Und Du hast auch Recht mit dem Enocean Empfänger, ich meinte ich
          verwende einen fertigen, nämlich diesen USB Sende-und Empfangseinheit
          und baue mir mein eigenes Enocean Gateway.

          Ich werde mich am WE mal dran setzen.

          Interessant finde ich die Fenstergriffe auch als Lösung für Dachfenster.

          Gruss
          Steffen

          Kommentar


            #6
            Hi Steffen,

            wenn du das fertig hast, würde mich auch eine Aufbaubeschreibung interessieren - ich bin noch am Überlegen einige Fenster mit EnOcean zu versehen, scheue mich aber noch wegen der Einstiegskosten.
            Da käme mir eine günstige Variante natürlich entgegen

            Grüße,
            Julian

            Kommentar


              #7
              Aufbau

              Hi,

              also mehr als ich jetzt schon habe wird es nicht werden:

              Material : - enocean USB Empfänger (z.B. hier) ca. 100€
              - Hoppe Fenstergriff Atlanta (z.B. hier) ca. 60€
              - wiregate, fitPC, NAS (halt etwas das dauernd läuft)
              - Listener, der die "serielle" USB Schnittstelle abfragt z.B. Plug-In im wiregate oder Misterhouse und dann GAs befeuert
              Der weiche Teil (Listener) des Materials fehlt noch.

              Gruss
              Steffen

              Kommentar

              Lädt...
              X