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
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")
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")
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"
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'
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"
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"
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'
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
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"
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'
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
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"