Ankündigung

Einklappen

Serverwartung 21.2.



Am 21.2. im Laufe des späten Abends wird eine Serverwartung durchgeführt. Das Forum ist dadurch für gut zwei Stunden nicht erreichbar.
Es wird eine Wartungsseite geschaltet.

Mehr anzeigen
Weniger anzeigen

Eine rule vorzeitig terminieren am Beispiel eines Kaffee-Usecases

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

    Eine rule vorzeitig terminieren am Beispiel eines Kaffee-Usecases

    Verehrte Gemeinde, ich hätte da für die Interessierten einen funktionierenden Workflow und eine Optimierungsfrage/Herausforderung für die Experten

    Usecase:
    Beim einschalten tue folgendes:
    Aktiviere die Steckdose für die Kaffeemaschine (gelöst)
    Bestätige mir die Aktivierung mittels eines Jingles via Sonos (gelöst)
    Aktiviere nach 15 Minuten einen Radiosender oder ein Lied (15 Minuten = Aufheizungsvorgang) (gelöst)

    Beim ausschalten tue folgendes:
    Deaktiviere die Steckdose für die Kaffeemaschine (gelöst)
    Stoppe den Timer Thread::sleep(900000) aus der Startrule (ungelöst)

    Herausforderung:
    Mein Problem ist, dass wenn ich die Steckdose vor der Aktivierung des Radiosenders doch ausschalte, dass dann die AN-Rule trotzdem nach eben 15 Minuten den Radiosender abspielt.

    Frage an euch: wie kann ich beim ausschalten die gesamte Start-Rule oder nur den Zähler stoppen?
    Das Kommando sendCommand(PlayLivingRoom, OFF) stoppt zwar das abspielen der Sonosanlage, jedoch nicht den laufenden 15-min-Timer.

    Hier mein Code:

    Sitemap
    Code:
        Frame label="Küche" {
            Switch item=KaffeeSteckdose
        }
    Items
    Code:
    Switch KaffeeSteckdose   "Kaffeeschalter" {homematic="address=LTK0122345, channel=1, parameter=STATE"}
    Rules
    Code:
    rule "Kaffee Startprozess"
        when
            Item PavoniSteckdose received command ON
        then
            sendCommand(PlayLivingRoomTrack, '//FRITZ-NAS/sounds/start.mp3')
            Thread::sleep(900000)
            sendCommand(PlayLivingRoomTrack, '//FRITZ-NAS/sounds/song.mp3')
    end
    
    rule "Kaffee Endprozess"
        when
            Item PavoniSteckdose received command OFF
        then
            sendCommand(PlayLivingRoom, OFF)
    end
    Zuletzt geändert von m43stro; 12.05.2015, 09:08.
    openHAB, Homegear, RaspberryPI#2, FritzBox, Homematic-LAN-Adapter

    #2
    Hallo,

    bin zwar kein Experte, ich würde es so probieren.

    Code:
    var Timer KaffeeTimer = null
    
    rule "Kaffee Startprozess"
        when
            Item PavoniSteckdose received command ON
        then
            sendCommand(PlayLivingRoomTrack, '//FRITZ-NAS/sounds/start.mp3')
            KaffeeTimer = createTimer(now.plusMinutes(15)) [|
            sendCommand(PlayLivingRoomTrack, '//FRITZ-NAS/sounds/song.mp3')
            ]
    end
    
    rule "Kaffee Endprozess"
        when
            Item PavoniSteckdose received command OFF
        then
            sendCommand(PlayLivingRoom, OFF)
            if(KaffeeTimer!=null) {
                KaffeeTimer.cancel
                KaffeeTimer = null
            }
    end
    Ungetestet und ohne Garantie :-)
    Zuletzt geändert von Copykill; 10.05.2015, 11:30.

    Kommentar


      #3
      Stoppe den Timer Thread::sleep(900000)
      Das ist kein Timer!
      Code:
      import org.joda.time.DateTime
      var Timer aufheizen = null
      
      rule "Kaffee Startprozess"
          when
              Item PavoniSteckdose received command ON
          then
              sendCommand(PlayLivingRoomTrack, '//FRITZ-NAS/sounds/start.mp3')
              if (aufheizen!=null){
                  aufheizen.cancel
                  aufheizen = null
              }
              aufheizen = CreateTimer(now.plusMinutes(15) [|
              sendCommand(PlayLivingRoomTrack, '//FRITZ-NAS/sounds/song.mp3')]
      end
      
      rule "Kaffee Endprozess"
          when
              Item PavoniSteckdose received command OFF
          then
              sendCommand(PlayLivingRoom, OFF)
              if (aufheizen!=null){
                  aufheizen.cancel
                  aufheizen = null
              }
      end
      So sieht das Ganze mit Timer aus. Den Vorteil siehst Du auch gleich, dass man den Timer nämlich jederzeit abbrechen kann...

      Kommentar


        #4
        chapeau udo1toni

        es hat funktioniert! Nur ein kleiner Syntaxfehler bereitete mir noch Sorgen.
        Für die Nachwelt:

        Code:
         
         [SIZE=20px]aufheizen = CreateTimer(now.plusMinutes(15)[COLOR=#FF0000][B])[/B][/COLOR] [|[/SIZE] [FONT=Arial][SIZE=15px][/SIZE][/FONT]
        openHAB, Homegear, RaspberryPI#2, FritzBox, Homematic-LAN-Adapter

        Kommentar


          #5
          Ja, mit dem Klammern zählen hab ich's nicht so...

          Kommentar

          Lädt...
          X