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

    #61
    Guten Tag zusammen,

    so bald jemand an der Tür klingelt, klingelt das angeschlossene Telefon 5 mal.
    Besteht irgendwie die Möglichkeit das Telefon nur 1 mal klingeln zu lassen?

    Danke & Gruß
    Florian

    Kommentar


      #62
      Zitat von DasVantom Beitrag anzeigen
      Guten Tag zusammen,

      so bald jemand an der Tür klingelt, klingelt das angeschlossene Telefon 5 mal.
      Besteht irgendwie die Möglichkeit das Telefon nur 1 mal klingeln zu lassen?

      Danke & Gruß
      Florian
      Ich warte bei mir 3 Sekunden, setzte die Klingel GA zurück und leg dann auf, das sieht dann etwa so aus:

      Code:
      	
      		# warten	
      		select(undef, undef, undef, 3); 
      
      		# Klingel GA zurücksetzen
      		knx_write($klingel_ga, 0, "1.001");
      
      	        # wieder auflegen
      		$http_response = $user_agent->post('http://'.$fritz_ip.'/cgi-bin/webcm',
      			[
      				'getpage'	=> '../html/login_sid.xml',
      				'sid'	=> $sid,
      				'telcfg:command/Hangup'          => 1,
      			],
      		);
      Vielleicht hilfts!

      Grüße
      David

      Kommentar


        #63
        Ich hab das ganze bei mir folgendermaßen gelöst.
        Das Plugin hört auf die Klingel GA und führt dann ein Skript aus, weil ich nicht wollte, dass das Plugin ein paar Sekunden blockiert.

        Plugin:

        Code:
        # Definitionen
        my $klingel_block_ga = "0/0/1";
        my $klingel_ga = "0/1/1";
        my $fritzscript = "/usr/local/bin/fbbell.pl &";
        
        # Plugin an Gruppenadresse "anmelden"
        $plugin_subscribe{$klingel_ga}{$plugname} = 1;
        
        # Nicht zyklisch ausführen
        $plugin_info{$plugname.'_cycle'} = 0;
        
        
        # Nur bei einer gesendeten 1 reagieren
        if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $klingel_ga) { 
        	if ($msg{'value'} == "1" ) {
        
        		my $klingel_blocked = knx_read($klingel_block_ga,300,"1.001");
        		
        		if ( $klingel_blocked == "0" ) {
        			my $pluginforkpid = fork();
        			if (!$pluginforkpid) {
        				
        				exec $fritzscript;
        				
        				# Leichen vermeiden:
        				return "klingel";
        			}
        		}
        		else {
        			return "blocked";
        		}
        	}
        }
        Skript:

        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 >= 5.50
        #
        # (c) 2013 coolrunnings unter the GNU Public License
        #################################################
        
        use LWP;
        use LWP::Simple;
        use Digest::MD5 'md5_hex';
        
        #################################################
        # Variable Definition
        my $sid = "";
        my $user_agent = LWP::UserAgent->new;
        
        my $fritz_ip = 'xxx';
        my $fritz_user = "xxx";
        my $fritz_pw = "xxx";
        
        #my $call_from = '**51'; #50 ist die vordefinierte Rundruf-Nummer
        my $call_to = '**610'; 	 #beliebige Nummer, für intern ** vorwählen
        my $pause = 8;			 # time in seconds between call and hangup
        
        #################################################
        # Application
        
        ################################################
        # Get a valid session ID
        &init_session;
        
        
        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,
            ],
          );
        
          
        sleep($pause);
        
        $response = $user_agent->post('http://'.$fritz_ip.'/cgi-bin/webcm',
            [
              'getpage'	=> '../html/login_sid.xml',
              'sid'	=> $sid,
              'telcfg:settings/UseClickToDial' => 1,
              'telcfg:command/Hangup'            => $call_to,
            ],
          );
        
        
        #################################################
        # 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;
            }
        }

        Kommentar


          #64
          Danke für die Unterstützung.
          Habe gerade mal die Variante von coolrunnings versucht, jedoch scheitert es wohl an dem Script, welches nicht abgearbeitet wird.

          So bekomme ich keine Rückmeldung in der Plugin Info:
          Code:
          		
          if (!$pluginforkpid) {
          				
             exec $fritzscript;
          				
             # Leichen vermeiden:
             return "klingel";
          Setze ich das Return vor "exec..." dann schon.

          Muss die Variable sid im Script noch angepasst werden?

          Ich habe mit dem Dateimanager im webmin die fbbell.pl erzeugt und nachher mit Notepad bearbeitet. Rechte habe ich mal auf 777 gestellt.

          Sonst habe ich wieder alles wie im ursprünglichen Plugin eingestellt, welches funktionierte.


          Gruß
          Florian

          Kommentar


            #65
            Hast du mal probiert mit Putty dich auf das Wiregate zu verbinden und das Skript direkt auszuführen?
            Anpassen im Skript musst du lediglich die folgenden Variablen:
            Code:
            my $fritz_ip = 'xxx';
            my $fritz_user = "xxx";
            my $fritz_pw = "xxx";

            Kommentar


              #66
              Direkt ausführen funktioniert und ich bekomme es mit 3 Sekunden hin, dass es nur zwei mal klingelt, super.

              Übers Plugin (GA) funktioniert es noch nicht. Mir fällt ein, dass ich am Anfang auch mit dem Standard Plugin Probleme hatte, da ich die GA auch noch im Prowl-Plugin verwende. Könnte das ein Grund sein, wenn ich die GA in zwei Plugins verwende?

              Gruß
              Florian

              Kommentar


                #67
                Puh, von Prowl hab ich keine Ahnung. Aber lässt sich ja relativ einfach testen indem du das andere Plugin kurz mal deaktivierst.

                Passt denn auch der Pfad zur script Datei?
                Anderer Vorschlag zum Testen wäre mal den Code aus dem Skript in das Plugin kopieren, also die exec Zeile quasi ersetzen.

                Kommentar


                  #68
                  Wenn ichs so schreibe,

                  Code:
                   my $fritzscript = "perl /usr/local/bin/fbbell.pl &";
                  funktioniert es auch bei mir.


                  Danke & Gruß
                  Florian

                  Kommentar


                    #69
                    Ich habe ein kurze Frage bevor ich beginne mich mal mit dem Plugin zu beschäftigen: welches ist denn nun eigentlich die aktuelle Version? Eine der hier im Thread veröffentlichen oder im SVN? Oder kommt das immer auf die FB-Version an? Ich habe eine 7240 mit FRITZ!OS 05.53 + Firmware-Version: 73.05.53.

                    Mit welcher Version sollte ich mein Glück versuchen?

                    Danke,
                    Micha

                    Kommentar


                      #70
                      Sicherheitsupdate

                      Nachdem es ja groß in den Nachrichten war, werde ich wohl nicht der Einzige sein der das Sicherheitsupdate eingespielt hat.

                      Heute als Besuch kam hab ich festgestellt das die Klingel nicht mehr funktioniert, da kam mir das gestirge Update in den Sinn...

                      Noch jemand die selben Probleme und vielleicht sogar eine Lösung parat?
                      cu Yfkt5A
                      DALI(ABB DG/S1.1), KODI Odroid, TrueNAS, Zehnder ComfoAir 200 L Luxe
                      microk8s-Cluster: HomeAssistant, MusicAssistant, mosquitto, TVHeadend, jellyfin

                      Kommentar


                        #71
                        Zitat von nEiMi Beitrag anzeigen
                        Nachdem es ja groß in den Nachrichten war, werde ich wohl nicht der Einzige sein der das Sicherheitsupdate eingespielt hat.

                        Heute als Besuch kam hab ich festgestellt das die Klingel nicht mehr funktioniert, da kam mir das gestirge Update in den Sinn...

                        Noch jemand die selben Probleme und vielleicht sogar eine Lösung parat?
                        Hi,

                        also bei mir wurde am Montag auch das neuste Update von meinem Provider Zwangseingespielt und meine Klingel funktioniert ohne Probleme.
                        Ich habe mal das Plugin angefügt wie es bei mir läuft.

                        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
                        # funktioniert nur mit Fritz OS 5.50 oder höher
                        use LWP;
                        use Digest::MD5 'md5_hex';
                        
                        #Cycle ist unerheblich
                        $plugin_info{$plugname.'_cycle'} = 86400;
                        
                        # Definitionen
                        my $klingel_ga = "8/1/0";
                        my $fritz_ip = '10.10.1.254';
                        
                        #Benutzer muss in der Web-Oberfläche der Fritzbox angelegt werden
                        my $fritz_user  = 'DEINUSERNAME';
                        my $fritz_pw  = 'DEINPASSWORD';
                        
                        #abgehende Rufnummer, funktioniert bei mir aber (noch) nicht!!!
                        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  
                        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->post('http://'.$fritz_ip.'/cgi-bin/webcm',
                                    [
                                      'getpage'    => '../html/login_sid.xml',
                                      'sid'    => $sid,
                                      'telcfg:settings/UseClickToDial' => 1,
                                      'telcfg:command/Dial'            => $call_to,
                                      'telcfg:settings/DialPort'       => $call_from,
                                    ],
                                  );
                                      
                                  print "Klingel betätigt und Ruf abgesetzt"
                            }
                        }

                        Kommentar


                          #72
                          Danke für die Antwort...

                          hatte noch eine alte Version in der noch keine Benutzer sondern nur ein Passwort berücksichtigt war...

                          neuen Benutzer angelegt und aktuelles Script verwendet... schon gehts wieder...

                          Danke


                          PS: Welche Rechte müssen in der FritzBox mindestens gesetzt sein um? Habe nämlich einen seperaten Benutzer angelegt und würde nur die notwendigen Rechte vergeben...
                          PPS: Wollte ein sicheres Passwort verwenden, jedoch scheitert laut Fritz!Box-Log die Anmeldung am Kennwort... Welche Sonderzeichen erlaubt denn das Script bzw. welche machen hier Probleme? Die Box erlaubt laut FAQ folgende: _ - ! " # $ % & ' ( ) * + , . / : ; < = > ? @ [ \ ] ^ ` { | } ~

                          Edit: Sonderzeichen funktionieren alle, hatte nur die Option "Anmeldung mit FRITZ!Box-Benutzernamen und Kennwort" nicht aktiviert...
                          cu Yfkt5A
                          DALI(ABB DG/S1.1), KODI Odroid, TrueNAS, Zehnder ComfoAir 200 L Luxe
                          microk8s-Cluster: HomeAssistant, MusicAssistant, mosquitto, TVHeadend, jellyfin

                          Kommentar


                            #73
                            Hab das auf meiner 7390 auch mit der neusten Plugin-Version problemlos am laufen, auch nach dem Sicherheits-Update von AVM.

                            Der Anmelde-Prozess scheint sich also nicht geändert zu haben :-)

                            Kommentar


                              #74
                              Version für die FB7390

                              Kann mir vielleicht jemand das akuelle Plugin für die FB7390 mit Softwareversion 6.03 posten?
                              Bekomme die Klingel mit keiner Version zum laufen, werder mit der SVN noch mit den geposteten Versionen(natürlich angepasst)

                              Vielen Dank

                              Kommentar


                                #75
                                Zitat von nEiMi Beitrag anzeigen
                                PS: Welche Rechte müssen in der FritzBox mindestens gesetzt sein um? Habe nämlich einen seperaten Benutzer angelegt und würde nur die notwendigen Rechte vergeben...
                                Was sind denn nun die notwendigen Rechte?

                                Edit:
                                Funktioniert die zuletzt gepostete Version des Plugins überhaupt noch wie angedacht, oder hat sich da mittlerweile von Firmwareseite etwas geändert?
                                Gruß -mfd-
                                KNX-UF-IconSet since 2011

                                Kommentar

                                Lädt...
                                X