Fritzbox Telefon klingeln lassen

Moin zusammen,

ich hatte bis zum letzten FW Update nach längerer Zeit meiner Fritzbox 7270 immer die Möglichkeit, bestimmte Telefon klingeln zu lassen.
Ich meine mal gelesen zu haben, das sich an der Anmeldeprozedur an der Fritzbox mit neueren FWs etwas geändert hatte, kann aber leider in den vielen Beispielen nicht genau erkennen, um welche Änderung es sich dort handelte.

Kann da mal einer über meinen „alten“ Code drüberschauen und mir einen Tip geben?

    $fritzbox_ip = '192.168.xxx.x';
    $fritzgui    = 'http://192.168.xxx.x/cgi-bin/webcm';
    $fritzseite  = '../html/de/menus/menu2.html';
    $password    = 'xxxxx';

    $ch = curl_init('http://' . $fritzbox_ip . '/cgi-bin/webcm?getpage=../html/login_sid.xml');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $login = curl_exec($ch);
    $session_status_simplexml = simplexml_load_string($login);

    if ($session_status_simplexml->iswriteaccess == 1)
    {
       $SID = $session_status_simplexml->SID;
    }
    else
    {
       $challenge = $session_status_simplexml->Challenge;
       $response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $password, "UCS-2LE", "UTF-8"));
        curl_setopt($ch, CURLOPT_POSTFIELDS, "login:command/response={$response}&getpage=../html/de/menus/menu2.html");
        preg_match('/name="sid" value="([0-9a-f]*)"/', curl_exec($ch), $matches);
       if(isset($matches[1]) && $matches[1] != '0000000000000000')
       {
          $SID = $matches[1];
       }
       else
       {
          echo "Fehler: Login fehlgeschlagen";
          return;
        }
        curl_setopt($ch, CURLOPT_POSTFIELDS, "sid={$SID}&telcfg:command/Dial=**612"); // interne Nummer eintragen!
        curl_exec($ch);

//warten zum Auflegen nach 2x klingeln
			IPS_Sleep(8000);
 			curl_setopt($ch, CURLOPT_POSTFIELDS, "sid={$SID}&telcfg:command/Hangup");
			curl_exec($ch);

        curl_close($ch);
    }

Angemeckert wird die Zeile

 $session_status_simplexml = simplexml_load_string($login);

mit:

Warning:  simplexml_load_string(): Entity: line 8: parser error : Opening and ending tag mismatch: meta line 7 and head in C:\IPS2\scripts\35586.ips.php on line 41

Warning:  simplexml_load_string(): </head> in C:\IPS2\scripts\35586.ips.php on line 41

Warning:  simplexml_load_string():        ^ in C:\IPS2\scripts\35586.ips.php on line 41

Sieht da jemand auf die schnelle, was da nicht mehr korrekt ist?

Danke u. Grüße,
Doc

Hallo,

Es könnte so gehen hier:



// Step 2 - Login in die Fritzbox ab Version xxx.05.5x / xxx.06.xx mit Benutzername

$fritzbox_Adresse = 'fritz.box';

$fritzbox_Username = '';

$fritzbox_Password = '0000';

$ch = curl_init('http://' . $fritzbox_Adresse . '/login_sid.lua');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);

$session_status_simplexml = simplexml_load_string($login);


if ($session_status_simplexml->SID != '0000000000000000')
{
   $SID = $session_status_simplexml->SID;
}
else
{
   $challenge = $session_status_simplexml->Challenge;
   $response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $fritzbox_Password, "UCS-2LE", "UTF-8"));

   curl_setopt($ch, CURLOPT_POSTFIELDS, "response={$response}&page=/login_sid.lua&username={$fritzbox_Username}");
   $sendlogin = curl_exec($ch);

   $session_status_simplexml = simplexml_load_string($sendlogin);

   if ($session_status_simplexml->SID != '0000000000000000')
   {
   $SID = $session_status_simplexml->SID;
   }
   else
   {
      echo "Fehler: Login fehlgeschlagen";
      return;
    }
}
curl_close($ch);

//---


if ($SID != '0000000000000000') 
{ 
  $ch = curl_init('http://' . $fritzbox_Adresse . '/cgi-bin/webcm');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_exec($ch);

    curl_setopt($ch, CURLOPT_POSTFIELDS, "sid={$SID}&getpage=&telcfg:settings/UseClickToDial=1&telcfg:settings/DialPort=50&telcfg:command/Dial=**612"); // interne Nummer eintragen!
    curl_exec($ch);

//warten zum Auflegen nach 2x klingeln
    IPS_Sleep(8000);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "sid={$SID}&getpage=&telcfg:settings/UseClickToDial=1&telcfg:settings/DialPort=50&telcfg:command/Hangup");
    curl_exec($ch);

  curl_close($ch);

}


