Ankündigung

Einklappen
Keine Ankündigung bisher.

EDOMI - LBS - Diskussion

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

  • benji
    antwortet
    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

    Einen Kommentar schreiben:


  • wintermute
    antwortet
    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

    Einen Kommentar schreiben:


  • wintermute
    antwortet
    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

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


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

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

    Einen Kommentar schreiben:


  • wintermute
    antwortet
    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?

    Einen Kommentar schreiben:


  • benji
    antwortet
    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ß

    Einen Kommentar schreiben:


  • wintermute
    antwortet
    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"

    Einen Kommentar schreiben:


  • rdeckard
    antwortet
    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(); 

    Einen Kommentar schreiben:


  • wintermute
    antwortet
    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?

    Einen Kommentar schreiben:


  • benji
    antwortet
    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ß

    Einen Kommentar schreiben:


  • wintermute
    antwortet
    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!

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • wintermute
    antwortet
    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

    Einen Kommentar schreiben:


  • wintermute
    antwortet
    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

    Einen Kommentar schreiben:

Lädt...
X