Пример #1
0
 def handle_post(self, data):
     obj = json.loads(data)
     keys = obj.keys()
     json_response = "{"
     for key in keys:
         if key in Control.tri_states_actuators:
             value = obj.get(key)
             if value in Control.tri_states:
                 setattr(self, "_Control__" + key, value)
                 print key, getattr(self, "_Control__" + key)
                 try:
                     tri_state_relay_output(key, value)
                 except:
                     print "the relay don't have the actuator, please review"
                 json_response += '''"%s" : "%s",''' % (key, value)
             else:
                 print value, "tri illegal state"
         elif key in Control.bi_states_actuators:
             value = obj.get(key)
             if value in Control.bi_states:
                 setattr(self, "_Control__" + key, value)
                 print key, getattr(self, "_Control__" + key)
                 try:
                     bi_state_relay_output(key, value)
                 except:
                     print "the relay don't have the actuator, please review"
                 json_response += '''"%s" : "%s", ''' % (key, value)
             else:
                 print value, "illegal state"
         else:
             print key, "bi illegal actuator"
     json_response += '''"status" : "%s", ''' % "success"
     json_response += '''"update_time" : "%s"''' % get_current_time()
     json_response += "}"
     return json_response
Пример #2
0
 def handle_post(self, data):
     obj = json.loads(data)
     keys = obj.keys()
     json_response = "{"
     for key in keys:
         if key in Control.tri_states_actuators:
             value = obj.get(key)
             if value in Control.tri_states:
                 setattr(self, "_Control__" + key, value)
                 print key, getattr(self, "_Control__" + key)
                 try:
                     tri_state_relay_output(key, value)
                 except:
                     print "the relay don't have the actuator, please review"
                 json_response += '''"%s" : "%s",''' % (key, value)
             else:
                 print value, "tri illegal state"
         elif key in Control.bi_states_actuators:
             value = obj.get(key)
             if value in Control.bi_states:
                 setattr(self, "_Control__" + key, value)
                 print key, getattr(self, "_Control__" + key)
                 try:
                     bi_state_relay_output(key, value)
                 except:
                     print "the relay don't have the actuator, please review"
                 json_response += '''"%s" : "%s", ''' % (key, value)
             else:
                 print value, "illegal state"
         else:
             print key, "bi illegal actuator"
     json_response += '''"status" : "%s", ''' % "success"
     json_response += '''"update_time" : "%s"''' % get_current_time()
     json_response += "}"
     return json_response
Пример #3
0
def wait_and_stop(key, time, open_all):
    time = int(time)
    if open_all == "all":
        sleep(time)
    elif open_all == "half":
        sleep(time / 2)
    elif open_all == "small":
        sleep(time / 4)
    else:
        sleep(2)
    tri_state_relay_output(key, "stop")
Пример #4
0
def wait_and_stop(key,time,open_all):
    time=int(time)
    if open_all=="all":
        sleep(time)
    elif open_all=="half":
        sleep(time/2)
    elif open_all=="small":
        sleep(time/4)
    else:
        sleep(2)
    tri_state_relay_output(key, "stop")
Пример #5
0
def thermal_screen_control(Outdoor,Parameter):
    global auto_thermal_screen
    if bad_weather=="true":
        if auto_thermal_screen=="on":
            tri_state_relay_output("thermal_screen", "off")
            wait_and_stop("side_vent", Parameter.get_thermal_screen_open_time(), "all")
        auto_thermal_screen="off"
#         control.set_thermal_screen("off")
    elif auto_fogging=="on":
        if auto_thermal_screen=="on":
            tri_state_relay_output("thermal_screen", "off")
            wait_and_stop("side_vent", Parameter.get_thermal_screen_open_time(), "all")
        auto_thermal_screen="off"
