def POST(self): # get the posted json object and turn it into a dictionary json_request = web.data() post_dict = json.loads(json_request) # check the credentials stored in the json if 'Password' not in post_dict or 'User' not in post_dict: raise web.NotFound() password_given = post_dict['Password'] user_given = post_dict['User'] if password_given != password_tr or user_given != user_tr: raise web.NotFound() del post_dict['Password'] del post_dict['User'] # if the post object contains behavior information, update the values if 'lamp_movement' in post_dict: global no_movement_interval global lamp_movement_reaction no_movement_interval = int(post_dict['no_movement_time']) lamp_movement_reaction = post_dict['lamp_movement'] global no_water_interval no_water_interval = post_dict['no_water_time'] # adjust the state of both the real and the virtual apartment apartment.adjust_state(post_dict) if (not lamp_movement_reaction) and apartment.get_dev_status( 'Fedors_Zimmer', 'Lampe') == 'off': control.set_dev_state('Fedors_Zimmer', 'Lampe', 'off') # the reponse contains the current apartment state web.header('Content-Type', 'application/json') response = {'response': 'success'} json_resp = json.dumps(response) return json_resp
def POST(self): # get the posted json object and turn it into a dictionary json_request = web.data() post_dict = json.loads(json_request) # check the credentials stored in the json if 'Password' not in post_dict or 'User' not in post_dict: raise web.NotFound() password_given = post_dict['Password'] user_given = post_dict['User'] if password_given != password_tr or user_given != user_tr: raise web.NotFound() del post_dict['Password'] del post_dict['User'] # if the post object contains behavior information, update the values if 'lamp_movement' in post_dict: global no_movement_interval global lamp_movement_reaction no_movement_interval = int(post_dict['no_movement_time']) lamp_movement_reaction = post_dict['lamp_movement'] global no_water_interval no_water_interval = post_dict['no_water_time'] # adjust the state of both the real and the virtual apartment apartment.adjust_state(post_dict) if (not lamp_movement_reaction) and apartment.get_dev_status('Fedors_Zimmer', 'Lampe') == 'off': control.set_dev_state('Fedors_Zimmer', 'Lampe', 'off') # the reponse contains the current apartment state web.header('Content-Type', 'application/json') response = {'response' : 'success'} json_resp = json.dumps(response) return json_resp
def check_times(): # motion dependent lamp behavior global lamp_movement_reaction if lamp_movement_reaction and apartment.get_dev_status('Fedors_Zimmer', 'Lampe') == 'off': # turn the lamp of if no movement detected for the specified time global time_of_last_movement global no_movement_interval if time_of_last_movement: time_delta = time.time() - time_of_last_movement if time_delta > no_movement_interval: control.set_dev_state('Fedors_Zimmer', 'Lampe', 'off') time_of_last_movement = None # alarm reaction update_alarm() global gong_check if not gong_check or time.time() - gong_check >= gong_check_interval: print 'gong' if (alarms_all or alarms_urgend_all) and apartment.get_dev_status('Fedors_Zimmer', 'Blinken') == 'off': apartment.set_dev_state('Fedors_Zimmer', 'Blinken', 'on') control.set_dev_state('Fedors_Zimmer', 'Blinken', 'on') #if not (alarms_all or alarms_urgend_all) and apartment.get_dev_status('Fedors_Zimmer', 'Blinken') == 'on': # apartment.set_dev_state('Fedors_Zimmer', 'Blinken', 'off') # control.set_dev_state('Fedors_Zimmer', 'Blinken', 'off') if alarms_urgend_all and apartment.get_dev_status("Fedors_Zimmer", "Sound") == "off": apartment.set_dev_state('Fedors_Zimmer', 'Sound', 'on') control.set_dev_state('Fedors_Zimmer', 'Sound', 'on') #if not alarms_urgend_all and apartment.get_dev_status("Fedors_Zimmer", "Sound") == "on": # apartment.set_dev_state('Fedors_Zimmer', 'Sound', 'off') # control.set_dev_state('Fedors_Zimmer', 'Sound', 'off') gong_check = time.time() # because gong has a wierd bahavior: status request #cmd_ref_sound = 'Fedors_Zimmer.Sound' #cmd_ref_blink = 'Fedors_Zimmer.Blinken' #if apartment.get_dev_status('Fedors_Zimmer', 'Blinken') == 'on': #urllib2.urlopen(constants.get_statusRequest_url(cmd_ref_blink)) #if control.get_dict()['Fedors_Zimmer']['sensors']['Blinken'] == 'off': # apartment.set_dev_state('Fedors_Zimmer', 'Blinken', 'off') #if apartment.get_dev_status('Fedors_Zimmer', 'Sound') == 'on': # urllib2.urlopen(constants.get_statusRequest_url(cmd_ref_sound)) #if control.get_dict()['Fedors_Zimmer']['sensors']['Sound'] == 'off': # apartment.set_dev_state('Fedors_Zimmer', 'Sound', 'off') thread_timer = threading.Timer(0, check_times) thread_timer.setDaemon(True) thread_timer.start()
def check_times(): # motion dependent lamp behavior global lamp_movement_reaction if lamp_movement_reaction and apartment.get_dev_status('Fedors_Zimmer', 'Lampe') == 'off': # turn the lamp of if no movement detected for the specified time global time_of_last_movement global no_movement_interval if time_of_last_movement: time_delta = time.time() - time_of_last_movement if time_delta > no_movement_interval: control.set_dev_state('Fedors_Zimmer', 'Lampe', 'off') time_of_last_movement = None # alarm reaction update_alarm() global gong_check if not gong_check or time.time() - gong_check >= gong_check_interval: if (alarms_all or alarms_urgend_all) and apartment.get_dev_status('Fedors_Zimmer', 'Blinken') == 'off': apartment.set_dev_state('Fedors_Zimmer', 'Blinken', 'on') control.set_dev_state('Fedors_Zimmer', 'Blinken', 'on') if alarms_urgend_all and apartment.get_dev_status("Fedors_Zimmer", "Sound") == "off": apartment.set_dev_state('Fedors_Zimmer', 'Sound', 'on') control.set_dev_state('Fedors_Zimmer', 'Sound', 'on') gong_check = time.time() thread_timer = threading.Timer(0, check_times) thread_timer.setDaemon(True) thread_timer.start()
def check_times(): # motion dependent lamp behavior global lamp_movement_reaction if lamp_movement_reaction and apartment.get_dev_status( 'Fedors_Zimmer', 'Lampe') == 'off': # turn the lamp of if no movement detected for the specified time global time_of_last_movement global no_movement_interval if time_of_last_movement: time_delta = time.time() - time_of_last_movement if time_delta > no_movement_interval: control.set_dev_state('Fedors_Zimmer', 'Lampe', 'off') time_of_last_movement = None # alarm reaction update_alarm() global gong_check if not gong_check or time.time() - gong_check >= gong_check_interval: if (alarms_all or alarms_urgend_all) and apartment.get_dev_status( 'Fedors_Zimmer', 'Blinken') == 'off': apartment.set_dev_state('Fedors_Zimmer', 'Blinken', 'on') control.set_dev_state('Fedors_Zimmer', 'Blinken', 'on') if alarms_urgend_all and apartment.get_dev_status( "Fedors_Zimmer", "Sound") == "off": apartment.set_dev_state('Fedors_Zimmer', 'Sound', 'on') control.set_dev_state('Fedors_Zimmer', 'Sound', 'on') gong_check = time.time() thread_timer = threading.Timer(0, check_times) thread_timer.setDaemon(True) thread_timer.start()
def listen_to_events(): tn = telnetlib.Telnet(constants.HOST, constants.PORT_TELNET) tn.write('inform timer\n') index, match_object, text = tn.expect(constants.REG_LIST) tn.write('exit\n') time_mov = match_object.group(1) room = match_object.group(2) dev_name = match_object.group(3) apartment.get_lock().acquire() if index == 0: if lamp_movement_reaction and apartment.get_dev_status('Fedors_Zimmer', 'Lampe') == 'off': # Event caused by a motion detector apartment.set_sens_state(room, 'motion', time_mov) # Motion => turn the lamp on control.set_dev_state('Fedors_Zimmer', 'Lampe', 'on') global time_of_last_movement time_of_last_movement = time.time() if index == 1: # Event caused by a temperature/humidity sensor temp = match_object.group(4) humid = match_object.group(5) temp_int = float(temp) humid_int = float(humid) global alarm_mold if temp_int >= mold_temp and humid_int >= mold_humidity: alarm_mold = True else: alarm_mold = False apartment.set_sens_state(room, 'temperature', temp) apartment.set_sens_state(room, 'humidity', humid) if index == 2: if dev_name == 'Lampe' and lamp_movement_reaction: # if the lamp reacts to movement, the events do not affect the apartment state pass else: # Event caused by a switch state = match_object.group(4) apartment.set_dev_state(room, dev_name, state) if index == 3: # Event caused by a door sensor state = match_object.group(4) apartment.set_sens_state(room, dev_name, state) # TO DO: Add the second sensor to the alarm condition state_door = apartment.get_sens_status('Fedors_Zimmer', 'Tuer') state_window = apartment.get_sens_status('Fedors_Zimmer', 'Fenster') global alarm_wind if state_door == 'open' and state_window == 'open': alarm_wind = True else: alarm_wind = False if index == 4: # Event caused by a water sensor state = match_object.group(4) apartment.set_sens_state(room, dev_name, state) # Flower behavior global time_of_last_wet_state if state == 'dry' and dev_name == 'Wasserstand': # switch from wet to dry is seen as the last water moment time_of_last_wet_state = time.time() elif dev_name == 'Wasserstand': time_of_last_wet_state = None global alarm_ur_water if state == 'wet' and dev_name == 'Wasseralarm': alarm_ur_water = True elif dev_name == 'Wasseralarm': alarm_ur_water = False apartment.get_lock().release() tn.close() # When finished with the reading, the function calls itself in a new thread to keep listening thread_timer = threading.Timer(0, listen_to_events) thread_timer.setDaemon(True) thread_timer.start()
def listen_to_events(): tn = telnetlib.Telnet(constants.HOST, constants.PORT_TELNET) tn.write('inform timer\n') index, match_object, text = tn.expect(constants.REG_LIST) tn.write('exit\n') time_mov = match_object.group(1) room = match_object.group(2) dev_name = match_object.group(3) apartment.get_lock().acquire() if index == 0: if lamp_movement_reaction and apartment.get_dev_status( 'Fedors_Zimmer', 'Lampe') == 'off': # Event caused by a motion detector apartment.set_sens_state(room, 'motion', time_mov) # Motion => turn the lamp on control.set_dev_state('Fedors_Zimmer', 'Lampe', 'on') global time_of_last_movement time_of_last_movement = time.time() if index == 1: # Event caused by a temperature/humidity sensor temp = match_object.group(4) humid = match_object.group(5) temp_int = float(temp) humid_int = float(humid) global alarm_mold if temp_int >= mold_temp and humid_int >= mold_humidity: alarm_mold = True else: alarm_mold = False apartment.set_sens_state(room, 'temperature', temp) apartment.set_sens_state(room, 'humidity', humid) if index == 2: if dev_name == 'Lampe' and lamp_movement_reaction: # if the lamp reacts to movement, the events do not affect the apartment state pass else: # Event caused by a switch state = match_object.group(4) apartment.set_dev_state(room, dev_name, state) if index == 3: # Event caused by a door sensor state = match_object.group(4) apartment.set_sens_state(room, dev_name, state) # TO DO: Add the second sensor to the alarm condition state_door = apartment.get_sens_status('Fedors_Zimmer', 'Tuer') state_window = apartment.get_sens_status('Fedors_Zimmer', 'Fenster') global alarm_wind if state_door == 'open' and state_window == 'open': alarm_wind = True else: alarm_wind = False if index == 4: # Event caused by a water sensor state = match_object.group(4) apartment.set_sens_state(room, dev_name, state) # Flower behavior global time_of_last_wet_state if state == 'dry' and dev_name == 'Wasserstand': # switch from wet to dry is seen as the last water moment time_of_last_wet_state = time.time() elif dev_name == 'Wasserstand': time_of_last_wet_state = None global alarm_ur_water if state == 'wet' and dev_name == 'Wasseralarm': alarm_ur_water = True elif dev_name == 'Wasseralarm': alarm_ur_water = False apartment.get_lock().release() tn.close() # When finished with the reading, the function calls itself in a new thread to keep listening thread_timer = threading.Timer(0, listen_to_events) thread_timer.setDaemon(True) thread_timer.start()