import time class Contour: EXPIRE_TIME = 120 # sensor value considered expired in 2 minutes CHANGE_FREQ = 600 # change of state allowed after 10 minutes current_value = None value_time = 0 state = None state_change_time = 0 target_value = None def __init__(self, config, logger): self.sensor_topic = config['sensor'] self.out_topic = config['control'] self.target_topic = config['target'] self.logger = logger def update(self, value): self.current_value = value self.value_time = time.time() def get_value(self): if (time.time() - self.value_time <= self.EXPIRE_TIME): return self.current_value return None def check_state(self, state_value, force = False): if self.state == state_value: return False if (self.state is None) or (time.time() - self.state_change_time > self.CHANGE_FREQ) or force: self.state = state_value self.state_change_time = time.time() self.logger.info("Contour " + self.sensor_topic + " changed state to " + str(self.state)) return True return False def update_target(self, target_value): self.target_value = target_value