SID erstellen

rabbit10

New member
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

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

?>
Danke und Grüße
 

Letzte Anleitungen

Statistik des Forums

Themen
8.376
Beiträge
83.589
Mitglieder
9.119
Neuestes Mitglied
andyb66
Zurück
Oben