Ja steige auch noch nicht ganz durch.
Muss mich mal richtig rein denken.
Hab so ein paar Textzeilen. Wo ich nicht durchblicke.
Steuerung unserer Wohnung
Welche denn? Vielleicht kann ich ja helfen
Darf's ein bisschen smarter sein? http://www.schlaue-huette.de !
So hab mir das mal angeguckt, so als Neuling ist es ganz schon kompliziert da rein zu finden, klar könnte ich es auch so übernehmen wie es ist. Aber will auch nicht ganz dumm sterben
Dazu habe ich ein paar kleine fragen.
Das wird wohl der Befehl sein, wo mit man die Daten der Fritzbox entlocken kann, der wird so irgendwie verankert sein.
Denn lasse ich mal unberührt so stehen.
Da steige ich noch nicht wirklich durch.
Kannst du das noch mal kurz genauer erläutern?
Besonders den oberen Teil...
Was mich auch bissl wundert ist die Reinfolge, war eigentlich der Meinung das zuerst alle Host aufgezählt werden, dann die Anwesenheit.
Dazu habe ich ein paar kleine fragen.
Code: Alles auswählen
// Getestet mit Fritz!OS 6.60
$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
));
Denn lasse ich mal unberührt so stehen.
Code: Alles auswählen
if (!(is_soap_fault($NumberOfHosts)))
{
for ($i=0;$i<$NumberOfHosts;$i++)
{
$Host = $client->GetGenericHostEntry(new SoapParam($i,'NewIndex'));
echo'<td>';
echo $Host['NewHostName'];
echo'</td><td align="center">';
echo $Host['NewActive'];
echo'</td></tr>';
if ($Host['NewHostName'] == $Host1)
{
if(($Host['NewActive'] == 1))
{
$Host1anwesend = 1;
}
}
}
}
Kannst du das noch mal kurz genauer erläutern?
Besonders den oberen Teil...
Was mich auch bissl wundert ist die Reinfolge, war eigentlich der Meinung das zuerst alle Host aufgezählt werden, dann die Anwesenheit.
Moin,
also dann wollen wir mal (Habe die Erklärung direkt in den Code per Kommentar ( // ) eingefügt.)
Die Reihenfolge war falsch, weil das </table> an der falschen Stelle stand. Einfach so ändern:
Gruß
Sebi
also dann wollen wir mal (Habe die Erklärung direkt in den Code per Kommentar ( // ) eingefügt.)
Code: Alles auswählen
if (!(is_soap_fault($NumberOfHosts))) // Prüft ob die SOAP Abfrage von der Fritz!Box ohne Fehler ist
{
for ($i=0;$i<$NumberOfHosts;$i++) // Hier wird im Grunde Zeile für Zeile geprüft ob weitere Hosts folgen - Bis keine mehr kommen. Also im Grund: As long as.
{
$Host = $client->GetGenericHostEntry(new SoapParam($i,'NewIndex')); // Interne Verknüpfung der Fritz!Box mit Host herstellen
echo'<td>';
echo $Host['NewHostName'];
echo'</td><td align="center">';
echo $Host['NewActive'];
echo'</td></tr>';
if ($Host['NewHostName'] == $Host1)
{
if(($Host['NewActive'] == 1))
{
$Host1anwesend = 1;
}
}
}
}
Code: Alles auswählen
....
$Host2anwesend = 1;
}
}
}
}
echo '</table>';
...
Sebi
Darf's ein bisschen smarter sein? http://www.schlaue-huette.de !
Danke dir, jetzt ist mir die Reinfolge auch wieder klar.
Wenn ich jetzt hier:
Noch ein GET Befehl hinzufügen würde, wie würde sich das Script verhalten?
Jedesmal den Befehl senden und nur 1 mal, bis sich der Zustand wieder auf Offline gesetzt hat?
Denn wenn er jedesmal den Befehl sendet, wenn er es abarbeitet, wäre das blöd
Bitte nicht bei der GET Stelle wundern, habe es nur hinzugefügt damit man weiß was ich an der Stelle machen will, den genauen Befehl muss ich noch nachschlagen.
Wenn ich jetzt hier:
Code: Alles auswählen
if ($Host1anwesend == 1 OR $Host2anwesend == 1)
{
echo '<b>Jemand ist zu Hause</b><br><br>';
GET = 192.168.1.26/config?Key=26
}
else
{
echo '<b>Keiner ist da</b><br><br>';
GET = 192.168.1.26/config?Key=27
}
Jedesmal den Befehl senden und nur 1 mal, bis sich der Zustand wieder auf Offline gesetzt hat?
Denn wenn er jedesmal den Befehl sendet, wenn er es abarbeitet, wäre das blöd
Bitte nicht bei der GET Stelle wundern, habe es nur hinzugefügt damit man weiß was ich an der Stelle machen will, den genauen Befehl muss ich noch nachschlagen.
So einfach wird das nicht gehen. Gucke mir das später mal an.
Gruß
Sebastian
Darf's ein bisschen smarter sein? http://www.schlaue-huette.de !
Erstmal vielen herzlichen Dank an Sebi der das PHP Script gepostet hat.
Endlich bekomme ich meine Anwesenheitsabfrage in den Griff ohne FHEM oder andere nutzen zu müssen.
Ein ganz winziger Fehler hat sich noch eingeschlichen, der je nach Weiterverarbeitung aber nicht unbedingt auffällt.
Bitte keinesfalls als Kritik auffassen, ich bin höchst dankbar für das Grundgerüst!!!
FÜr den Fall, dass ein Gerät NICHT online ist, muss man noch den ELSE Befehl einfügen,
sonst bleibt die Variable undefiniert und kann je nach weiterer Verarbeitung zum Fehler oder Abbruch führen....
Endlich bekomme ich meine Anwesenheitsabfrage in den Griff ohne FHEM oder andere nutzen zu müssen.
Ein ganz winziger Fehler hat sich noch eingeschlichen, der je nach Weiterverarbeitung aber nicht unbedingt auffällt.
Bitte keinesfalls als Kritik auffassen, ich bin höchst dankbar für das Grundgerüst!!!
FÜr den Fall, dass ein Gerät NICHT online ist, muss man noch den ELSE Befehl einfügen,
sonst bleibt die Variable undefiniert und kann je nach weiterer Verarbeitung zum Fehler oder Abbruch führen....
Ist so nicht korrekt. If kann sehr wohl eigenständig ohne else verwendet werden. Unterschieden wird bei PHP (und auch bei anderen Sprachen) zwischen if und if/else.Blackbird hat geschrieben:Erstmal vielen herzlichen Dank an Sebi der das PHP Script gepostet hat.
Endlich bekomme ich meine Anwesenheitsabfrage in den Griff ohne FHEM oder andere nutzen zu müssen.
Ein ganz winziger Fehler hat sich noch eingeschlichen, der je nach Weiterverarbeitung aber nicht unbedingt auffällt.
Bitte keinesfalls als Kritik auffassen, ich bin höchst dankbar für das Grundgerüst!!!
FÜr den Fall, dass ein Gerät NICHT online ist, muss man noch den ELSE Befehl einfügen,
sonst bleibt die Variable undefiniert und kann je nach weiterer Verarbeitung zum Fehler oder Abbruch führen....
else.PNG
http://php.net/manual/de/control-structures.if.php
http://php.net/manual/de/control-structures.else.php
... "Dies ist der Einsatzzweck von else. else erweitert eine if-Anweisung um eine weitere Anweisung, die dann ausgeführt werden soll, .."
Kann man also ohne Probleme so machen.
Gruß
Sebastian
Darf's ein bisschen smarter sein? http://www.schlaue-huette.de !
Hmm, dann hab ich was nicht richtig verstanden oder mein Infrastruktur ist eine andere.
Hab das Script erstmal unverändert (Hostnamen natürlich eingetragen) verwendet und
über den Browser aufgerufen.
Sobald ein Gerät bzw. Host aufgerufen wir der Offline ist, gibt es eine "undefined" Fehlermeldung.
Ist das Gerät online oder die Else-Funktion eingepflegt funzt es ohne Fehlermeldung.
Kann ja durchaus sein, dass die PHP Version auf meinem Serverchen da komisch ist.
Die Else Funktion für IST NICHT 1 wird ja auch korrekt ausgeführt.
In der HTTP Ansicht wird halt eine Fehlermeldung ausgegeben, was mich Laien zumeindest erstmal irritiert hat....
Hat jetzt aber nichts mit dem Host3 zu tun, den hab ich nachgepflegt, trifft auf alle zu....
Hab das Script erstmal unverändert (Hostnamen natürlich eingetragen) verwendet und
über den Browser aufgerufen.
Sobald ein Gerät bzw. Host aufgerufen wir der Offline ist, gibt es eine "undefined" Fehlermeldung.
Ist das Gerät online oder die Else-Funktion eingepflegt funzt es ohne Fehlermeldung.
Kann ja durchaus sein, dass die PHP Version auf meinem Serverchen da komisch ist.
Die Else Funktion für IST NICHT 1 wird ja auch korrekt ausgeführt.
In der HTTP Ansicht wird halt eine Fehlermeldung ausgegeben, was mich Laien zumeindest erstmal irritiert hat....
Hat jetzt aber nichts mit dem Host3 zu tun, den hab ich nachgepflegt, trifft auf alle zu....
Also bei mir kommt da keinerlei Fehler. Und es funktioniert einwandfrei ohne else. Wo genau bekommst du denn die Fehlermeldung?
Darf's ein bisschen smarter sein? http://www.schlaue-huette.de !