Advertisement
maciekish

Untitled

Jan 10th, 2018
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.80 KB | None | 0 0
  1. import java.util.concurrent.locks.ReentrantLock
  2. var ReentrantLock iPhoneLocationLock = new ReentrantLock()
  3.  
  4. var distanceThreshold = 125.0
  5.  
  6. rule "Presence"
  7. when
  8.     Item MaciejsLocation changed or
  9.     Item PatrycjasLocation changed
  10. then
  11.     // Load previous state to determine change
  12.     var maciejWasAway = MaciejIsHome.state == OFF
  13.     var patrycjaWasAway = PatrycjaIsHome.state == OFF
  14.  
  15.     // Distance calculation
  16.     var PointType maciejsiPhoneLocation = new PointType(MaciejsLocation.state.toString)
  17.     var maciejDistance = maciejsiPhoneLocation.distanceFrom(new PointType(Home.state.toString))
  18.     var maciejIsAwayNow = maciejDistance > distanceThreshold
  19.    
  20.     var PointType patrycjasiPhoneLocation = new PointType(PatrycjasLocation.state.toString)
  21.     var patrycjaDistance = patrycjasiPhoneLocation.distanceFrom(new PointType(Home.state.toString))
  22.     var patrycjaIsAwayNow = patrycjaDistance > distanceThreshold
  23.  
  24.     iPhoneLocationLock.lock()
  25.     try {
  26.         // When last person leaves home
  27.         if (maciejIsAwayNow && patrycjaIsAwayNow && (!maciejWasAway || !patrycjaWasAway)) {
  28.             HarmonyLivingRoomCurrentActivity.sendCommand("PowerOff")
  29.             PlexLivingRoomPause.sendCommand(ON)
  30.             // TODO: Turn off lights
  31.             // TODO: Start Neato Botvac
  32.  
  33.             logInfo("iphone.rules", "Everybody left Home (Maciej "+ maciejDistance +" m, Patrycja "+ patrycjaDistance +" m)")
  34.             pushNotification("", "Everybody left Home!")
  35.         } else
  36.         // When everyone comes home together
  37.         if (!maciejIsAwayNow && !patrycjaIsAwayNow && maciejWasAway && patrycjaWasAway) {
  38.             // TODO: Turn on lights
  39.             // TODO: Dock Neato Botvac
  40.  
  41.             logInfo("iphone.rules", "Everybody came Home now (Maciej "+ maciejDistance +" m, Patrycja "+ patrycjaDistance +" m)")
  42.             pushNotification("", "Everybody came Home now!")
  43.         } else
  44.         // When one person comes home to the other
  45.         if (!maciejIsAwayNow && !patrycjaIsAwayNow && (maciejWasAway || patrycjaWasAway)) {
  46.             // Actions TBD
  47.  
  48.             logInfo("iphone.rules", "Everybody is Home now (Maciej "+ maciejDistance +" m, Patrycja "+ patrycjaDistance +" m)")
  49.             pushNotification("", "Everybody is Home now!")
  50.         } else
  51.         // When somebody comes home to an empty house
  52.         if (maciejWasAway && patrycjaWasAway && (!maciejIsAwayNow || !patrycjaIsAwayNow)) {
  53.             // TODO: Turn on lights
  54.             // TODO: Dock Neato Botvac
  55.            
  56.             logInfo("iphone.rules", "Someone came Home now (Maciej "+ maciejDistance +" m, Patrycja "+ patrycjaDistance +" m)")
  57.             pushNotification("", "Someone came Home now!")
  58.         }
  59.  
  60.         // Debug
  61.         /*if (maciejIsAwayNow && patrycjaIsAwayNow && maciejWasAway && patrycjaWasAway) {
  62.             logInfo("iphone.rules", "Everybody is away, nothing to do (Maciej "+ maciejDistance +" m, Patrycja "+ patrycjaDistance +" m)")
  63.         } else if (!maciejIsAwayNow && !patrycjaIsAwayNow && !maciejWasAway && !patrycjaWasAway) {
  64.             logInfo("iphone.rules", "Everybody is Home, nothing to do (Maciej "+ maciejDistance +" m, Patrycja "+ patrycjaDistance +" m)")
  65.         } else if (!maciejIsAwayNow || !patrycjaIsAwayNow) {
  66.             logInfo("iphone.rules", "Somebody is Home, nothing to do (Maciej "+ maciejDistance +" m, Patrycja "+ patrycjaDistance +" m)")
  67.         }
  68.  
  69.         logInfo("iphone.rules", "Maciej Was Away: " + maciejWasAway + ", Patrycja Was Away: " + patrycjaWasAway)
  70.         logInfo("iphone.rules", "Maciej Is Away: " + maciejIsAwayNow + ", Patrycja Is Away: " + patrycjaIsAwayNow)
  71.         */
  72.     } finally {
  73.         iPhoneLocationLock.unlock()
  74.     }
  75.  
  76.     // Update item states
  77.     if (maciejIsAwayNow) {
  78.         MaciejIsHome.postUpdate(OFF)
  79.     } else {
  80.         MaciejIsHome.postUpdate(ON)
  81.     }
  82.    
  83.     if (patrycjaIsAwayNow) {
  84.         PatrycjaIsHome.postUpdate(OFF)
  85.     } else {
  86.         PatrycjaIsHome.postUpdate(ON)
  87.     }
  88. end
  89.  
  90. rule "MaciejLocation"
  91. when
  92.     Item MaciejIsHome changed
  93. then
  94.     if (MaciejIsHome.state == ON) {
  95.         logInfo("iphone.rules", "Maciej is back")
  96.         pushNotification("", "Welcome Home, Sir!")
  97.     } else {
  98.         logInfo("iphone.rules", "Maciej left")
  99.         pushNotification("", "Bon Voyage, Sir!")
  100.     }
  101. end
  102.  
  103. rule "PatrycjaLocation"
  104. when
  105.     Item PatrycjaIsHome changed
  106. then
  107.     if (MaciejIsHome.changedSince(now.minusMinutes(1))) {
  108.         logDebug("iphone.rules", "Changed state together, not nofitying.")
  109.         return
  110.     }
  111.  
  112.     if (PatrycjaIsHome.state == ON) {
  113.         logInfo("iphone.rules", "Patrycja is back")
  114.         pushNotification("", "Patrycja arrived at Home!")
  115.     } else {
  116.         logInfo("iphone.rules", "Patrycja left")
  117.         pushNotification("", "Patrycja left Home!")
  118.     }
  119. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement