Ankündigung

Einklappen
Keine Ankündigung bisher.

Zeitdifferenz

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

    Zeitdifferenz

    Suche nach einer Funktion die Zeitdifferenz von 2 Werten zu ermitteln.

    Bei der Auslösung eine PM wird die Systemzeit (5) gespeichert, wird der nächste PM ausgelöst wird ebenfalls die Auslösezeit gespeichert.

    Nun will ich die Laufrichtung ermitteln. Muß also ermitteln ob Wert negativ oder positiv.

    Der LBS 19888152 hätte eigentlich gepasst, der liefert aber kuriose Werte

    You do not have permission to view this gallery.
    This gallery has 1 photos.
    Gruß Hartwig

    #2
    Ich kenne jetzt den LBS nicht. Wahrscheinlich musst Du die Eingänge mit dem Unix-Time-Stamp versorgen. Ergebnis scheint ein Unix-Time-Stamp zu sein.
    Probiers mal: klick

    Das gleiche Vorhaben mit PM (Steinel ihf knx) raubt mir noch die letzten Nerven seit einem Monat.
    Die Zeit einer Zone ermittle ich so:
    Code:
    ###[DEF]###
    [name        =Entfernung Trigger        ]
    
    [e#1        =Trigger                ]
    
    [a#1        =Ausgang                ]
    ###[/DEF]###
    
    
    ###[HELP]###
    
    ###[/HELP]###
    
    
    ###[LBS]###
    <?
    function LB_LBSID($id) {
        if ($E=logic_getInputs($id)) {
            if ($E[1]['value']!=0 && $E[1]['refresh']==1) {
                logic_setOutput($id,1,getMicrotime(true));
            }
            elseif ($E[1]['value']==0 && $E[1]['refresh']==1) {
                logic_setOutput($id,1,0);
            }
        }
    }
    ?>
    ###[/LBS]###
    
    
    ###[EXEC]###
    <?
    
    ?>
    ###[/EXEC]###
    >>Smelly One<<
    >> BURLI <<
    Grüße Armin

    Kommentar


      #3
      Ich habe mich nun an einem Baustein versucht.

      Der Baustein soll je einen Timestamp liefern wenn ein Trigger auf E1 oder E2 kommt. Der jeweilige Timestamp wird dann auf A1 und A2 ausgegeben.

      Soweit alles Gut,

      Nun würde ich gerne die Zeitdifferenz rechnen, aber hier scheitere ich.
      Jeweils nach einem Trigger scheint der vorige Werte $TIME1 oder $TIME2 verloren zu sein.

      Was mache ich da falsch?
      Muss ich die Variable $TIME1 bzw. $TIME2 anders definineren, so dass diese erhalten bleibt?

      PHP-Code:
      ###[DEF]###
      [name        =Zeitdifferenz]

      [e#1        =Trigger Event1    ]
      [e#2        =Trigger Event2 ]
      [e#3        =max.erlaubte Zeitdifferenz #init=60]

      [a#1        =Timestamp Event1    ]
      [a#2        =Timestamp Event2   ]
      [a#3        =Zeitdifferenz in sec]
      [a#4        =debug]
      [a#5        =Richtung]
      [a#6    =TEST]

      ###[/DEF]###


      ###[HELP]###
      Vorlage: Standard-LBS
      Dieser Baustein ermittelt die Zeitdifferenz zwischen 2 Events
      ###[/HELP]###


      ###[LBS]###
      <?


      function LB_LBSID($id) {
                  if ($E=logic_getInputs($id)) {
                  if ($E[1]['value']!=0 && $E[1]['refresh']==1) {
                         $TIME1=getMicrotime(true);
                         logic_setOutput($id,1,$TIME1);
                      }
                  elseif ($E[2]['value']!=0 && $E[2]['refresh']==1) {
                         $TIME2=getMicrotime(true);
                         logic_setOutput($id,2,$TIME2);
                      }

                  $DIFF=$TIME2-$TIME1;

                  logic_setOutput($id,6,$DIFF);

                  If (($TIME1>0) && ($TIME2>0)) {

                      //prüfen ob im Gültigkeitsbereich 

                      logic_setOutput($id,3,$DIFF);

                      if (abs($DIFF) < $E[3]['value']) {    
                          //Wert ist gültig
                          //prüfen ob positiv oder negativ
                            if ($DIFF < 0) {
                              logic_setOutput($id,5,1);
                          }
                          else {
                              logic_setOutput($id,5,2);
                          }
                         }

                  } 
                    else {
                        logic_setOutput($id,3,0);
                         logic_setOutput($id,4,99);
                  }
              }
      }
      ?>
      ###[/LBS]###


      ###[EXEC]###
      <?

      ?>
      ###[/EXEC]###
      Gruß Hartwig

      Kommentar


        #4
        Ja natürlich ist der verloren. Es ist eine Funktion. Und $TIME1 und $TIME2 sind lokale Variablen. Also beim nächsten Funktionsaufruf nicht mehr gesetzt.

        Eine mögliche Lösung wäre, dass du beide Variablen als static definierst:


        PHP-Code:


        function LB_LBSID($id) {
        static 
        $TIME1$TIME2;
        .... 

        Kommentar


          #5
          Warum so kompliziert und den Umweg über Timestamps gehen?! Nutze doch einfach z.B. den LBS 13000023 (Triggerfolge)... EDOMI arbeitet ereignisgesteuert, daher sind Timestamp-Differenzen etc. in den allermeisten Fällen überflüssig.
          EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

          Kommentar


            #6
            jonofe Super, vielen Danke jetzt passt das?

            mein ersten Baustein, mein erstes php Programm, bitte um Nachsicht

            gaert mit Triggerfolge konnte ich nichts anfangen, oder habe das schlichtweg übersehen.
            Da ich bei einigen Dingen die Richtung brauche, und auch in die LBS reinkommen will werde ich mal den Baustein, auch wenn kompliziert fertig machen.

            Ziel ist es über 2 Events und ein gültiges Zeitfenster die Richtung bei Induktionsschleifen und Bwg-Melder direkt auszugeben.

            Nochmals an Danke für die Hilfe
            Gruß Hartwig

            Kommentar


              #7
              Dafür wäre der genannte LBS wunderbar geeignet - für jedes der Ereignisse (Trigger) kannst Du ein Zeitfenster festlegen. Wenn die entsprechenden Bedingungen erfüllt sind, wird der Ausgang gesetzt.
              EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

              Kommentar


                #8
                Zitat von gaert Beitrag anzeigen
                Warum so kompliziert und den Umweg über Timestamps gehen?! Nutze doch einfach z.B. den LBS 13000023 (Triggerfolge)... EDOMI arbeitet ereignisgesteuert, daher sind Timestamp-Differenzen etc. in den allermeisten Fällen überflüssig.
                Den habe ich mir auch angesehen. Nur, es gibt nicht nur eine Richtung, sondern zwei. Angenommen, ich habe 3 Detektoren für eine Richtungsermittlung. Einmal komme ich von 3, das andere Mal von 1. Da wirds dann schwierig mit dem LBS 13000023 mit der Richtungsunterscheidung, oder habe ich wiedermal ein Brett vorm Kopf.
                Mit den Differenzen des Zeitstempels geht es (fast) gut.
                >>Smelly One<<
                >> BURLI <<
                Grüße Armin

                Kommentar


                  #9
                  ich stelle morgen mal meinen fertigen Baustein ein, da kannst du einfach noch einen Eingang dazu machen und dann auswerten
                  Gruß Hartwig

                  Kommentar


                    #10
                    WagoKlemme
                    Was spricht gegen den Einsatz mehrerer LBS 13000023? Jeder für eine Richtung...
                    EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                    Kommentar


                      #11
                      Weil es nicht nur 1 2 3 und 3 2 1 gibt, sondern auch 2 3 und 2 1.
                      >>Smelly One<<
                      >> BURLI <<
                      Grüße Armin

                      Kommentar


                        #12
                        PHP-Code:
                        ###[DEF]###
                        [name        =Zeitdifferenz]

                        [e#1        =Trigger Event1    ]
                        [e#2        =Trigger Event2 ]
                        [e#3        =max.erlaubte Zeitdifferenz #init=60]
                        [e#4        =Text Richtung1]
                        [e#5        =Text Richtung2]

                        [a#1        =Timestamp Event1    ]
                        [a#2        =Timestamp Event2   ]
                        [a#3        =Diff E1-E2 in sec]
                        [a#4        =Richtung]
                        [a#5        =Richtung als Text]

                        ###[/DEF]###


                        ###[HELP]###
                        Vorlage: Standard-LBS
                        Dieser Baustein ermittelt die Zeitdifferenz zwischen 2 Events
                        ###[/HELP]###


                        ###[LBS]###
                        <?


                        function LB_LBSID($id) {
                                static $TIME1,$TIME2;
                                if ($E=logic_getInputs($id)) {
                                    if ($E[1]['value']!=0 && $E[1]['refresh']==1) {
                                           $TIME1=getMicrotime(true);
                                           logic_setOutput($id,1,$TIME1);
                                        }
                                    elseif ($E[2]['value']!=0 && $E[2]['refresh']==1) {
                                           $TIME2=getMicrotime(true);
                                           logic_setOutput($id,2,$TIME2);
                                    }

                                    $DIFF=$TIME2-$TIME1;

                                    If (($TIME1>0) && ($TIME2>0)) {

                                        //prüfen ob im Gültigkeitsbereich 

                                        logic_setOutput($id,3,$DIFF);

                                        if (abs($DIFF) <= $E[3]['value']) {    
                                            //Wert ist gültig
                                            //prüfen ob positiv oder negativ
                                            if ($DIFF < 0) {
                                                logic_setOutput($id,4,1);
                                                logic_setOutput($id,5,$E[4]['value']);
                                            }
                                            else {
                                                logic_setOutput($id,4,2);
                                                logic_setOutput($id,5,$E[5]['value']);
                                            }
                                        }
                                        else {
                                            //wert ungültig    
                                            logic_setOutput($id,4,0);
                                        }

                                    } 
                                      else {
                                        //keine 2 gültigen Werte

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


                        ###[EXEC]###
                        <?

                        ?>
                        ###[/EXEC]###
                        Mit dem Baustein habe ich jetzt mal mit meinen beiden Induktionschleifen ein Richtungsbestimmung gemacht.

                        War mein erster Baustein und erste mal mit PHP. Geht sicher viel einfacher, aber läuft.
                        Hier kannst Du einen weiteren Timer reinnehmen und dann auswerten, wie Du willst

                        Gruß Hartwig

                        Kommentar


                          #13
                          Ich habe es so gelöst und funktioniert auch. Für jede Entfernung o.g. LBS verbunden mit:

                          Code:
                          ###[DEF]###
                          [name        =Steinel PWM    ]
                          
                          [e#1        =Zeit Entf 1                ]
                          [e#2        =Zeit Entf 2                ]
                          [e#3        =Zeit Entf 3                ]
                          [e#4        =Kommend                ]
                          [e#5        =Gehend                    ]
                          
                          [a#1        =Kommend                ]
                          [a#2        =Gehend                    ]
                          [a#3        =Status                    ]
                          
                          [v#1        =0                        ]
                          ###[/DEF]###
                          
                          
                          ###[HELP]###
                          ###[/HELP]###
                          
                          
                          ###[LBS]###
                          <?
                          function LB_LBSID($id) {
                              if ($E=logic_getInputs($id))  {
                          
                                  if ($E[1]['refresh']==1 && ($E[1]['value']<$E[3]['value'] || $E[2]['value']<$E[3]['value']))  {
                                              logic_setOutput($id,2,$E[5]['value']);
                                  }
                                  if ($E[3]['refresh']==1 && ($E[3]['value']<$E[1]['value'] || $E[3]['value']<$E[2]['value'])) {
                                              logic_setOutput($id,1,$E[4]['value']);
                                  }
                                  if (($E[1]['refresh']==1 || $E[2]['refresh']==1 || $E[3]['refresh']==1) && ($E[1]['value']==0) && ($E[2]['value']==0) && ($E[3]['value']==0))  {
                                              logic_setOutput($id,1,'');
                                              logic_setOutput($id,2,'');
                                  }
                              }
                          }
                          ?>
                          ###[/LBS]###
                          
                          
                          ###[EXEC]###
                          <?
                          
                          ?>
                          ###[/EXEC]###
                          >>Smelly One<<
                          >> BURLI <<
                          Grüße Armin

                          Kommentar


                            #14
                            Zitat von hartwigm Beitrag anzeigen
                            Der LBS 19888152 hätte eigentlich gepasst, der liefert aber kuriose Werte
                            Was genau kommt denn da kurioses raus? Hast Du mal ein Beispiel fuer mich?

                            Kommentar


                              #15
                              michael
                              siehst du im Bild Thread 1 im gelben Feld
                              Gruß Hartwig

                              Kommentar

                              Lädt...
                              X