php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Fritz SOAP Abfrage http get an Device


 
Thorsten1984
18-10-2018, 15:07 
 
Hallo Leute

Ich habe hier eine Hausautomatisationslösung
Wenn ich zuhause bin soll über die Fritzbox (SOAP)abgefagt werden ob ich im Wifi eingeloggt bin und diesen Wert entsprechend über http GET an einen Server weitergeleitet werden.

Das script soll fertig funktionieren. Auf meinem Raspberry ist das leider nicht der Fall.

Die SOAP Abfrage funktioniert. Nur der html post will nicht gesetzt werden.

Habe jetzt mal nur den HTML Code kopiert und in ein neues script eingefügt und erfolgreich getetstet.

- Raspberry konfiguration stimmt
- Apache error log ist leer.

Demnach kann es ja nur am script liegen oder?

Kennt Ihr jemanden dem ich das in Auftrag geben kann?






<?php



// Anwesenheitserkennung:

// https://www.schlaue-huette.de/apis-co/fritz-tr064/anwesenheitserkennung-mit-der-fritzbox/



$fritzbox_ip = "192.168.178.1";

$tr64_port = "49000";

$Host1 = 'iPhone'; //Dies muss der exakte Hostname sein, der in der FritzBox aufgeführt wird. Alternativ kann man auch IP oder MAC Adresse nutzen. Dazu muss jedoch die SOAP Abfrage geändert werden.

$Host2 = 'iPhone'; //Dies muss der exakte Hostname sein, der in der FritzBox aufgeführt wird. Alternativ kann man auch IP oder MAC Adresse nutzen. Dazu muss jedoch die SOAP Abfrage geändert werden.

$Lightmanager_ip = '192.168.178.32';

$Szene_key_marker_an = 41; // Die Szenen Nummer bzw. der Key lassen sich ganz einfach unter http://ipdeslightmanagers/config.xml herausfinden

$Szene_key_marker_aus = 49; // Die Szenen Nummer bzw. der Key lassen sich ganz einfach unter http://ipdeslightmanagers/config.xml herausfinden



// Abfrage der params.htm auf dem Lightmanager, ob der Status Anwesenheit bereits gesetzt ist:



$context3 = stream_context_create(array('http' => array('header'=>'Connection: close\r\n')));

$content3 = file_get_contents("http://" . $Lightmanager_ip . "/params.htm",false,$context3);



// !!! Achtung, ggf. müsst ihr die Stelle, an der der Marker für die Anwesenheit in der params.htm gesetzt ist noch anpassen. Bei mir ist der Anwesenheits-Marker an 13. Stelle

$anwesendinfo = substr($content3, 42, -80);



// Getestet mit FritzOS 6.60



// SOAP Abfrage:

$client = new SoapClient(null,array( 'location' => "http://" . $fritzbox_ip . ":" . $tr64_port . "/upnp/control/hosts",

'uri' => "urn:dslforum-org:service:Hosts:1",

'soapaction' => "urn:dslforum-org:service:Hosts:1#GetSpecificHostEntry",

'noroot' => False

));



$NumberOfHosts = $client->GetHostNumberOfEntries();



// Abfrage welcher Host online ist:

if (!(is_soap_fault($NumberOfHosts)))

{

for ($i=0;$i<$NumberOfHosts;$i++)

{

$Host = $client->GetGenericHostEntry(new SoapParam($i,'NewIndex'));

if ($Host['NewHostName'] == $Host1)

{

if(($Host['NewActive'] == 1))

{

$Host1anwesend = 1;

}

else

{

$Host1anwesend = 0;

}

}

}

}

if (!(is_soap_fault($NumberOfHosts)))

{

for ($i=0;$i<$NumberOfHosts;$i++)

{

$Host = $client->GetGenericHostEntry(new SoapParam($i,'NewIndex'));

if ($Host['NewHostName'] == $Host2)

{

if(($Host['NewActive'] == 1))

{

$Host2anwesend = 1;

}

else

{

$Host2anwesend = 0;

}

}

}

}



// Wenn einer der beiden Hosts anwesend ist, wird die Variable host1_marker_set auf 1 gesetzt.



if ($Host1anwesend == 1 OR $Host2anwesend == 1)

{

$host1_marker_set = 1;

}

else

{

$host1_marker_set = 0;

}



// Wenn jemand angemeldet ist und der aktuelle Marker in der params.htm auf aus steht, wird eine Szene aufgerufen, die den Marker im Lightmanager auf ein setzt.



if ($host1_marker_set == '1' AND $anwesendinfo == '0')

{

$context = stream_context_create(array('http' => array('header'=>'Connection: close\r\n')));

$host1_marker = file_get_contents("http://" . $Lightmanager_ip . "/control?key=41". $Szene_key_marker_an . "",false,$context); // Hinter dem key= einfach die Nummer der Szene angeben, die den Marker auf an setzt.

}

// Wenn niemand mehr angemeldet ist und der aktuelle Marker in der params.htm auf ein steht, wird eine Szene aufgerufen, die den Marker im Lightmanager auf aus setzt.



elseif ($host1_marker_set == '0' AND $anwesendinfo == '1')

{

$context2 = stream_context_create(array('http' => array('header'=>'Connection: close\r\n')));

$host2_marker = file_get_contents("http://" . $Lightmanager_ip . "/control?key=49". $Szene_key_marker_aus . "",false,$context2); // Hinter dem key= einfach die Nummer der Szene angeben, die den Marker auf aus setzt.

}





?>


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:33 Uhr.