Hallo
Habe heute eine Fritzbox 7270 bekommen und würde diese gerne in IPS einbinden. Habe schon hier im Forum gesucht und tolle Scripte gefunden.
Was muß ich für Instanzen anlegen, damit ich die Fritzbox auslesen kann?
Gruß computerpap
Hallo
Habe heute eine Fritzbox 7270 bekommen und würde diese gerne in IPS einbinden. Habe schon hier im Forum gesucht und tolle Scripte gefunden.
Was muß ich für Instanzen anlegen, damit ich die Fritzbox auslesen kann?
Gruß computerpap
Den Beitrag hatte ich gelesen, aber irgendwie hagelt es beim Ausführen des Scriptes Fehlermeldungen. Das Paßwort habe ich eingetragen, und eine Variable mit Profil ~String habe ich auch erstellt.
Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Space required after the Public Identifier in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 18
Warning: simplexml_load_string() [function.simplexml-load-string]: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 18
Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 18
Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : SystemLiteral " or ' expected in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 18
Warning: simplexml_load_string() [function.simplexml-load-string]: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 18
Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 18
Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : SYSTEM or PUBLIC, the URI is missing in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 18
Warning: simplexml_load_string() [function.simplexml-load-string]: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 18
Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 18
Notice: Trying to get property of non-object in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 21
Notice: Trying to get property of non-object in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 27
Notice: Undefined variable: IPS_VALUE in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 39
Notice: Undefined variable: SID in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 44
Notice: Undefined variable: SID in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 47
Gruß computerpap
Wenn ich statt
$fritzbox_ip = 'fritz.box';
folgendes eingebe,
$fritzbox_ip = '192.168.0.1';
dann kommen nur noch diese Fehlermeldungen
Notice: Undefined variable: IPS_VALUE in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 39
Notice: Undefined variable: SID in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 44
Notice: Undefined variable: SID in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 47
wie wäre es denn, wenn Du die benötigten extension mal einbindest. Dann sind auch die Fehlermeldungen weg.
Ich habe php_curl.dll, php_http_ips.dll und php_mbstring.dll nach ext kopiert und in der php.ini aufgerufen. Dienst neugestartet.
Welche extension muß denn noch eingebunden werden?
Gruß computerpap
Ich glaube die php_http_ips.dll brauchst Du nicht nimm mal die php_http.dll und ich glaube noch die php_xmlrpc.dll
dll.rar (219 KB)
Das Kernproblem ist wohl eher, dass du das Script „von Hand“ startest. Dafür ist es nicht vorgesehen, da IPS_VALUE „beim triggern“ gefüllt wird.
Hallo
Das Script wird alle 300s von einem Timer gestartet.
Hier mal ein Auszug aus meiner php.ini:
```php
max_execution_time=30
register_globals=on
error_reporting=E_ALL
extension_dir=D:\Programme\IP-Symcon\ext
extension = ixed.5.3ts.dll
extension = php_gd2.dll
extension = php_gettext.dll
extension = php_mysql.dll
extension = php_soap.dll
extension = php_sqlite.dll
extension = php_curl.dll
extension = php_http.dll
extension = php_http_ips.dll
extension = php_mbstring.dll
extension = php_xmlrpc.dll
Trotzdem bekomme ich noch die 3 Fehlermeldungen von oben.
Hab mal noch ein Bild von meinem Objektbaum angehängt.
Gruß computerpap
Liest Du den Anrufbeantworter alle 300sek aus
Verstehe ich jetzt nicht, für was, die Variable wird gesetzt oder nicht!
Außerdem musst Du wenn Du tiggerst die Variable welche die Daten für $IPS_VALUE enthält triggern.
hier das Script mit Statusrückmeldung des Anrufbeantworters.
Er wird über das Webfront Ein oder Ausgeschaltet. Folglich steht in deinem Variablenprofil 1 oder 0, true oder false, welches die Daten für $IPS_VALUE sind.
<?
if ($IPS_SENDER == "WebFront")
{
$fritzbox_ip = 'fritz.box';
$fritzgui = 'http://fritz.box/cgi-bin/webcm';
$fritzseite = '../html/de/menus/menu2.html';
$password = 'xxxxxxx';
$ein = '1';
$aus = '0';
$ch = curl_init('http://' . $fritzbox_ip . '/cgi-bin/webcm?getpage=../html/login_sid.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);
curl_close($ch);
$session_status_simplexml = simplexml_load_string($login);
//print_r($session_status_simplexml);
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;
}
}
if ($IPS_VALUE)
{
$settam = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'tam:settings/TAM0/Active' => $ein));
}
else
{
$settam = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'tam:settings/TAM0/Active' => $aus));
}
$checksetting = array('getpage' => $fritzseite, 'var:menu' => 'home', 'var:pagename' => 'fondevices');
$sendcheck = http_post_fields($fritzgui, $checksetting);
preg_match('@name="tam:settings/TAM0/Active" value="([10])"@i', $sendcheck, $matches);
if (isset($matches[1]) && $matches[1] == 1)
{
SetValue(12388 /*[Fritzbox\Anrufbeantworter\Rainer\Anrufbeantworter1]*/, 1);
}
else
{
SetValue(12388 /*[Fritzbox\Anrufbeantworter\Rainer\Anrufbeantworter1]*/, 0);
}
$logout = array('getpage' => $fritzseite, 'sid' => $SID, 'security:command/logout' => 'logout');
$sendlogout = http_post_fields($fritzgui, $logout);
}
?>
Liest Du den Anrufbeantworter alle 300sek aus
Das ist nur für Testzwecke, wenn alles funktioniert, würde ich den Anrufbeantworter 2x am Tag auslesen lassen.
Das Script läuft jetzt ohne Fehler.
Das mit den Variablen hab ich noch nicht verstanden, könnte mir jemand mal ein Bild von seinen Objektbaum zeigen?
Gruß computerpap
Du hast es immer noch nicht verstanden.
Du brauchst keinen Timer um den Anrufbeantworter auszulesen.
Dieser wird geschaltet und per Rückmeldung siehst Du ob ein oder aus!!!
Was hast Du mit den Variablen nicht verstanden.
Sorry wenn ich es nicht gleich kapiere, ich bin weder IPS- noch PHP-Experte,
nur mal zu meiner Verteidigung.
Also ich hab es jetzt genauso gemacht wie bei Rainer, wenn ich in Webfront den Anrufbeantworter einschalte kommt:
„Fehler: Login fehlgeschlagen“
Paßwort und IP sind aber definitiv richtig.
Gruß computerpap
im Script ist ein auskommentiertes print_r. Mach mal die 2 // davor weg, speichern und im Webfront mal schalten. es sollte dann die Fehlerkonsole aufgehen. Poste mal was da steht.
Das wird ausgegeben
SimpleXMLElement Object
(
[iswriteaccess] => 0
[SID] => 0000000000000000
Challenge => ade505b7
)
Fehler: Login fehlgeschlagen
Gruß computerpap
passt.
Sicher das dein Passwort stimmt.
ersetzt das mal und poste das Ergebnis.
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);
print_r($login);
ok,
austauschen und Ergebnis posten.
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);
print_r($login);
$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];
print_r($SID);
}
er schreibt dein Login nicht.
warum hast Du die php_http_ips.dll nicht eingebunden !