diff --git a/gateway.py b/gateway.py index ade964c..46a8eb3 100644 --- a/gateway.py +++ b/gateway.py @@ -1,10 +1,13 @@ from config import settings from mqtt import MqttClient -from workers.thermostat import ThermostatWorker +from workers_manager import WorkersManager print(settings) -mqtt = MqttClient() +mqtt = MqttClient(settings['mqtt']) -args = settings['workers']['thermostat']['args'] -mqtt.publish(ThermostatWorker(**args).status_update()) \ No newline at end of file +workers = WorkersManager(settings['workers']) +mqtt.publish(workers.get_updates()) + +# args = settings['workers']['thermostat']['args'] +# mqtt.publish(ThermostatWorker(**args).status_update()) \ No newline at end of file diff --git a/mqtt.py b/mqtt.py index c7e8bb4..9582121 100644 --- a/mqtt.py +++ b/mqtt.py @@ -1,23 +1,22 @@ -from config import settings import paho.mqtt.publish as publish class MqttClient: - def __init__(self): - self._connected = False - self._config = settings['mqtt'] + def __init__(self, config): + self._config = config - def publish(self, messages): - print(messages) - publish.multiple(messages, hostname=self.hostname, auth = {'username':self.username, 'password':self.password}) + def publish(self, messages): + publish.multiple(messages, + hostname=self.hostname, + auth={'username': self.username, 'password': self.password}) - @property - def hostname(self): - return self._config['host'] + @property + def hostname(self): + return self._config['host'] - @property - def username(self): - return self._config['username'] + @property + def username(self): + return self._config['username'] - @property - def password(self): - return self._config['password'] + @property + def password(self): + return self._config['password'] diff --git a/workers_manager.py b/workers_manager.py new file mode 100644 index 0000000..3378fc9 --- /dev/null +++ b/workers_manager.py @@ -0,0 +1,24 @@ +import importlib + + +class WorkersManager: + def __init__(self, config): + self._config = config + self._workers = self._register_klasses() + + def get_updates(self): + lazy_map = map(lambda worker: worker.status_update(), self._workers) + flat_list = sum(lazy_map, []) # List flatten + return flat_list + + def _register_klasses(self): + arr = [] + + for worker_klass in self._config.keys(): + klass = getattr(importlib.import_module("workers.%s" % worker_klass), "%sWorker" % worker_klass.title()) + arr.append(klass(**self._args_for(worker_klass))) + + return arr + + def _args_for(self, klass): + return self._config[klass]['args']