Selection und Schalten - Anfänger Frage

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

Selection und Schalten - Anfänger Frage

Beitrag von mach »

Hallo zusammen,

mal wieder eine blutige Anfänger Frage:(

ich habe in der Sitemap eine Selection angelegt

Code: Alles auswählen

Selection item=Laufzeit label="Pumpen-Laufzeit" mappings=[0="8h", 1="4h", 2="2h", 3="1h", 4="AUA"]icon="time"
Ich habe n un mehrere Regeln angelegt und abhängig von der 'Laufzeit' soll geschaltet werden

Musterregel:

Code: Alles auswählen

rule "p1_1 ein"
    
    when
    Time cron "0 0 10 1/1 * ? *" 
    then
     var  iTime = Laufzeit.state as Number
     
    if (iTime.intValue = 1){
         
         sendCommand(Pumpe, ON)
    }
end

Funktioniert aber nicht und im Log steht:

Code: Alles auswählen

2020-04-03 10:14:03.786 [ERROR] [ntime.internal.engine.ExecuteRuleJob] - Error during the execution of rule 'p1_1 ein': An error occurred during the script execution: index=0, size=0
Was mache ich falsch????

Vielen Danke vorab

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

Re: Selection und Schalten - Anfänger Frage

Beitrag von mach »

Zack! Fehler gefunden
Mein Problem waren die zwei =

Richtig ist

rule "p1_1 ein"

when
Time cron "0 0 10 1/1 * ? *"
then
if (Laufzeit.state == 1){

sendCommand(Pumpe, ON)
}
end

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

Re: Selection und Schalten - Anfänger Frage

Beitrag von udo1toni »

Ich hatte ja schon an anderer Stelle beschrieben, dass es sinnvoll ist, bei solchen Mappings auch direkt die Werte zu nutzen, mit denen man arbeiten möchte (es sei denn, sie sind von einem verknüpften Binding fest vorgegeben), also eher so:

Code: Alles auswählen

Selection item=Laufzeit label="Pumpen-Laufzeit" mappings=[8="8h", 4="4h", 2="2h", 1="1h", 0="AUA"]icon="time"
Woher genau Dein Fehler kommt, erschließt sich mir nicht unmittelbar, allerdings sollte Deine Rule eher so aussehen:

Code: Alles auswählen

rule "p1_1 ein"
when
    Time cron "0 0 10 * * ?" // täglich 10:00:00 Uhr 
then
    var Integer iTime = 2
    if(Laufzeit.state instanceof Number) iTime = (Laufzeit.state as Number).intValue
    if(iTime == 1){
        Pumpe.sendCommand(ON)
    }
end
Die Variable iTime wird also zuerst mit einem Default Wert befüllt, anscdhließend prüft die Rule, ob im Item Laufzeit ein gültiger Wert vorliegt und setzt die Variable entsprechend. Da es eh um Integer geht, kann man die Variable auch gleich mit Integer befüllen.
Zum Abschluss wird das Item per Methode eingeschaltet, nicht per Action, die Action hat einige Nachteile gegenüber der Methode, man sollte sich also angewöhnen, die Methode zu nutzen. Die Methode hat auch Nachteile gegenüber der Action... sie ist trotzdem die bessere Wahl... ;)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten