Switch-Case Statement und if

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
mach
Beiträge: 14
Registriert: 10. Dez 2019 13:47
Answers: 0

Switch-Case Statement und if

Beitrag von mach »

Hallo zusammen,

ich möchte eine Pumpe abhängig von einer Switch Einstellung unterschiedlich lange laufen lassen und das Ganze mit einem Swicht Statement
gemacht werden.

Folgendes habe ich definiert:
in der Items

Code: Alles auswählen

Number	Laufzeit	"Pumpen-Laufzeit"

in der Sitemap

Code: Alles auswählen

Selection item=Laufzeit label="Pumpen-Laufzeit" mappings=[0="8h", 1="4h", 2="2h", 3="1h"] icon="time"

bei der Rule bleibe ich stecken :( - x1 bis x3 kann ich nur umschreiben - siehe unten

Code: Alles auswählen

rule	"pumpe"
	when
		Item	Laufzeit	received command
	then
		switch(receivedCommand) {
			case 1 : {x1}
			case 2 : {x2}
			case 3 : {x3}
			case 4 : {x4}
		}
end
x1: Schalte täglich die Pumpe um 09:00h ein und um 18:00h aus
x2: Schalte täglich die Pumpe um 09:00h ein, um 12:00h aus - um 16:00h, um 18:00h aus
x3: Schalte täglich die Pumpe um 09:00h ein, um 10:00h aus - um 16:00h, um 17:00h aus
x3: Schalte täglich die Pumpe um 09:00h ein, um 10:00h aus

Wie kann ich das jetzt realisieren!

Vielen Dank und bleibt gesund:)

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Switch-Case Statement und if

Beitrag von udo1toni »

Was soll passieren, wenn der Schalter während der Laufzeit der Pumpe umgeschaltet wird?
Ansonsten sähe die Rule so aus:

Code: Alles auswählen

// globale Variablen zu Begin der Datei definieren!
var Timer tPumpeOff = null

rule "Pumpe starten"
when
    Time cron "0 0 9 * * ?" // täglich um 9:00:00 Uhr
then
    Pumpe.sendCommand(ON)
    var Integer iTime = 2   // Default Wert, falls nichts im Item steht
    var Integer iHours = 2   // Default Wert, falls nichts im Item steht
    if(Laufzeit.state instanceof Number) iTime = Laufzeit.state as Number
    switch(iTime) {
        case 0: iHours=8
        case 1: iHours=4
        case 3: iHours=1
        default: iHours=2   // Default Wert, falls nichts im Item steht
    }
    tPumpeOff?.cancel
    tPumpeOff = createTimer(now.plusHours(iHours),[|
        Pumpe.sendCommand(OFF)
    ])
end
Die Laufzeit wird nur zum Start berücksichtigt. Soll die Laufzeit auch während des Pumpenbetriebs geändert (und unmittelbar berücksichtigt) werden, wird es etwas komplizierter.
Tipp am Rande: Wenn Du die Zuordnung der Werte leicht änderst:

Code: Alles auswählen

Selection item=Laufzeit label="Pumpen-Laufzeit" mappings=[8="8h", 4="4h", 2="2h", 1="1h"] icon="time"
kommst Du sogar ohne Zwischneschritt aus. Dann sieht die Rule so aus:

Code: Alles auswählen

// globale Variablen zu Begin der Datei definieren!
var Timer tPumpeOff = null

rule "Pumpe starten"
when
    Time cron "0 0 9 * * ?" // täglich um 9:00:00 Uhr
then
    Pumpe.sendCommand(ON)
    var Integer iHours = 2   // Default Wert, falls nichts im Item steht
    if(Laufzeit.state instanceof Number) iHours = Laufzeit.state as Number
   tPumpeOff?.cancel
    tPumpeOff = createTimer(now.plusHours(iHours),[|
        Pumpe.sendCommand(OFF)
    ])
end
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten