gtermors

homewizardSwitchboard.py

Mar 17th, 2014
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.41 KB | None | 0 0
  1. import sys
  2. import time
  3. import pushover
  4. import ConfigParser
  5. import os.path
  6. import inspect
  7. import math
  8. import homewizardapi
  9. from datetime import datetime, timedelta
  10.  
  11. # Variables
  12. localTime  = datetime.now()
  13. localDate  = localTime.strftime('%Y-%m-%d')
  14.  
  15. # Create HomeWizard Object
  16. homewizard = homewizardapi.HomeWizard()
  17.  
  18. # Read HW Config
  19. hwConfigRead = homewizard.readconfig()
  20.  
  21. print 'ConfigRead: ' + str(hwConfigRead)
  22.    
  23. # Handshake
  24. if hwConfigRead:
  25.    hwHandshake = homewizard.handshake()
  26. else:
  27.    hwHandshake = False
  28.  
  29. print 'Handshake : ' + str(hwHandshake)
  30.  
  31. # GetStatus
  32. if hwHandshake:
  33.    getStatusSuccess = homewizard.getStatus()
  34. else:
  35.    getStatusSuccess = False
  36.  
  37. # Exit if error
  38. if not getStatusSuccess:
  39.    sys.exit(-1)
  40.  
  41. # Config
  42. config = ConfigParser.ConfigParser(allow_no_value=True)
  43.  
  44. sourcePath = os.path.dirname(inspect.getsourcefile(homewizard.todayAt))
  45. hwConfigFile = os.path.join(sourcePath,'homewizard.cfg')
  46.  
  47. if not os.path.isfile(hwConfigFile):
  48.    print 'ERROR: You need a homewizard.cfg file'
  49.    sys.exit(-1)
  50.  
  51. config.read(hwConfigFile)
  52.  
  53. hwMotionLiving           = config.getint('HomeWizard', 'hwMotionLiving')
  54. hwMotionKitchen          = config.getint('HomeWizard', 'hwMotionKitchen')
  55. hwSensorDusk             = config.getint('HomeWizard', 'hwSensorDusk')
  56. hwContactBalcony         = config.getint('HomeWizard', 'hwContactBalcony')
  57. hwThermoOutside          = config.getint('HomeWizard', 'hwThermoOutside')
  58. hwSwitchLights           = config.getint('HomeWizard', 'hwSwitchLights')
  59. hwSwitchCurtains         = config.getint('HomeWizard', 'hwSwitchCurtains')
  60. hwSwitchKitchen1         = config.getint('HomeWizard', 'hwSwitchKitchen1')
  61. hwSwitchKitchen2         = config.getint('HomeWizard', 'hwSwitchKitchen2')
  62. timeTriggered            = config.get('HomeWizard', 'timeTriggered')
  63. lowerThermostatTriggered = config.getboolean('HomeWizard', 'lowerThermostatTriggered')
  64.  
  65. # Retrieve HomeWizard Status
  66.  
  67. # Motion Living
  68. sensorMotionLivingSuccess, sensorMotionLivingStatus, sensorMotionLivingTimeStr, sensorMotionLivingDateTime = homewizard.sensorStatus(hwMotionLiving)
  69. # Motion Kitchen
  70. sensorMotionKitchenSuccess, sensorMotionKitchenStatus, sensorMotionKitchenTimeStr, sensorMotionKitchenDateTime = homewizard.sensorStatus(hwMotionKitchen)
  71. # Sensor Dusk
  72. sensorDuskSuccess, sensorDuskStatus,sensorDuskTimeStr, sensorDuskDateTime = homewizard.sensorStatus(hwSensorDusk)
  73. # Contact Balcony
  74. contactBalconySuccess, contactBalconyStatus,contactBalconyTimeStr, contactBalconyDateTime = homewizard.sensorStatus(hwContactBalcony)
  75. # Thermometer Outside
  76. thermoOutsideSuccess, thermoOutsideTemp = homewizard.thermoGetTemp(hwThermoOutside)
  77. # HeatLink
  78. hlSuccess, hlRoomTemp, hlTempHeatlink, hlTempThermostat = homewizard.heatlinkGetTemp()
  79. # SwitchStatus Livingroom Lights
  80. switchLightsSuccess, switchLightsStatus = homewizard.switchStatus(hwSwitchLights)
  81. # SwitchStatus Livingroom Curtains
  82. switchCurtainsSuccess, switchCurtainsStatus = homewizard.switchStatus(hwSwitchCurtains)
  83. # SwitchStatus Kitchen Spots
  84. switchKitchen1Success, switchKitchen1Status = homewizard.switchStatus(hwSwitchKitchen1)
  85. # SwitchStatus Kitchen Ceiling
  86. switchKitchen2Success, switchKitchen2Status = homewizard.switchStatus(hwSwitchKitchen2)
  87.  
  88. # PushOver
  89. poConfigRead = pushover.readconfig()
  90.  
  91. ###################################
  92. # Switch LivingRoom Lights/Curtains
  93. ###################################
  94.  
  95. # Get Previous Time Triggered
  96. if timeTriggered=='':
  97.    timeTriggered = datetime(1901,1,1,0,0,0,0)
  98. else:
  99.    timeTriggered = datetime.strptime(timeTriggered,'%Y-%m-%d %H:%M:%S.%f')
  100.  
  101. # Check status
  102. alreadyTriggered     = (localTime - timeTriggered) < timedelta(hours=10)
  103. inTimeWindow         = localTime > homewizard.todayAt(16,0,0)
  104.  
  105. sensorMotionLivingDetected = sensorMotionLivingTimeStr <> '00:00' and (localTime - sensorMotionLivingDateTime) < timedelta(minutes=30)
  106.  
  107. triggerSwitches      = sensorDuskStatus and inTimeWindow and not alreadyTriggered
  108. triggerLights        = triggerSwitches and sensorMotionDetected and not switchLightsStatus  
  109. triggerCurtains      = triggerSwitches and not switchCurtainsStatus
  110.  
  111. # Lights
  112. if triggerLights:
  113.    # Notify
  114.    pushover.notify('Woonkamer: Licht aan / rolgordijn naar beneden',
  115.                    'Uitgevoerd op: ' + datetime.strftime(localTime,'%Y-%m-%d %H:%M:%S') + '\n' +
  116.                    'Schemer gedetecteerd: ' + str(sensorDuskTimeStr),
  117.                    0,
  118.                    'magic',
  119.                    '',
  120.                    '')
  121.    # LightsOn
  122.    homewizard.switchOn(hwSwitchLights)
  123.  
  124. # Curtains
  125. if triggerCurtains:
  126.    homewizard.switchOn(hwSwitchCurtains)
  127.  
  128. # Write Config
  129. if  (triggerSwitches and sensorMotionDetected):
  130.     config.set('HomeWizard', 'timeTriggered', localTime)
  131.     with open(hwConfigFile, 'wb') as configfile:
  132.         config.write(configfile)
  133.  
  134. ########################################################
  135. # Lower Thermostat temperature if balcony door is opened
  136. ########################################################
  137.  
  138. # Current Temperature
  139. if (hlTempHeatlink > 0):
  140.    currentTemperature = hlTempHeatlink
  141. else:
  142.    currentTemperature = hlTempThermostat
  143.  
  144. # New Temperature
  145. newTemperature  = math.floor(thermoOutsideTemp)-1
  146.  
  147. # Lower Thermostat?
  148. contactBalconyOpen = contactBalconyStatus and (localTime - contactBalconyDateTime) > timedelta(minutes=2)
  149.  
  150. lowerThermostat = contactBalconyOpen and (thermoOutsideTemp < hlTempThermostat or thermoOutsideTemp < hlRoomTemp) and hlTempHeatlink <> newTemperature
  151. resetThermostat = not contactBalconyStatus and hlTempHeatlink>0 and lowerThermostatTriggered
  152.  
  153. if (lowerThermostat):
  154.    # Set Temperature
  155.    homewizard.heatlinkSetTemp(newTemperature,0)
  156.  
  157.    # PushOverNotification
  158.    if (not lowerThermostatTriggered):
  159.       poSuccess = pushover.notify('Thermostaat bijgesteld',
  160.                                   'Uitgevoerd op: ' + datetime.strftime(localTime,'%Y-%m-%d %H:%M:%S') + '\n' +
  161.                                   'Balkondeur open: ' + str(contactBalconyTimeStr) + '\n' +
  162.                                   'Temperatuur gewijzigd van ' + str(currentTemperature) + ' in ' + str(newTemperature) + ' graden\n' +
  163.                                   'Buiten temperatuur: ' + str(thermoOutsideTemp),
  164.                                   0,
  165.                                   'magic',
  166.                                   '',
  167.                                   '')
  168. elif (resetThermostat):
  169.    # Reset Thermostat  
  170.    homewizard.heatlinkSetTemp(0,0)
  171.  
  172.    # PushOver Notification
  173.    poSuccess = pushover.notify('Thermostaat override uitgeschakeld',
  174.                                'Uitgevoerd op: ' + datetime.strftime(localTime,'%Y-%m-%d %H:%M:%S') + '\n' +
  175.                                'Balkondeur gesloten: ' + str(contactBalconyTimeStr),
  176.                                0,
  177.                                'magic',
  178.                                '',
  179.                                '')
  180.  
  181. # Write Config
  182. if (lowerThermostat or resetThermostat):
  183.    config.set('HomeWizard', 'lowerThermostatTriggered', lowerThermostat and not resetThermostat)
  184.    with open(hwConfigFile, 'wb') as configfile:
  185.         config.write(configfile)
  186.  
  187. ###########################
  188. # Switch Off Kitchen Lights
  189. ###########################
  190.  
  191. sensorMotionKitchenNotDetected = sensorMotionKitchenTimeStr <> '00:00' and (localTime - sensorMotionKitchenDateTime) > timedelta(minutes=10)
  192.  
  193. if (sensorMotionKitchenNotDetected and switchKitchen1Status):
  194.    homewizard.switchOff(hwSwitchKitchen1)
  195.    time.sleep(2)
  196.  
  197. if (sensorMotionKitchenNotDetected and switchKitchen2Status):
  198.    homewizard.switchOff(hwSwitchKitchen2)
  199.  
  200. #########      
  201. # Logging
  202. #########
  203.  
  204. print 'Start : ' + str(localTime)
  205. print 'End   : ' + str(datetime.now())
  206. print
  207. print '================================='
  208. print 'Switch Livingroom Lights/Curtain:'
  209. print '================================='
  210. print 'Local Time       : ' + str(localTime)
  211. print 'In Time Window   : ' + str(inTimeWindow)
  212. print 'Time Triggered   : ' + str(timeTriggered)
  213. print 'Already Triggered: ' + str(alreadyTriggered)
  214. print
  215. print 'Motion Detected  : ' + str(sensorMotionLivingDetected)
  216. print 'Dusk Detected    : ' + str(sensorDuskStatus)
  217. print
  218. print 'Trigger Switches : ' + str(triggerSwitches)
  219. print 'Trigger Lights   : ' + str(triggerLights)
  220. print 'Trigger Curtains : ' + str(triggerCurtains)
  221. print
  222. print '====================================='
  223. print 'Lower thermostat if balconydoor open:'
  224. print '====================================='
  225. print 'Balconydoor Status    : ' + str(contactBalconyStatus)
  226. print 'Balconydoor Time      : ' + str(contactBalconyTimeStr)
  227. print 'Balconydoor Open      : ' + str(contactBalconyOpen)
  228. print 'Outside temperature   : ' + str(thermoOutsideTemp)
  229. print 'Room temperature      : ' + str(hlRoomTemp)
  230. print 'Thermostat temperature: ' + str(hlTempThermostat)
  231. print 'HeatLink temperature  : ' + str(hlTempHeatlink)
  232. print 'New temperature       : ' + str(newTemperature)
  233. print 'Lower Thermostat      : ' + str(lowerThermostat)
  234. print 'Triggered             : ' + str(lowerThermostatTriggered)
  235. print
  236. print '====================================='
  237. print 'Switch off Kitchen Lights:'
  238. print '====================================='
  239. print 'Motion Detected  : ' + str(sensorMotionKitchenTimeStr)
  240. print 'Switch off lights: ' + str(sensorMotionKitchenNotDetected and (switchKitchen1Status or switchKitchen2Status))
  241. print 'Lights Spots     : ' + str(switchKitchen1Status)
  242. print 'Lights Ceiling   : ' + str(switchKitchen2Status)
  243. print
Advertisement
Add Comment
Please, Sign In to add comment