#         control.set_thermal_screen("off")
    else:
        current_hour=get_current_hour()
        current_month=get_current_month()
        if current_month>Parameter.get_month_to_open_thermal_screen() and current_month<Parameter.get_month_to_close_thermal_screen():
            if current_hour>Parameter.get_time_to_open_thermal_screen() and current_hour<Parameter.get_time_to_close_thermal_screen():
                if auto_thermal_screen=="off":
                    tri_state_relay_output("thermal_screen", "on")
                    wait_and_stop("side_vent", Parameter.get_thermal_screen_open_time(), "all")
                auto_thermal_screen="on"
#                 control.set_thermal_screen("off")    #open
        else:
            if auto_thermal_screen=="on":
                tri_state_relay_output("thermal_screen", "off")
                wait_and_stop("side_vent", Parameter.get_thermal_screen_open_time(), "all")
            auto_thermal_screen="off"
Пример #6
0
def thermal_screen_run_and_stop(time, key):
    #     print 'thermal screen thread start'
    value = screen_state.get(key)
    if value < 0:
        #data={"thermal_screen": "off"}
        #post_localhost_control(data)
        tri_state_relay_output("thermal_screen", "off")
        sleep(time)
        #data={"thermal_screen": "stop"}
        #post_localhost_control(data)
        tri_state_relay_output("thermal_screen", "stop")
    elif value != 0:
        #data={"thermal_screen": "on"}
        #post_localhost_control(data)
        tri_state_relay_output("thermal_screen", "on")
        sleep(time)
        #data={"thermal_screen": "stop"}
        #post_localhost_control(data)
        tri_state_relay_output("thermal_screen", "stop")
    else:
        print 'the state is same as before'
Пример #7
0
def thermal_screen_run_and_stop(time, key):
    # print 'thermal screen thread start'
    value = screen_state.get(key)
    if value < 0:
        #data={"thermal_screen": "off"}
        #post_localhost_control(data)
        tri_state_relay_output("thermal_screen", "off")
        sleep(time)
        #data={"thermal_screen": "stop"}
        #post_localhost_control(data)
        tri_state_relay_output("thermal_screen", "stop")
    elif value != 0:
        #data={"thermal_screen": "on"}
        #post_localhost_control(data)
        tri_state_relay_output("thermal_screen", "on")
        sleep(time)
        #data={"thermal_screen": "stop"}
        #post_localhost_control(data)
        tri_state_relay_output("thermal_screen", "stop")
    else:
        print 'the state is same as before'
Пример #8
0
def shade_screen_in_control(Outdoor,Parameter):
    global auto_shade_screen_in
    if auto_thermal_screen=="on":
        if auto_shade_screen_in=="off":
            tri_state_relay_output("shade_screen_in","on")
            wait_and_stop("shade_screen_in", Parameter.get_shade_screen_in_time(), "all")
        auto_shade_screen_in="on"
#         self.control.set_shade_screen_in("on")
    elif Outdoor.get_radiation()>Parameter.get_upper_limit_light_to_open_shade_screen_in():
#         self.control.set_shade_screen_in("off")
        if auto_shade_screen_in=="on":
            tri_state_relay_output("shade_screen_in","off")
            wait_and_stop("shade_screen_in", Parameter.get_shade_screen_in_time(), "all")
        auto_shade_screen_in="off"
    else:
        if auto_shade_screen_in=="off":
            tri_state_relay_output("shade_screen_in","on")
            wait_and_stop("shade_screen_in", Parameter.get_shade_screen_in_time(), "all")
        auto_shade_screen_in="on"
Пример #9
0
def shade_screen_out_control(Outdoor,Parameter):
    global auto_shade_screen_out
    if bad_weather=="true":
        if auto_shade_screen_out=="on":
            tri_state_relay_output("shade_screen_out", "off")
            wait_and_stop("shade_screen_out",Parameter.get_shade_screen_out_time(),"all")
        auto_shade_screen_out="off"
#         self.control.set_shade_screen_out("off")
    elif Outdoor.get_radiation()>Parameter.get_upper_limit_light_to_open_shade_screen_out():
        if auto_shade_screen_out=="off":
            tri_state_relay_output("shade_screen_out", "on")
            wait_and_stop("shade_screen_out",Parameter.get_shade_screen_out_time(),"all")
