Ankündigung

Einklappen
Keine Ankündigung bisher.

Bei Anruf Schalten mit Wiregate und Fritzbox

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

    [wiregate] Bei Anruf Schalten mit Wiregate und Fritzbox

    Hallo,

    ich habe ja hier bereits einen Versuch gestartet:

    https://knx-user-forum.de/eibpc/1396...-fritzbox.html

    Ich möchte bei Anruf auf eine bestimmte Nummer eine Aktion auf dem Bus ausführen. Und wenn es geht auch die Telefonnummer auf einer GA senden.

    Bodo hat hier ein Perl-Script ausgegraben:

    Code:
     
    #!/usr/bin/perl -w
    #
    # read_calls.pl
    #
    # [URL="http://hickerspace.org/wiki/Fritz!Box"]Fritz!Box[/URL]
    #
    # Synopsis:
    # Script is run as a service daemon. It connects to the Fritz!Box Fon Ata
    # (port 1012) and receives the calling string (number of the party calling
    # in). 
    #
    # Requirements:
    # - must be able to reach tcp port 1012 on your FB
    # - activate call monitor on FB by dialing #96*5*
    # - required perl package
    #
    # Licence: GPL2
    #
    # History:
    # ver. 0.1 - 20060401 - Lars G. Sander, Zuerich
    # First public release.
    use IO::Socket;
    use strict;
    # your fritz box (ip or hostname)
    my $FRITZBOX="fritz.box";
    #-------- NO USER SERVICABLE PARTS BELOW ausser der GA !!! und dem "/usr/bin/groupwrite" -------#
    my $sock = new IO::Socket::INET (
    PeerAddr => $FRITZBOX,
    PeerPort => '1012',
    Proto => 'tcp'
    );
    die "Could not create socket: $!\n" unless $sock;
    while(<$sock>) {
      if ($_ =~ /RING/){     # 24.04.11 15:08:54;RING;0;<Anrufer>;<Angerufene Nr.>;ISDN oder SIP0;
        my @C = split(/;/);
        my $rt="";           # rt = ringtime (Anrufzeit)
        my $nr="";           # nr = caller nr (Anrufer)
        $rt=$C[0]." ";       # das erste Teilstück, Separator=";"
        $nr=$C[3];           # das vierte Teilstück
        my @hex="";
        @hex= split(//,$nr);
        foreach my $c(@hex){
          $c = "0x".sprintf "%x",ord($c);
        }
        my @hex2="";
        @hex2= split(//,$rt);
        foreach my $c2(@hex2){
          $c2 = "0x".sprintf "%x",ord($c2);
        }
        my @args='';
        @args = ("/usr/bin/groupwrite", "ip:127.0.0.1", "9/0/0", @hex2, @hex);
        system(@args) == 0 or die "system @args failed: $?";
      }
    }
    Ist es möglich das Script zu einem Plugin umzubauen?
    @Makki: Du hattest ja schon Hilfe angeboten, deswegen hier der Post.

    Grüße
    Jens

    #2
    Zitat von jeans112 Beitrag anzeigen
    Ist es möglich das Script zu einem Plugin umzubauen?
    Ich lasse mich gerne eines besseren belehren, aber ich denke: nein.

    Hintergrund: Ein Plugin muss sich selbst immer wieder beenden, dieses Skript will aber (und muss auch) durchlaufen.

    D.h. die Lösung geht anders: Du musst dieses Skript beim Start des WireGates auch starten. Fertig.
    Das Auswerten der Daten kann dann ein Plugin machen, dass auf die entsprechende GA hört, wie hier im Beispiel die 9/0/0
    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
      Zitat von Chris M. Beitrag anzeigen
      D.h. die Lösung geht anders: Du musst dieses Skript beim Start des WireGates auch starten. Fertig.
      Ok. das ist natürlich auch in Ordnung für mich.
      Ich habe es nur nicht geschafft, das Script beim Starten zum laufen zu bringen.

      Bei mir läuft das Script eben nur, wenn ich angemedet bin und das Script gestartet habe. (Dann läuft es aber gut)

      Ich denke da benötige ich Hilfe eine Linux Profis

      Grüße
      Jens

      Kommentar


        #4
        Doch doch das sollte schon direkt im Plugin gehen, dafür gibt es plugin_socket_subscribe

        Schnellansatz (komplettbeispiel hier):
        Code:
        my $FRITZBOX="fritz.box";
        my $socknum = 117;                # Eindeutige Nummer des Sockets, frei wählbar 
        
        #######################
        ### ENDE DEFINITION ###
        #######################
        # Hauptverarbeitung
        if (!$socket[$socknum] or !$socket[$socknum]->opened or (defined $fh and eof($socket[$socknum]))) { # socket erstellen
            $socksel->remove($socket[$socknum]);
            undef $socket[$socknum];
                 $socket[$socknum] = IO::Socket::INET->new(PeerAddr => $FRITZBOX, Timeout => 2, Blocking => 0, PeerPort => '1012')
                 or return ("open of $FRITZBOX  failed: $!");
            $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 Fritzi $FRITZBOX on socket $socknum";
        } elsif ($fh) { # Readline from fritz
            while (my $buf = <$fh>) {
          if ($buf =~ /RING/){     # 24.04.11 15:08:54;RING;0;<Anrufer>;<Angerufene Nr.>;ISDN oder SIP0;
        ....
        So oder so ähnlich..

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

        Kommentar

        Lädt...
        X