Ankündigung

Einklappen
Keine Ankündigung bisher.

Datum korrekt formatieren

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

    Datum korrekt formatieren

    Hallo Leute

    Meine Unwetterwarnung auf der Visu sollte nur für die Tage an denen sie besteht angezeigt werden.
    Aktuell sieht es so aus dass ich bei einer bestehenden Unwetterwarnung alle Symbole rot einfärbe.
    Die Tage und Vorhersagen verschieben sich jeden Tag um einen Tag nach links. Also das Universalelement für aktuell So ist [heute+1 Tag] für Mo [heute+2 Tage] usw.

    1.JPG

    Die Unwetterauswertung erfolgt über folgende Logikseite, und hier soll der Start und Endzeitpunkt so aufbereitet werden damit ich die Visu entsprechend steuern kann.

    2.JPG

    Mit den oberen 4 LBS Zeitformatierung hätte ich testweise gemäß folgender Doku versucht die Epochalzeit entweder mit "D" in dreistellige Wochentage bzw mit "N" als 1-7 auszugeben. Leider funktioniert beides nicht wie gewünscht.

    3.JPG

    Ein weiteres Problem wird noch auftreten wenn sich das Unwetter über mehr als zwei Tage erstreckt. Bei beispielhaften Beginn Montag und Ende Mittwoch, wären diese beiden mit meiner Vorgehensweise korrekterweise rot eingefärbt, aber der dazwischenliegende Dienstag leider weiß.

    Über Vorschläge wäre ich sehr dankbar.
    Liebe Grüße
    Jürgen
    Zuletzt geändert von fudi6489; 16.02.2021, 19:09.

    #2
    Für jedes Datum sowas:

    dat.PNG

    http://service.knx-user-forum.de/?co...ad&id=19000805
    Damit die ganzen Tage angezeigt werden an E2 am Unwetter Ende
    PHP-Code:
    strtotime("tomorrow"$E1) - 
    und am Unwetter Start
    PHP-Code:
    strtotime("today"$E1
    Zum Auswerten den A3 vom http://service.knx-user-forum.de/?co...ad&id=19001147 verwenden.
    Zuletzt geändert von vento66; 14.02.2021, 09:18.

    Kommentar


      #3
      Kommt aus dem Meteo LBS eine Liste mit mehreren Daten als Liste raus? Dann hilft wohl ein eigener LBS

      dat.PNG

      Hier mal der Quelltext, da er wahrscheinlich zu speziell ist, um den hochzuladen:

      EDIT Quelltext, gelöscht, bereinigter Quelltext folgt im späteren Verlauf des Threads...
      Zuletzt geändert von vento66; 16.02.2021, 19:11.

      Kommentar


        #4
        Servus Micha
        Einen großen Dank an dich, ist ja nicht unbedingt wenig Arbeit die du hier in mich investiert hast

        Der Tipp mit der Bereichsprüfung war Gold wert. Da der Darksky Baustein, die Epochalzeit für die jeweiligen Tage ausspuckt, war es dann mit deiner LBS Empfehlung relativ simpel. Die PHP-Funktion habe ich somit nicht gebraucht.

        Einen kleinen Fehler hat das Ganze aber noch, und ich muss mir am Abend mal ansehen ob dies mit deiner Variante auch zutreffen würde.

        Wenn das Unwetter beispielsweise am Montag um 19.00 beginnt und am Dienstag um 8:00 endet, wird es nur für Dienstag angezeigt da der Wert an E1 Dienstag 0:00 entspricht, und am Montag um 0:00 die Unwetterwarnung noch nicht bestand.

        Ganz eklatant würde es sich natürlich auswirken wenn der Zeitraum des Unwetters sich nicht über 0:00 Uhr erstreckt, beispielsweise 8:00-23:00 denn dann würde es durch die Logik durchrutschen.

        1.JPG

        Liebe Grüße und Danke
        Jürgen

        Kommentar


          #5
          Die PHP function LBS setzten das Datum immer auf Starttag 0:00 bzw Endtag 23:59:59. Damit wird der Tag auch angezeigt, wenn der Start um 22:00 ist. Nimm aber lieber den LBS. den ich angehängt habe, sonst musst Du ja für jedes Start / End Paar vom Meteo LBS die Berechnung neu machen. Kann ja auch sein, das die sich überlappen...

          Kommentar


            #6
            Die Logik ist etwas größer geworden, aber durch das verbiegen der Zeit mit den von dir vorgeschlagenen PHP-Funktionsbausteinen funktioniert es jetzt exakt wie gewünscht.

            Die Firma dankt

            Liebe Grüße
            Jürgen

            Kommentar


              #7
              Ja, aber warum nimmst Du nicht den LBS? den hängst direkt an A7 / A8 vom Meteo LBS, und der gibt für die nächsten 7 Tage aus, wann ein Ereigniss vorliegt.

              Kommentar


                #8
                Servus Micha und schöne Grüße nach Wien
                Der Grund ist weil ich mit deinem letzten Baustein immer einen Versatz von einem Tag hatte.

                Beginn: 15.02.2021 10:00 1613380200
                Ende: 20.02.2021 10:00 1613812200

                Linker "Date in Range" sind obige Werte, rechter Baustein mit der vorgeschaltenen PHP-Funktion

                1.JPG

                Auch wenn ich die Werte mit der PHP verbiege bleibt das Ergebnis gleich.
                In beiden Fällen sollte eigentlich Heute+5 auch noch aktiv sein.

                Liebe Grüße
                Jürgen

                Kommentar


                  #9
                  Eigentlich ist es noch viel schlimmer! Das Enddatum ist Samstag , 2021-02-20 10:10:00 CET, also muss auch der noch mit aktiv sein....

                  PHP-Code:
                  ###[DEF]###
                  [name        =    Date in Range]

                  [e#1        =    Liste Start]
                  [e#2        =    Liste Ende]

                  [a#1        =    Heute]
                  [a#2        =    Heute +1]
                  [a#3        =    Heute +2]
                  [a#4        =    Heute +3]
                  [a#5        =    Heute +4]
                  [a#6        =    Heute +5]
                  [a#7        =    Heute +6]

                  ###[/DEF]###


                  ###[HELP]###
                  Vorlage: Standard-LBS
                  ###[/HELP]###


                  ###[LBS]###
                  <?
                  function LB_LBSID($id) {
                      if ($E=logic_getInputs($id)) {
                          if($E[1]['value'] != '' && $E[2]['value'] != ''){
                         $slist = explode('|',$E[1]['value']);
                          $elist = explode('|',$E[2]['value']);
                          $heute = strtotime("today", time());
                              foreach($slist as $k => $s){                
                                  $start = strtotime("today", $slist[$k]);
                                  $end = strtotime("tomorrow", $elist[$k])-1;
                                  $d0[] = $heute >= $start && $heute <= $end ? 1:0;
                                  $d1[] = strtotime('+1 day', $heute)+1 >= $start && strtotime('+2 day', $heute) -1 <= $end ? 1:0;
                                  $d2[] = strtotime('+2 day', $heute)+1 >= $start && strtotime('+3 day', $heute) -1 <= $end ? 1:0;
                                  $d3[] = strtotime('+3 day', $heute)+1 >= $start && strtotime('+4 day', $heute) -1 <= $end ? 1:0;
                                  $d4[] = strtotime('+4 day', $heute)+1 >= $start && strtotime('+5 day', $heute) -1 <= $end ? 1:0; 
                                  $d5[] = strtotime('+5 day', $heute)+1 >= $start && strtotime('+6 day', $heute) -1 <= $end ? 1:0;
                                  $d6[] = strtotime('+6 day', $heute)+1 >= $start && strtotime('+7 day', $heute) -1 <= $end ? 1:0;
                              }
                              logic_setOutput($id,1,max($d0));
                              logic_setOutput($id,2,max($d1));
                              logic_setOutput($id,3,max($d2));
                              logic_setOutput($id,4,max($d3));
                              logic_setOutput($id,5,max($d4));
                              logic_setOutput($id,6,max($d5));
                              logic_setOutput($id,7,max($d6));
                          }
                      }
                  }
                  ?>
                  ###[/LBS]###


                  ###[EXEC]###
                  <?
                  ?>
                  ###[/EXEC]###

                  Kommentar


                    #10
                    Funktioniert jettzt wie gewünscht.

                    Danke dir

                    Kommentar

                    Lädt...
                    X