#         self.control.set_shade_screen_out("off")
        auto_shade_screen_out="on"
#         self.control.set_shade_screen_out("on")
    else:
        if auto_shade_screen_out=="on":
            tri_state_relay_output("shade_screen_out", "off")
            wait_and_stop("shade_screen_out",Parameter.get_shade_screen_out_time(),"all")
        auto_shade_screen_out="off"
Пример #10
0
def side_vent_run_and_stop(time, key):
    value = side_state.get(key)
    if value < 0:
        #data={"side_vent": "off"}
        #post_localhost_control(data)
        tri_state_relay_output("side_vent", "off")
        sleep(time)
        #data={"side_vent": "stop"}
        #post_localhost_control(data)
        tri_state_relay_output("side_vent", "stop")
    elif value > 1:
        #data={"side_vent": "off"}
        #post_localhost_control(data)
        tri_state_relay_output("side_vent", "off")
        sleep(time)
        #data={"side_vent": "on"}
        #post_localhost_control(data)
        tri_state_relay_output("side_vent", "on")
        sleep(time * (value - 1))
        #data={"side_vent": "stop"}
        #post_localhost_control(data)
        tri_state_relay_output("side_vent", "stop")
    elif value != 0:
        #data={"side_vent": "on"}
        #post_localhost_control(data)
        tri_state_relay_output("side_vent", "on")
        sleep(time * value)
        #data={"side_vent": "stop"}
        #post_localhost_control(data)
        tri_state_relay_output("side_vent", "stop")
    else:
        print 'the state is same as before'
Пример #11
0
def side_vent_control(Indoor, Parameter):
    global auto_side_vent, side_wait_time
    if bad_weather == "true":
        if auto_side_vent == "on":
            tri_state_relay_output("side_vent", "off")
            wait_and_stop("side_vent", Parameter.get_side_vent_time(), "all")
        auto_side_vent = "off"
    #         control.set_side_vent("off")
    elif auto_cooling_pad == "on":
        if auto_side_vent == "off":
            tri_state_relay_output("side_vent", "on")
            wait_and_stop("side_vent", Parameter.get_side_vent_time(), "all")
        auto_side_vent = "on"
    #         control.set_side_vent("on")
    elif auto_roof_vent_north == "on" and auto_roof_vent_south == "on":
        if side_wait_time < int(Parameter.get_wait_time_to_open_side()):
            #             control.set_side_vent("off")
            if auto_side_vent == "on":
                tri_state_relay_output("side_vent", "off")
                wait_and_stop("side_vent", Parameter.get_side_vent_time(),
                              "all")
            auto_side_vent = "off"
        elif side_wait_time > float(Parameter.get_wait_time_to_open_side(
        )) and side_wait_time < 2 * float(
                Parameter.get_wait_time_to_open_side()):
            #half open
            if auto_side_vent == "off":
                tri_state_relay_output("side_vent", "on")
                wait_and_stop("side_vent", Parameter.get_side_vent_time(),
                              "half")
            auto_side_vent = "on"
        #             control.set_side_vent("on")
        elif side_wait_time > 2 * float(
                Parameter.get_wait_time_to_open_side()):
            #open
            if auto_side_vent == "off":
                tri_state_relay_output("side_vent", "on")
                wait_and_stop("side_vent", Parameter.get_side_vent_time(),
                              "all")
            auto_side_vent = "on"
        #             control.set_side_vent("on")
        elif Indoor.get_temperature() < (temperature_set_temp2 + float(
                Parameter.get_temperature_to_open_side())):
            if auto_side_vent == "on":
                tri_state_relay_output("side_vent", "off")
                wait_and_stop("side_vent", Parameter.get_side_vent_time(),
                              "all")
            auto_side_vent = "off"
            side_wait_time = 0
