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

  • makki
    antwortet
    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

    Einen Kommentar schreiben:


  • jeans112
    antwortet
    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

    Einen Kommentar schreiben:


  • Chris M.
    antwortet
    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

    Einen Kommentar schreiben:


  • jeans112
    hat ein Thema erstellt [wiregate] Bei Anruf Schalten mit Wiregate und Fritzbox.

    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
Lädt...
X