Ankündigung

Einklappen
Keine Ankündigung bisher.

Zeitvergleich im Fenster und Zeit add/sub durch Trigger

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

    Zeitvergleich im Fenster und Zeit add/sub durch Trigger

    Zeitvergleich: https://service.knx-user-forum.de/?c...ad&id=19000068 Vergleich eines Zeitfensters mit der Systemzeit. Nützlich z.B wenn bei Neustart festgestellt werden soll ob man sich im oder außerhalb eines Zeitfensters befindet

    Zeit add/sub https://service.knx-user-forum.de/?comm=download&id=19000069 Eingabe einer Zeit hh:mm und eines gewünschten Offsets mm. Bei Trigger = 1 wird der Offset addiert, bei Trigger 2 wird der Offset subtrahiert.
    Ich habe 2 Tasten + und - in der Visu die dann jeweils das gleiche KO setzen 1 oder 2. Damit kann ich je nach Taste eine Zeit ändern z.B + oder - 10 Minuten

    #2
    Was für einen Datentyp verwendest du für das KO beim Zeitvergleich-LBS. Eingang E3 und E4: DTP10??

    Kommentar


      #3
      Zeit in "hh:mm:ss" z. B. "17:51:53"
      ​​​​Kein DPD xx

      Kommentar


        #4
        Hi Hartmut,

        LBS 19000068 hat leider einen Bug wenn es über Mitternacht hinweg geht.
        Hat anscheinend noch niemand so benutzt ausser mir

        Ich hab das jetzt mal bei mir gefixed und noch ein bisschen Logging/Debug dazu gemacht.
        Möchtest du deinen LBS damit aktualisieren oder soll ich es lieber selber hochladen?
        Gruß
        Michael

        Kommentar


          #5
          Ich kann es gern hochladen, und aktualisieren.
          Danke
          Hartmut

          Kommentar


            #6
            Ich teste nochmal heute Nacht im Echtbetrieb aber zumindest in meinen Tests hat der überlauf jetzt funktioniert.
            Hier der Code:

            PHP-Code:
            ###[DEF]###
            [name = Zeitvergleich V0.2 lbs19000068]

            [e#1 =Trigger #init=0 ]
            [e#2 =Debug #init= 0 ]
            [e#3 =Zeit von #init= 6:55:00]
            [e#4 =Zeit bis  #init= 20:00:00]



            [a#1 =im Zeitbereich ]

            [v#100           = 0.2 ]
            [v#101           = 19000068 ]
            [v#102           = Zeitvergleich]
            [v#103           = 0 ]
            [v#104           = 0 ]
            [v#105           = 0 ]
            ###[/DEF]###


            ###[HELP]###

            E1: Trigger bei Neustart .. alle Stunde usw.
                 Vergleich E2 und E3 mit der Systemzeit Ausgabe 0 = au�erhalb Zeitbereich, 1 im Zeitbereich es funktioniert auch �ber den Tagwechsel
                 Von 22:00:00 .. 06:00:00  bei Sytemzeit 23:00:25 wird im Zeitbereich = 1 ausgegeben

            E2: Debug = 1 für Logging
            E3: Zeit von hh:mm:ss
            E4: Zeit bis hh:mm:ss

            A1: ausserhalb Zeitbereich = 0 im Zeitbereich = 1

            V100: Version
            V101: LBS Number
            V102: Log file name
            V103: Log level
            V104: One log file per LBS instance
            V105: log ID in each log entry
            ###[/HELP]###

            ###[LBS]###
            <?
            function LB_LBSID_logging($id, $msg, $var = NULL, $priority = 8)
            {
              $E = getLogicEingangDataAll($id);
              $logLevel = getLogicElementVar($id, 103);
              if (is_int($priority) && $priority <= $logLevel && $priority > 0) {
                $logLevelNames = array(
                  'none',
                  'emerg',
                  'alert',
                  'crit',
                  'err',
                  'warning',
                  'notice',
                  'info',
                  'debug'
                );
                $version = getLogicElementVar($id, 100);
                $lbsNo = getLogicElementVar($id, 101);
                $logName = getLogicElementVar($id, 102) . "-LBS$lbsNo";
                $logName = preg_replace('/ /', '_', $logName);
                if (logic_getVar($id, 104))
                $logName .= "-$id";
                if (logic_getVar($id, 105) == 1)
                $msg .= " ($id)";
                strpos($_SERVER['SCRIPT_NAME'], $lbsNo) ? $scriptname = 'EXE' . $lbsNo : $scriptname = 'LBS' . $lbsNo;
                writeToCustomLog($logName, str_pad($logLevelNames[$logLevel], 7), $scriptname . " [v$version]:\t" . $msg);
                if (isset($var)) {
                  writeToCustomLog($logName, str_pad($logLevelNames[$logLevel], 7), $scriptname . " [v$version]:\t================ ARRAY/OBJECT START ================");
                  writeToCustomLog($logName, str_pad($logLevelNames[$logLevel], 7), $scriptname . " [v$version]:\t" . json_encode($var));
                  writeToCustomLog($logName, str_pad($logLevelNames[$logLevel], 7), $scriptname . " [v$version]:\t================ ARRAY/OBJECT  END  ================");
                }
              }
            }

            function LB_LBSID($id) {
                if ($E=logic_getInputs($id)) {

                    if ($E[1]['value']!=0 && $E[1]['refresh']==1) {
                  // hier die Logik die nach Trigger durchlaufen wird
                        $Debug = $E[2] ['value'];
                        #$sZeitVon = $argv[1];

                        #$sZeitBis = $argv[2];
                  #$sTime = $argv[3];
                  $sZeitVon = $E[3] ['value'];
                        $sZeitBis = $E[4] ['value'];
                  #date_default_timezone_set('Europe/Berlin');
                        $ZeitVon = strtotime ( $sZeitVon );
                        $ZeitBis = strtotime ( $sZeitBis );
                        $time =time();
                  if ($Debug==1){
                    LB_LBSID_logging($id, "Zeit von:" . strftime("%m-%d-%Y %H:%M:%S",$ZeitVon) . " ZeitBis:" . strftime("%m-%d-%Y %H:%M:%S",$ZeitBis) . " Time:" .  strftime("%m-%d-%Y %H:%M:%S",$time));
                    LB_LBSID_logging($id, "Zeit von:" . $ZeitVon . " ZeitBis:" .$ZeitBis . " Time:" . $time);
                  }
                        if ($ZeitVon < $ZeitBis) { // Zeit ist z.B 7:00 und 19:00
                            if (($ZeitVon < $time) && ($time < $ZeitBis)) {
                                $imZeitbereich = 1;
                            } else {
                                $imZeitbereich = 0;
                            }
                        } else { // Zeit ist z.B 7:00 und 5:00
                    if ($time > $ZeitVon){
                                  $ZeitBis = $ZeitBis + (3600 * 24); // einen Tag dazu
                          if ($Debug==1){
                            LB_LBSID_logging($id, "Add 1 day ZeitBis:" . strftime("%m-%d-%Y %H:%M:%S",$ZeitBis));
                          }
                                      if (($ZeitVon < $time) && ($time < $ZeitBis)) {
                                               $imZeitbereich = 1;
                                      } else {
                                               $imZeitbereich = 0;
                                      }
                  } else {
                    if ($time < $ZeitBis) {
                           $imZeitbereich = 1;
                    } else {
                           $imZeitbereich = 0;
                    }
                  }
                        }
                        if ($Debug==1){
                    LB_LBSID_logging($id,"Result:". $imZeitbereich ); // Ausgang Setzen
                  }
                  logic_setOutput ($id, 1, $imZeitbereich ); // Ausgang Setzen

                    }
                }
            }
            ?>
            ###[/LBS]###

            ###[EXEC]###
            <?
            ?>
            ###[/EXEC]###
            Gruß
            Michael

            Kommentar


              #7
              Hallo zusammen,

              könnte man diesen Baustein vll. noch mit Datumsanfang und Datumsende bestücken?

              Szenario: Ich lasse mir den nächsten Termine Vom Gcalender anzeigen. (z.B. | Sa 27.05 07:00 | Sa 27.05 19:00 |Temrin | ) anzeigen.
              Mit dem String Separator teile ich dann auf und setze aktuell die Zeiten auf die Eingänge des Zeitvergleichers. 07:00 Anfang und 19:00 Ende (in weiterer folge dann die aus dem LBS"DriveTime" späteste Abfahrt bzw vsl Ankunft nach Termin.

              Wie dem auch sei, aktuell ist der Baustein schon Tage vorher aktiv und gibt halt jeden Tag vorher zwischen 07:00 und 19:00 schon "im Fenster 1" aus, obwohl er erst in 3 Tagen ansteht.

              Leider gehen meine PHP Kenntnisse gen 0, und würde mich freuen wenn sich jemand erbarmt.
              Danke schonmal

              P.S. Es hat keine Priorität wäre nur ein nettes "nice2have"

              Kommentar

              Lädt...
              X