Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.
Moderatoren: seppy , udo1toni
Boris099
Beiträge: 389 Registriert: 19. Feb 2020 20:51
Answers: 4
Wohnort: Saarbrücken
Beitrag
von Boris099 » 5. Dez 2020 14:48
Hier habe ich nun eine Motion rule, bei dem ich das gleiche Problem mit dem "Blank" Luminance Wert über Nacht habe.
Ich habe versucht die gleiche Logik einzubauen, jedoch bezieht sich "nstate" ja nicht auf dieses device, somit wirft er mir eine Warnung im Log:
Code: Alles auswählen
Validation issues found in configuration model 'ZPIR_Wohn_Motion.rules', using it anyway:
The value of the local variable nState is not used
Wie muß ich da den Bezug herstellen?
Das rule
Code: Alles auswählen
// Globale Variablen
var Timer Wohn_Timer = null // Timer für autoamtische Abschaltung Licht Wohn PIR
// Globale Konstanten
val Integer Wohn_TimeOut = 360 // Timeout (hier z.B. 6 Minuten oder 360 Sek) unten verwendet
rule "ZPIR_Wohn_Motion changed"
when
Item zwave_device_6c898019_node3_alarm_motion received update ON //ZPIR3 Wohn
then
if (now.getMinuteOfDay >= (6 * 60 + 45) && now.getMinuteOfDay <= (8 * 60 + 30)) { //zwischen 6.45h und 8.30h
val nState = if(newState instanceof Number) newState else 0 // falls ein ungültiger Wert geliefert wird, wird 0 genommen
if(zwave_device_6c898019_node3_sensor_luminance.state <=5) {
Wohn_Timer?.cancel //Timer abbrechen, unten Neustart
if(zwave_device_6c898019_node9_switch_binary.state != ON)
zwave_device_6c898019_node9_switch_binary.sendCommand(ON)
if(Lampe_SonneKlein.state != ON)
Lampe_SonneKlein.sendCommand(ON)
if(Lampe_WohnEckregal.state != ON)
Lampe_WohnEckregal.sendCommand(ON)
Wohn_Timer = createTimer(now.plusSeconds(Wohn_TimeOut), [| //Wohn Licht Timer
if(zwave_device_6c898019_node9_switch_binary.state != OFF)
zwave_device_6c898019_node9_switch_binary.sendCommand(OFF)
if(Lampe_SonneKlein.state != OFF)
Lampe_SonneKlein.sendCommand(OFF)
if(Lampe_WohnEckregal.state != OFF)
Lampe_WohnEckregal.sendCommand(OFF)
])
}
}
end
Raspberry 4, Rev.1.2b, 4GB, Openhab 2.5.12 (OH3 kommt im Winter dran:-))
Boris099
Beiträge: 389 Registriert: 19. Feb 2020 20:51
Answers: 4
Wohnort: Saarbrücken
Beitrag
von Boris099 » 5. Dez 2020 15:31
Ist das so korrekt?
Das Log hält still
Code: Alles auswählen
// Globale Variablen
var Timer Wohn_Timer = null // Timer für autoamtische Abschaltung Licht Wohn PIR
// Globale Konstanten
val Integer Wohn_TimeOut = 360 // Timeout (hier z.B. 6 Minuten oder 360 Sek) unten verwendet
rule "ZPIR_Wohn_Motion changed"
when
Item zwave_device_6c898019_node3_alarm_motion received update ON //ZPIR3 Wohn
then
if (now.getMinuteOfDay >= (6 * 60 + 45) && now.getMinuteOfDay <= (8 * 60 + 30)) { //zwischen 6.45h und 8.30h
val nState = if(zwave_device_6c898019_node3_sensor_luminance.state instanceof Number) zwave_device_6c898019_node3_sensor_luminance.state else 0
if(nState <=5) {
Wohn_Timer?.cancel //Timer abbrechen, unten Neustart
if(zwave_device_6c898019_node9_switch_binary.state != ON)
zwave_device_6c898019_node9_switch_binary.sendCommand(ON)
if(Lampe_SonneKlein.state != ON)
Lampe_SonneKlein.sendCommand(ON)
if(Lampe_WohnEckregal.state != ON)
Lampe_WohnEckregal.sendCommand(ON)
Wohn_Timer = createTimer(now.plusSeconds(Wohn_TimeOut), [| //Wohn Licht Timer
if(zwave_device_6c898019_node9_switch_binary.state != OFF)
zwave_device_6c898019_node9_switch_binary.sendCommand(OFF)
if(Lampe_SonneKlein.state != OFF)
Lampe_SonneKlein.sendCommand(OFF)
if(Lampe_WohnEckregal.state != OFF)
Lampe_WohnEckregal.sendCommand(OFF)
])
}
}
end
Raspberry 4, Rev.1.2b, 4GB, Openhab 2.5.12 (OH3 kommt im Winter dran:-))
udo1toni
Beiträge: 15565 Registriert: 11. Apr 2018 18:05
Answers: 251
Wohnort: Darmstadt
Beitrag
von udo1toni » 5. Dez 2020 22:56
newState ist eine implizite Variable. Diese wird bei changed mit dem neuen Wert des Items gesetzt, welches die Rule getriggert hat.
Wenn eine Rule mehrere Items als Trigger nutzt, muss man das triggernde Item über triggeringItem ermitteln, eine weitere implizite Variable. newState ist hier halt viel kürzer als der absurde Itemname...
nState wiederum ist eine lokale Variable, bzw in der ersten Variante eine lokale Konstante. Wenn die Rule abgelaufen ist, existiert sie nicht länger...
Zu Deiner Rule kann ich grade nichts sagen, das ist am Telefon fehlerträchtig.
Gesendet von meinem SM-G973F mit Tapatalk
openHAB5.0.3 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox 9.1.4 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte
udo1toni
Beiträge: 15565 Registriert: 11. Apr 2018 18:05
Answers: 251
Wohnort: Darmstadt
Beitrag
von udo1toni » 5. Dez 2020 23:49
So, jetzt vom PC...
Rule sieht gut aus. Allerdings... da es hier ja um drei Items geht, lohnt sich ein Group Item. Nehmen wir an, Du legst ein Group Item vom Typ Switch an, mit dem Namen
gWohnMotion und ordnest die drei Items diesem Group Item zu, dann kannst Du alle drei Items so schalten:
Code: Alles auswählen
gWohnMotion.members.filter[i|i.state != ON].forEach[j|j.sendCommand(ON)]
Das Gruppenitem wird als Liste abgerufen (.members) und nach Items gefiltert, deren Status nicht ON ist - das entspricht dem if(). Das Ergebnis ist wieder eine Liste. Nun wird für jedes Item der Liste der Befehl ON gesendet. Die Liste kann auch 0 Items enthalten, dann wird halt kein einziges ON gesendet (also wie bisher).
Die gleiche Zeile (nur jeweils mit OFF) kannst Du auch in den Timer packen...
openHAB5.0.3 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox 9.1.4 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte
Boris099
Beiträge: 389 Registriert: 19. Feb 2020 20:51
Answers: 4
Wohnort: Saarbrücken
Beitrag
von Boris099 » 6. Dez 2020 00:16
Das muss ich erst mal verdauen:-) Einfach ist das nicht... Oder
Raspberry 4, Rev.1.2b, 4GB, Openhab 2.5.12 (OH3 kommt im Winter dran:-))
udo1toni
Beiträge: 15565 Registriert: 11. Apr 2018 18:05
Answers: 251
Wohnort: Darmstadt
Beitrag
von udo1toni » 6. Dez 2020 00:42
openHAB5.0.3 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox 9.1.4 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte
Boris099
Beiträge: 389 Registriert: 19. Feb 2020 20:51
Answers: 4
Wohnort: Saarbrücken
Beitrag
von Boris099 » 7. Dez 2020 17:07
Da kommt ein Fehler hoch wenn der Schalter durch den Motion Sensor aktiviert wird. Versteh ich nicht sieht doch alles gut aus!
Code: Alles auswählen
[ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'ZPIR_Wohn_Motion changed': Unknown variable or command '<='; line 13, column 12, length 11
Das bezieht sich auf die Zeile mit dem <= 5, was soll da denn falsch sein?
Code: Alles auswählen
val nState = if(zwave_device_6c898019_node3_sensor_luminance.state instanceof Number) zwave_device_6c898019_node3_sensor_luminance.state else 0
if(nState <= 5) {
Raspberry 4, Rev.1.2b, 4GB, Openhab 2.5.12 (OH3 kommt im Winter dran:-))
Boris099
Beiträge: 389 Registriert: 19. Feb 2020 20:51
Answers: 4
Wohnort: Saarbrücken
Beitrag
von Boris099 » 7. Dez 2020 18:16
OK Problem gelöst,
ich habe dein 2. Beispiel genommen und das funktioniert (also mit der lokalen Variablen)
Das bedeutet das 1. Beispiel kann OH nicht sauber interpretieren!
Raspberry 4, Rev.1.2b, 4GB, Openhab 2.5.12 (OH3 kommt im Winter dran:-))