Пример #12
0
def roof_vent_control(Outdoor, Parameter, Indoor):
    global temperature_set_temp0, temperature_set_temp1, temperature_set_temp2, angle, auto_roof_vent_north, auto_roof_vent_south
    if bad_weather == "true":
        if auto_roof_vent_north == "on" and auto_roof_vent_south == "on":
            tri_state_relay_output("roof_vent_south", "off")
            tri_state_relay_output("roof_vent_north", "off")
            wait_and_stop("roof_vent_south",
                          Parameter.get_roof_vent_open_time(), "all")
            wait_and_stop("roof_vent_north",
                          Parameter.get_roof_vent_open_time(), "all")
        auto_roof_vent_north = "off"
        auto_roof_vent_south = "off"
    #         self.control.set_roof_vent_north("off")
    #         self.control.set_roof_vent_south("off")
    else:
        if now_time >= Parameter.get_time_1(
        ) and now_time < Parameter.get_time_2():
            temperature_set_temp0 = float(Parameter.get_temperature_1())
        elif now_time >= Parameter.get_time_2(
        ) and now_time < Parameter.get_time_3():
            temperature_set_temp0 = float(Parameter.get_temperature_2())
        elif now_time >= Parameter.get_time_3(
        ) and now_time < Parameter.get_time_4():
            temperature_set_temp0 = float(Parameter.get_temperature_3())
        else:
            temperature_set_temp0 = float(Parameter.get_temperature_4())

            #humidity influence on temperature
        if float(Parameter.get_humidity_influence_range_of_air_temperature()
                 ) == 0:
            print "humidity_influence_range_of_air_temperature can not be 0"
        elif float(Parameter.get_expect_humidity()) == 95:
            print "expect_humidity can not be 95%"
        else:
            if float(Outdoor.get_humidity()) <= (
                    float(Parameter.get_expect_humidity()) - 5 -
                    float(Parameter.
                          get_humidity_influence_range_of_air_temperature())):
                temperature_set_temp1 = temperature_set_temp0 + float(
                    Parameter.get_low_humidity_influence_on_air_temperature())
            elif float(Outdoor.get_humidity()) <= (
                    float(Parameter.get_expect_humidity()) - 5):
                tmpt = (float(Parameter.get_expect_humidity(
                )) - 5 - float(Outdoor.get_humidity())) * float(
                    Parameter.get_low_humidity_influence_on_air_temperature()
                ) / float(Parameter.
                          get_humidity_influence_range_of_air_temperature())
                temperature_set_temp1 = temperature_set_temp0 + tmpt
            elif float(Outdoor.get_humidity()) >= (
                    float(Parameter.get_expect_humidity()) + 5):
                tmpt = (float(Outdoor.get_humidity()) - float(
                    Parameter.get_expect_humidity()) - 5) * float(
                        Parameter.
                        get_high_humidity_influence_on_air_temperature()) / (
                            100 - 5 - float(Parameter.get_expect_humidity()))
                temperature_set_temp1 = temperature_set_temp0 + tmpt
            else:
                temperature_set_temp1 = temperature_set_temp0

        #light influence on temperature
        if Outdoor.get_radiation() < Parameter.get_expect_light():
            temperature_set_temp2 = temperature_set_temp1
        else:
            temperature_set_temp2 = temperature_set_temp1 - float(
                Parameter.get_light_influence_on_air_temperature_slope()) * (
                    float(Outdoor.get_radiation()) -
                    float(Parameter.get_expect_light()))
        if temperature_set_temp2 > (temperature_set_temp1 + float(
                Parameter.get_low_light_influence_on_temperature())):
            temperature_set_temp2 = temperature_set_temp1 + float(
                Parameter.get_low_light_influence_on_temperature())
        elif temperature_set_temp2 < (temperature_set_temp1 - float(
                Parameter.get_high_light_influence_on_temperature())):
            temperature_set_temp2 = temperature_set_temp1 - float(
                Parameter.get_high_light_influence_on_temperature())
        else:
            if temperature_set_temp2 == 0:
                temperature_set_temp2 = 0

        if Outdoor.get_temperature() <= Parameter.get_frost_temperature():
            if auto_roof_vent_north == "on" and auto_roof_vent_south == "on":
                tri_state_relay_output("roof_vent_south", "off")
                tri_state_relay_output("roof_vent_north", "off")
                wait_and_stop("roof_vent_south",
                              Parameter.get_roof_vent_open_time(), "all")
                wait_and_stop("roof_vent_north",
                              Parameter.get_roof_vent_open_time(), "all")
            auto_roof_vent_north = "off"
            auto_roof_vent_south = "off"
        #             Control.set_roof_vent_north("off")
        #             Control.set_roof_vent_south("off")
        elif Outdoor.get_temperature(
        ) <= Parameter.get_indoor_temperature_lower_limit():
            #small angle
            if auto_roof_vent_north == "off" and auto_roof_vent_south == "off":
                tri_state_relay_output("roof_vent_south", "on")
                tri_state_relay_output("roof_vent_north", "on")
                wait_and_stop("roof_vent_south",
                              Parameter.get_roof_vent_open_time(), "small")
                wait_and_stop("roof_vent_north",
                              Parameter.get_roof_vent_open_time(), "small")
            auto_roof_vent_north = "on"
            auto_roof_vent_south = "on"
            angle = "small"
        #             Control.set_roof_vent_north("on")
        #             Control.set_roof_vent_south("on")
        elif Outdoor.get_temperature() <= temperature_set_temp2:
            #open all
            if auto_roof_vent_north == "off" and auto_roof_vent_south == "off":
                tri_state_relay_output("roof_vent_south", "on")
                tri_state_relay_output("roof_vent_north", "on")
                wait_and_stop("roof_vent_south",
                              Parameter.get_roof_vent_open_time(), "half")
                wait_and_stop("roof_vent_north",
                              Parameter.get_roof_vent_open_time(), "half")
            auto_roof_vent_north = "on"
            auto_roof_vent_south = "on"
            angle = "half"
        #             Control.set_roof_vent_north("on")
        #             Control.set_roof_vent_south("on")
        else:
            #
            if auto_roof_vent_north == "off" and auto_roof_vent_south == "off":
                tri_state_relay_output("roof_vent_south", "on")
                tri_state_relay_output("roof_vent_north", "on")
                wait_and_stop("roof_vent_south",
                              Parameter.get_roof_vent_open_time(), "all")
                wait_and_stop("roof_vent_north",
                              Parameter.get_roof_vent_open_time(), "all")
            auto_roof_vent_north = "on"
            auto_roof_vent_south = "on"
            angle = "all"
