Ankündigung

Einklappen
Keine Ankündigung bisher.

Webseite parsen - Wie geht das mit Edomi?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • McJameson
    antwortet
    Probier mal folgende RegExp "adv.*?>([0-9]+)". Bei https://regex101.com/ funktioniert sie.

    Einen Kommentar schreiben:


  • Derol
    antwortet
    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:


  • jonofe
    antwortet
    Die musst du als root auf dem EDOMI Server ausführen.

    Einen Kommentar schreiben:


  • Derol
    antwortet
    Wo muss ich diese Zeile einfügen?
    Code:
    yum install -y php-mbstring
    Egal ob ich es unter LBS oder EXEC einfüge, beides trägt nicht zur Verbesserung bei.

    Einen Kommentar schreiben:


  • vento66
    antwortet
    Jo eh, ich verstehe deinen Ansatz vollkommen! Deshalb installieren meine LBS die notwendigen Abhängikeiten bei Bedarf mit (Das weist Du ja selbst am besten Danke 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:


  • wintermute
    antwortet
    Zitat von vento66 Beitrag anzeigen
    Abhilfe schaffen
    Vermutlicherweise ja... ich hab mich nur gescheut das so direkt zu schreiben weil die Multibyte-String-Geschichte hier garnicht notwendig ist und es viel sinnvoller gewesen waere die ueberfluessige Funktion aus dem LBS zu werfen anstatt ein nicht wirklich benoetigtes Paket zu installieren wodurch der LBS auf Default-Installationen dann nicht mehr laeuft und es am Ende des Tages wieder die ewig gleichen Postings gibt weil die Logik-Engine abschmiert

    Aber jetzt hat vento ja stattdessen den BH der Pandora geoeffnet

    Einen Kommentar schreiben:


  • vento66
    antwortet
    Ah dann sollte ja wohl ein  yum install -y php-mbstring  Abhilfe schaffen.

    Einen Kommentar schreiben:


  • wintermute
    antwortet
    Zitat von vento66 Beitrag anzeigen
    die sollt eigentlich in PHP 5 vorhanden sein
    Nicht in der EDOMI/CentOS Default Installation, die kommt aus dem Paket php-mbstring - das ist normal nicht dabei...

    Einen Kommentar schreiben:


  • vento66
    antwortet
    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:


  • Derol
    antwortet
    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
    Hier die Liveansicht nachdem das Projekt aktiviert und angetriggert wurde:
    Liveansicht .JPG

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    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:


  • Derol
    antwortet
    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:


  • jonofe
    antwortet
    Zitat von Derol Beitrag anzeigen
    in der Edomi Hilfe
    Was genau meinst du damit?

    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:


  • Derol
    antwortet
    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.

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    Ich würde als erstes mal die Funktion LB_LBSID() vereinfachen:

    PHP-Code:

    function LB_LBSID($id)
    {
       
    logic_callExec(LBSID$id);

    Mehr brauchst du da eigentlich nicht, da der LBS ohnehin nur aufgerufen wird, wenn er über E1 getriggert wird (mehr Eingänge gibts ja nicht) und der logic_callExec() Aufruf verhindert, dass das EXEC Skript zweimal zur selben Zeit aufgerufen wird.

    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:

Lädt...
X