diff --git a/thermostat.py b/thermostat.py index 43c34ee..d593685 100644 --- a/thermostat.py +++ b/thermostat.py @@ -217,112 +217,112 @@ first_loop = True # print(row) #sys.stdout.flush() -while True: -# if stop.is_set(): -# httpd.shutdown() -# httpd.server_close() -# dbconn.close() -# break - - if new_forced_mode is not None: - with app.app_context(): - data = Set_mode({"value": new_forced_mode}) - db.session.add(data) - db.session.commit() - #cursor.execute("INSERT OR REPLACE INTO set_mode (value) VALUES ('"+new_forced_mode+"')") - #dbconn.commit() - logging.info("Switch to "+new_forced_mode) - target_name = new_forced_mode - new_forced_mode = None - # Force immediate action: - last_control_time = None - current_time = time.time() - current_date = datetime.now() - today_awake_time = current_date.replace(hour=int(awake_hour.split(':')[0]), minute=int(awake_hour.split(':')[1]), second=0, microsecond=0) - today_sleep_time = current_date.replace(hour=int(sleep_hour.split(':')[0]), minute=int(sleep_hour.split(':')[1]), second=0, microsecond=0) - forced_mode = get_forced_mode() - if forced_mode is not None and forced_mode in targets: - if target_name != forced_mode: - target_name = forced_mode - logging.info("Switch to "+forced_mode) - else: - if forced_mode == "long_absence": - if target_name != "target_frost_protection" or first_loop: - target_name = "target_frost_protection" - logging.info("Switch to "+target_name) - elif forced_mode == "short_absence" or first_loop: - if target_name != "target_sleep_temperature": - target_name = "target_sleep_temperature" - logging.info("Switch to "+target_name) - elif current_date > today_awake_time and current_date < today_sleep_time: - if target_name != "target_unconfirmed_awake_temperature" and target_name != "target_awake_temperature": - target_name = "target_unconfirmed_awake_temperature" - logging.info("Switch to unconfirmed awake mode.") - elif current_date < today_awake_time or current_date > today_sleep_time: - if target_name != "target_unconfirmed_sleep_temperature" and target_name != "target_sleep_temperature": - target_name = "target_unconfirmed_sleep_temperature" - logging.info("Switch to unconfirmed sleep mode.") - - first_loop = False - - # Load shedder - current_load = get_metric("Modane_elec_main_power", current_time, load_shedder_interval) - if current_load is None: - time.sleep(load_shedder_interval) - continue - elif max_load - current_load < load_margin: - logging.warning("Load too high: "+str(current_load)+"VA") - total_shedded = 0 - for room in shedding_order: - current_state = relay_state(rooms_settings[room]["relays"]) - if current_state != "Failed": - logging.debug("Got relay_state: '"+current_state+"'") - if current_state == "1": - result = set_relay(rooms_settings[room]["relays"], "off") - if result == "OK": - total_shedded += relays_load[rooms_settings[room]["relays"]] - if max_load - current_load - total_shedded < load_margin: - logging.info("Load should be back to normal.") - break - - # Thermostat - if last_control_time is None or current_time - last_control_time > relay_control_interval: - last_control_time = current_time - for room in rooms_settings: - if not rooms_settings[room]["enabled"]: - continue - target = rooms_settings[room][target_name] - logging.debug("Target: "+str(target)) - temperature = get_metric(rooms_settings[room]["metric"], current_time, relay_control_interval) - if temperature is None: - continue - logging.debug(room+": "+str(temperature)) - current_state = relay_state(rooms_settings[room]["relays"]) - if current_state != "Failed": - logging.debug("Got relay_state: '"+current_state+"'") - if temperature < target - hysteresis: - if current_state == "0": - logging.info(room+": Target temperature is "+str(target)) - logging.info(room+": Current temperature is "+str(temperature)) - if current_load + relays_load[rooms_settings[room]["relays"]] + load_margin > max_load: - logging.warning(room+": Load too high cannot start heaters.") - else: - logging.info(room+": Starting heaters.") - set_relay(rooms_settings[room]["relays"], "on") - sys.stdout.flush() - else: - logging.debug("Relay already on.") - - elif temperature > target + hysteresis: - if current_state == "1": - logging.info(room+": Target temperature is "+str(target)) - logging.info(room+": Current temperature is "+str(temperature)) - logging.info(room+": Stopping heaters.") - sys.stdout.flush() - set_relay(rooms_settings[room]["relays"], "off") - else: - logging.debug("Relay already off.") - time.sleep(load_shedder_interval) +#while True: +## if stop.is_set(): +## httpd.shutdown() +## httpd.server_close() +## dbconn.close() +## break +# +# if new_forced_mode is not None: +# with app.app_context(): +# data = Set_mode({"value": new_forced_mode}) +# db.session.add(data) +# db.session.commit() +# #cursor.execute("INSERT OR REPLACE INTO set_mode (value) VALUES ('"+new_forced_mode+"')") +# #dbconn.commit() +# logging.info("Switch to "+new_forced_mode) +# target_name = new_forced_mode +# new_forced_mode = None +# # Force immediate action: +# last_control_time = None +# current_time = time.time() +# current_date = datetime.now() +# today_awake_time = current_date.replace(hour=int(awake_hour.split(':')[0]), minute=int(awake_hour.split(':')[1]), second=0, microsecond=0) +# today_sleep_time = current_date.replace(hour=int(sleep_hour.split(':')[0]), minute=int(sleep_hour.split(':')[1]), second=0, microsecond=0) +# forced_mode = get_forced_mode() +# if forced_mode is not None and forced_mode in targets: +# if target_name != forced_mode: +# target_name = forced_mode +# logging.info("Switch to "+forced_mode) +# else: +# if forced_mode == "long_absence": +# if target_name != "target_frost_protection" or first_loop: +# target_name = "target_frost_protection" +# logging.info("Switch to "+target_name) +# elif forced_mode == "short_absence" or first_loop: +# if target_name != "target_sleep_temperature": +# target_name = "target_sleep_temperature" +# logging.info("Switch to "+target_name) +# elif current_date > today_awake_time and current_date < today_sleep_time: +# if target_name != "target_unconfirmed_awake_temperature" and target_name != "target_awake_temperature": +# target_name = "target_unconfirmed_awake_temperature" +# logging.info("Switch to unconfirmed awake mode.") +# elif current_date < today_awake_time or current_date > today_sleep_time: +# if target_name != "target_unconfirmed_sleep_temperature" and target_name != "target_sleep_temperature": +# target_name = "target_unconfirmed_sleep_temperature" +# logging.info("Switch to unconfirmed sleep mode.") +# +# first_loop = False +# +# # Load shedder +# current_load = get_metric("Modane_elec_main_power", current_time, load_shedder_interval) +# if current_load is None: +# time.sleep(load_shedder_interval) +# continue +# elif max_load - current_load < load_margin: +# logging.warning("Load too high: "+str(current_load)+"VA") +# total_shedded = 0 +# for room in shedding_order: +# current_state = relay_state(rooms_settings[room]["relays"]) +# if current_state != "Failed": +# logging.debug("Got relay_state: '"+current_state+"'") +# if current_state == "1": +# result = set_relay(rooms_settings[room]["relays"], "off") +# if result == "OK": +# total_shedded += relays_load[rooms_settings[room]["relays"]] +# if max_load - current_load - total_shedded < load_margin: +# logging.info("Load should be back to normal.") +# break +# +# # Thermostat +# if last_control_time is None or current_time - last_control_time > relay_control_interval: +# last_control_time = current_time +# for room in rooms_settings: +# if not rooms_settings[room]["enabled"]: +# continue +# target = rooms_settings[room][target_name] +# logging.debug("Target: "+str(target)) +# temperature = get_metric(rooms_settings[room]["metric"], current_time, relay_control_interval) +# if temperature is None: +# continue +# logging.debug(room+": "+str(temperature)) +# current_state = relay_state(rooms_settings[room]["relays"]) +# if current_state != "Failed": +# logging.debug("Got relay_state: '"+current_state+"'") +# if temperature < target - hysteresis: +# if current_state == "0": +# logging.info(room+": Target temperature is "+str(target)) +# logging.info(room+": Current temperature is "+str(temperature)) +# if current_load + relays_load[rooms_settings[room]["relays"]] + load_margin > max_load: +# logging.warning(room+": Load too high cannot start heaters.") +# else: +# logging.info(room+": Starting heaters.") +# set_relay(rooms_settings[room]["relays"], "on") +# sys.stdout.flush() +# else: +# logging.debug("Relay already on.") +# +# elif temperature > target + hysteresis: +# if current_state == "1": +# logging.info(room+": Target temperature is "+str(target)) +# logging.info(room+": Current temperature is "+str(temperature)) +# logging.info(room+": Stopping heaters.") +# sys.stdout.flush() +# set_relay(rooms_settings[room]["relays"], "off") +# else: +# logging.debug("Relay already off.") +# time.sleep(load_shedder_interval) logging.info("====== Ended successfully ======")