Ankündigung

Einklappen
Keine Ankündigung bisher.

Timer mit Rücksetzen zum letzten Wert

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

    Timer mit Rücksetzen zum letzten Wert

    Hallo zusammen,

    ich möchte einen Timer programmieren, der die Lüftung für einen definierten Zeitraum auf eine feste hohe Leistung einstellt und danach wieder auf den Wert zurückfährt, der vor dem Start des Timer aktiv war.

    Kann man direkt auf den letzten Wert/letzte Werte zurückgreifen oder muss man selbst vor dem Setzen des Timers in einer Variablen zwischenspeichern? Kann mir jemand vielleicht mit einem Code Schnipsel auf die Sprünge helfen?

    VG boxerfahrer

    #2
    Ich sehe da zwei Möglichkeiten: Eine globale Variable in der Regeldatei in der Du Dir den alten Wert merkst oder den Persistence-Service

    Kommentar


      #3
      Das geht noch eleganter, weil es genau dafür passende Funktionen gibt:
      Code:
      		val storedStates = storeStates(Heating_FF_Bath)
      		// do something
      		restoreStates(storedStates)
      Das sollte sich gut für Deine Zwecke eignen. Man kann eine beliebig lange Liste von Items angeben, die gespeichert und wieder hergestellt werden sollen.

      Grüße,
      Kai

      Kommentar


        #4
        Funktioniert! Aber...

        Hallo Kai,

        ich bin begeistert. Funktioniert, bis auf eine "Kleinigkeit", und die liegt vermutlich am Item.

        Die Lüftung wird über einen 0-10V Aktor gesteuert, in ETS als EIB6 DP aufgesetzt mit 0..100%

        In der items Datei habe ich den Wert als Dimmer mit drei identischen KNX Adressen angelegt, um ihn per slider steuern zu können:

        Code:
        Dimmer UG_Lueftung_Volumenstrom          "Volumenstrom [%d %%]"   <slider>      (UG_Lueftung)                              { knx="<3/0/26, <3/0/26, <3/0/26" }
        Vermutlich ein Anfängerfehler. Was jetzt passiert ist dass der "restoreStates" ein "ON" bzw "100" schickt und die Lüftung nach Ablauf des Timers auf Volllast geht.

        Hast Du eine Idee wie ich den EIB6 korrekt bedienen kann, und am besen per slider bzw up/down button??

        VG boxerfahrer

        Kommentar


          #5
          Ich bin nicht ganz sicher, aber kannst du nicht das Item als Number definieren und nur in der Sitemap als Slider? Dann sollte sich restoreState doch eigentlich richtig verhalten...

          Kommentar


            #6
            Hallo OpenHomie,

            habe ich testweise so gemacht - ein Number item mit Symbol slider. Im HABDroid funktioniert das prima - ich kann zwischen 1% und 100% schieben. Im Browser bleiben mir aber nur die beiden Up-/Down Buttons. Drücke ich die, so werden nur die Befehle "ON bzw OFF geschicckt, was der Aktor als 100% (10V) und 0% (0V) interpretiert. Zwischenstände werden nicht eingenommen. Mache ich da was falsch??

            VG boxerfahrer

            Kommentar


              #7
              Das Classic UI unterstützt leider keine Slider, daher kann auch kein Prozentwert als Kommando geschickt werden. Ein langes Drücken der Buttons ergibt immerhin ein INCREASE/DECREASE Kommando, was Dir aber leider nicht weiterhilft. Deine Optionen sind daher entweder das GreenT-UI im Browser zu nutzen oder ein Switch-Widget mit "mappings" zu verwenden, d.h. Du kannst Dir z.B. 5 Buttons rendern lassen für 0%, 25%, 50%, 75% und 100%.

              Grüße,
              Kai

              Kommentar


                #8
                Vielen Dank für die Antwort, Kai. Ich habe mir gerade das GreenT UI installiert, weil ich das INCREASE/DECREASE nicht hingekriegt habe - hätte man dafür eine rule gebraucht? Mit dem GreenT funktioniert es jetzt jedenfalls prima.

                Herzlichen Dank!
                VG boxerfahrer

                Kommentar


                  #9
                  Globale Variable definieren

                  Hallo,

                  wie kann ich eine Variable global deklarieren, damit ich die storeStates auch in einer anderen Rule restoren kann?

                  Mein konkretes Beispiel:
                  Code:
                  rule "Fritzbox Incoming Call"
                  when
                      Item Incoming_Call changed to ON
                  then
                      if (Incoming_Call.state==ON) {
                          logInfo("Fritzbox rules", "Squeezebox Volume reduzieren")
                          val states = storeStates(sq_wohnen_volume, sq_schlafen_volume)
                          sendCommand(sq_wohnen_volume, 20)
                          sendCommand(sq_schlafen_volume, 20)
                      }
                  end
                  Andere Rule
                  ....
                  Code:
                      if (Incoming_Call.state==OFF) {
                          logInfo("Fritzbox rules", "Squeezebox Volume wieder normal")
                          restoreStates(states)
                      }
                  Ich könnte diese zwei Rules zwar zusammenfassen, dass soll aber nur ein Beispiel sein. Ich habe andere Fälle, da sollen die States in unterscheidlichen Rules gespeichert und restored werden.

                  Danke!





                  Zitat von kkreuzer Beitrag anzeigen
                  Das geht noch eleganter, weil es genau dafür passende Funktionen gibt:
                  Code:
                          val storedStates = storeStates(Heating_FF_Bath)
                          // do something
                          restoreStates(storedStates)
                  Das sollte sich gut für Deine Zwecke eignen. Man kann eine beliebig lange Liste von Items angeben, die gespeichert und wieder hergestellt werden sollen.

                  Grüße,
                  Kai

                  Kommentar

                  Lädt...
                  X