Steuerung unserer Wohnung

Marioir
Beiträge: 1147
Registriert: Mi 24. Feb 2016, 15:36
Wohnort: Offenbach

Fr 29. Jul 2016, 10:51

Ja steige auch noch nicht ganz durch.
Muss mich mal richtig rein denken.

Hab so ein paar Textzeilen. Wo ich nicht durchblicke.
Sebi
Beiträge: 334
Registriert: Do 18. Feb 2016, 13:22
Wohnort: Aachen

Fr 29. Jul 2016, 11:03

Welche denn? Vielleicht kann ich ja helfen ;-)
Darf's ein bisschen smarter sein? http://www.schlaue-huette.de ! :idea:
Marioir
Beiträge: 1147
Registriert: Mi 24. Feb 2016, 15:36
Wohnort: Offenbach

Fr 29. Jul 2016, 11:07

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 :mrgreen:

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
	));
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.

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;
		}
		}
	}
}
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.
fritz.JPG
fritz.JPG (40.47 KiB) 13335 mal betrachtet
Sebi
Beiträge: 334
Registriert: Do 18. Feb 2016, 13:22
Wohnort: Aachen

Fr 29. Jul 2016, 11:20

Moin,

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;
      }
      }
   }
}
Die Reihenfolge war falsch, weil das </table> an der falschen Stelle stand. Einfach so ändern:

Code: Alles auswählen

....
		 $Host2anwesend = 1;
		}
		}
	}
}
 echo '</table>';

...
Gruß
Sebi
Darf's ein bisschen smarter sein? http://www.schlaue-huette.de ! :idea:
Marioir
Beiträge: 1147
Registriert: Mi 24. Feb 2016, 15:36
Wohnort: Offenbach

Fr 29. Jul 2016, 11:41

Danke dir, jetzt ist mir die Reinfolge auch wieder klar.
fritz1.JPG
fritz1.JPG (40.91 KiB) 13331 mal betrachtet
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
}
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.
Sebi
Beiträge: 334
Registriert: Do 18. Feb 2016, 13:22
Wohnort: Aachen

Fr 29. Jul 2016, 11:48

:-)

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 ! :idea:
Benutzeravatar
Blackbird
Beiträge: 829
Registriert: Sa 20. Feb 2016, 17:51

Fr 29. Jul 2016, 19:15

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
else.PNG (14.89 KiB) 13315 mal betrachtet
Sebi
Beiträge: 334
Registriert: Do 18. Feb 2016, 13:22
Wohnort: Aachen

Fr 29. Jul 2016, 20:02

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
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.

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 ! :idea:
Benutzeravatar
Blackbird
Beiträge: 829
Registriert: Sa 20. Feb 2016, 17:51

Fr 29. Jul 2016, 20:21

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....
offline.PNG
offline.PNG (10.39 KiB) 13296 mal betrachtet
Sebi
Beiträge: 334
Registriert: Do 18. Feb 2016, 13:22
Wohnort: Aachen

Fr 29. Jul 2016, 20:24

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 ! :idea:
Antworten