Ankündigung

Einklappen
Keine Ankündigung bisher.

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