ich habe eine Heizung die über Webservices abgefragt werden kann.
Dafür habe ich nun anhand der hier im Threat gemachten Hilfestellungen einen eigenen LBS erstellt.
Leider funktioniert dieser noch nicht, finde aber auch das Problem nicht.
Könnte mir hier bitte einer helfen?
Das folgende XML erhalte ich beim Auslesen von "http://IP-Adresse:8080/user/var/120/10251/0/0/12528" und dort möchte ich die Zahl 277 auslesen.
<?xml version="1.0" encoding="utf-8"?>
<eta version="1.0" xmlns="http://www.eta.co.at/rest/v1">
<value uri="/user/var/120/10251/0/0/12528" strValue="28" unit="%" decPlaces="0" scaleFactor="10" advTextOffset="0">277</value>
</eta>
Hier mein Logikbaustein:
Code:
###[DEF]### [name =Heizung Statusabfrage] [e#1 = Trigger !=0 ] [a#1 = A1] ###[/DEF]### ###[HELP]### Dieser Baustein wertet den Status der Heizung aus. Alle Parameter abrufbar unter: http://Ip-Adresse:8080/user/menu Eingänge: E1 = Trigger !=0 Ausgänge: A1 = Ladezustand ###[/HELP]### ###[LBS]### <? function LB_LBSID($id) { if ($E=getLogicEingangDataAll($id)) // die aktuelle Belegung der Eingänge des LBS in ein Array übergeben { if (getLogicElementStatus($id)==0) // Liefert den aktuellen Status der LBS-Instanz $elementid { if ($E[1]['value']!=0 && $E[1]['refresh']==1) // Damit ein LBS überhaupt "startet", muss mindestens ein Eingang des LBS getriggert werden { setLogicLinkAusgang($id,1,0); // Setzt einen Ausgang der LBS-Instanz $elementid auf einen Wert setLogicElementStatus($id,1); // Setzt den aktuellen Status der LBS-Instanz $elementid. 1=LBS läuft callLogicFunctionExec(LBSID,$id); // Startet ggf. das EXEC-Script der LBS-Instanz $elementid. } } else { //### ggf. checken, ob Timeout erreicht wurde! Sonst "läuft" der LBS ja für immer, obwohl das EXEC-Script schon längst abgekackt ist... } } } ?> ###[/LBS]### ###[EXEC]### <? require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php"); set_time_limit(30); //Script soll maximal 30 Sekunden laufen sql_connect(); // Auswertung $src=file_get_contents_utf8("http://IP-Adresse:8080/user/var/120/10251/0/0/12528"); // Liest die gesamte zurückgelieferte XML in einen String //$src=utf8_encode(file_get_contents("http://IP-Adresse:8080/user/var/120/10251/0/0/12528")); preg_match("#advTextOffset=\"0\">.*?([0-9\.,]+)<\/value>#s",$src,$matches) && setLogicLinkAusgang($id,1,$matches[1]); // Führt eine Suche mit einem regulären Ausdruck durch setLogicElementStatus($id,0); function file_get_contents_utf8($fn) { $content = file_get_contents($fn); return mb_convert_encoding($content, 'UTF-8', mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true)); } //-------------------------------------------------------------------------------------------------------------------------- sql_disconnect(); ?> ###[/EXEC]###
Einen Kommentar schreiben: