Ankündigung
Einklappen
Keine Ankündigung bisher.
Webseite parsen - Wie geht das mit Edomi?
Einklappen
X
-
Probier mal folgende RegExp "adv.*?>([0-9]+)". Bei https://regex101.com/ funktioniert sie.
-
Mein Programm läuft inzwischen ohne Fehlermeldung, nur erhalte ich leider nur eine 0 am Ausgang. Hier sollte eigentlich eine 147 angezeigt werden.
Wie bereits erwähnt, über den direkten Aufruf im Browser erhalte ich diesen Wert in einer XML nur über den Baustein wird der Wert nicht ausgegeben.
Kann mir hier bitte einer dabei helfen das zum laufen zu bringen.
Hier mein Baustein, der soweit läuft:
PHP-Code:###[DEF]###
[name =Heizung Stati-Abfrage ]
[e#1 =Trigger !=0 ]
[a#1 =A1]
###[/DEF]###
###[HELP]###
Dieser Baustein ließt Heizungswerte überWebservices aus
Eingänge:
e#1 =Trigger !=0
Ausgänge:
a#1 = 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(15); //Script soll maximal 15 Sekunden laufen
sql_connect();
//--------------------------------------------------------------------------------------------------------------------------
//$DEBUG && debug($id,"Baustein startet");
// Auswertung
$src=file_get_contents_utf8("http://IP-Adresse:8080/user/var/120/10251/0/0/12528");
// http://IP-Adresse:8080/user/var/120/10251/0/0/12528
// ftp://admin:
//$src=utf8_encode(file_get_contents("http://IP-Adresse:8080/user/var/120/10251/0/0/12528")); // Liest die gesamte Datei in einen String
preg_match("#.*adv.*\>([0-9]*)<.*#s",$src,$matches) && setLogicLinkAusgang($id,1,$matches[1]); // A01 Ladezustand
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]###
und hier die auszulesende XML:
Code:This XML file does not appear to have any style information associated with it. The document tree is shown below. <eta xmlns="http://www.eta.co.at/rest/v1" version="1.0"> <value uri="/user/var/120/10251/0/0/12528" strValue="15" unit="%" decPlaces="0" scaleFactor="10" advTextOffset="0">147</value> </eta>
Einen Kommentar schreiben:
-
Wo muss ich diese Zeile einfügen?
Code:yum install -y php-mbstring
Einen Kommentar schreiben:
-
Jo eh, ich verstehe deinen Ansatz vollkommen! Deshalb installieren meine LBS die notwendigen Abhängikeiten bei Bedarf mit (Das weist Du ja selbst am bestenDanke noch mal für den Schubs......) Und ja, für den LBS ist es sicher nicht notwendig, aber nun mal so drin.
Einen Kommentar schreiben:
-
Zitat von vento66 Beitrag anzeigenAbhilfe schaffen
Aber jetzt hat vento ja stattdessen den BH der Pandora geoeffnet
Einen Kommentar schreiben:
-
Ah dann sollte ja wohl ein yum install -y php-mbstring Abhilfe schaffen.
Einen Kommentar schreiben:
-
Zitat von vento66 Beitrag anzeigendie sollt eigentlich in PHP 5 vorhanden sein
Einen Kommentar schreiben:
-
Die function mb_convert_encoding ist in deinem LBS nicht vorhanden.
Edit die sollt eigentlich in PHP 5 vorhanden sein.... Hm dann wars wohl nicht so einfach.....
Einen Kommentar schreiben:
-
im Log wird noch folgende Fehlermeldung angezeigt
Code:Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19995531.php | Fehlercode: 1 | Zeile: 14 | Call to undefined function mb_convert_encoding() FATALERROR
Liveansicht .JPG
Einen Kommentar schreiben:
-
Wenn jetzt noch immer nichts am Ausgang erscheint, dann kann ich es nicht erklären, denn selbst wenn es keinen Match gibt, sollte nun ERROR ausgegeben werden. Projekt hast du auch neu aktiviert? Und nach dem Triggern nochmal auf Liveansicht geklickt? Kannst ja mal einen Screenshot der finalen Liveansicht nach dem Triggern posten.
Einen Kommentar schreiben:
-
ich meinte die Live-Werte. Entsprechend wie du es beschrieben hast.
Neu eingelesen habe ich es und an A1 hängt eine Ausgangsbox mit 2Byte GA darin.
Hier der geänderte Baustein:
###[DEF]###
[name =Heizung-Abfrage ]
[e#1 = Trigger !=0 ]
[a#1 = A1]
###[/DEF]###
###[HELP]###
Dieser Baustein wertet den Status der Heizung aus.
Webseite:
http://Ip-Adresse:8080/user/menu
Eingänge:
E1 = Trigger !=0
Ausgänge:
A1 = Ladezustand
###[/HELP]###
###[LBS]###
<?
function LB_LBSID($id)
{
logic_callExec(LBSID, $id);
}
?>
###[/LBS]###
###[EXEC]###
<?
require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
set_time_limit(30);
sql_connect();
$src=file_get_contents_utf8("http://IP-Adresse:8080/user/var/120/10251/0/0/12528");
if (preg_match("/.*adv.*\>([0-9]*)<.*/",$src,$matches))
logic_setOutput($id,1,$matches[1]);
else
logic_setOutput($id,1,'ERROR');
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]###
Zuletzt geändert von Derol; 09.01.2019, 23:22.
Einen Kommentar schreiben:
-
Zitat von Derol Beitrag anzeigenin der Edomi Hilfe
Poste noch mal den gesamten LBS.
Den musst du natürlich neu einlesen.
Dann ne Klemme an den Ausgang A1 hängen.
Projekt neu aktivieren.
Auf die Logikseite gehen. Liveansicht aktivieren. Dann auf E1 klicken und eine 1 eingeben und bestätigen. Danach nochmal auf Liveansicht klicken, dann solltest du an der Klemme den Wert sehen.
Einen Kommentar schreiben:
-
danke für deine schnelle Hilfe.
Ich habe alles abgeändert wie von dir beschrieben. Leider funktioniert das immer noch nicht.
Das pattern habe ich hier getestet: https://regex101.com/. Hat eigentlich funktioniert.
Den Wert 277 müsste ich doch zumindest in der Edomi Hilfe unter A1 sehen oder? Hier trägt sich aber leider nichts ein.
- Likes 1
Einen Kommentar schreiben:
-
Ich würde als erstes mal die Funktion LB_LBSID() vereinfachen:
PHP-Code:
function LB_LBSID($id)
{
logic_callExec(LBSID, $id);
}
Das setLogicElementStatus($id,0); im EXEC brauchst du auch nicht.
Hast du dein preg_match denn mal auf einer preg_match Online Webseite ausprobiert?
EDIT: Als pattern könntest du folgendes verwenden:
/.*adv.*\>([0-9]*)<.*/
PHP-Code:
require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
set_time_limit(30);
sql_connect();
$src=file_get_contents_utf8("http://IP-Adresse:8080/user/var/120/10251/0/0/12528");
if (preg_match("/.*adv.*\>([0-9]*)<.*/",$src,$matches))
logic_setOutput($id,1,$matches[1]);
else
logic_setOutput($id,1,'ERROR');
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();
Zuletzt geändert von jonofe; 09.01.2019, 22:24.
Einen Kommentar schreiben:
Einen Kommentar schreiben: