Ankündigung

Einklappen
Keine Ankündigung bisher.

Item für Wert über/unterschreiten und Zeitkomponente

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

    #16
    Zitat von Msinn Beitrag anzeigen
    was meinst Du mit 'Zeiten in User-Funktionen abfragen​'? Das musst schon etwas genauer beschreiben.
    Es geht um das Ziel des Threads, also ein Zeitfenster überwachen. Beispiel:

    value < 27 für 60 Sekunden

    Wie könnte das aussehen, dass die User-Funktion dann eben auch 60 Sekunden lang den Wert prüft?

    Kommentar


      #17
      Ich bin etwas begriffstutzig. Ich verstehe die Aufgabenstellung 'ein Zeitfenster überwachen' immer noch nicht wirklich.

      Ich habe verstanden, dass nach einem Startzeitpunkt geprüft werden soll, ob der Wert in einem gewissen Zeitraum (60 Sek) nicht wieder höher als ein Schwellwert wird. Der Startzeitpunkt wird (so vermute ich) bei unterschreiten des Schwellwertes gesetzt werden?

      Was soll den bei Ablauf des Zeitintervalls oder bei Überschreiten des Schwellwertes passieren?


      Zitat von Cannon Beitrag anzeigen
      Wie könnte das aussehen, dass die User-Funktion dann eben auch 60 Sekunden lang den Wert prüft?
      Gar nicht.ich glaube Dein Denkansatz läuft in eine falsche Richtung.

      So wie ich das bis jetzt verstanden habe,
      benötigst Du eigentlich nur eine Reihe von Items.

      - eingangswert_item
      - timer_item (ein autotimer)
      - pruef_item


      - Wenn das eingangswert_item den Schwellwert (27) unterschreitet, wird per on_update der timer gestartet und das pruef_item auf True gesetzt.
      - Wenn das eingangswert_item den Schwellwert (27) überschreitet, wird per on_update das pruef_item auf False gesetzt.
      - Wenn der Timer abläuft, tut das Item was es tun soll, aber nut, falls das pruef_item True ist.
      Viele Grüße
      Martin

      There is no cloud. It's only someone else's computer.

      Kommentar


        #18
        Zitat von Msinn Beitrag anzeigen
        Ich bin etwas begriffstutzig. Ich verstehe die Aufgabenstellung 'ein Zeitfenster überwachen' immer noch nicht wirklich.

        Ich habe verstanden, dass nach einem Startzeitpunkt geprüft werden soll, ob der Wert in einem gewissen Zeitraum (60 Sek) nicht wieder höher als ein Schwellwert wird. Der Startzeitpunkt wird (so vermute ich) bei unterschreiten des Schwellwertes gesetzt werden?
        Vielleicht stelle ich mich auch nur doof an, um das genau zu formulieren. ;-)

        Aber deine Annahme ist aber richtig,

        Zitat von Msinn Beitrag anzeigen
        Was soll den bei Ablauf des Zeitintervalls oder bei Überschreiten des Schwellwertes passieren?
        Wenn man das im eval lösen könnte, dann sollte das so aussehen:

        eval: True if value < 27 für 60 Sekunden else False

        oder

        eval: True if sh.irgend_ein_item() < 27 für 60 Sekunden else False

        Ausgelöst würde das durch einen eval_trigger z.B.

        Ich glaube das erklärt alles?

        Damit hätte ich dann einen Schwellwertschalter und das ohne mehrere Items.

        Klar ist aber, und das wäre dann die Herausforderung, dass eval so lange "warten" muss, bis die Zeit abgelaufen ist oder bis der Wert überschritten ist. Darüber hinaus wird ja der Wert immer wieder getriggert, wenn er sich ändern sollte. Wie man das technisch umsetzt? Keine Ahnung.

        Aber wenn das gehen würde, wäre das eine erheblich Erleichterung.

        Der vorherige Ansatz mit einer User-Funktion wäre auch machbar, denke ich, wenn man in der Funktion selbst irgendwo Variablen speichern könnte bzw. statisch machen könnte.

        Kommentar


          #19
          Zitat von Cannon Beitrag anzeigen
          wenn man in der Funktion selbst irgendwo Variablen speichern könnte bzw. statisch machen könnte.
          Klar kannst Du das. Eine Datei mit Userfunctions ist ja eine ganz normale Python Datei. Wenn Du in der Datei Variablen auf oberster Ebene deklarierst (nicht in den Funktionen) und sie in den Funktionen als 'global', dann kannst Du aus verschiedenen Funktionen innerhalb dieser Datei darauf zugreifen und die Variablenwerte bleiben bis zum neu laden der Userfunctions Datei erhalten.
          Viele Grüße
          Martin

          There is no cloud. It's only someone else's computer.

          Kommentar


            #20
            Zitat von Msinn Beitrag anzeigen
            Klar kannst Du das. Eine Datei mit Userfunctions ist ja eine ganz normale Python Datei. Wenn Du in der Datei Variablen auf oberster Ebene deklarierst (nicht in den Funktionen) und sie in den Funktionen als 'global', dann kannst Du aus verschiedenen Funktionen innerhalb dieser Datei darauf zugreifen und die Variablenwerte bleiben bis zum neu laden der Userfunctions Datei erhalten.
            Klingt nachvollziehbar und ein guter Ansatz. Ich teste das demnächst mal.

            Kommentar


              #21
              Ich habe jetzt mal ein paar Tests gemacht. Es scheint schon mal gut zu funktionieren und vor allem habe ich den ganzen Kram weg vom item und in der user-Funktion:

              Hier mal ein Beispiel aus der User-Funktion:

              Code:
              # prüfen, ob Wert des Quellitems über einen bestimmten Wert steigt und innerhalb einer Zeit nicht mehr unterschreitet
              def Ueberschreitung(item, Wert_Quellitem, Wert_Ueberschreitung, Dauer_Ueberschreitung):
                  if Wert_Quellitem > Wert_Ueberschreitung:
                      if not item() and item.property.last_update_age > Dauer_Ueberschreitung:
                          return True
                      if not item():
                          item.timer(Dauer_Ueberschreitung, True)
                      return None
                  else:
                      return False​
              Hier aus meinem Struct:

              Code:
              Schwellwert:
                  type: num
                  Status:
                      type: bool
                      cache: yes
                      enforce_updates: yes
                      #eval: uf.itools.Ueberschreitung(sh..self, sh...(), sh...Parameter.Wert_Ueberschreitung(), sh...Parameter.Dauer_Ueberschreitung())
                      eval: uf.itools.Ueberschreitung(sh.Test.SCHWELLWERT.Status, sh...(), sh...Parameter.Wert_Ueberschreitung(), sh...Parameter.Dauer_Ueberschreitung())
                      eval_trigger: ..
                  Parameter:
                      Wert_Ueberschreitung:
                          type: num
                          cache: yes
                      Dauer_Ueberschreitung:
                          type: num
                          cache: yes​
              Und so wenig bleibt dann im Item übrig:

              Code:
              Test:
                  SCHWELLWERT:
                      struct: Schwellwert​
              Ein paar Dinge fehlen noch, aber der Ansatz scheint zu funktionieren. Was allerdings ein Problem ist und da hoffe ich auf Hilfe:

              Ich kann den den 1. Parameter in itools.Ueberschreitung nicht als relativen Pfad angeben (auskommentiertes Beispiel). Der wird halt nicht aufgelöst. Kriege ich das ggf. in der User-Funktion aufgelöst?

              Wenn das geht, werde ich das zu Ende machen und auch eine Unterschreitung mit einbinden.

              Kommentar


                #22
                Zitat von jentz1986 Beitrag anzeigen
                Ich nutze die timmy Funktionalität ...
                Wäre es denn vielleicht sinnvoll das Plugin mal inst offizielle Repository mit zu übernehmen?


                Kommentar


                  #23
                  Zitat von bmx Beitrag anzeigen
                  Wäre es denn vielleicht sinnvoll das Plugin mal inst offizielle Repository mit zu übernehmen?
                  Das timmy-Plugin ist doch drin. Nur erschließt sich mir nicht, wie man das damit lösen kann.

                  Kommentar


                    #24
                    ups. komischer Stand gewesen bei mir ...

                    Kommentar


                      #25
                      https://raw.githubusercontent.com/je...y/user_doc.rst

                      der hier beschriebene Fall mit der Hysterese sollte das eigentlich genau darstellen was Du Cannon suchst…

                      Kommentar


                        #26
                        Ich würde meinen Fall erstmal mit den ganzen Items oben erschlagen und etwas Hoffnung hegen, dass sich demnächst was einfacheres im Standardrepertoire befindet
                        Derzeit zwischen Kistenauspacken und Garten anlegen.
                        Baublog im Profil.

                        Kommentar


                          #27
                          Zitat von jentz1986 Beitrag anzeigen
                          der hier beschriebene Fall mit der Hysterese sollte das eigentlich genau darstellen was Du
                          Ja klingt gut. Ich werde das mal bei Zeiten anschauen. Danke.

                          Kommentar


                            #28
                            Ein Blick in die Zukunft:

                            Im Release 1.10 von SmartHomeNG wird man ein Item so konfigurieren können, dass es einen Schwellwert mit Hysterese implementiert. Im develop Branch ist das bereits implementiert.

                            In dem Item soll auch ein Zeitglied implementiert werden, damit die Wertänderung erst geschieht, wenn ein Schwellwert für einen bestimmten Zeitraum über- bzw. unterschritten wird. Das Zeitglied ist bisher allerdings noch nicht implementiert.
                            Viele Grüße
                            Martin

                            There is no cloud. It's only someone else's computer.

                            Kommentar


                              #29
                              Zitat von Msinn Beitrag anzeigen
                              Im Release 1.10 von SmartHomeNG wird man ein Item so konfigurieren können, dass es einen Schwellwert mit Hysterese implementiert. Im develop Branch ist das bereits implementiert.
                              Das freut mich sehr. Dann ist da leidige Thema vom Tisch. ;-)

                              Kommentar


                                #30
                                Zitat von Msinn Beitrag anzeigen
                                Das Zeitglied ist bisher allerdings noch nicht implementiert.
                                Kopier doch einfach das aus timmy, dann stirbt das Plugin. Macht doch sinn so, oder?

                                Kommentar

                                Lädt...
                                X