Timer mit Restlaufzeit Anzeige

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Antworten
tanzehn
Beiträge: 21
Registriert: 15. Dez 2020 10:03

Timer mit Restlaufzeit Anzeige

Beitrag von tanzehn »

Hallo Leute, für alle die es interessiert einen Timer mit Restlaufzeitanzeige zu erstellen hab ich nach langem Googlen und Probieren es endlich geschafft so einen Timer zum Laufen zu bringen. Nach meinen ersten Tests läuft alles so wie es soll. Wenn jemand Verbesserungsvorschläge hat bitte lasst es mich wissen. Nur zur Info ich kenn mich mit dem Programmieren bzw. mit den Befehlen nicht gut aus alles was ich hier mache, entsteht nur durch Rules bzw. Wissen das ich mir aus dem Internet hole und durch langes Probieren bis es funktioniert. Deshalb ist es für mich wichtig wenn ihr Verbesserungsvorschläge habt sie mir hier zu posten damit ich wieder etwas lerne. Danke im voraus

Aber jetzt zum Timer

Items

Code: Alles auswählen

Switch        Switch1                    "Schalter der den Timer aktiviert"
Switch        Switch2                    "Schlater der vom Timer geschalten wird"          
Number      TimerLaufzeit           "Eingestellte Timerlaufzeit"
Number      Laufzeit                    "Timerlaufzeit"
Number      VerbleibendeZeit       "Verbleibende Timerlaufzeit [%d min]"                
Sitemap

Code: Alles auswählen

Switch   	item=Switch1  label="Schalter der den Timer aktiviert und das Gerät oder Item einschaltet" icon=switch
Switch   	item=Switch2  label="Schalter der den Timer deaktiviert und das Gerät oder Item ausschaltet" icon=switch
Selection 	item=TimerLaufzeit  label="Timer Laufzeit" icon=time mappings=[2="2 min", 10="10 min", 15="15 min", 30="30 min"] 
Text     	item=VerbleibendeZeit  label="Verbleibende Zeit"  icon=time
Rule

Code: Alles auswählen


var Timer timer1 = null
var Timer timer2 = null



rule "Timer starten"

when

    Item Switch1 changed to ON		//das Item das den Timer aktivern soll angeben

then

    val timerlaufzeit = TimerLaufzeit.state as Number
        Laufzeit.postUpdate(timerlaufzeit)
        timer1 = createTimer(now.plusMinutes(timerlaufzeit.intValue), [|
        //Switch2.sendCommand(OFF)		//das vom Timer zu schaltende Gerät angeben(aktiveren wenn eine WIFI Steckdose / Schalter oder Sontiges geschalten werden muss) 
        //Switch2.postUpdate(OFF)		//das vom Timer zu schaltende Item angeben (aktiveren wenn ein Item nur innerhalb von openHAB geschalten werden muss)
        ])
end


rule "Timer abbrechen"

when

    Item Switch1 changed to OFF    

then

    // Den Timer abbrechen, falls vorhanden, das ? bewirkt, dass die Zeile übersprungen wird, wenn der Timer null ist

    timer1?.cancel
    timer1 = null
    VerbleibendeZeit.postUpdate(0)

    timer2?.cancel
    timer2 = null
    Laufzeit.postUpdate(0)
   
end


rule "Verbleibende Zeit"

when 

    Item Switch1 changed to ON 

then 

    VerbleibendeZeit.postUpdate(TimerLaufzeit.state)
    timer2 = createTimer(now.plusMinutes(1), [ |
        var int remain = (VerbleibendeZeit.state as DecimalType - 1 ).intValue
        if( remain < 0 ) 
            remain = 0
        VerbleibendeZeit.postUpdate(remain)
        if( remain > 0) 
        timer2.reschedule(now.plusMinutes(1))
        ])
end
Das wars, ich hoffe es hilft dem einen oder anderen weiter und für Verbesserungsvorschläge schreibt mir gerne, somit lerne ich etwas und auch andere die den Post lesen.

Antworten