Пример #13
0
def side_vent_run_and_stop(time, key):
    value = side_state.get(key)
    if value < 0:
        # data={"side_vent": "off"}
        #post_localhost_control(data)
        tri_state_relay_output("side_vent", "off")
        sleep(time)
        #data={"side_vent": "stop"}
        #post_localhost_control(data)
        tri_state_relay_output("side_vent", "stop")
    elif value > 1:
        # data={"side_vent": "off"}
        #post_localhost_control(data)
        tri_state_relay_output("side_vent", "off")
        sleep(time)
        #data={"side_vent": "on"}
        #post_localhost_control(data)
        tri_state_relay_output("side_vent", "on")
        sleep(time * (value - 1))
        #data={"side_vent": "stop"}
        #post_localhost_control(data)
        tri_state_relay_output("side_vent", "stop")
    elif value != 0:
        # data={"side_vent": "on"}
        #post_localhost_control(data)
        tri_state_relay_output("side_vent", "on")
        sleep(time * value)
        #data={"side_vent": "stop"}
        #post_localhost_control(data)
        tri_state_relay_output("side_vent", "stop")
    else:
        print 'the state is same as before'
Пример #14
0
def side_vent_control(Indoor,Parameter):
    global auto_side_vent,side_wait_time
    if bad_weather=="true":
        if auto_side_vent=="on":
            tri_state_relay_output("side_vent","off")
            wait_and_stop("side_vent", Parameter.get_side_vent_time(), "all")
        auto_side_vent="off"
