Anrufname und Radiolautstärke mit Fritzbox

Zeig mal dein ganzes Script. Du hast doch wieder irgendwas auseinander gepflügt. $book steht mit 1000%iger Sicherheit in meinem Script.

Ps. hier läuft es einwandfrei.:smiley:

<?

if ($IPS_SENDER == "Variable")
{
    $fritzbox_ip = '192.168.1.1';
    $fritzgui    = 'http://fritz.box/cgi-bin/webcm';
    $fritzCfg    = 'http://fritz.box/cgi-bin/firmwarecfg';
    $fritzseite  = '../html/de/menus/menu2.html';
    $telefonbuch = 0; // Auswahl des Telefonbuches
    $password    = '123456';

    $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"));
       $login = array('getpage' => $fritzseite, 'login:command/response' => $response);
       $sendlogin = http_post_fields($fritzgui, $login);
       preg_match('@<input type="hidden" name="sid" value="([A-Fa-f0-9]{16})" id="uiPostSid">@i', $sendlogin, $matches);
       if (isset($matches[1]) && $matches[1] != '0000000000000000')
       {
          $SID = $matches[1];
       }
       else
       {
          echo "Fehler: Login fehlgeschlagen";
          return;
        }
    }

    curl_setopt($ch, CURLOPT_URL, $fritzCfg);
    curl_setopt($ch, CURLOPT_POSTFIELDS, array('sid' => $SID, 'PhonebookId' => $telefonbuch, 'PhonebookExportName' => 'Telefonbuch', 'PhonebookExport' => ""));
    $book = curl_exec($ch);
   curl_close($ch);

    $logout = array('getpage' => $fritzseite, 'sid' => $SID, 'security:command/logout' => 'logout');
    $sendlogout = http_post_fields($fritzgui, $logout);
}

$xml = simplexml_load_string($book);

foreach($xml->phonebook->contact as $nummer => $value)
{
    $nummern = $value->telephony->number."
";
    $namen = $value->person->realName."
";
    $daten[] = array(0 => trim($nummern), 1 => trim($namen));

}

$rufnummer = GetValue(34020 /*[Fritzbox Anrufe\FRITZ!Box\Verbindung 0 - Nummer - Extern]*/); // Nummer vom Anrufer, Variable z.B. mit GetValue und Trigger auf das Script

for($i=0; $i<count($daten); $i++)
{
    if($daten[$i][0] == $rufnummer)
    {
        SetValue(24396 /*[Fritzbox Anrufe\Nummernsuche\Anrufname]*/, $daten[$i][1]); // Ausgabe des Namen, z.B in Variable schreiben mit SetValue(xxxxx, $daten[$i][1]);
    }
}

?>

Ich hab dir dein Script angepasst. Das Script wird über die Variable der rufnummer getriggert und nicht über Execute!

Hast Du den Trigger gesetzt ? Auf Aktualisierung.

Zieh dir dein Script noch mal runter. Sollte jetzt auch bei dir gehen.!

ja, Trigger ist gesetzt.

Jetzt kommt folgendes

Notice:  Undefined variable: book in C:\IP-Symcon\scripts\25389.ips.php on line 48

Notice:  Trying to get property of non-object in C:\IP-Symcon\scripts\25389.ips.php on line 50

Notice:  Trying to get property of non-object in C:\IP-Symcon\scripts\25389.ips.php on line 50

Warning:  Invalid argument supplied for foreach() in C:\IP-Symcon\scripts\25389.ips.php on line 50

Notice:  Undefined variable: daten in C:\IP-Symcon\scripts\25389.ips.php on line 60

Habe Firmware-Version 84.04.88

Das steht jetzt bei dir als Anfang im Script?

