Ankündigung

Einklappen
Keine Ankündigung bisher.

Item verzögert ein- bzw. ausschalten

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

    Item verzögert ein- bzw. ausschalten

    Ich möchte ein Item in x Minuten auf True setzen und nach y Minuten soll es wieder auf False fallen. Mit den Timer-Funktionen komme ich nicht weiter, weil es ja nur eine Schaltfunktion ausführen kann. Gibt es da irgendwas anderes um das einfach zu lösen?

    #2
    Du kommst mit dem Timer schon weiter. Musst einfach ein Hilfsitem machen, das verzögert ausschaltet. Dieses Hilfsitem wird getriggert, sobald das eigentliche Item aktiviert wird. Also über on_update oder eval_trigger. Der eval Ausdruck wäre dann sowas wie sh.item.timer(60,0)

    Kommentar


      #3
      Zitat von Onkelandy Beitrag anzeigen
      Du kommst mit dem Timer schon weiter. Musst einfach ein Hilfsitem machen, das verzögert ausschaltet. Dieses Hilfsitem wird getriggert, sobald das eigentliche Item aktiviert wird. Also über on_update oder eval_trigger. Der eval Ausdruck wäre dann sowas wie sh.item.timer(60,0)
      Naja. Ich will ja nicht nur verzögert ausschalten, sondern auch einschalten. Und die Werte idealerweise aus einer Logik setzen. Dann wahrscheinlich mit 2 Hilfitems? Leichter gehts nicht oder?

      Wäre diese universelle Zeitschaltuhr eine Option?

      Kommentar


        #4
        Wenn du eh ne Logik nutzt, dann implementiere dort den timer ohne Hilfsitems.

        Kommentar


          #5
          Zitat von Onkelandy Beitrag anzeigen
          Wenn du eh ne Logik nutzt, dann implementiere dort den timer ohne Hilfsitems.
          Code:
          # ausschalten und in 30 Sekunden anschalten
          sh.item.schalten(False).timer(30, True)
          # ???????
          sh.item.schalten(False).timer(60, False)
          Wie kriege ich denn 2 Timer eines Items in der Logik?

          Kommentar


            #6
            Ohne (False)

            Kommentar


              #7
              Zitat von Onkelandy Beitrag anzeigen
              Ohne (False)
              Wie erwartet, geht das aber nicht, weil anscheinend der 2. Timer, den ersten überschreibt, was auch das Ursprungsproblem in meinem Thread war...

              Code:
              sh.EG.Diele.DALI.Decke.R.schalten.timer(10, True)
              sh.EG.Diele.DALI.Decke.R.schalten.timer(20, False)
              Das Licht schaltet hier nie ein. Wenn ich die 2. Zeile auskommentiere geht es.

              Kommentar


                #8
                Das kann gut sein, ja, da kommt dann aber das angesprochene Hilfsitem z.B. schalten_hilf zum Zug

                Am besten nimmst du dort ein
                Code:
                enforce_updates: True
                on_update: EG.Diele.DALI.Decke.R.schalten = False
                rein. Oder wenn du es als Child von Decke.R.schalten machst, kannst du auch relatives Item wie folgt referenzieren:
                Code:
                enforce_updates: True
                on_update: .. = False

                Und setzt den Timer in der Logik:

                Code:
                 
                 sh.EG.Diele.DALI.Decke.R.schalten_hilf.timer(20, True)

                Kommentar


                  #9
                  Danke. Ich konnte das jetzt mit deinen Ansätzen lösen. :-)

                  Kommentar


                    #10
                    Vielleicht kannst Du Deine Lösung ja mal dokumentieren damit andere was davon haben. Vielleicht als kleines How-To für die Webseite?

                    Kommentar


                      #11
                      Zitat von bmx Beitrag anzeigen
                      Vielleicht kannst Du Deine Lösung ja mal dokumentieren damit andere was davon haben. Vielleicht als kleines How-To für die Webseite?
                      Würde ich gerne tun, ich habe das allerdings zum Teil doch etwas anders gelöst. Das heißt ich kann zwar verzögert einschalten, aber das abschalte relisiere ich über den Aktor selbst. In dem ich die Dauer übermittlere. Sonst war mir das zu viel mit mehrerenm Items. Ich glaube das hilft dann keinen hier weiter oder?

                      Der Ansatz war aber wichtig.

                      Kommentar


                        #12
                        Doch ich denke schon das das dem einen oder anderen hilft. Man hat ja manchmal die verschiedensten Ansätze für eine Problemstellung und oftmals ist es nur eine Kleinigkeit die fehlt und einen dann zum Ziel führt..

                        Kommentar


                          #13
                          Gut, dann poste ich das mal. Ich nutze das für meine Garten-Bewässerung, dazu gibt es auch eine Logik, die aber noch nicht fertig ist.

                          Sinn und Zweck war hier die Bewässung meines Gartens, nicht per App, sondern automatisch. Und das funktioniert soweit auch, aber ist noch nicht fertig, da auch mein Garten noch nicht fertig ist. Mittels KNX ist ein Schaltaktor angebunden, der auf Treppenlicht eingeschaltet ist. Dort habe ich 30 Minuten eingestellt. Das ist dann quasi das Limit, falls hier was abstürzt. Den Aktor kann ich schalten bzw. auch eine Dauer übergeben. Hier übergebe ich die Beregnungs-Dauer in Minuten.

                          Hier also die Items:

                          Code:
                                      Nordost:
                                          schalten:
                                              type: bool
                                              knx_dpt: 1
                                              knx_send: 11/0/0
                                              knx_cache: 11/1/0
                                              visu_acl: rw
                                          # Beregnungsdauer in Minuten
                                          Dauer:
                                              type: num
                                              knx_dpt: 5
                                              knx_send: 11/2/0
                                              knx_cache: 11/2/0
                                              enforce_updates: yes
                                              visu_acl: rw
                                          sperren:
                                              type: bool
                                              cache: yes
                                              visu_acl: rw
                                              # Sperrzeit in Stunden
                                              Dauer:
                                                  type: num
                                                  enforce_updates: yes
                                                  cache: yes
                                                  visu_acl: rw
                                                  on_update:
                                                      - ..self = True if value > 0 else False
                                                      - ..self = sh...self.timer(value*60*60, False) if value > 0 else None
                          Dazu meine dazugehörige Logik:

                          Code:
                          jetzt = sh.now()
                          stunde = jetzt.hour
                          
                          # Stunden zu denen bewässert werden soll
                          Nordost_Stunden = [6, 14, 22]
                          # Dauer der Bewässerung in Minuten
                          Nordost_Dauer = 20
                          # Startvorwahl der Bewässerung in Minuten
                          Nordost_Start = 0
                          Nordost_Wind_Limit = 10
                          Nordost_Wind_Skip = 1
                          
                          if not sh.Aussen.Garten.Bewaesserung.sperren():
                              if not sh.Aussen.Garten.Bewaesserung.Nordost.sperren() and stunde in Nordost_Stunden:
                                  sh.Aussen.Garten.Bewaesserung.Nordost.Dauer.timer(Nordost_Start * 60, Nordost_Dauer)
                          Dabei wird die Logik mittels crontab "0 2,6,10,14,18,22 * *" aufgerufen. Bei mir alle 4 Stunden. Ich denke aber darüber nach das stündlich aufzurufen, da ich jetzt sowieso die Stunden in der Liste eintrage. Ich muss aber erst mal suchen, wie man den crontab jede Stunde aufruft. :-) Das kann man dann mit beliebig vielen Beregnern erweitern. Der Wind ist noch nicht umgesetzt. Mittels timer kann ich hier eine Startvorwahl treffen.

                          Der Grund ist, warum ich die Einstellungen in der Logik vornehmen möchte und nicht in den Items ist, dass man bei veränderten Logiken SmartHomeNG nicht neustarten muss. Bei den Items schon.

                          Kommentar


                            #14
                            Könntest dir auch das stateengine plugin ansehen. Ist recht gut geeignet, selbst wenn du nur Status an/aus hast. Aber zb willst du ja vielleicht bei Wind nur mal kurz unterbrechen und danach die restliche Dauer weiter berregnen, etc

                            gib auch n blogeintrag auf smarthomeng.de

                            Kommentar


                              #15
                              Hey, das ist ein guter Einfall. Das Stateengine Plugin könnte hier gut passen und ich denke es kann dazu nicht genügend Beispiele geben zur Umsetzung.

                              Kommentar

                              Lädt...
                              X