#         control.set_side_vent("off")
    elif auto_cooling_pad=="on":
        if auto_side_vent=="off":
            tri_state_relay_output("side_vent", "on")
            wait_and_stop("side_vent", Parameter.get_side_vent_time(), "all")
        auto_side_vent="on"
#         control.set_side_vent("on")
    elif auto_roof_vent_north=="on" and auto_roof_vent_south=="on":
        if side_wait_time<int(Parameter.get_wait_time_to_open_side()):
#             control.set_side_vent("off")
            if auto_side_vent=="on":
                tri_state_relay_output("side_vent","off")
                wait_and_stop("side_vent", Parameter.get_side_vent_time(), "all")
            auto_side_vent="off"
        elif side_wait_time>float(Parameter.get_wait_time_to_open_side()) and side_wait_time<2*float(Parameter.get_wait_time_to_open_side()):
            #half open
            if auto_side_vent=="off":
                tri_state_relay_output("side_vent","on")
                wait_and_stop("side_vent", Parameter.get_side_vent_time(), "half")
            auto_side_vent="on"
#             control.set_side_vent("on")
        elif side_wait_time>2*float(Parameter.get_wait_time_to_open_side()):
            #open
            if auto_side_vent=="off":
                tri_state_relay_output("side_vent","on")
                wait_and_stop("side_vent", Parameter.get_side_vent_time(), "all")
            auto_side_vent="on"
#             control.set_side_vent("on")
        elif Indoor.get_temperature() < (temperature_set_temp2+float(Parameter.get_temperature_to_open_side())):
            if auto_side_vent=="on":
                tri_state_relay_output("side_vent","off")
                wait_and_stop("side_vent", Parameter.get_side_vent_time(), "all")
            auto_side_vent="off"
            side_wait_time=0
Пример #15
0
def roof_vent_control(Outdoor,Parameter,Indoor):
    global temperature_set_temp0,temperature_set_temp1,temperature_set_temp2,angle,auto_roof_vent_north,auto_roof_vent_south
    if bad_weather=="true":
        if auto_roof_vent_north=="on" and auto_roof_vent_south=="on":
            tri_state_relay_output("roof_vent_south","off")
            tri_state_relay_output("roof_vent_north","off")
            wait_and_stop("roof_vent_south",Parameter.get_roof_vent_open_time(),"all")
            wait_and_stop("roof_vent_north",Parameter.get_roof_vent_open_time(),"all")
        auto_roof_vent_north="off"
        auto_roof_vent_south="off"
