ich versuche gerade Deine Rule vom 4. Feb 2021 14:25 anzupassen. Wäre prima, wenn Du mir weiterhelfen könntest ...
Bei mir werden über "KE_x_pow2_switch" 2 Lüfter geschaltet. "Ventilator_Decke_switch" habe ich daher entfernt bzw. auskommentiert und "Ventilator_Wand_switch" durch "KE_x_pow2_switch" erstetzt.
Wozu wird "Keller_Ventilation_Trigger" benötigt?
Reicht "KE_x_pow2_switch" nicht aus?
VScode gibt 2 Fehlermeldungen aus:
für
Code: Alles auswählen
tVent = createTimer(now.plusMinutes(vent_dur), [| // Timer anlegen
Code: Alles auswählen
Type mismatch: cannot convert from Number to long(org.eclipse.xtext.xbase.validation.IssueCodes.incompatible_types)
Code: Alles auswählen
The method or field Keller_Ventilation_Trigger is undefined(org.eclipse.xtext.diagnostics.Diagnostic.Linking)
Code: Alles auswählen
var Timer tVent = null
val Number dehum_min = 65 // unterer Grenzwert Luftfeuchtigkeit
val Number dehum_max = 75 // oberer Grenzwert Luftfeuchtigkeit
val Number dewpoint_min_gap = 5 // minimale Taupunktdifferenz Keller - Außen
val Number vent_dur = 35 // Lüftungsdauer (nach xx min wird abgeschaltet)
rule "Kellerentfeuchtung"
when
Item Keller_Taupunkt changed or
Item KE_s_XiaomiTemperatursensorC_Humidity changed or
Item Keller_Ventilation_Trigger changed to ON
then
val basement_hum = (KE_s_XiaomiTemperatursensorC_Humidity.state as Number).floatValue
val dewpoint_gap = (Keller_Taupunkt.state as Number) - (Aussenbereich_Taupunkt.state as Number)
var sollWand = OFF // Default Soll
if(newState == ON) { // Keller_Ventilation_Trigger AN
sollWand = ON // Soll ändern
tVent?.cancel // laufenden Timer löschen
tVent = createTimer(now.plusMinutes(vent_dur), [| // Timer anlegen
// Ventilator_Decke_switch.sendCommand(OFF)
KE_x_pow2_switch.sendCommand(OFF)
Keller_Ventilation_Trigger.postUpdate(OFF)
tVent = null
])
} else { // Rule nicht durch Taster getriggert
if(basement_hum > dehum_max) { // Luftfeuchte Keller über Maximum
if(dewpoint_gap > dewpoint_min_gap) { // Taupunktdifferenz ok
if(tVent === null) { // Falls kein Timer läuft
sollWand = ON // Soll ändern
tVent = createTimer(now.plusMinutes(vent_dur), [| // Timer anlegen
KE_x_pow2_switch.sendCommand(OFF)
tVent = null
])
}
}
} else if(basement_hum >= dehum_min) { // Werte innerhalb der Hysterese; kein Aktion
return;
}
}
if(KE_x_pow2_switch.state != sollWand) // Falls Abweichung vom Soll, schalten
KE_x_pow2_switch.sendCommand(sollWand.toString)
end
Bezüglich "KE_s_XiaomiTemperatursensorC_Humidity" bin ich mir nicht sicher, ob das Zahlenformat für die Berechnung korrekt ist. Es wird z.B. "64.07%" angezeigt.
Das Item dazu ist:
Code: Alles auswählen
Number:Dimensionless KE_s_XiaomiTemperatursensorC_Humidity