Arriving home - detecting phones which are arriving to Home

See:

or

and

My items:

Group:Switch:OR(ON, OFF)      Presence          (Persist)
Group                         gPresence         (Persist)
Group:Switch:AND(OFF, ON)     gPresence_Vincent (gPresence)
Group:Switch:AND(OFF, ON)     gPresence_Sadaf   (gPresence)
Group:Switch:AND(OFF, ON)     gPresence_Ayesha  (gPresence)

Switch Presence_Vincent                "Vincent [MAP(presence.map):%s]" <parents> (Presence)
Switch Presence_Sadaf                  "Sadaf [MAP(presence.map):%s]"   <parents> (Presence)
Switch Presence_Ayesha                 "Ayesha [MAP(presence.map):%s]"            (Presence)
Switch Presence_Vincent_PhoneWifiHome                                             (gPresence_Vincent) { channel="network:pingdevice:192_168_0_25:online" }
Switch Presence_Sadaf_PhoneWifiHome	                                              (gPresence_Sadaf)   { channel="network:pingdevice:192_168_0_6:online" }
Switch Presence_Ayesha_PhoneWifiHome                                              (gPresence_Ayesha)  { channel="network:pingdevice:192_168_0_7:online" }

Switch Presence_Vincent_Timer                                                                         { expire="7m,command=OFF"}
Switch Presence_Sadaf_Timer                                                                           { expire="7m,command=OFF"}
Switch Presence_Ayesha_Timer                                                                          { expire="7m,command=OFF"}


//linking switch item to regionTrigger channel. assuming the Home distance channel is defined in the binding config (see above)
Switch Presence_Vincent_Owntracks                                                 (gPresence_Vincent) { channel="gpstracker:tracker:vr:regionTrigger" [profile="gpstracker:trigger-geofence", regionName="Home"] } 
Switch Presence_Sadaf_Owntracks                                                   (gPresence_Sadaf)   { channel="gpstracker:tracker:sh:regionTrigger" [profile="gpstracker:trigger-geofence", regionName="Home"] } 
Switch Presence_Ayesha_Owntracks                                                  (gPresence_Ayesha)  { channel="gpstracker:tracker:ar:regionTrigger" [profile="gpstracker:trigger-geofence", regionName="Home"] } 

My rules:

// *******************************************
// *             PRESENCE RULES              *
// *******************************************

rule "gPresence Item updated"
when
    Member of gPresence changed
then
    val state = triggeringItem.state.toString // to force item update
    val name = triggeringItem.name.split("_").get(1)
    var timerString = "Presence_" + name + "_Timer"
    val SwitchItem presenceItem = Presence.members.filter[ i | i.name.contains(name) ].head as SwitchItem
    if (state == "ON") {
        postUpdate(timerString, "OFF") // cancel the timer if necessary
        if (presenceItem.state != ON) {
            sendCommand(presenceItem.name, "ON")
        }
    }

    // Not at home
    if (state == "OFF" && presenceItem.state != OFF) {
        sendCommand(timerString, "ON") // start the timer
    }
end

rule "Presence Timer expired"
when
    Item Presence_Vincent_Timer received command OFF or
    Item Presence_Sadaf_Timer received command OFF
then
    var String itemName = triggeringItem.name.split("_").get(0) + "_" + triggeringItem.name.split("_").get(1)
    postUpdate(itemName, "OFF")
    //Presence_Vincent.postUpdate(OFF)
end
1 Like