es gibt aber keine Garantie dass es geht von mir.

Gruß Erwin :wink:

Hallo Erwin,

das war es leider nicht.
Da kommt nur das Echo > „Fehler: Login fehlgeschlagen“ zurück.

Da ich das ursprüngliche Script auch nicht geschrieben habe ist es etwas schwer, da durchzusteigen.

Oder liegt das am Usernamen?
Wie ist denn der bei der Fritzbox, admin u. root habe ich probiert.
Wüsste auch nicht, das da mal einer eingetragen war?

Danke u. Grüße,
Doc

Sorry, habe den Code geändert, da hatte
wohl die Code Formatierung für PHP hier ein paar { Zeichen verschluckt.

Den Benutzernamen brauchst du nicht angeben wenn die Box keinen hat,
und wenn ignoriert die Box das sowieso beim Login nur mit Kennwort.

Hallo Erwin,

ich danke dir, das war’s.

Ich muss am WE mal sehen, was da jetzt genau geändert wurde.
Das mit dem klingeln war nur ein Teil des Scriptes.

Auf jeden Fall verpasst mein Frau das Türklingeln jetzt im Garten schon mal nicht mehr :stuck_out_tongue:

Danke u. viele Grüße,
Doc

Jetzt muss ich doch noch mal nach Jahren meinen eigenen alten Thread rauskramen :wink:

Nach einem Hausneubau muss ich nun mit meinem ganzen IPS Projekt noch einmal neu starten.
KNX ist hier komplett mit eingezogen und ich werde noch mal ganz neu beginnen.

Ich bin gerade an dem Punkt angekommen, meine Türklingel zu visualisieren und würde nun gerne, das auch wieder die Telefone an meiner FB7490 klingeln.

Die Klingel habe ich schon auf dem Bus, bin mir aber nicht mehr so sicher, ob ich das mit der aktuellen Fritzbox noch realisieren kann.
Bevor ich mir hier nochmal extra HW wie „Klingel Paul“ o.ä. zulege hier mal die Frage in die Runde, ob das nicht ggf. auch direkt mir der Fritzbox geht.

Hat das ggf. jemand am laufen?

Danke u. viele Grüße,
Doc

Grundsätzlich läuft das ohne Probleme, ich müsste mal suchen, was ich im Script ausführe.

Sollte über das VOIP Modul seit IPS5.2 gehen.

Ja das wäre echt super, ich suche mir hier schon 'nen Wolf …

Habe gelesen, das man das mit Asterisk auf einem Pi auch ausführen kann.
PI’s laufen hier eh schon in der UV, das könnte man auch machen.
Aber ich denke, das sollte doch aus einem Script auch zu erledigen sein?

Also wenn das möglich wäre, würde ich doch glatt auf die 5.2 updaten.
Hast du da ein Beispiel oder Code-Schnipsel für mich?

Danke u. viele Grüße,
Doc

Hat paresy da gepostet:
IP-Symcon mit VoIP/SIP Support

Habe es gerade schon mit dem VoIP Modul umgesetzt.

Das war ja einfach :smiley:

Stand nur vor dem Problem, wie alle Telefon klingeln lassen, aber das konnte man ja gut in der Fritzbox als Türsprechstelle konfigurieren.
Damit hat man dann alle Möglichkeiten.

Danke noch mal für den Tip mit dem VoIP.

Viele Grüße,
Doc

Moin Doc,

sorry, hat etwas gedauert, kopieren am Tablet funktioniert leider nicht. Die Console möchte da immer mit einem PopUp-Menü behilflich sein, aber markieren und kopieren ist dadurch nicht mehr möglich.


<?
// Step 2 - Login in die Fritzbox ab Version xxx.05.5x / xxx.06.xx mit Benutzername
$fritzbox = '192.168.178.1';
$password = 'xxx';
$username = 'dial';
$debug = true;

if ($debug)
  	IPS_LogMessage(IPS_GetName($_IPS['SELF']), "Haustür Klingeln an FritzBox weiterleiten");

$client = new SoapClient(
    null,
    array(
        'location'   => 'http://'.$fritzbox.':49000/upnp/control/x_voip',
        'uri'        => 'urn:dslforum-org:service:X_VoIP:1',
        'noroot'     => True,
        'login'      => $username,
        'password'   => $password,
        'trace'      => True,
        'exceptions' => 0
    )
);

$action = 'X_AVM-DE_DialNumber';
$argument = 'NewX_AVM-DE_PhoneNumber';

$Dial = '**9'; // **9 alle Geräte oder bestimmte interne Nummer
$direction_in_value = $Dial;

$result = $client->{$action}(new SoapParam($direction_in_value, $argument));

if(is_soap_fault($result))
{
  	if ($debug) {
     	IPS_LogMessage(IPS_GetName($_IPS['SELF']), "Fehlercode: ".$result->faultcode."| Fehlerstring: ".$result->faultstring);
		var_dump ($result);
	}
}

Hallo Ralf,

danke dir.

Habe heute mal die 5.2 installiert und das nun über VoIP gelöst.
Ich muss schon sagen, da hat sich in den letzten Jahren ja einiges bei IPS getan.

Danke u. viele Grüße,
Doc

Moin Doc,

ich spiele bis jetzt nur mal ab und an mit dem VOIP, und damit lassen sich schnell Dinge probieren.
Ich lasse mir Meldungen in der IOS-App ausgeben, was mir reicht.

Hallo,

@Ralf: welche Box mit welcher Firmware nutzt Du für das Script in Post#12? Ich nutze es auch, aber seit einem der letzten (automatischen) Updates meiner FB 7490 (FW 7.12) kommt das Klingeln nicht mehr an.

Grüße, Gerhard

Nachtrag: ich habe das Telefon, welches klingeln soll, direkt eingetragen. Nun funktioniert es. Der Umweg über ein IP-Telefon scheint nicht mehr möglich.

Hallo zusammen,

ich blicke mit diesem VOIP noch nicht so recht durch. Evtl. kann mir jemand von Euch helfen.

Meine Idee ist die gleiche wie „Doctor Snuggels“ sie hatte. Türklingelknopf ist über KNX und IPS eingebunden. VOIP ist angelegt, und das Beispielscript funktioniert auch. Aber wie bekomme ich es scripttechnisch hin, dass die Telefone klingeln?

Auswertung des Klingelknopfes in dem Script ist soweit klar…, aber die Telefone klingeln lassen?

Außerdem wollte ich gerne die nichtangenommenen Anrufe in IPS zählen. Das müsste mit dem VOIP Modul doch auch funktionieren, oder? Das Problem hier ist, dass das VOIP Modul ja immer gleich den Anruf annimmt…

Es wäre nett wenn „Doctor Snuggels“ seine Umsetzung posten würde…

Grüße, Andy

Telefone klingeln lassen habe ich bei mir so gelöst:

Auf der Fritzbox ein neues Telefon einrichten (Typ: IP-Telefon). Zugangsdaten notieren und in der VOIP-Instanz eingeben.

Script erstellen:


<?php

    $id = VoIP_Connect(57495, "**9"); //**9 alle internen Telefone anrufen
    for($i = 0; $i < 15; $i++) { //nach 15 Sekunden auflegen
        IPS_Sleep(1000);
      }
    VoIP_Disconnect(57495, $id); //ID der VOIP-Instanz

VOIP-Instanz erstellen. Domain = IP der Fritzbox. Zugangsdaten vom eben eingerichteten IP-Telefon eingeben

Damit das VOIP-Modul nicht alle ankommenden Anrufe entgegen nimmt hab ich in der VOIP-Instanz bei „Erlaubte Anrufer“ irgendeine erfundene Nummer eingetragen. Somit nimmt IPS keine Anrufe entgegen… Er soll ja nur einen internen Rundruf machen…

Das Script über ein Ereignis ausführen wenn der Klingeltaster gedrückt wird.

Viele Grüße
Stephan

Hallo Stephan,

genau das hatte ich gesucht. Auch gefunden im Beispielscript von paresy, aber erst jetzt wird es klarer dank Dir.
Manchmal sieht man den Wald vor lauter Bäumen nicht…

Jetzt habe ich nur noch ein Problem, nämlich das ich mich nach Ausführung des Scriptes in einer Endlosschleife befinde und das Telefon nun ständig klingelt… :banghead: Aber dieser Fehler wird wohl innerhalb IPS liegen. Das schaue ich mir dann morgen an.

Vielen Dank und Grüße
Andy

Ja, hab auch etwas gebraucht bis ich es verstanden hatte. Komisch das bei dir die Telefone weiterklingen. Eigentlich legt IPS ja mit dem letzten Befehl wieder auf. IDS alle angepasst?

Gruß Stephan

Welche IDs meinst Du? Die $id aus dem script?

Gruß Andy