Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- import time
- import pushover
- import ConfigParser
- import os.path
- import inspect
- import math
- import homewizardapi
- from datetime import datetime, timedelta
- # Variables
- localTime = datetime.now()
- localDate = localTime.strftime('%Y-%m-%d')
- # Create HomeWizard Object
- homewizard = homewizardapi.HomeWizard()
- # Read HW Config
- hwConfigRead = homewizard.readconfig()
- print 'ConfigRead: ' + str(hwConfigRead)
- # Handshake
- if hwConfigRead:
- hwHandshake = homewizard.handshake()
- else:
- hwHandshake = False
- print 'Handshake : ' + str(hwHandshake)
- # GetStatus
- if hwHandshake:
- getStatusSuccess = homewizard.getStatus()
- else:
- getStatusSuccess = False
- # Exit if error
- if not getStatusSuccess:
- sys.exit(-1)
- # Config
- config = ConfigParser.ConfigParser(allow_no_value=True)
- sourcePath = os.path.dirname(inspect.getsourcefile(homewizard.todayAt))
- hwConfigFile = os.path.join(sourcePath,'homewizard.cfg')
- if not os.path.isfile(hwConfigFile):
- print 'ERROR: You need a homewizard.cfg file'
- sys.exit(-1)
- config.read(hwConfigFile)
- hwMotionLiving = config.getint('HomeWizard', 'hwMotionLiving')
- hwMotionKitchen = config.getint('HomeWizard', 'hwMotionKitchen')
- hwSensorDusk = config.getint('HomeWizard', 'hwSensorDusk')
- hwContactBalcony = config.getint('HomeWizard', 'hwContactBalcony')
- hwThermoOutside = config.getint('HomeWizard', 'hwThermoOutside')
- hwSwitchLights = config.getint('HomeWizard', 'hwSwitchLights')
- hwSwitchCurtains = config.getint('HomeWizard', 'hwSwitchCurtains')
- hwSwitchKitchen1 = config.getint('HomeWizard', 'hwSwitchKitchen1')
- hwSwitchKitchen2 = config.getint('HomeWizard', 'hwSwitchKitchen2')
- timeTriggered = config.get('HomeWizard', 'timeTriggered')
- lowerThermostatTriggered = config.getboolean('HomeWizard', 'lowerThermostatTriggered')
- # Retrieve HomeWizard Status
- # Motion Living
- sensorMotionLivingSuccess, sensorMotionLivingStatus, sensorMotionLivingTimeStr, sensorMotionLivingDateTime = homewizard.sensorStatus(hwMotionLiving)
- # Motion Kitchen
- sensorMotionKitchenSuccess, sensorMotionKitchenStatus, sensorMotionKitchenTimeStr, sensorMotionKitchenDateTime = homewizard.sensorStatus(hwMotionKitchen)
- # Sensor Dusk
- sensorDuskSuccess, sensorDuskStatus,sensorDuskTimeStr, sensorDuskDateTime = homewizard.sensorStatus(hwSensorDusk)
- # Contact Balcony
- contactBalconySuccess, contactBalconyStatus,contactBalconyTimeStr, contactBalconyDateTime = homewizard.sensorStatus(hwContactBalcony)
- # Thermometer Outside
- thermoOutsideSuccess, thermoOutsideTemp = homewizard.thermoGetTemp(hwThermoOutside)
- # HeatLink
- hlSuccess, hlRoomTemp, hlTempHeatlink, hlTempThermostat = homewizard.heatlinkGetTemp()
- # SwitchStatus Livingroom Lights
- switchLightsSuccess, switchLightsStatus = homewizard.switchStatus(hwSwitchLights)
- # SwitchStatus Livingroom Curtains
- switchCurtainsSuccess, switchCurtainsStatus = homewizard.switchStatus(hwSwitchCurtains)
- # SwitchStatus Kitchen Spots
- switchKitchen1Success, switchKitchen1Status = homewizard.switchStatus(hwSwitchKitchen1)
- # SwitchStatus Kitchen Ceiling
- switchKitchen2Success, switchKitchen2Status = homewizard.switchStatus(hwSwitchKitchen2)
- # PushOver
- poConfigRead = pushover.readconfig()
- ###################################
- # Switch LivingRoom Lights/Curtains
- ###################################
- # Get Previous Time Triggered
- if timeTriggered=='':
- timeTriggered = datetime(1901,1,1,0,0,0,0)
- else:
- timeTriggered = datetime.strptime(timeTriggered,'%Y-%m-%d %H:%M:%S.%f')
- # Check status
- alreadyTriggered = (localTime - timeTriggered) < timedelta(hours=10)
- inTimeWindow = localTime > homewizard.todayAt(16,0,0)
- sensorMotionLivingDetected = sensorMotionLivingTimeStr <> '00:00' and (localTime - sensorMotionLivingDateTime) < timedelta(minutes=30)
- triggerSwitches = sensorDuskStatus and inTimeWindow and not alreadyTriggered
- triggerLights = triggerSwitches and sensorMotionDetected and not switchLightsStatus
- triggerCurtains = triggerSwitches and not switchCurtainsStatus
- # Lights
- if triggerLights:
- # Notify
- pushover.notify('Woonkamer: Licht aan / rolgordijn naar beneden',
- 'Uitgevoerd op: ' + datetime.strftime(localTime,'%Y-%m-%d %H:%M:%S') + '\n' +
- 'Schemer gedetecteerd: ' + str(sensorDuskTimeStr),
- 0,
- 'magic',
- '',
- '')
- # LightsOn
- homewizard.switchOn(hwSwitchLights)
- # Curtains
- if triggerCurtains:
- homewizard.switchOn(hwSwitchCurtains)
- # Write Config
- if (triggerSwitches and sensorMotionDetected):
- config.set('HomeWizard', 'timeTriggered', localTime)
- with open(hwConfigFile, 'wb') as configfile:
- config.write(configfile)
- ########################################################
- # Lower Thermostat temperature if balcony door is opened
- ########################################################
- # Current Temperature
- if (hlTempHeatlink > 0):
- currentTemperature = hlTempHeatlink
- else:
- currentTemperature = hlTempThermostat
- # New Temperature
- newTemperature = math.floor(thermoOutsideTemp)-1
- # Lower Thermostat?
- contactBalconyOpen = contactBalconyStatus and (localTime - contactBalconyDateTime) > timedelta(minutes=2)
- lowerThermostat = contactBalconyOpen and (thermoOutsideTemp < hlTempThermostat or thermoOutsideTemp < hlRoomTemp) and hlTempHeatlink <> newTemperature
- resetThermostat = not contactBalconyStatus and hlTempHeatlink>0 and lowerThermostatTriggered
- if (lowerThermostat):
- # Set Temperature
- homewizard.heatlinkSetTemp(newTemperature,0)
- # PushOverNotification
- if (not lowerThermostatTriggered):
- poSuccess = pushover.notify('Thermostaat bijgesteld',
- 'Uitgevoerd op: ' + datetime.strftime(localTime,'%Y-%m-%d %H:%M:%S') + '\n' +
- 'Balkondeur open: ' + str(contactBalconyTimeStr) + '\n' +
- 'Temperatuur gewijzigd van ' + str(currentTemperature) + ' in ' + str(newTemperature) + ' graden\n' +
- 'Buiten temperatuur: ' + str(thermoOutsideTemp),
- 0,
- 'magic',
- '',
- '')
- elif (resetThermostat):
- # Reset Thermostat
- homewizard.heatlinkSetTemp(0,0)
- # PushOver Notification
- poSuccess = pushover.notify('Thermostaat override uitgeschakeld',
- 'Uitgevoerd op: ' + datetime.strftime(localTime,'%Y-%m-%d %H:%M:%S') + '\n' +
- 'Balkondeur gesloten: ' + str(contactBalconyTimeStr),
- 0,
- 'magic',
- '',
- '')
- # Write Config
- if (lowerThermostat or resetThermostat):
- config.set('HomeWizard', 'lowerThermostatTriggered', lowerThermostat and not resetThermostat)
- with open(hwConfigFile, 'wb') as configfile:
- config.write(configfile)
- ###########################
- # Switch Off Kitchen Lights
- ###########################
- sensorMotionKitchenNotDetected = sensorMotionKitchenTimeStr <> '00:00' and (localTime - sensorMotionKitchenDateTime) > timedelta(minutes=10)
- if (sensorMotionKitchenNotDetected and switchKitchen1Status):
- homewizard.switchOff(hwSwitchKitchen1)
- time.sleep(2)
- if (sensorMotionKitchenNotDetected and switchKitchen2Status):
- homewizard.switchOff(hwSwitchKitchen2)
- #########
- # Logging
- #########
- print 'Start : ' + str(localTime)
- print 'End : ' + str(datetime.now())
- print
- print '================================='
- print 'Switch Livingroom Lights/Curtain:'
- print '================================='
- print 'Local Time : ' + str(localTime)
- print 'In Time Window : ' + str(inTimeWindow)
- print 'Time Triggered : ' + str(timeTriggered)
- print 'Already Triggered: ' + str(alreadyTriggered)
- print
- print 'Motion Detected : ' + str(sensorMotionLivingDetected)
- print 'Dusk Detected : ' + str(sensorDuskStatus)
- print
- print 'Trigger Switches : ' + str(triggerSwitches)
- print 'Trigger Lights : ' + str(triggerLights)
- print 'Trigger Curtains : ' + str(triggerCurtains)
- print
- print '====================================='
- print 'Lower thermostat if balconydoor open:'
- print '====================================='
- print 'Balconydoor Status : ' + str(contactBalconyStatus)
- print 'Balconydoor Time : ' + str(contactBalconyTimeStr)
- print 'Balconydoor Open : ' + str(contactBalconyOpen)
- print 'Outside temperature : ' + str(thermoOutsideTemp)
- print 'Room temperature : ' + str(hlRoomTemp)
- print 'Thermostat temperature: ' + str(hlTempThermostat)
- print 'HeatLink temperature : ' + str(hlTempHeatlink)
- print 'New temperature : ' + str(newTemperature)
- print 'Lower Thermostat : ' + str(lowerThermostat)
- print 'Triggered : ' + str(lowerThermostatTriggered)
- print
- print '====================================='
- print 'Switch off Kitchen Lights:'
- print '====================================='
- print 'Motion Detected : ' + str(sensorMotionKitchenTimeStr)
- print 'Switch off lights: ' + str(sensorMotionKitchenNotDetected and (switchKitchen1Status or switchKitchen2Status))
- print 'Lights Spots : ' + str(switchKitchen1Status)
- print 'Lights Ceiling : ' + str(switchKitchen2Status)
- print
Advertisement
Add Comment
Please, Sign In to add comment