• Willkommen im Forum „Wetterstationsforum.info - Archiv“.
 

Neuigkeiten:

Dieses Forum dient ausschließlich zu Archivzwecken.
Für Fragen nutze bitte unser aktuelles Forum, welches du unter https://wetterstationsforum.info findest.

Hauptmenü

Automation über Schaltsteckdosen gesteuert durch Wetterdaten per PHP

Begonnen von 24Online, 28.01.2014, 16:01:23

⏪ vorheriges - nächstes ⏩

24Online

Im Rahmen der  vielzähligen und vielschichtigen Ideen der Nutzung von Wetterdaten (oder Ereignissen), möchte ich an dieser Stelle einen Bereich öffnen, der sich um nachfolgendes Spezialszenario dreht, das wahrscheinlich nicht ganz untypisch ist. Vorweg möchte ich darauf hinweisen, dass es rein wirtschaftlich (wahrscheinlich) keinen Sinn macht, sich die für diese Lösungsmöglichkeiten notwendigen Komponenten allein zu diesem Zweck zu beschaffen.

Die IT-infrastrukturellen Voraussetzungen für die hier diskutierten und teilweise angebotenen oder noch zu optimierenden Lösungen/-ansätze sind eine fritz.box (mit DECT oder WLAN) und entsprechende Schaltsteckdosen (bspw. FRITZ!DECT 200 oder FRITZ!Powerline). Die fritz.box sollte zwingend bereits  zur Basisausstattung für den Internetzugang gehören, seinen vorhandenen Router auszutauschen auf Grund der hier angestrebten und diskutierten Lösungen macht monetär wenig Sinn.

Also nun konkret was möchte ich hier diskutieren, anbieten und/oder gemeinschaftlich optimieren:

Die Möglichkeiten der Steuerung von elektrischen Komponenten über eine Schaltsteckdose (FRITZ!DECT200 und ff) über die eigentlichen Basisfunktionalitäten des Routers (FRITZ.box) durch direktes Ansprechen aus einem PHP-basierenden Skript heraus.
Beispielszenario: Ab einer bestimmten Luftfeuchtigkeit soll automatisch ein Luftentfeuchter eingeschaltet werden, der sich nach Erreichen einer gewünschten Luftfeuchtigkeit wieder ausschaltet. Wir besitzen bereits eine FRITZ.box und betrieben eine Wetterstation die automatisiert (direkt oder über einen Workaround) Daten, unter anderem auch die Messwerte der Luftfeuchtigkeit bereitstellt. 
Die fritz.box an sich ermöglicht solche Schaltsteckdosen über die Administrationsoberfläche zu konfigurieren und entsprechende Schaltzeiten (AN/AUS, Intervall, Zufall) einzustellen. Diese Funktionalität kann man auch direkt nutzen um bspw. den Status (Schaltzustand) einer Schaltsteckdose (auch Actor genannt) abzufragen oder Schaltvorgaänge (EIN/AUS) vorzunehmen. Dazu stellt AVM eine API zur Verfügung.

Die Möglichkeiten solche Direktsteuerungen zu nutzen sind wahrscheinlich vielschichtig.
Ich habe mir zunächst ein PHP-Skript gebastelt, mit dem man sich zunächst das Recht besorgt (vereinfacht mal ,,Anmeldung an der Fritz.box genannt") einen deratigen Schaltvorgang vorzunehmen und dann einen Schaltvorgang durchführt. Die Logik warum geschaltet werden soll und ob ein oder aus, ist eigentlich nur eine leichte Programierübung (wenn x >= Y / dann bspw. EIN oder wenn x < Y dann AUS).
Achtung hierfür ist natürlich die aktuelle Firmware erforderlich und mind. eine Schaltsteckdose.

Die Benutzerspezifischen Anteile des PHP-Skripts sind:

  • Kennwort der Fritzbox ($fritzbox_Password)
  • ID-der Schaltsteckdose ($ain)

<?php // Benutzerspezifische Angaben$fritzbox_Password    = 'passwd';$ain = '0000000000';// Challenge bei der Fritz.box holen$ch = curl_init('http://fritz.box/login_sid.lua');curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$login = curl_exec($ch);$session_status_simplexml = simplexml_load_string($login);if ($session_status_simplexml->SID != '0000000000000000'){   $SID = $session_status_simplexml->SID;}else// Session ID errechnen aus Challenge, Passwort und MD5-Verschlüsselung{   $challenge = $session_status_simplexml->Challenge;   $response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $fritzbox_Password, "UCS-2LE", "UTF-8"));   curl_setopt($ch, CURLOPT_POSTFIELDS, "response={$response}&page=/login_sid.lua");   $sendlogin = curl_exec($ch);   $session_status_simplexml = simplexml_load_string($sendlogin);   if ($session_status_simplexml->SID != '0000000000000000')       {       $SID = $session_status_simplexml->SID;       }   else       {       echo "Fehler: Login fehlgeschlagen";       return;       }}curl_close($ch);//  Einschalten (setswitchon)$import = file_get_contents('https://fritz.box/webservices/homeautoswitch.lua?ain='.$ain. '&switchcmd=setswitchon&sid='.$SID.'');//  Ausschalten (setswitchoff)/*$import = file_get_contents('https://fritz.box/webservices/homeautoswitch.lua?ain='.$ain. '&switchcmd=setswitchoff&sid='.$SID.'');*/// von der Fritz.box abmelden$logout = file_get_contents('https://fritz.box/home/home.lua?sid='.$SID.'&logout=1');?>



Zum Ein- oder Ausschaltung entsprechende Kommentare "//" und */ sowie /* setzen oder entfernen. Wie man eine Schaltung in Abhängigkeit zu einem Messwerte realisiert, schreibe ich (sofern es jemanden interessiert) aus Zeitgründen später. Mit Hilfe dieses Skript sollten man nun eine Schaltsteckdose Einschalten können. Zum Ausschalten müssen an der entsprechenden Stelle (//  Ausschalten (setswitchoff) die Kommentierungen entfernt werden und bei (//  Einschalten (setswitchon) gesetzt werden. Die Variable $import enthält den Status nach dem jeweiligen Schaltvorgang (0 oder 1) ein 'echo $import;' bringt es zur Ansicht.

Ich bin gespannt, ob sich eine Diskussion entfacht oder der Thread mangels Interesse stirbt.

Viele Grüße 24Online
Ist man in kleinen Dingen nicht geduldig, bringt man die großen Vorhaben zum Scheitern.

https://heiligensee-wetter.de (Berlin, Schulzendorf)
https://heiligensee-wetter.de/technik.php (HP1000)
http://www.owsd-format.de