Ankündigung

Einklappen
Keine Ankündigung bisher.

Smarthome TR-064 FritzBox - Http Lightmanager

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

  • Smarthome TR-064 FritzBox - Http Lightmanager

    Hallo Leute.

    Ich bin absoluter Anfänger mit PHP.
    Nun möchte ich Zuhause eine Anwesenheitserkennung (Smart Home) auf meinem Raspberry einrichten.

    Ich habe jemanden gefunden der sich das script hierfür schon programmiert hat. Ich habe bereits angefragt und bekomme aber leider keine Unterstützung von Ihm.

    Das script checkt über die TR-064 Schnittstelle meiner Fritz Box ob ich mit meinem Smartphone im W-Lan eingeloggt bin oder nicht. Wenn ja wird über http ein Befehl für Marker AN/AUS auf meinem Smart Home Device (Lightmanager) gesetzt.

    Einzelne Elemente aus dem Code funktionieren. Jedoch im Verbund passiert garnichts. Die Fritzbox abfrage funktioniert. Und den http Befehl habe ich im Raspberry im Browser getestet.

    Ich habe extra die SOAP Option mit installiert, und alle Rechte angepasst. Und jede erdenkliche Anleitung wie man ein PHP Server unter Raspberry Raspbian installiert.

    Braucht es unter linux noch irgendeinen extra Befehl?

    Hier der Link:

    https://www.schlaue-huette.de/apis-c...-der-fritzbox/


    PHP-Code:
    exec("sudo php /var/www/html/fritz_anwesenheit_send_marker.php"); 
    PHP-Code:
    // Anwesenheitserkennung:
    // https://www.schlaue-huette.de

    $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://192.168.178.32/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://192.168.178.32/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://192.168.178.32/control?key=49"$Szene_key_marker_aus "",false,$context2); // Hinter dem key= einfach die Nummer der Szene angeben, die den Marker auf aus setzt.



  • #2
    Es muss lauten "sudo PROGRAMM parameter", also "sudo php ...your script..."
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      Kleine Anmerkung: man solte '===' verwenden statt '=='

      Kommentar


      • #4
        Hallo Leute.

        Ich habe beide Anmerkungen ohne Erfolg umgesetzt.

        Der Server ist wahrscheinlich zu 98% aufgesetzt.

        Da mir diese Option wichtig ist würde ich auch gerne dafür
        bezahlen.

        Irgendjemand da wo mit wenig Zeitaufwand Kohle machen möchte?

        Gruss Thorsten

        Kommentar

        Lädt...
        X