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

    #76
    Du musst noch die URL aus dem Eingang E2 setzen. Am besten unter der Zeile:

    PHP-Code:
    $header[] = "Accept: text/vnd.wap.wml,*.*"
    folgende Zeile einfügen.

    PHP-Code:
    $url $E[2]['value']; 
    EDIT: Falls Du sie statisch setzt, wie in Michas Antwort, dann kannst du den Eingang E2 entfernen.

    Kommentar


      #77
      Nein, die URL soll nicht statisch gesetzt werden.
      So funktioniert es jetzt

      Vielen Dank

      Kommentar


        #78
        Hallo zusammen,
        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]###

        Kommentar


          #79
          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.

          Kommentar


            #80
            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.

            Kommentar


              #81
              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.

              Kommentar


                #82
                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.

                Kommentar


                  #83
                  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.

                  Kommentar


                    #84
                    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

                    Kommentar


                      #85
                      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.....

                      Kommentar


                        #86
                        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...

                        Kommentar


                          #87
                          Ah dann sollte ja wohl ein  yum install -y php-mbstring  Abhilfe schaffen.

                          Kommentar


                            #88
                            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

                            Kommentar


                              #89
                              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.

                              Kommentar


                                #90
                                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.

                                Kommentar

                                Lädt...
                                X