Nach vielen Experimentieren mit LinKNX will ich hier einige Config-Fragments posten, da sie vielleicht Anderen helfen können, ähnliche Logiken zu bauen.
(Wer kann eigentlich einen Prefix für LinKNX hier bei den Code-Schnipseln eintragen - habe "solved" gewählt, da kein Anderer passte)?
Die Idee und Aufgabenstellung war die Folgen:
Mögliche Aktionen die ich in Abhängigkeit von An- und Abwesenheit schalten will sind z.B.:
(die Zeilen mit "shell-cmd" kann man weglassen. Diese senden mir nur (debug) Nachrichten auf mein iPhone)
Wichtig war die Zeile
Er sorgt dafür, dass die folgende Erkennung erst nach 35 Sekunden "anspringt". Ich hatte das Problem, dass zyklisch sendene Bewegungsmelder auch nach dem Schließen ein "EIN" geschickt haben und es so zu Problemen kam. Die "4m" definiert, wie lange ich auf Bewegung im Haus warte und dann entscheide ob Anwesend oder Abwesend
(Wer kann eigentlich einen Prefix für LinKNX hier bei den Code-Schnipseln eintragen - habe "solved" gewählt, da kein Anderer passte)?
Die Idee und Aufgabenstellung war die Folgen:
- Automatische Erkennung ob Anwesend oder Abwesend
- Haustür Kontakt (bei mir Riegelschalter) nutzen um Aktion zu starten
- Wird innerhalb einen Zeitraum x nach dem Schließen der Tür Bewegung imHaus festgestellt ist man Anwesend, falls nicht Abwesend
- Nach diesem Zeitraum sollte der Bewegungsmelder wieder für andere Dinge (z.B. Alarm) zur Verfügung stehen und nicht die Abwesenheit "verstellen"
Mögliche Aktionen die ich in Abhängigkeit von An- und Abwesenheit schalten will sind z.B.:
- Jalousien fahren im Winter direkt bei Dunkelheit herunter und nicht erst bei dem von der Familie festgelegten "frühsten Zeitpunkt".
- Die Warmwasser Zirkulationspumpe wird bei Abwesenheit ausgeschaltet (immerhin 27 Watt)
Code:
<!-- ================================================================================ Abwesendheitserkennung: Wenn Haustür verschlossen Für 5 Min prüfen, ob Bewegung im Haus Wenn Bewegung, dann anwesend (von Innen geschlossen) Wenn keine Bewegung dann Abwesend Wenn Haustuer geöffnet und vorher Abwesend, dann Anwesend ================================================================================ --> <rule id="HaustuerVerschlossen"> <condition type="object" id="WavelineHaustuerVerriegelt" trigger="true" value="0" /> <actionlist> <action type="set-value" id="HaustuerTrigger" value="1" /> </actionlist> <actionlist type="on-false"> <action type="set-value" id="HaustuerTrigger" value="0" /> <action type="set-value" id="CheckForAbwesend" value="0" /> </actionlist> </rule> <rule id="HaustuerNichtVerschlossen"> <condition type="and"> <condition type="object" id="WavelineHaustuerVerriegelt" trigger="true" value="255" /> <condition type="object" id="SindAbwesend" value="1" /> </condition> <actionlist> <action type="set-value" id="SindAbwesend" value="0" /> <!-- <action type="set-value" id="HaustuerTrigger" value="0" /> <action type="set-value" id="CheckForAbwesend" value="0" /> --> <action type="shell-cmd" cmd="/usr/local/bin/prowlknx 'Abwesend' Welcome Home" /> <action type="shell-cmd" cmd="/usr/local/bin/knxrsslog Anwesend" /> <action type="cancel" rule-id="HaustuerVerschlossenTrigger" /> <action type="cancel" rule-id="BewegungImHausCheck" /> </actionlist> </rule> <rule id="HaustuerVerschlossenTrigger"> <condition type="time-counter" threshold="35" reset-delay="4m" > <condition type="object" id="HaustuerTrigger" trigger="true" value="1" /> </condition> <actionlist type="if-true"> <action type="set-value" id="HaustuerTrigger" value="0" /> <action type="set-value" id="BewegungImHaus" value="0" /> <action type="set-value" id="CheckForAbwesend" value="0" /> <!-- <action type="shell-cmd" cmd="/usr/local/bin/prowlknx 'Abwesend' check" /> --> </actionlist> <actionlist type="on-false"> <action type="set-value" id="CheckForAbwesend" value="1" /> <!-- <action type="shell-cmd" cmd="/usr/local/bin/prowlknx 'Abwesend' check done" /> --> </actionlist> </rule> <rule id="BewegungImHausCheck"> <condition type="time-counter" threshold="1" reset-delay="5m" > <condition type="or"> <condition type="object" id="BewegungKGKellerVorraum" trigger="true" value="1" /> <condition type="object" id="BewegungKGAnschlusskeller" trigger="true" value="1" /> <condition type="object" id="BewegungEGFlur" trigger="true" value="1" /> <condition type="object" id="BewegungEGBad" trigger="true" value="1" /> <condition type="object" id="BewegungEGWohnzimmer1" trigger="true" value="1" /> <condition type="object" id="BewegungEGWohnzimmer2" trigger="true" value="1" /> <condition type="object" id="BewegungOGFlur" trigger="true" value="1" /> <condition type="object" id="BewegungOGBad" trigger="true" value="1" /> </condition> </condition> <actionlist type="if-true"> <action type="set-value" id="BewegungImHaus" value="1" /> </actionlist> <actionlist type="on-false"> <action type="set-value" id="BewegungImHaus" value="0" /> </actionlist> </rule> <rule id="AbwesenheitserkennungAnwesend"> <condition type="and"> <condition type="object" id="CheckForAbwesend" trigger="true" value="1" /> <condition type="object" id="BewegungImHaus" trigger="true" value="1" /> </condition> <actionlist> <action type="set-value" id="SindAbwesend" value="0" /> <action type="set-value" id="CheckForAbwesend" value="0" /> <action type="shell-cmd" cmd="/usr/local/bin/prowlknx 'Abwesend' sind hier" /> <!-- <action type="shell-cmd" cmd="/usr/local/bin/knxrsslog Anwesend \(Abwesend Check\)" /> --> </actionlist> </rule> <rule id="AbwesenheitserkennungAbwesend"> <condition type="and"> <condition type="object" id="CheckForAbwesend" trigger="true" value="1" /> <condition type="object" id="BewegungImHaus" trigger="true" value="0" /> </condition> <actionlist> <action type="set-value" id="SindAbwesend" value="1" /> <action type="set-value" id="CheckForAbwesend" value="0" /> <action type="shell-cmd" cmd="/usr/local/bin/prowlknx 'Abwesend' sind weg" /> <action type="shell-cmd" cmd="/usr/local/bin/knxrsslog Abwesend \(Abwesend Check\)" /> </actionlist> </rule>
Wichtig war die Zeile
<condition type="time-counter" threshold="35" reset-delay="4m" >
(dieser time-counter setzt die aktuelle Version von LinKNX voraus)Er sorgt dafür, dass die folgende Erkennung erst nach 35 Sekunden "anspringt". Ich hatte das Problem, dass zyklisch sendene Bewegungsmelder auch nach dem Schließen ein "EIN" geschickt haben und es so zu Problemen kam. Die "4m" definiert, wie lange ich auf Bewegung im Haus warte und dann entscheide ob Anwesend oder Abwesend