#         self.control.set_roof_vent_north("off")
#         self.control.set_roof_vent_south("off")
    else:
        if now_time >= Parameter.get_time_1() and now_time < Parameter.get_time_2():
            temperature_set_temp0=float(Parameter.get_temperature_1())
        elif now_time >= Parameter.get_time_2() and now_time < Parameter.get_time_3():
            temperature_set_temp0=float(Parameter.get_temperature_2())
        elif now_time >= Parameter.get_time_3() and now_time < Parameter.get_time_4():
            temperature_set_temp0=float(Parameter.get_temperature_3())
        else:
            temperature_set_temp0=float(Parameter.get_temperature_4())  
        
        #humidity influence on temperature
        if float(Parameter.get_humidity_influence_range_of_air_temperature())==0:
            print "humidity_influence_range_of_air_temperature can not be 0"
        elif float(Parameter.get_expect_humidity())==95:
            print "expect_humidity can not be 95%"
        else:
            if float(Outdoor.get_humidity())<=(float(Parameter.get_expect_humidity())-5-float(Parameter.get_humidity_influence_range_of_air_temperature())):
                temperature_set_temp1=temperature_set_temp0+float(Parameter.get_low_humidity_influence_on_air_temperature())
            elif float(Outdoor.get_humidity())<=(float(Parameter.get_expect_humidity())-5):
                tmpt=(float(Parameter.get_expect_humidity())-5-float(Outdoor.get_humidity()))*float(Parameter.get_low_humidity_influence_on_air_temperature())/float(Parameter.get_humidity_influence_range_of_air_temperature())
                temperature_set_temp1=temperature_set_temp0+tmpt
            elif float(Outdoor.get_humidity())>=(float(Parameter.get_expect_humidity())+5):
                tmpt=(float(Outdoor.get_humidity())-float(Parameter.get_expect_humidity())-5)*float(Parameter.get_high_humidity_influence_on_air_temperature())/(100-5-float(Parameter.get_expect_humidity()))
                temperature_set_temp1=temperature_set_temp0+tmpt
            else:
                temperature_set_temp1=temperature_set_temp0
            
        #light influence on temperature
        if Outdoor.get_radiation()<Parameter.get_expect_light():
            temperature_set_temp2=temperature_set_temp1
        else:
            temperature_set_temp2=temperature_set_temp1-float(Parameter.get_light_influence_on_air_temperature_slope())*(float(Outdoor.get_radiation())-float(Parameter.get_expect_light()))
        if temperature_set_temp2>(temperature_set_temp1+float(Parameter.get_low_light_influence_on_temperature())):
            temperature_set_temp2=temperature_set_temp1+float(Parameter.get_low_light_influence_on_temperature())
        elif temperature_set_temp2<(temperature_set_temp1-float(Parameter.get_high_light_influence_on_temperature())):
            temperature_set_temp2=temperature_set_temp1-float(Parameter.get_high_light_influence_on_temperature())
        else:    
            if temperature_set_temp2==0:
                temperature_set_temp2=0
            
        if Outdoor.get_temperature()<=Parameter.get_frost_temperature():
            if auto_roof_vent_north=="on" and auto_roof_vent_south=="on":
                tri_state_relay_output("roof_vent_south","off")
                tri_state_relay_output("roof_vent_north","off")
                wait_and_stop("roof_vent_south",Parameter.get_roof_vent_open_time(),"all")
                wait_and_stop("roof_vent_north",Parameter.get_roof_vent_open_time(),"all")
            auto_roof_vent_north="off"
            auto_roof_vent_south="off"
#             Control.set_roof_vent_north("off")
#             Control.set_roof_vent_south("off")
        elif Outdoor.get_temperature()<=Parameter.get_indoor_temperature_lower_limit():    
            #small angle
            if auto_roof_vent_north=="off" and auto_roof_vent_south=="off":
                tri_state_relay_output("roof_vent_south","on")
                tri_state_relay_output("roof_vent_north","on")
                wait_and_stop("roof_vent_south",Parameter.get_roof_vent_open_time(),"small")
                wait_and_stop("roof_vent_north",Parameter.get_roof_vent_open_time(),"small")
            auto_roof_vent_north="on"
            auto_roof_vent_south="on"
            angle="small"
#             Control.set_roof_vent_north("on")
#             Control.set_roof_vent_south("on")
        elif Outdoor.get_temperature()<=temperature_set_temp2:
            #open all
            if auto_roof_vent_north=="off" and auto_roof_vent_south=="off":
                tri_state_relay_output("roof_vent_south","on")
                tri_state_relay_output("roof_vent_north","on")
                wait_and_stop("roof_vent_south",Parameter.get_roof_vent_open_time(),"half")
                wait_and_stop("roof_vent_north",Parameter.get_roof_vent_open_time(),"half")
            auto_roof_vent_north="on"
            auto_roof_vent_south="on" 
            angle="half"
#             Control.set_roof_vent_north("on")
#             Control.set_roof_vent_south("on")
        else:
            #  
            if auto_roof_vent_north=="off" and auto_roof_vent_south=="off":
                tri_state_relay_output("roof_vent_south","on")
                tri_state_relay_output("roof_vent_north","on")
                wait_and_stop("roof_vent_south",Parameter.get_roof_vent_open_time(),"all")
                wait_and_stop("roof_vent_north",Parameter.get_roof_vent_open_time(),"all")
            auto_roof_vent_north="on"
            auto_roof_vent_south="on" 
            angle="all"