Moin Thomas, ich verwende zur Zeit das PHP Script, es wird alle 10 Minuten aufgerufen:
-- <?php // Beispiel Fritz!DECT200 schalten: // 17= die FritzBox-interne ID meiner zweiten DECT200; // 0= ausschalten; 1=einschalten // Ergebnis: "Alles OK" oder "Schaltbefehl nicht ausgeführt" ... Rückgabewert nur zur Demo... // kann in der Funktion angepasst werden $FritzBox['Host'] = '192.168.10.xxx'; $FritzBox['Passwort'] = 'xxxx'; // echo "<br>Test 1 </br>"; // $SID = FritzLogin(); // $Daten=Fritzbox_DECT200_Status(); // echo "<br>Result Status Start: </br>"; // echo "<pre>" , print_r ($Daten) , "</pre>"; // $Results=Fritzbox_DECT200_Switch(16,1); // echo "Result Switch: " . $Results; // Beispiel Fritz!DECT200 Messwerte auslesen: // 16= die FritzBox-interne ID meiner ersten DECT200 // 1= Abfrage der Werte der letzten 10min (je 60 Messwerte für W und V/alle 10s ein Wert) // 2=Abfrage der Werte der letzten 24h (96 Messwerte nur für W / alle 15min ein Wert) $Daten=Fritzbox_DECT200_Energie(16,1); // echo "<br>Result: </br>"; // print_r ($Daten); // echo "<pre>" , print_r($Daten) , "</pre>"; // Daten pro Miniute zusammenfassen // $Wert[0] = -1; $intZaehler = 2; $intMinute = 0; $summe = 0; $watt = 0; $arrWert = 0; for ($intZaehler; $intZaehler <= 62; $intZaehler++) { $arrWert = split(': "', $Daten[$intZaehler]); $summe += $arrWert[1]; // echo "<br>Wert $intZaehler: $arrWert[1] / 100</br>"; switch ($intZaehler) { case 7: $wert[0] = intval($summe / 600); $summe = 0; break; case 13: $wert[1] = intval($summe / 600); $summe = 0; break; case 19: $wert[2] = intval($summe / 600); $summe = 0; break; case 25: $wert[3] = intval($summe / 600); $summe = 0; break; case 31: $wert[4] = intval($summe / 600); $summe = 0; break; case 37: $wert[5] = intval($summe / 600); $summe = 0; break; case 43: $wert[6] = intval($summe / 600); $summe = 0; break; case 49: $wert[7] = intval($summe / 600); $summe = 0; break; case 55: $wert[8] = intval($summe / 600); $summe = 0; break; case 61: $wert[9] = intval($summe / 600); $summe = 0; break; } } // ermittelte Werte ausgeben // echo "<br>Result: </br>"; // print_r ($Daten); // echo "<pre>" , print_r($wert) , "</pre>"; // $i = 0; for ($i = 0;$i < 10;$i++) { // Werte an volkszaehler uebergeben $intZeit = time(); $intZeit = ($intZeit - 60 * ($i + 1)) * 1000; // echo "<br>Zeit : $intZeit </br>"; $str = "ts=$intZeit&value=$wert[$i]"; $objCurl = curl_init(); curl_setopt($objCurl, CURLOPT_URL, 'http://192.168.10.xx/volkszaehler.org/htdocs/middleware.php/data/c7abde40-5 549-11e3-82d7-0d499e0cf777.json?' . $str); curl_setopt($objCurl, CURLOPT_POST, true); curl_setopt($objCurl, CURLOPT_POSTFIELDS, $str); curl_exec($objCurl); curl_close($objCurl); } // Beispiel Fritz!DECT200 Status abfragen // Ergebnis ein Array mit dem aktuellen Status aller vorhandenen Fritz!DECT200 // ... einfach mal anschauen ... sollte selbsterklärend sein // $Daten=Fritzbox_DECT200_Status(); // echo "<br>Result Status Ende: </br>"; // print_r ($Daten); //********************************* //********************************* function Fritzbox_DECT200_Status() { $SID=FritzLogin(); If ($SID <> "Fehler: Login fehlgeschlagen") { $Result=file("http://192.168.10.xxx/net/home_auto_query.lua?sid=". $SID. "&command=AllOutletStates&xhr=0"); $Result=explode('" ,"', $Result[1]); $count=substr($Result[0],-1); for ($i = 1; $i <= $count; $i++) { $Daten[$i][]=explode('" : "', $Result[(3*$i)-3+1]); $Daten[$i][]=explode('" : "', $Result[(3*$i)-3+2]); $Daten[$i][]=explode('" : "', $Result[(3*$i)-3+3]); } } return($Daten); } //****************************************************************** function Fritzbox_DECT200_Switch($device, $wert) { $SID=FritzLogin(); If ($SID <> "Fehler: Login fehlgeschlagen") { $ch = curl_init('http://192.168.10.xx/net/home_auto_query.lua'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, "sid={$SID}&command=SwitchOnOff&value_to_set=". $wert. "&id=". $device. "&xhr=1"); $Result=curl_exec($ch); curl_close($ch); $Result=explode('" ,"', $Result); $ValueToSet=substr($Result[1],-1); // Abfrage, ob Schaltbefehl tatsächlich ausgeführt wurde $Value="-1"; $Results=Fritzbox_DECT200_Status(); Foreach ($Results as $key=>$Result) { //print_r($Result); If ($Result[0][1]==$device) { $Value=$Result[2][1]; } } If ($Value==$ValueToSet) { return "Alles OK"; } else { return "Schaltbefehl nicht ausgeführt"; } } } //********************************************************************* function Fritzbox_DECT200_Energie($device, $Zeit) { $Daten=""; $SID=FritzLogin(); If ($SID <> "Fehler: Login fehlgeschlagen") { Switch($Zeit) { case 1: // Abfrage der Messwerte der letzten 10 min $Daten= file("http://192.168.10.254/net/home_auto_query.lua?sid=". $SID. "&command=EnergyStats_10&id=". $device. "&xhr=1"); break; case 2: // Abfrage der Messwerte der letzten 24h $Daten= file("http://192.168.10.254/net/home_auto_query.lua?sid=". $SID. "&command=EnergyStats_24h&id=". $device. "&xhr=1"); break; } If ($Daten <>"") { $Daten=explode('" , "', $Daten[1]); $x=count($Daten)-1; $temp=explode('" ,"', $Daten[$x]); Foreach ($temp as $tem) { $Daten[$x]=$tem; $x++; } } else { $Daten[0]="Keine Werte vorhanden"; } return ($Daten); } } /* Ergebnis bei EnergyStats_10: Array[0] = Anzahl der Leistungsmessungen (hier 60) Array[1] = Timer der Leistungsmessung (hier 10= alle 10s) Array[2]-Array[61] = Messwerte Array[62] = minimaler Messwert in Zeitspanne (60x10s = 10 min) Array[63] = maximaler Messwert in Zeitspanne (60x10s = 10 min) Array[64] = Durchschnitts Messwert in Zeitspanne Array[65] = Anzahl der Spannungsmessungen Array[66] = Timer der Spannungsmessung (hier 10 = alle 10s) Array[67]-Array[126] = Messwerte Array[127] = Status (an / aus) Array[128] = ID Array[129] = Verbinddungsstatus (hier 2= OK) Array [130] RequestResult ???? Ergebninis bei EnergyStats_24h: Array[0] = Anzahl der Leistungsmessungen (hier 96 = alle 15 min = 4*15*24) Array[1] = Timer der Leistungsmessung (hier 900= alle 900s = 15min) Array[2]-Array[97] = Messwerte Array[98] = minimaler Messwert in Zeitspanne (60x10s = 10 min) Array[99] = maximaler Messwert in Zeitspanne (60x10s = 10 min) Array[100 = Durchschnitts Messwert in Zeitspanne Array[101] = Status (an / aus) Array[102] = ID Array[103] = Verbinddungsstatus (hier 2= OK) Arry [104] RequestResult ???? */ //========================================================================== == //An der Fritrz Box anmelden, liefert eine Session ID oder false function FritzLogin() { global $FritzBox; $fritzpage ='http://'.$FritzBox['Host'].'/login_sid.lua'; $xml = new SimpleXMLElement(file_get_contents($fritzpage)); $challange = $xml->Challenge; //Wert von Challenge abrufen $response = file_get_contents($fritzpage.'?username=&response='.$challange . '-' . md5( iconv('ISO8859-1', 'UTF-16LE', $challange . '-' . $FritzBox['Passwort']) )); //Login $xml = new SimpleXMLElement($response); $sid = $xml->SID; //SID abrufen die für alle weiteren Aktionen gebraucht wird if ($sid=='0000000000000000') { echo 'Keine gültige SSID - sind die Login (Passwort:"'.$FritzBox['Passwort'].'") und Hostdaten ("'.$FritzBox['Host'].'") richtig?'; return false; } unset($xml); // echo "<br>SID: $sid</br>"; return $sid; } __ Für das Wiki fand ich es noch nicht fertig, aber vielleicht hilft es erst einmal. Ich habe in dem Script zwei Beispiele aus dem Netz zusammengeführt. Gruß Berthold -----Ursprüngliche Nachricht----- Von: volkszaehler-dev-boun...@lists.volkszaehler.org [mailto:volkszaehler-dev-boun...@lists.volkszaehler.org] Im Auftrag von Thomas Gauweiler Gesendet: Donnerstag, 26. Dezember 2013 13:16 An: volkszaehler.org Betreff: Re: [vz-dev] AVM Steckdose Wattanzeige Luacgi not readable filename=//webservices/homeautoswitch.lua real_filename=/usr/www/1und1///webservices/homeautoswitch.lua erhalte ich als Antwort.