if ($IPS_SENDER == "Variable")
{

Du darfst das Script nicht von Hand ausführen…!!!

ja, denn…

Zieh dir dein Script noch mal runter. Sollte jetzt auch bei dir gehen.!

auch wenn ichs nicht von Hand ausführe - der letzte Eintrag des Tel. Buches

die Variable blättert mir das ganze Tel. Buch durch und bleibt beim letzten Eintrag stehen.

Wird denn das Script getriggert. Mach das Script auf, ruf an und sieh über der Scriptausgabe ob das Script lief.

Die Variable der Rufnummer ist aber vom Typ String, sonst geht es nicht.

ja, es wird.

und…ist sie vom Typ String?

ja, ist Typ String

Hast Du Teamviewer, dann würd ich mich mal drauf schalten.

Nur zur Info, das Script läuft bei Jürg, muss allerdings an seine Bedürfnisse angepasst werden. :wink:

Vielen Dank für das Spielzeug Rainer :smiley:

wen es kein Geheimnis ist, wie habt ihr das Problem mit dem durchlaufen des Telefonbuches gelöst? Das Script läuft, es wird aber ein falscher Name zu geordnet. Dieser wird auch an in die Variable übergeben und bleibt zugewiesen.

Das Problem tritt nur auf, wenn mehrere Nummern einer Person zugeordnet sind. Dieses habe ich bei mir nicht.

Ich schreib das Script grad um. Gib mir noch 10 Minuten.:wink:

So, ich hoffe, dass es jetzt überall läuft.

Passt eure Änderungen im Script wieder an.

Bitte berichten ob es einwandfrei läuft.

<?

if($IPS_SENDER == "Variable")
{
    $fritzbox_ip = 'fritz.box';
    $fritzgui    = 'http://fritz.box/cgi-bin/webcm';
    $fritzCfg    = 'http://fritz.box/cgi-bin/firmwarecfg';
    $fritzseite  = '../html/de/menus/menu2.html';
    $telefonbuch = 0; // Auswahl des Telefonbuches
    $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"));
       $login = array('getpage' => $fritzseite, 'login:command/response' => $response);
       $sendlogin = http_post_fields($fritzgui, $login);
       preg_match('@<input type="hidden" name="sid" value="([A-Fa-f0-9]{16})" id="uiPostSid">@i', $sendlogin, $matches);
       if (isset($matches[1]) && $matches[1] != '0000000000000000')
       {
          $SID = $matches[1];
       }
       else
       {
          echo "Fehler: Login fehlgeschlagen";
          return;
        }
    }

    curl_setopt($ch, CURLOPT_URL, $fritzCfg);
    curl_setopt($ch, CURLOPT_POSTFIELDS, array('sid' => $SID, 'PhonebookId' => $telefonbuch, 'PhonebookExportName' => 'Telefonbuch', 'PhonebookExport' => ""));
    $book = curl_exec($ch);
   curl_close($ch);

    $logout = array('getpage' => $fritzseite, 'sid' => $SID, 'security:command/logout' => 'logout');
    $sendlogout = http_post_fields($fritzgui, $logout);
}

$xml = simplexml_load_string($book);

foreach($xml->phonebook->contact as $nummer => $value)
{
    $nummer0 = $value->telephony->number[0]."
";
   $nummer1 = $value->telephony->number[1]."
";
   $nummer2 = $value->telephony->number[2]."
";
    $namen = $value->person->realName."
";
    $daten[] = array(0 => trim($nummer0), 1 => trim($nummer1), 2 => trim($nummer2), 3 => trim($namen));
}

$rufnummer = 'xxxxxxxx'; // Nummer vom Anrufer, Variable z.B. mit GetValue und Trigger auf das Script

for($i=0; $i<count($daten); $i++)
{
    if(($daten[$i][0] == $rufnummer) || ($daten[$i][1] == $rufnummer) || ($daten[$i][2] == $rufnummer))
    {
        echo utf8_decode($daten[$i][3]); // Ausgabe des Namen, z.B in Variable schreiben mit SetValue(xxxxx, utf8_decode($daten[$i][3]));
    }
}

?>

10 Minuten :eek: ich hätte 10 Stunden gebraucht:(

Der Name wird jetzt richtig zugeordnet. Allerdings nach dem abnehmen oder ablehnen läuft das Telefonbuch weiter bis zum letzten Eintrag.

Das liegt dann daran, wie Du triggerts.

Hallo Rainer

absolut perfekt. :):):slight_smile:
Hab die Nummern noch mal umgestellt zum testen (0041 voran & „Inländisch“) und es tut, was es soll. Besten Dank und denk dann noch daran, was in der Mail steht :wink:

hmm
hab ich jetzt was auf den Augen? Hab jetzt noch mit dem Telefon meiner Frau probiert (Vorführung=misslungen) Set Value ist Zeile 65

$rufnummer = GetValue(34020 /*[Fritzbox Anrufe\FRITZ!Box\Verbindung 0 - Nummer - Extern]*/); // Nummer vom Anrufer, Variable z.B. mit GetValue und Trigger auf das Script

for($i=0; $i<count($daten); $i++)
{
    if(($daten[$i][0] == $rufnummer) || ($daten[$i][1] == $rufnummer) || ($daten[$i][2] == $rufnummer))
    {
        SetValue(24396 /*[Fritzbox Anrufe\Nummernsuche\Anrufname]*/, utf8_decode($daten[$i][3]);
    }

und raus kommt dieser Fehler

Parse error: syntax error, unexpected ‚;‘ in [Fritzbox Anrufe\Nummernsuche\Anrufname] on line 65