Hallo, ich arbeite derzeit an einer Anwesenheitserkennung. Diese möchte ich über die openhab-App regeln. Meine Rule erkennt zwar, dass sich seine SSID-Änderung ergibt aber es kommt nicht weiter.
var Timer timer1 = null
rule "Abwesenheit"
when
Item WLAN_Handy1 changed from "WLAN_Handy1" to "UNDEF"
then
if(!WLAN_Handy1.state.equals("WLAN_Handy1")) {
timer1 = createTimer(now.plusSeconds(15), [|
if(!WLAN_Handy1.state.equals("WLAN_Handy1")){
Handy1.postUpdate(OFF)
logInfo("Anwesenheit", "Elias ist unterwegs!")
}
timer1 = null
])
}
end
Nun ist es so, dass "WLAN-Handy1" die SSID ändert. Aber weder der Schalter "Handy1" noch die logInfo wird weitergeführt und mir ist nicht ganz klar wieso. Weiß jemand darüber bescheid?
rule "Abwesenheit Elias"
when
Item WLAN_Handy1 changed
then
if(!WLAN_Handy1.state.equals("WLAN_Handy1")) {
timer1 = createTimer(now.plusSeconds(15), [|
if(!WLAN_Handy1.state.equals("WLAN_Handy1")){
Handy1.postUpdate(OFF)
logInfo("Anwesenheit", "Elias ist unterwegs!")
WLAN_Handy1.oldState
}
timer1 = null
])
}
end
rule "Anwesenheit Elias"
when
Item WLAN_Handy1 changed
then
if(WLAN_Handy1.state.equals(WLAN_Handy1.oldState)){
Handy1.postUpdate(ON)
}
end
Bekomme auch folgenden Fehler beim benutzen von old.State : 'oldState' is not a member of 'org.eclipse.smarthome.core.library.items.StringItem'; line 22, column 8, length 20
udo1toni hat geschrieben: ↑14. Jan 2021 13:56
Tipp: oldState hält den alten Status, newState hält den neuen Status des Items welches per changed die Rule getriggert hat.
Wurde previousState für triggered Item abgelöst, oder wäre es sinnvoller item.oldState zu nutzen??
Viele Grüße
Jörg
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3
Ich habe die derzeit über das TR064 Binding umgesetzt, da müsstest Du den Trigger des Items ändern.
Da ich nicht immer sicherstellen kann, mit welcher MAC ich gerade nach Hause komme, habe ich dies zudem über eine Gruppe verschachtel.
rule Papa_Home
when
Item sFboxPapaiPhoneOnline changed
then
if (sFboxPapaiPhoneOnline.state == ON) {
zu Hause (hier Code ersetzen, was passieren soll)
} else if (sFboxPapaiPhoneOnline.state == OFF) {
ist wech (hier Code ersetzen, was passieren soll)
}
end
Ich werde dies aber noch umbauen und weiter zusammenführen, da ich derzeit pro Person eine Regel habe. Dies werde mit hier erlerntem vereinfachen
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3
MrCrashy hat geschrieben:Also das "verlassen" geht. Leider funktioniert das "ankommen" nicht wirklich. Ich denke ich habe da einen Fehler mit der SSID.
State' is not a member of 'org.eclipse.smarthome.core.library.items.StringItem'; line 22, column 8, length 20
Der erste Fehler ist mal, dass Du zwei Rules mit identischem Trigger benutzt. Warum? Es reicht doch eine Rule, die alle Möglichkeiten abhandelt.
Der zweite Punkt ist, das newState und previousState (wie komme ich auf oldState? Sorry) kein Bestandteil des Items sind. Es handelt sich um implizite Variablen. Ich hatte ja erwähnt, dass sie mit dem alten bzw. neuen Status des triggernden Items gefüllt sind.
Gesendet von iPad mit Tapatalk
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
// globale Variablen zu Beginn der Datei definieren!
var Timer timer1 = null // Timer für Abwesenheitserkennung
rule "Anwesenheitserkennung Elias"
when
Item WLAN_Handy1 changed // Rule triggert bei jeder Änderung
then
timer1?.cancel // timer1 entfernen, falls aktiv
if(WLAN_Handy1.state.toString != "WLAN_Handy1") { // falls Status nicht "WLAN_Handy1"
timer1 = createTimer(now.plusSeconds(15), [| // starte Timer
Handy1.postUpdate(OFF) // setze Item auf OFF
logInfo("Anwesenheit", "Elias ist unterwegs!") // gibt logmeldung aus
])
} else { // falls Status "WLAN_Handy1"
Handy1.postUpdate(ON) // setze Item auf ON
}
end
previousState und newState brauchst Du für die Funktion nicht.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
OK, ich habe das mal Angewandt. Das Problem ist aber nun Folgendes: In beiden Situationen sagt er "Ist jetzt unterwegs". Dazu kommt noch folgende Fehlermeldung: 2021-01-14 18:42:45.934 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Abwesenheit Elias': An error occurred during the script execution: Couldn't invoke 'assignValueTo' for feature JvmVoid: (eProxyURI: anwesenheit.rules#|::0.2.0.2.0.0.1.0.0::0::/1)
2021-01-14 18:43:00.932 [INFO ] [e.smarthome.model.script.Anwesenheit] - Elias ist unterwegs!
Wenn jeweils die gleiche Log-Meldung ausgegeben wird, triggert beide Male der gleiche Bereich, was dann bedeutet, dass der String ein anderer sein muss. Lass Dir den String mit ins log schreiben, so: