Пример #1
0
    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
Пример #2
0
 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
Пример #3
0
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()   
Пример #4
0
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()   
Пример #5
0
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()
Пример #6
0
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()    
Пример #7
0
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()