Hallo,
ich will eine Schaltsteckdose FRITZ!Smart Energy 200 von einem raspberrypi aus abfragen und habe dazu ein Script in php zusammengebastelt. Das funktioniert im Prinzip. Jedoch kommt in vielen Fällen die Meldung "Fehler: Login fehlgeschlagen". Ich rufe das Script per crontab in jeder Minute auf und die erfolgreiche Rückgabe der gewünschten Daten kommt zwischen 3 und 35 Minuten.
Ha da jemand eine Idee?
Fritzbox 7590 Version 8.25
ich will eine Schaltsteckdose FRITZ!Smart Energy 200 von einem raspberrypi aus abfragen und habe dazu ein Script in php zusammengebastelt. Das funktioniert im Prinzip. Jedoch kommt in vielen Fällen die Meldung "Fehler: Login fehlgeschlagen". Ich rufe das Script per crontab in jeder Minute auf und die erfolgreiche Rückgabe der gewünschten Daten kommt zwischen 3 und 35 Minuten.
Ha da jemand eine Idee?
Fritzbox 7590 Version 8.25
Danke und Grüße<?php
ob_start();
// Welche Abfrage soll ausgeführt werden
$ahaurl = 'http://fritz.box/webservices/homeautoswitch.lua';
$cmdtmp='gettemperature'; // Abfrage der Temperatur am AVM Heizkörper
$cmdsoll='gethkrtsoll'; // Abfrage der soll Temperatur vom AVM Heizkörper
$cmdtag='gethkrkomfort'; // Abfrage der Komforttemperatur vom AVM Heizkörper
$cmdnacht='gethkrabsenk'; // Abfrage der Temperatur Absenktemperatur am AVM Heizkörper
$cmdonoff='getswitchstate'; //Abruf Status Steckdose
$cmdenergie='getswitchenergy'; //Abruf Energie Steckdose
$ainHeizk7="xxxxxxxxxxxxx"; // Schuppen Heizung
$fritz_url = "Fritz.box"; // IP-Adresse der FRITZ!Box
$fritz_user = "xxxx"; // Benutzername (optional, oft leer)
$fritz_pwd = "xxxx"; // Passwort der FRITZ!Box
// 1. Challenge abrufen
$ch = curl_init('http://' . $fritz_url . '/login_sid.lua');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$login = curl_exec($ch);
curl_close($ch);
$session_status = simplexml_load_string($login);
// 2. Prüfen, ob bereits eine SID vorhanden ist
if ($session_status->SID != '0000000000000000') {
$SID = $session_status->SID;
} else {
// 3. SID berechnen (Challenge + MD5-Hash)
$challenge = $session_status->Challenge;
// Konvertierung nach UCS-2LE für MD5-Hashing
$response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $fritz_pwd, "UCS-2LE", "UTF-8"));
// 4. Login-Anfrage senden
$ch = curl_init('http://' . $fritz_url . '/login_sid.lua');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "response={$response}&page=/login_sid.lua");
$sendlogin = curl_exec($ch);
curl_close($ch);
$session_status = simplexml_load_string($sendlogin);
if ($session_status->SID != '0000000000000000') {
$sid = $session_status->SID;
} else {
die("Fehler: Login fehlgeschlagen.");
}
}
echo "Erfolgreich erhaltene SID: " . $sid;
// Aktuelle Zeit
$timestamp = time();
$datum = "\n". date("d.m.Y");
$uhrzeit = date("H:i");
$zeitstempel = "" . $datum ." " . $uhrzeit;
echo $datum," - ",$uhrzeit," Uhr \n";
// Abfrage der Temperatur von AVM Steckdose Schuppen
$urltmp=$ahaurl."?sid=$sid"."&ain=".rawurlencode($ainHeizk7).'&switchcmd='.$cmdtmp;
$wertHK07 = file_get_contents($urltmp); // Abspeichern der Temperatur in einer Variable
$ainHeizk7a = (int)$wertHK07 /10;
$ainHeizk7k = str_replace(".",",",$ainHeizk7a);
//Abfrage Schaltzustand von AVM Steckdose Schuppen
$urlstatus=$ahaurl."?sid=$sid"."&ain=".rawurlencode($ainHeizk7).'&switchcmd='.$cmdonoff;
$wertHeizk7k = file_get_contents($urlstatus);
//Abfrage Energie von AVM Steckdose Schuppen
$urlstatus=$ahaurl."?sid=$sid"."&ain=".rawurlencode($ainHeizk7).'&switchcmd='.$cmdenergie;
$wertHeizk7ka = file_get_contents($urlstatus);
echo "Steckdose Schuppen: " . $ainHeizk7k ."°C \n";
echo "Steckdose Schuppen ist: " . $wertHeizk7k ;
echo "Steckdose Schuppen Energie: " . $wertHeizk7ka . "Watt \n";
$inhalt = ob_get_clean(); // Pufferinhalt holen und löschen
file_put_contents("/home/pi/python/von100/Schuppen/datei.txt", $inhalt, FILE_APPEND);
?>