diff --git a/config-example.yaml b/config-example.yaml deleted file mode 100644 index cc72de9..0000000 --- a/config-example.yaml +++ /dev/null @@ -1,12 +0,0 @@ -consumers: - stdio.StdoutConsumer: {} -interface: - name: serial.SerialInterface - params: - device: /dev/ttyUSB0 - baudrate: 9600 - timeout: 2 -# name: feasycom.FeasycomInterface -# params: -# mac: DC:0D:30:9C:61:BA -# timeout: 5 diff --git a/srnemqtt/__main__.py b/srnemqtt/__main__.py index 38d8058..4470d7b 100755 --- a/srnemqtt/__main__.py +++ b/srnemqtt/__main__.py @@ -8,13 +8,15 @@ from typing import cast from bluepy.btle import BTLEDisconnectError from serial import SerialException -from .config import get_config, get_consumers, get_interface +from .config import get_config, get_consumers +from .constants import MAC +from .lib.feasycom_ble import BTLEUart from .protocol import parse_battery_state, parse_historical_entry, try_read_parse from .solar_types import DataName from .util import Periodical, log -class CommunicationError(BTLEDisconnectError, SerialException, IOError): +class CommunicationError(BTLEDisconnectError, SerialException): pass @@ -32,7 +34,7 @@ def main(): while True: try: log("Connecting...") - with get_interface() as dev: + with BTLEUart(MAC, timeout=5) as dev: log("Connected.") # write(dev, construct_request(0, 32)) diff --git a/srnemqtt/config.py b/srnemqtt/config.py index c9c95d4..2b680a7 100644 --- a/srnemqtt/config.py +++ b/srnemqtt/config.py @@ -1,13 +1,12 @@ # -*- coding: utf-8 -*- import importlib import os +from io import RawIOBase from time import sleep from typing import Any, Dict, List, Optional, Type import yaml -from srnemqtt.interfaces import BaseInterface - from .consumers import BaseConsumer @@ -54,28 +53,21 @@ def get_consumers(conf: Optional[Dict[str, Any]] = None) -> List[BaseConsumer]: return consumers -def _get_interface(name: str) -> Type[BaseInterface]: - mod_name, cls_name = name.rsplit(".", 1) - - mod = importlib.import_module(f".consumers.{mod_name}", package=__package__) - - res = getattr(mod, cls_name) - assert issubclass(res, BaseConsumer) - - return res - - -def get_interface(conf: Optional[Dict[str, Any]] = None) -> BaseInterface: +def get_producers(conf: Optional[Dict[str, Any]] = None) -> List[RawIOBase]: + raise NotImplementedError if conf is None: conf = get_config() - name = conf["interface"]["name"] - params = conf["interface"].get("params", {}) + consumers = [] + for name, consumer_config in conf["consumers"].items(): + # print(name, consumer_config) + mod = get_consumer(name) + if mod: + # print(mod) + consumers.append(mod(consumer_config)) - mod = _get_interface(name) - assert mod - - return mod(**params) + write_config(conf) + return consumers if __name__ == "__main__": diff --git a/srnemqtt/interfaces/feasycom.py b/srnemqtt/interfaces/feasycom.py deleted file mode 100644 index 82a1172..0000000 --- a/srnemqtt/interfaces/feasycom.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- coding: utf-8 -*- -from ..lib.feasycom_ble import BTLEUart -from . import BaseInterface - - -class FeasycomInterface(BTLEUart, BaseInterface): - pass - - -# BTLEUart(mac=MAC, timeout=5) diff --git a/srnemqtt/interfaces/serial.py b/srnemqtt/interfaces/serial.py deleted file mode 100644 index bee3ff6..0000000 --- a/srnemqtt/interfaces/serial.py +++ /dev/null @@ -1,8 +0,0 @@ -# -*- coding: utf-8 -*- -import serial - -from . import BaseInterface - - -class SerialInterface(serial.Serial, BaseInterface): - pass diff --git a/srnemqtt/interfaces/__init__.py b/srnemqtt/sources/__init__.py similarity index 62% rename from srnemqtt/interfaces/__init__.py rename to srnemqtt/sources/__init__.py index e8ecc37..5d697bc 100644 --- a/srnemqtt/interfaces/__init__.py +++ b/srnemqtt/sources/__init__.py @@ -3,5 +3,5 @@ from abc import ABCMeta from io import RawIOBase -class BaseInterface(RawIOBase, metaclass=ABCMeta): +class BaseSource(RawIOBase, metaclass=ABCMeta): pass diff --git a/srnemqtt/sources/feasycom.py b/srnemqtt/sources/feasycom.py new file mode 100644 index 0000000..c3c0859 --- /dev/null +++ b/srnemqtt/sources/feasycom.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# from ..lib.feasycom_ble import BTLEUart +from . import BaseSource + + +class FeasycomSource(BaseSource): + pass diff --git a/srnemqtt/sources/serial.py b/srnemqtt/sources/serial.py new file mode 100644 index 0000000..7322a31 --- /dev/null +++ b/srnemqtt/sources/serial.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# import serial + +from . import BaseSource + + +class SerialSource(BaseSource): + pass