Ankündigung

Einklappen
Keine Ankündigung bisher.

Countdown Zähler für Timer in sitemap

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

    Countdown Zähler für Timer in sitemap

    Moin Zusammen,

    ich würde gerne einen Countdown Zähler für einen Timer in der Sitemap anzeigen lassen, habe aber im Moment leider keine Idee wie ich das realisieren soll. Hintergrund ist der, dass ich meiner Gartenbewässerung automatisch steuere und es schön wäre zu sehen wie lange z.B. der Rasensprenger noch läuft.

    Jemand eine Idee?

    Gruß
    Thomas

    #2
    Wenn Du den Timer erzeugst, kannst Du ihn einer Variablen zuweisen, also außerhalb der rule ein var Timer myTimer = null und innerhalb der rule dann mit myTimer = createTimer(...). Die Variable myTimer bietet dann ein paar Methoden und Eigenschaften an, vielleicht hilft Dir eine davon weiter, wobei, soweit ich sehen konnte, leider kein CountDown dabei ist. Eventuell kannst Du aber den Zeitpunkt des Auslösens darüber ermitteln (myTimer.toString wäre so ein Verdächtiger), dann könntest Du eine Rule basteln, die prüft, ob der Timer läuft und wenn ja berechnet, wie lange das noch der Fall ist. Diese Rule lässt Du dann alle 60 Sekunden laufen, mit Time cron "30 * * * * ?" als Trigger, das Ergebnis der Berechnung muss die Rule dann per postUpdate in ein Item schreiben, welches Du in die Sitemap einbaust. Vermutlich ist das eher etwas umständlich...

    Kommentar


      #3
      Hi Thomas,

      vielleicht hilft dir meine kleine Rule weiter,

      Ich fülle bei einem Timer durch die eingetragene Zeit, zwei Items:
      Aktuelle Stunden + Timer Stunden (Timer_1_Restzeit_Stunden)
      Aktuelle Minuten + Timer Minuten (Timer_1_Restzeit_Minuten)

      Wenn der Timer aktiviert ist setze ich das Item Timer_1_an und aktiviere somit meine rule:

      Code:
      rule "Restzeit Timer"
      when
          Item Timer_1_an received command ON
      then
      
          var Timer RestzeitTimer = null
          
          RestzeitTimer = createTimer(now.plusMinutes(1)) [|
              if (Timer_1_an.state == ON) {
                  var timer_stunden_restzeit = Timer_1_Restzeit_Stunden.state as DecimalType
                  var timer_minuten_restzeit = Timer_1_Restzeit_Minuten.state as DecimalType
                  var String timer1msg_restzeit = ""
                  
                  if(timer_minuten_restzeit > 0) {
                  var Number restzeit_minuten = timer_minuten_restzeit - 1
                  postUpdate(Timer_1_Restzeit_Minuten, restzeit_minuten)
                  }
                     if(timer_minuten_restzeit == 0) {
                  var Number restzeit_stunden = timer_stunden_restzeit - 1
                  postUpdate(Timer_1_Restzeit_Stunden, restzeit_stunden)
                  }
              
                  if (timer_stunden_restzeit < 10) { timer1msg_restzeit = "0" } 
                  timer1msg_restzeit = timer1msg_restzeit + Timer_1_Restzeit_Stunden.state.format("%d") + ":"
                  if (timer_minuten_restzeit < 10) { timer1msg_restzeit = timer1msg_restzeit + "0" }
                  timer1msg_restzeit = timer1msg_restzeit + Timer_1_Restzeit_Minuten.state.format("%d")
                  postUpdate(Timer_1_Restzeit,timer1msg_restzeit)
      
                  
                   RestzeitTimer.reschedule(now.plusMinutes(1))
              }
              
          ]
          
        
      end
      Somit sehe ich die Restzeit meines Timers in der SItemap...

      Kommentar


        #4
        Zitat von SpawnY0815 Beitrag anzeigen
        [...] Somit sehe ich die Restzeit meines Timers in der SItemap...
        Bist Du sicher, dass Dein Code fehlerfrei funktioniert?
        Soweit ich den Code verstehe, baust Du mit dem RestzeitTimer eine Art while-Schleife, die einmal pro Minute ausgeführt wird. Innerhalb der Schleife holst Du dann jeweils den Inhalt der Stunden- und Minuten-Items. Dann zählst Du die Minuten runter, bis sie bei 0 ankommen. Anschließend ziehst Du jede Minute von der Stunde eins ab (Du setzt die Minuten nicht auf 59, wenn Du eine Stunde abziehst). Weiterhin läuft der Timer immer weiter,
        weil Du 1. nicht prüfst, ob die Stunden schon auf null angekommen sind
        und Du 2. Timer_1_an nirgends auf OFF setzt. Oder habe ich da etwas Essentielles übersehen?

        Kommentar

        Lädt...
        X