Ankündigung

Einklappen
Keine Ankündigung bisher.

FritzBox Anruf per GA (Türklingel) Plugin

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

    #76
    Also zwei Dinge funktionieren bei mir nicht:

    1. wenn ich einen Gruppenanruf im Telefonbuch nach AVM Anleitung einrichte und dort die gewünschten anzuklingelnden Endgeräte eintrage und den Eintrag mit einer Kurzwahl wie z.B. **777 versehe,
    will das Plugin die **777 irgendwie nicht anwählen - es passiert dann schlicht gar nichts.

    Als Workaround lassen sich aber die gewünschten Endgeräte direkt im Plugin eintragen
    Code:
    my $call_to = '**611#612#622';
    damit klappt es dann.

    2. Egal was ich bei
    Code:
    my $call_from = '**50';
    auch eintrage, es wird immer angezeigt, dass von **50 aus (ISDN/DECT Rundruf) "angerufen wird".
    Ist eine Möglichkeit bekannt das irgendwie zu umgehen?

    Für zwei unterschiedliche Türen oder auch bei zwei unterschiedlichen Klingelknöpfen ist das natürlich unpraktikabel. Außerdem wäre es eleganter wenn in der Anzeige entsprechend "Haustür" o.ä. stehen würde.
    Leider habe ich auch keine brauchbare Möglichkeit gefunden das Ganze zu debuggen.
    Gruß -mfd-
    KNX-UF-IconSet since 2011

    Kommentar


      #77
      Hallo,

      funktioniert das Plugin mit dem neuen avm os 06.30?
      Denn meine Klingen funktioniert nicht mehr. Ich glaube da wurde auf meine Fritzbox ein anderes OS installiert.
      Hat noch jemanden solche Erfahrungen gemacht?

      Schöne Grüße

      Stefan

      Kommentar


        #78
        Hallo,

        ich habe dasselbe Problem.

        Seit die FritzBox auf 6.30 ist funktioniert es nicht mehr.
        Hat hier evtl schon jemand eine Lösung?

        Wenn mir jemand einen Tip geben könnte wo ich das Suchen anfange soll, würde ich dem auch mal nachgehen.
        Bei den Plugins nur "Anwender", deswegen bin ich da etwas hilflos.

        Danke und Grüße
        Jens


        Kommentar


          #79
          Hallo Jens,

          mir geht es bei diesem Plugin genauso.
          Als abhilfe habe ich nun erst mal die Fritzbox wieder auf die alte Firmare gebracht bis es eine Lösung gibt.
          Grüße
          Stefan

          Kommentar


            #80
            Hallo zusammen,

            ich war mal so frei, das Plugin auf die neueste FritzBox Version 6.30 anzupassen. Läuft bei meiner 7490 ohne Probleme.

            Das folgende Script liegt bei mir unter /usr/local/bin/fbbell.pl

            Code:
            #!/usr/bin/perl
            #################################################
            # Fritz!Box Bell
            # This script will call a certain number,
            # wait for a defined time and hangs up.
            #
            # Works only with Fritz OS >= 6.30
            #
            # (c) 2015 coolrunnings unter the GNU Public License
            #################################################
            
            use Getopt::Long;
            use LWP;
            use LWP::Simple;
            use Digest::MD5 'md5_hex';
            
            #################################################
            
            my $pause = 8;  # default time in seconds between call and hangup
            
            GetOptions(
            
                'to=s' => \my $call_to,  # verlangt einen string, z.B. -f hallo.pdf
                'd=i'  => \$pause # optionaal
            );
            
            #################################################
            # Variable Definition
            my $sid = "";
            my $user_agent = LWP::UserAgent->new;
            
            my $fritz_ip = 'x.x.x.x';
            my $fritz_user = "xxx";
            my $fritz_pw = "zzz";
            
            #################################################
            # Application
            
            ################################################
            # Get a valid session ID
            &init_session;
            
            my $response = $user_agent->get(http://'.$fritz_ip.'/fon_num/foncalls_list.lua?sid='.$sid.'&dial='.$call_to);
            
            #print $response->content;
              
            sleep($pause);
            
            my $response = $user_agent->get('http://'.$fritz_ip.'/fon_num/foncalls_list.lua?sid='.$sid.'&hangup=');
            
            #print $response->content;
            
            #################################################
            # SUBS
            #################################################
            
            # Init Session
            # Original from Amaridian
            sub init_session {
                # Login-Challenge und evtl. vorhandene Session-ID holen        
                my $http_response = $user_agent->post('http://'.$fritz_ip.'/login_sid.lua',
                [
                     'sid' => defined($plugin_info{$plugname.'_sid'}) ? $plugin_info{$plugname.'_sid'} : '0',
                ],
                );
                $http_response->content =~ /<SID>(\w+)<\/SID>\s*<Challenge>(\w+)<\/Challenge>/i and $sid = $1 and $challengeStr = $2;          
                
                # Wenn noch eine gültige Session da ist, nehmen wir die
                if($sid eq '0000000000000000'){        
                    # Challenge zusammen mit PW hashen laut http://www.avm.de/de/Extern/files/session_id/AVM_Technical_Note_-_Session_ID.pdf
                    my $ch_Pw = "$challengeStr-$fritz_pw";
                    $ch_Pw =~ s/(.)/$1 . chr(0)/eg;
                    my $md5 = lc(md5_hex($ch_Pw)); #warum auch immer AVM hier UTF16LE haben möchte...
                    my $challenge_response = "$challengeStr-$md5";
                                
                    # Mit der frisch errechneten Challenge-Response die Session-ID abholen
                    $http_response = $user_agent->post('http://'.$fritz_ip.'/login_sid.lua?username='.$fritz_user.'&response='.$challenge_response,
                    [
                        'getpage' => '../html/de/menus/menu2.html',
                    ],
                    );        
                    $http_response->content =~ /<SID>(\w+)<\/SID>\s*<Challenge>(\w+)<\/Challenge>/i and $sid = $1 ;
                    $plugin_info{$plugname.'_sid'} = $sid;
                }
            }
            Das eigentliche Plugin sieht dann folgendermaßen aus:

            Code:
            #!/usr/bin/perl
            # COMPILE_PLUGIN
            #
            # Definitionen
            my $klingel_block_ga = "0/0/1";
            my $klingel_ga = "0/1/1";
            my $call_to = "**610";
            my $fritzscript = "/usr/local/bin/fbbell.pl -to $call_to &";
            
            # Plugin an Gruppenadresse "anmelden"
            $plugin_subscribe{$klingel_ga}{$plugname} = 1;
            $plugin_subscribe{$klingel_block_ga}{$plugname} = 1;
            
            # Nicht zyklisch ausführen
            $plugin_info{$plugname.'_cycle'} = 0;
            
            my $event=undef;
            if (!$plugin_initflag) { $event='restart'; } # Restart des daemons / Reboot
            elsif ($plugin_info{$plugname.'_lastsaved'} > $plugin_info{$plugname.'_last'})
            { $event='modified'; } # Plugin modifiziert
            elsif (%msg) { $event='bus'; } # Bustraffic
            elsif ($fh) { $event='socket'; } # Netzwerktraffic
            else { $event='cycle'; } # Zyklus
            
            if ( $event eq 'bus' ) {
            
                my $msg_ga = $msg{'dst'};
                my $msg_write = ( $msg{'apci'} eq "A_GroupValue_Write" );
                my $msg_read = ( $msg{'apci'} eq "A_GroupValue_Read" );
                my $msg_value = decode_dpt($msg{'dst'},$msg{'data'},"1.001");
            
                if ( $msg_write && ($msg_ga eq $klingel_ga) && ($msg_value == "1") ) {
            
                    my $klingel_blocked = $plugin_info{$plugname.'_klingelBlocked'};
                    
                    if ( $klingel_blocked == "0" ) {
                    
                        knx_write("0/1/5", 1, "1.001");
                        $plugin_info{$plugname.'_cycle'} = 30;
                        
                        my $pluginforkpid = fork();
                        if (!$pluginforkpid) {
                            # ich bin das dicke child - aber dank exec gleich weg
                            # aber hier sind wir ein eigener, sep. prozess!
                            exec $fritzscript;
                            # Leichen vermeiden:
                            return "klingel";
                        }
                    }
                    else {
                        return "blocked";
                    }
                }
                elsif ( $msg_write && ($msg_ga eq $klingel_block_ga ) ) {
                    
                    $plugin_info{$plugname.'_klingelBlocked'} = $msg_value;
                            return  "wrote klingelBlocked ".$msg_value;
                    
                }
                elsif ( $msg_read && ($msg_ga eq $klingel_block_ga ) ) {
                    
                    my $klingel_blocked = $plugin_info{$plugname.'_klingelBlocked'};
                    knx_write($klingel_block_ga , $klingel_blocked , "1.001");
                            return  "wrote to bus".$klingel_blocked;
                }
            }    
            elsif ( $event eq 'cycle' ) {
                knx_write("0/1/5", 0, "1.001");
                $plugin_info{$plugname.'_cycle'} = 0;
            }

            Kommentar


              #81
              Hallo und danke für die Anpassung.

              könntest du mir noch mitteilen was jetzt die eigentlichen Änderungen waren?


              Danke und Gruß
              Florian

              Kommentar


                #82
                Zitat von DasVantom Beitrag anzeigen
                könntest du mir noch mitteilen was jetzt die eigentlichen Änderungen waren?
                AVM hat das Handling grundlegend geändert. Bei meiner ersten Version war es noch cgi-bin, jetzt macht AVM aber bei der FritzBox alles per lua script.

                Hier der Klingel Aufruf aus der ersten Version:

                Code:
                my $response = $user_agent->post('http://'.$fritz_ip.'/cgi-bin/webcm',
                    [
                      'getpage'    => '../html/login_sid.xml',
                      'sid'    => $sid,
                      'telcfg:settings/UseClickToDial' => 1,
                      'telcfg:command/Dial'            => $call_to,
                    ],
                  );
                So sieht das ganze jetzt aus:

                Code:
                my $response = $user_agent->get(http://'.$fritz_ip.'/fon_num/foncalls_list.lua?sid='.$sid.'&dial='.$call_to);
                Gruß
                Michael


                Kommentar


                  #83
                  Hallo,

                  für die, die nur das Plugin nutzen, hier das Plugin mit den Anpassungen von coolrunnings

                  @Coolrunnings: Danke fürs herausfinden!!!

                  Code:
                  ##################
                  # Fritz-Box GA-Wähler#
                  ##################
                  # Wiregate-Plugin
                  # (c) 2012 Amaridian under the GNU Public License
                  # angepasst: KingOlli (KNX-User-Forum) am 02.05.2013
                  # angepasst: jeans112 am 25.09.2015
                  # funktioniert nur mit Fritz OS 6.30 oder höher
                  use LWP;
                  use Digest::MD5 'md5_hex';
                  
                  #Cycle ist unerheblich
                  $plugin_info{$plugname.'_cycle'} = 86400;
                  
                  # Definitionen
                  my $klingel_ga = "4/0/8";
                  my $fritz_ip = 'x.x.x.x';
                  
                  #Benutzer muss in der Web-Oberfläche der Fritzbox angelegt werden
                  my $fritz_user = 'username';
                  my $fritz_pw = 'passwort';
                  
                  #abgehende Rufnummer
                  my $call_from = '50';
                  
                  #**9 für Rundruf oder **interne Nummer für Direktruf
                  #in der Fritbox kann dann für Intern ein anderer Klingelton
                  #gewählt werden (**610)
                  my $call_to = '**610';
                  
                  #Gruppenadresse "abonnieren"
                  $plugin_subscribe{$klingel_ga}{$plugname} = 1;
                  
                  # Nur bei einer gesendeten 1 reagieren
                  if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $klingel_ga) {
                  if (int($msg{'data'}) == 1 ) {
                  
                  # Login-Challenge und evtl. vorhandene Session-ID holen
                  my $user_agent = LWP::UserAgent->new;
                  my $http_response = $user_agent->post('http://'.$fritz_ip.'/login_sid.lua',
                  [
                  'sid' => defined($plugin_info{$plugname.'_sid'}) ? $plugin_info{$plugname.'_sid'} : '0',
                  ],
                  );
                  $http_response->content =~ /<SID>(\w+)<\/SID>\s*<Challenge>(\w+)<\/Challenge>/i and my $sid = $1 and my $challengeStr = $2;
                  
                  # Wenn noch eine gültige Session da ist, nehmen wir die
                  if($sid eq '0000000000000000'){
                  # Challenge zusammen mit PW hashen laut http://www.avm.de/de/Extern/files/session_id/AVM_Technical_Note_-_Session_ID.pdf
                  my $ch_Pw = "$challengeStr-$fritz_pw";
                  $ch_Pw =~ s/(.)/$1 . chr(0)/eg;
                  my $md5 = lc(md5_hex($ch_Pw)); #warum auch immer AVM hier UTF16LE haben möchte...
                  my $challenge_response = "$challengeStr-$md5";
                  
                  
                  # Mit der frisch errechneten Challenge-Response die Session-ID abholen
                  $http_response = $user_agent->post('http://'.$fritz_ip.'/login_sid.lua?username='.$fritz_user.'&response='. $challenge_response,
                  [
                  'getpage' => '../html/de/menus/menu2.html',
                  ],
                  );
                  $http_response->content =~ /<SID>(\w+)<\/SID>\s*<Challenge>(\w+)<\/Challenge>/i and $sid = $1 ;
                  }
                  
                  # den gewünschten Wählbefehl absetzen
                  $http_response = $user_agent->get('http://'.$fritz_ip.'/fon_num/foncalls_list.lua?sid='.$sid.'&dial='.$call_to);
                  
                  print "Klingel betätigt und Ruf abgesetzt"
                  }
                  }
                  Grüße
                  Jens

                  Kommentar


                    #84
                    Zitat von coolrunnings Beitrag anzeigen
                    AVM hat das Handling grundlegend geändert. Bei meiner ersten Version war es noch cgi-bin, jetzt macht AVM aber bei der FritzBox alles per lua script.
                    Meine FB 7270 wird wohl immer bei OS 6.05 stehenbleiben. Wie befürchtet, läuft damit das Script nicht.

                    Kommentar


                      #85
                      Nur zur Info, hier fehlt dir eigentlich noch ein ' vor http://

                      my $response = $user_agent->get(http://'.$fritz_ip.'/fon_num/foncalls_list.lua?sid='.$sid.'&dial='.$call_to);

                      Gruß
                      Florian

                      Kommentar


                        #86
                        Hallo zusammen,

                        hat jemand evtl. das Rufumleitungsscript für die FB (siehe weiter oben) auch auf das neue LUA umgestellt und im Einsatz ?

                        Vielleicht hat das sogar jemand für die neue FOS 6.50 getestet ?

                        Gruß

                        Daniel
                        Endlich kann Ich Bei Euch mitreden ...

                        Kommentar


                          #87
                          keiner einen Ansatz ?!

                          Mit dem neuen Fritz OS funktionieren jetzt meine Rufumleitungen wie gewünscht, aber wie erwähnt, das Script via KNX nicht mehr

                          Bin für jeden Tip dankbar !

                          Gruß

                          Daniel
                          Endlich kann Ich Bei Euch mitreden ...

                          Kommentar


                            #88
                            Hallo zusammen,

                            der letzte Plugin-Stand von Jens läuft ohne Probleme unter dem neuesten OS 6.50.
                            Schön wäre es jetzt noch, wenn die Variable $call_from verwendbar wäre.

                            Ich vermute mal, dass hier noch eine Anpassung erforderlich ist, wie z. B. &dialport=

                            Code:
                            # den gewünschten Wählbefehl absetzen
                            $http_response = $user_agent->get('http://'.$fritz_ip.'/fon_num/foncalls_list.lua?sid='.$sid.'&dial='.$call_to);
                            Weiß jemand, wie das umgesetzt werden kann?

                            Grüße
                            Adi

                            Kommentar


                              #89
                              Hi,

                              ich habe beide Scripte (mein altes und das neue von Jens oben) verglichen und angepasst. Dadurch, dass sich der eigentliche Befehlsteil aber anscheinend geändert hat, bin ich etwas ratlos, wie ich der FB den Befehl senden kann.

                              Im alten Script sieht der Teil so aus:

                              Code:
                              # den gewünschten Befehl absetzen
                              $http_response = $user_agent->post('http://'.$fritz_ip.'/cgi-bin/webcm',
                              
                              
                              
                                           [
                                             'getpage'    => '../html/login_sid.xml',
                                             'sid'    => $sid,
                                             'telcfg:settings/CallerIDActions'.$id.'/Active' => $active,
                                           ],
                                        );
                                  return("Rufumleitung ".$id." ist ".$active); 
                              }
                              Im neuen Script von Jens sieht es so aus:

                              Code:
                              # den gewünschten Befehl absetzen
                              $http_response = $user_agent->get('http://'.$fritz_ip.'/fon_num/foncalls_list.lua?sid='.$sid.'&dial='.$call_to);
                              Wie kann ich den Teil konvertieren ? Im wesentlichen geht es ja um den Teil "post" zu "get" ...

                              Weiß jemand Rat ?

                              Danke und Gruß

                              Daniel
                              Endlich kann Ich Bei Euch mitreden ...

                              Kommentar


                                #90
                                Ich habe das jetzt auch eingerichtet. Klingel > Binäreingang > KO > Wiregate > FritzBox 7220 v3 OS 06.05.
                                Supereinfach bis zum "klingelt halt an den Telefonen". Danke an die Autoren.

                                Zitat von mfd Beitrag anzeigen
                                1. ... Gruppenanruf im Telefonbuch ... passiert dann schlicht gar nichts.

                                Als Workaround ... Endgeräte direkt im Plugin eintragen
                                Code:
                                my $call_to = '**611#612#622';
                                zu 1:
                                Danke für den Workaround.
                                Auf diese Weise lassen sich die klingelnden Telefone per String nach Bedarf leicht zusammensetzen.

                                Zitat von mfd Beitrag anzeigen
                                2. Egal was ich bei
                                Code:
                                my $call_from = '**50';
                                auch eintrage, es wird immer angezeigt, dass von **50 aus (ISDN/DECT Rundruf) "angerufen wird".
                                Ist eine Möglichkeit bekannt das irgendwie zu umgehen?
                                Das hat mich auch geärgert, aber nun habe ich es geschafft: an den Telefonen erscheint "Türklingel".
                                Ich habe mit bestimmt einem Dutzend Werte für $call_from (DialPort) experimentiert und parallel in der Fritz!Box alle möglichen Geräte angelegt und wieder gelöscht, um eine Systematik zu erkennen. Als dann eine längst wieder gelöschte ISDN-Anlage als **5*51 auftauchte, keimte der Verdacht, dass da eine interne Tabelle existiert, die wie auch immer anzusprechen ist.

                                Es funktioniert hier mit der 7270 so:
                                1. in FBox Telefoniegerät "Türsprechanlage mit a/b Schnittstelle" an FON1, Name "Türklingel" (oder beliebig)
                                2. Als "1. Türklingel" - 11 - irgendeine Weiterleitung auf ein vorhandenes Mobilteil
                                3. Diese bekommt von der FBox die interne Nummer **1
                                4. Nun dreimal im Wiregate das Plugin ändern, speichern, Testklingeln
                                  1. my $call_from = '620'; <620 = irgendein angelegtes Telefon>
                                    -> wundern, was angezeigt wird
                                  2. my $call_from = '1';
                                    -> mit Glück schon fertig
                                  3. my $call_from = '2';
                                    -> spätestens jetzt wird im Display aller angerufenen Telefone "Türklingel" angezeigt.


                                Ich habe es nun dreimal 'from scratch' so gemacht und das Ziel jeweils erreicht.

                                Nach einer Änderung des Klingelnamens in der FBox-Türsprechstelle (ich fürchte sogar, nach jeder Änderung in den Telefoniegeräten) erscheint zunächst eine falsche Anzeige.
                                Dann wieder bei 4. anfangen.
                                Gruß, Rainer

                                Kommentar

                                Lädt...
                                X