Ankündigung

Einklappen
Keine Ankündigung bisher.

EDOMI - LBS - Diskussion

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

    Zitat von rdeckard Beitrag anzeigen
    Was ist eigentlich mit Code 2 und Zeile 1 gemeint?
    Ich kann da wieder nur raten, aber ich wuerde schaetzen, "Code 2" steht fuer den EXEC Teil. "Zeile 1" ist -zumindest bei mir- immer, da Edomi den Baustein durch eine Art Pre-Compiler zieht und dabei uA alles in eine Zeile wuergt (zumindest habe ich das bei mir bisher immer so vorgefunden). Aber Deine Fehlermeldung ist recht eindeutig, das laesst sich also leicht finden

    Zitat von rdeckard Beitrag anzeigen
    Und wie schon zu Beginn erwähnt. Der eigentliche EXEC-Code läuft unter PHP (ausserhalb Edomi) normal durch. (Natürlich muss ich dann die Eingangsvariablen manuell noch setzen.)
    Mir faellt ehrlich gesagt schwer das zu glauben, denn dieses Konstrukt wird auch ausserhalb von Edomi so nicht funktionieren:
    PHP-Code:
    $url file($A);
    $lines file($url); 

    file($f) gibt ein Array zurueck (naemlich die einzelnen Zeilen des Files $f). Wenn man nu mit diesem Array als Filenamen ein zweites File oeffnen moechte (was Du da tust), dann kommt es zu genau der Fehlermeldung... string expected, array provided - sinngemaess.

    Irgendwas muss da beim Transport zu Edomi hin schief gelaufen sein, so kann das jedenfalls nicht funktionieren. Alle weiteren Fehler sind dann nur Folgefehler, die kann man (erstmal ) ignorieren.

    HTH :: Michael

    Kommentar


      Zitat von benji Beitrag anzeigen
      Kann mir eventuell jmd. weiterhelfen???
      Probieren, ja...

      aender mal bitte das
      PHP-Code:
        var_export($match[0]); 
      in
      PHP-Code:
      print_r($match[0],true); 
      Und nicht einfach auf STDOUT oder so schreiben, besser mit writeToTraceLog(0,true,$meineAusgabe) ins Edomi Tracelog oder eben in ein eigenes Logfile...

      gruesse :: Michael

      Kommentar


        wintermute
        Du warst bisschen schneller.
        Habs rausgefunden, als ich die $url ins Log schrieb und dort anstatt eine URL (string) nur "array" stand. Die Zeile war natürlich völlig falsch. So funktioniert es:
        PHP-Code:
        $url $A;
        $lines file($url); 
        Der File-Befehl habe ich offenbar mit copy/paste von der unteren Zeile übernommen. (Da ich mein externes PHP-File mit Variablen füllen musste, sieht dort dieser Abschnitt etwas anders aus. Deshalb läufts auch dort.)

        Dafür bekomme ich jetzt andere Fehler im Fehler-Log:

        Code:
        2016-02-22 21:41:37    623210    ?    117037    /usr/local/edomi/www/data/liveproject/lbs/EXE19000901.php: Code 8 / Zeile 1 / Undefined variable: id    ERROR
        2016-02-22 21:41:37    623847    ?    117037    /usr/local/edomi/www/data/liveproject/lbs/EXE19000901.php: Code 8 / Zeile 1 / Undefined variable: id    ERROR
        2016-02-22 21:41:37    624144    ?    117037    /usr/local/edomi/www/data/liveproject/lbs/EXE19000901.php: Code 8 / Zeile 1 / Undefined variable: id    ERROR
        Wenn ich meine Funktion find_closest komplett auskommentiere, gibts keine Fehler. Also muss der Fehler innerhalb dieser Funktion liegen.
        Ich schätze, es liegt am setLogicLinkAusgang, weil dieser auch 3x aufgerufen wird und dort die id-Variable vorkommt.

        In der Edomi-Anleitung habe ich folgendes gefunden:
        Innerhalb des Abschnitts [LBS] können bei Bedarf lokale (nur für diesen LBS gültige) Hilfsfunktionen
        deklariert werden. Eine solche Hilfsfunktion muss diesem Namensschema folgen:
        function LB_LBSID_FUNKTIONSNAME($id,...) {...}
        Die LBS-Instanz-ID $id sollte stets übergeben werden, damit die Hilfsfunktion ggf. auf die globalen LBSFunktionen
        zugreifen kann. Der Aufruf der Hilfsfunktion erfolgt dann mit:
        LB_LBSID_FUNKTIONSNAME($id,...)
        Es bezieht sich zwar auf den LBS-Teil und nicht den EXEC-Teil, aber ich vermute, dass ich im EXEC meine Funktion auch so definieren muss, damit die $ID Variable angesprochen werden kann.

        Werd das mal testen...

        Kommentar


          Zitat von rdeckard Beitrag anzeigen
          Wenn ich meine Funktion find_closest komplett auskommentiere, gibts keine Fehler. Also muss der Fehler innerhalb dieser Funktion liegen.
          Ich schätze, es liegt am setLogicLinkAusgang, weil dieser auch 3x aufgerufen wird und dort die id-Variable vorkommt.
          Schreib mal in die Funktion (direkt am Anfang) "global $id;"... aber das besser nur im EXEC Teil machen!

          Kommentar


            Zitat von wintermute Beitrag anzeigen

            aender mal bitte das
            PHP-Code:
             var_export($match[0]); 
            in
            PHP-Code:
            print_r($match[0],true); 
            Danke, hat aber leider nicht den gewünschten Erfolg gebracht.

            Gruß

            Kommentar


              Zitat von benji Beitrag anzeigen
              Danke, hat aber leider nicht den gewünschten Erfolg gebracht.
              Schade
              Kommt immer noch 29,4 (oder was das genau war) dabei raus?

              Kommentar


                So, ich habs einfach mal probiert, indem ich meiner Funktion die $id übergebe. Jetzt werden keine Fehler mehr erzeugt und der Baustein liefert korrekte Daten in die Ausgangsbox! Aber ob das mit der Übergabe von $id der korrekte Weg ist?

                Hier der komplette EXEC-Teil, wie er im Moment zu funktionieren scheint. (Bisschen mit Vorbehalt wegen dem $id...greife ich jetzt wirklich auf die Instanz zu oder erzeuge ich mir damit eine neue lokale Variable?)
                PHP-Code:

                require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
                sql_connect();
                //-------------------------------------------------------------------------------------
                if ($E=getLogicEingangDataAll($id)) {
                  
                $A $E[2]['value'];
                  
                $vorwarnzeit $E[3]['value'];
                }

                setlocale (LC_TIME'de_DE');

                $url $A;
                $lines file($url);
                $heute date("d.m.Y"); //"24.02.2016";

                foreach($lines as $line) {
                  
                $line trim($line);
                  
                $line rtrim($line";");

                  if(
                strpos($line,"=") !== FALSE) {
                    if(
                substr($line0strpos($line,"=")) == "Reihe1") {
                      
                $teile explode(";"substr($linestrpos($line,"=")+1strlen($line)));
                      
                find_closest($id$teile$heute$vorwarnzeit"Status");
                    }
                  }
                }

                function 
                find_closest($id$array$date$vorwarnzeit$Termine) {
                  foreach(
                $array as $day) {
                    
                $day=str_replace(".""-"$day);
                    
                $date=str_replace(".""-"$date);
                    
                $interval[] = intval(intval((strtotime($day) - strtotime($date))) / (3600*24)); // Differenz in Tage zwischen heute
                  
                }
                  
                asort($interval);

                  foreach(
                $interval as $key=>$value) {
                    if(
                $value == $vorwarnzeit) {
                      
                setLogicLinkAusgang($id,1,1); //Status 1 = In Vorwarnzeit
                      
                setLogicLinkAusgang($id,2,$array[$key]); //Datum 1
                      
                setLogicLinkAusgang($id,3,$array[$key+1]); //Datum 2
                      
                break;
                    } else {
                      if(
                $value $vorwarnzeit) {
                        echo 
                $Termine."=> Nächster Termin: ".$array[$key]."<br>";
                        
                setLogicLinkAusgang($id,1,0); //Status 0 = Nicht in Vorwarnzeit
                        
                setLogicLinkAusgang($id,2,$array[$key]); //Datum 1
                        
                setLogicLinkAusgang($id,3,$array[$key+1]); //Datum 2
                        
                break;
                      }
                    }
                  }
                }
                setLogicElementStatus($id,0);
                 
                //-------------------------------------------------------------------------------------
                sql_disconnect(); 

                Kommentar


                  Zitat von rdeckard Beitrag anzeigen
                  Bisschen mit Vorbehalt wegen dem $id...greife ich jetzt wirklich auf die Instanz zu oder erzeuge ich mir damit eine neue lokale Variable?
                  Letzteres, deswegen isses auch der bessere Weg (meiner Vermutung nach).
                  global ist nur einfacher zum "eben ausprobieren"

                  Kommentar


                    Zitat von wintermute Beitrag anzeigen

                    Kommt immer noch 29,4 (oder was das genau war) dabei raus?
                    Ja es wird der aktuelle Wert aus dem ISG gelesen allerdings in Form von "td class=value 23,9 td"
                    Wenn ich das ganze als php teste kommt die Ausgabe richtig:


                    array ( 0 => '23,2 °C', 1 => '24,3 °C', 2 => '23,2 °C', 3 => '9,8 °C', 4 => '26,7 °C', 5 => '26,6 °C', 6 => '27,4 °C', 7 => '28,3 °C', 8 => '10,53 bar ', 9 => '10,56 bar', 10 => '16,51 bar', 11 => '18,7 l/min', 12 => '0,0 A', 13 => '0 Hz', 14 => '0 Hz', 15 => '12,125 kWh', 16 => '3,880 MWh', 17 => '17,919 kWh', 18 => '4,772 MWh', 19 => '0,000 MWh', 20 => '0,000 MWh', 21 => '1,784 kWh', 22 => '0,661 MWh', 23 => '4,572 kWh', 24 => '1,017 MWh', 25 => '961 h', 26 => '781 h', 27 => '14 h', 28 => '0 h', 29 => '0 h', 30 => '0 h', )24,3 °C23,2 °C9,8 °C26,7 °C


                    Gruß

                    Kommentar


                      Zitat von benji Beitrag anzeigen
                      Ja es wird der aktuelle Wert aus dem ISG gelesen allerdings in Form von "[COLOR=#111111][FONT=Arial][SIZE=15px]td class=value 23,9 td"
                      Ist für mich ein bissel schwer nachzuvollziehen ohne das File zu sehen. Was mich aber anspringt ist, dass deine RegExp greedy ist, kannste mal versuchen was passiert wenn du die auf non-greedy umbastelst?

                      Kommentar


                        Code:
                        '/<td class="value>*(.*?)<\/td>/'
                        bringt den gleichen Effekt.

                        Hm, ich weiß nicht mehr so wirklich weiter....

                        Kommentar


                          Zitat von wintermute Beitrag anzeigen
                          Letzteres, deswegen isses auch der bessere Weg (meiner Vermutung nach).
                          global ist nur einfacher zum "eben ausprobieren"
                          Also ist "mein" Weg der richtige? ($id der Funktion als Parameter mitgeben)

                          Auf jeden Fall scheints ja zu funktionieren. (Muss zwar noch paar Sachen korrigieren, aber das hat jetzt nichts mit Edomi zu tun.)

                          Danke für das "Mitdenken"

                          Jetzt gehts ins Bett...

                          Kommentar


                            Zitat von benji Beitrag anzeigen
                            Code:
                            '/<td class="value>*(.*?)<\/td>/'
                            bringt den gleichen Effekt.
                            Hm, ich weiß nicht mehr so wirklich weiter....
                            Wie gesagt, ohne eine Originalausgabe von Deiner Webseite isses nich ganz so einfach o\
                            Was macht der hier?
                            PHP-Code:
                            preg_match('#"value">(.*?)</td#'$uswusf

                            Kommentar


                              Zitat von rdeckard Beitrag anzeigen
                              Also ist "mein" Weg der richtige? ($id der Funktion als Parameter mitgeben)
                              Gefühlt ja, ich machs aus Faulheit meist anders... Das Ziel ist der Weg

                              Kommentar


                                läuft auch nicht

                                Die ist die Ausgabe von meinem Browser

                                Code:
                                Array
                                (
                                    [0] => <td class="value">23,2 °C</td>
                                    [1] => <td class="value">23,7 °C</td>
                                    [2] => <td class="value">23,1 °C</td>
                                    [3] => <td class="value">9,9 °C</td>
                                    [4] => <td class="value">24,4 °C</td>
                                    [5] => <td class="value">24,7 °C</td>
                                    [6] => <td class="value">25,2 °C</td>
                                    [7] => <td class="value">25,9 °C</td>
                                    [8] => <td class="value">10,58 bar </td>
                                    [9] => <td class="value">10,61 bar</td>
                                    [10] => <td class="value">16,37 bar</td>
                                    [11] => <td class="value">18,8 l/min</td>
                                    [12] => <td class="value">0,0 A</td>
                                    [13] => <td class="value">0 Hz</td>
                                    [14] => <td class="value round-rightbottom">0 Hz</td>
                                    [15] => <td class="value">12,125 kWh</td>
                                    [16] => <td class="value">3,880 MWh</td>
                                    [17] => <td class="value">17,919 kWh</td>
                                    [18] => <td class="value">4,772 MWh</td>
                                    [19] => <td class="value">0,000 MWh</td>
                                    [20] => <td class="value round-rightbottom">0,000 MWh</td>
                                    [21] => <td class="value">1,784 kWh</td>
                                    [22] => <td class="value">0,661 MWh</td>
                                    [23] => <td class="value">4,572 kWh</td>
                                    [24] => <td class="value round-rightbottom">1,017 MWh</td>
                                    [25] => <td class="value">961 h</td>
                                    [26] => <td class="value">781 h</td>
                                    [27] => <td class="value">14 h</td>
                                    [28] => <td class="value">0 h</td>
                                    [29] => <td class="value">0 h</td>
                                    [30] => <td class="value round-rightbottom">0 h</td>
                                )
                                Zuletzt geändert von benji; 22.02.2016, 23:09. Grund: Benjamin

                                Kommentar

                                Lädt...
                                X