Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.concurrent.locks.ReentrantLock
- var ReentrantLock iPhoneLocationLock = new ReentrantLock()
- var distanceThreshold = 125.0
- rule "Presence"
- when
- Item MaciejsLocation changed or
- Item PatrycjasLocation changed
- then
- // Load previous state to determine change
- var maciejWasAway = MaciejIsHome.state == OFF
- var patrycjaWasAway = PatrycjaIsHome.state == OFF
- // Distance calculation
- var PointType maciejsiPhoneLocation = new PointType(MaciejsLocation.state.toString)
- var maciejDistance = maciejsiPhoneLocation.distanceFrom(new PointType(Home.state.toString))
- var maciejIsAwayNow = maciejDistance > distanceThreshold
- var PointType patrycjasiPhoneLocation = new PointType(PatrycjasLocation.state.toString)
- var patrycjaDistance = patrycjasiPhoneLocation.distanceFrom(new PointType(Home.state.toString))
- var patrycjaIsAwayNow = patrycjaDistance > distanceThreshold
- iPhoneLocationLock.lock()
- try {
- // When last person leaves home
- if (maciejIsAwayNow && patrycjaIsAwayNow && (!maciejWasAway || !patrycjaWasAway)) {
- HarmonyLivingRoomCurrentActivity.sendCommand("PowerOff")
- PlexLivingRoomPause.sendCommand(ON)
- // TODO: Turn off lights
- // TODO: Start Neato Botvac
- logInfo("iphone.rules", "Everybody left Home (Maciej "+ maciejDistance +" m, Patrycja "+ patrycjaDistance +" m)")
- pushNotification("", "Everybody left Home!")
- } else
- // When everyone comes home together
- if (!maciejIsAwayNow && !patrycjaIsAwayNow && maciejWasAway && patrycjaWasAway) {
- // TODO: Turn on lights
- // TODO: Dock Neato Botvac
- logInfo("iphone.rules", "Everybody came Home now (Maciej "+ maciejDistance +" m, Patrycja "+ patrycjaDistance +" m)")
- pushNotification("", "Everybody came Home now!")
- } else
- // When one person comes home to the other
- if (!maciejIsAwayNow && !patrycjaIsAwayNow && (maciejWasAway || patrycjaWasAway)) {
- // Actions TBD
- logInfo("iphone.rules", "Everybody is Home now (Maciej "+ maciejDistance +" m, Patrycja "+ patrycjaDistance +" m)")
- pushNotification("", "Everybody is Home now!")
- } else
- // When somebody comes home to an empty house
- if (maciejWasAway && patrycjaWasAway && (!maciejIsAwayNow || !patrycjaIsAwayNow)) {
- // TODO: Turn on lights
- // TODO: Dock Neato Botvac
- logInfo("iphone.rules", "Someone came Home now (Maciej "+ maciejDistance +" m, Patrycja "+ patrycjaDistance +" m)")
- pushNotification("", "Someone came Home now!")
- }
- // Debug
- /*if (maciejIsAwayNow && patrycjaIsAwayNow && maciejWasAway && patrycjaWasAway) {
- logInfo("iphone.rules", "Everybody is away, nothing to do (Maciej "+ maciejDistance +" m, Patrycja "+ patrycjaDistance +" m)")
- } else if (!maciejIsAwayNow && !patrycjaIsAwayNow && !maciejWasAway && !patrycjaWasAway) {
- logInfo("iphone.rules", "Everybody is Home, nothing to do (Maciej "+ maciejDistance +" m, Patrycja "+ patrycjaDistance +" m)")
- } else if (!maciejIsAwayNow || !patrycjaIsAwayNow) {
- logInfo("iphone.rules", "Somebody is Home, nothing to do (Maciej "+ maciejDistance +" m, Patrycja "+ patrycjaDistance +" m)")
- }
- logInfo("iphone.rules", "Maciej Was Away: " + maciejWasAway + ", Patrycja Was Away: " + patrycjaWasAway)
- logInfo("iphone.rules", "Maciej Is Away: " + maciejIsAwayNow + ", Patrycja Is Away: " + patrycjaIsAwayNow)
- */
- } finally {
- iPhoneLocationLock.unlock()
- }
- // Update item states
- if (maciejIsAwayNow) {
- MaciejIsHome.postUpdate(OFF)
- } else {
- MaciejIsHome.postUpdate(ON)
- }
- if (patrycjaIsAwayNow) {
- PatrycjaIsHome.postUpdate(OFF)
- } else {
- PatrycjaIsHome.postUpdate(ON)
- }
- end
- rule "MaciejLocation"
- when
- Item MaciejIsHome changed
- then
- if (MaciejIsHome.state == ON) {
- logInfo("iphone.rules", "Maciej is back")
- pushNotification("", "Welcome Home, Sir!")
- } else {
- logInfo("iphone.rules", "Maciej left")
- pushNotification("", "Bon Voyage, Sir!")
- }
- end
- rule "PatrycjaLocation"
- when
- Item PatrycjaIsHome changed
- then
- if (MaciejIsHome.changedSince(now.minusMinutes(1))) {
- logDebug("iphone.rules", "Changed state together, not nofitying.")
- return
- }
- if (PatrycjaIsHome.state == ON) {
- logInfo("iphone.rules", "Patrycja is back")
- pushNotification("", "Patrycja arrived at Home!")
- } else {
- logInfo("iphone.rules", "Patrycja left")
- pushNotification("", "Patrycja left Home!")
- }
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement