Ejemplo n.º 1
0
class RelayWorker(HallonWorker):
    def __init__(self, config, workers):
        HallonWorker.__init__(self, config, workers, 120)
        self.whenRelayReported = Subject()
        broker = mqtt_utils.get_broker(config['mqtt']['broker'])
        self.mqtt_updater = MqttListener(broker, [config['mqtt']['topic']])
        self.mqtt_updater.OnMessage.subscribe(self.handle_update)

    def watchdog_message(self):
        return "Power not reported:" + self.mqtt_updater._topics[0]

    def _init_worker(self):
        self.mqtt_updater.start()

    def handle_update(self, msg):
        try:
            self.msg_count += 1
            data = json.loads(msg[1])
            if "state" in data:
                state = True if data['state'] == "ON" else False
                logger.info(f"STATE: {state}")
                self.whenRelayReported.on_next(state)
            else:
                logger.info(f"Could not read power message {msg}")
                return

        except Exception as ex:
            logger.error("Exception in mqtt thread: " + str(ex))
Ejemplo n.º 2
0
class PowerWorker(HallonWorker):
    def __init__(self, config, workers):
        HallonWorker.__init__(self, config, workers, 120)
        self.whenPowerReported = Subject()
        self.whenNoPowerReported = Subject()
        broker = mqtt_utils.get_broker(config['mqtt']['broker'])
        self.mqtt_updater = MqttListener(broker, [config['mqtt']['topic']])

        self.mqtt_updater.OnMessage.subscribe(self.handle_update)

    def watchdog_message(self):
        return "Power not reported:" + self.mqtt_updater._topics[0]

    def _init_worker(self):
        self.mqtt_updater.start()

    def handle_update(self, msg):
        try:
            self.msg_count += 1
            # expected structure: tickPeriod:123|counter:5
            data = json.loads(msg[1])
            if "power_tick_period" in data:
                tick_period = data['power_tick_period']
            else:
                logger.info(f"Could not read power message {msg}")
                return
            tp = int(tick_period)
            wh_per_hit = 1 / float(1000) * 1000
            power = wh_per_hit * 3600 / float(tp / 1000)
            data['power'] = power
            self.whenPowerReported.on_next(data)
        except Exception as ex:
            logger.error("Exception in mqtt thread: " + str(ex))
Ejemplo n.º 3
0
class TemperatureWorker(HallonWorker):
    def __init__(self, config, workers):
        HallonWorker.__init__(self, config, workers, 120)
        self.whenTemperatureReported = Subject()
        self.whenMinMaxModified = Subject()
        self.whenNoTemperatureReported = Subject()
        broker = mqtt_utils.get_broker(config['mqtt']['broker'])
        self.mqtt_updater = MqttListener(broker, config['mqtt']['topics'])
        self.mqtt_updater.OnMessage.subscribe(self.handle_update)
        self.day = -1
        self.todayMinValue = 0
        self.todayMaxValue = 0

    def _init_worker(self):
        self.mqtt_updater.start()

    def watchdog_message(self):
        return "Temp not reported:" + self.mqtt_updater._topics[0]

    def handle_update(self, msg):
        try:
            topic, msg = msg
            self.msg_count += 1
            data = json.loads(msg)
            sensor_id = data['id']
            temp = data["temp"]
            self.whenTemperatureReported.on_next({
                'sensor_id': sensor_id,
                'temp': temp
            })
        except Exception as ex:
            logger.error("Exception in mqtt thread: " + str(ex))
Ejemplo n.º 4
0
 def __init__(self, config, workers):
     HallonWorker.__init__(self, config, workers, 120)
     self.whenWaterReported = Subject()
     self.whenNoWaterReported = Subject()
     broker = mqtt_utils.get_broker(config['mqtt']['broker'])
     self.mqtt_updater = MqttListener(broker, [config['mqtt']['topic']])
     self.mqtt_updater.OnMessage.subscribe(self.handle_update)
Ejemplo n.º 5
0
class WaterWorker(HallonWorker):
    def __init__(self, config, workers):
        HallonWorker.__init__(self, config, workers, 120)
        self.whenWaterReported = Subject()
        self.whenNoWaterReported = Subject()
        broker = mqtt_utils.get_broker(config['mqtt']['broker'])
        self.mqtt_updater = MqttListener(broker, [config['mqtt']['topic']])
        self.mqtt_updater.OnMessage.subscribe(self.handle_update)

    def watchdog_message(self):
        return "Water not reported:" + self.mqtt_updater._topics[0]

    def _init_worker(self):
        self.mqtt_updater.start()

    def handle_update(self, msg):
        try:
            self.msg_count += 1
            # expected structure: tickPeriod:123|counter:5
            data = json.loads(msg[1])
            if "consumption" in data and "t_diff" in data:
                consumption = data['consumption']
                t_diff = data['t_diff']
            else:
                logger.info(f"Could not read water message {msg}")
                return
            if t_diff < 10:
                logger.info(f"Strange water report. t_diff: {t_diff}")
            l_per_minute = consumption / (t_diff / 1000.0) * 60
            data['l_per_minute'] = l_per_minute
            self.whenWaterReported.on_next(data)

        except Exception as ex:
            logger.error("Exception in mqtt thread: " + str(ex))
Ejemplo n.º 6
0
 def __init__(self, config, workers):
     HallonWorker.__init__(self, config, workers, 120)
     self.whenTemperatureReported = Subject()
     self.whenMinMaxModified = Subject()
     self.whenNoTemperatureReported = Subject()
     broker = mqtt_utils.get_broker(config['mqtt']['broker'])
     self.mqtt_updater = MqttListener(broker, config['mqtt']['topics'])
     self.mqtt_updater.OnMessage.subscribe(self.handle_update)
     self.day = -1
     self.todayMinValue = 0
     self.todayMaxValue = 0
Ejemplo n.º 7
0
class DoorWorker(HallonWorker):
    def __init__(self, config, workers):
        HallonWorker.__init__(self, config, workers, 120)
        self.whenDoorReported = Subject()
        broker = mqtt_utils.get_broker(config['mqtt']['broker'])
        self.mqtt_updater = MqttListener(broker, config['mqtt']['topics'])
        self.mqtt_updater.OnMessage.subscribe(self.handle_update)

    def _init_worker(self):
        self.mqtt_updater.start()

    def watchdog_message(self):
        return "Door not reported:" + self.mqtt_updater._topics[0]

    def handle_update(self, msg):
        try:
            self.msg_count += 1
            data = json.loads(msg[1])
            for x in data:
                self.whenDoorReported.on_next(x)

        except Exception as ex:
            logger.error("Exception in mqtt thread: " + str(ex))