Fritz SOAP Abfrage http get an Device

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Fritz SOAP Abfrage http get an Device

    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-Code:
    <?php



    // Anwesenheitserkennung:

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



    $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 [url]http://ipdeslightmanagers/config.xml[/url] herausfinden

    $Szene_key_marker_aus 49// Die Szenen Nummer bzw. der Key lassen sich ganz einfach unter [url]http://ipdeslightmanagers/config.xml[/url] 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($content342, -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 == 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.

    }





    ?>
    Zuletzt geändert von goth; 23.10.2018, 10:36.
Lädt...
X