Ankündigung

Einklappen
Keine Ankündigung bisher.

[linKNX] Automatische Abwesenheitserkennung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [linKNX] Automatische Abwesenheitserkennung

    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:

    • 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>
    (die Zeilen mit "shell-cmd" kann man weglassen. Diese senden mir nur (debug) Nachrichten auf mein iPhone)

    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
Lädt...
X