diff --git a/srnemqtt/__main__.py b/srnemqtt/__main__.py
index 70cb669..4470d7b 100755
--- a/srnemqtt/__main__.py
+++ b/srnemqtt/__main__.py
@@ -5,7 +5,8 @@ import time
 from decimal import Decimal
 from typing import cast
 
-from bluepy import btle
+from bluepy.btle import BTLEDisconnectError
+from serial import SerialException
 
 from .config import get_config, get_consumers
 from .constants import MAC
@@ -15,12 +16,19 @@ from .solar_types import DataName
 from .util import Periodical, log
 
 
+class CommunicationError(BTLEDisconnectError, SerialException):
+    pass
+
+
 def main():
     conf = get_config()
     consumers = get_consumers(conf)
 
     per_voltages = Periodical(interval=15)
     per_current_hist = Periodical(interval=60)
+    # import serial
+
+    # ser = serial.Serial()
 
     try:
         while True:
@@ -96,7 +104,7 @@ def main():
                     # else:
                     #    write(wd, CMD_ENABLE_LOAD)
 
-            except btle.BTLEDisconnectError:
+            except CommunicationError:
                 log("ERROR: Disconnected")
                 time.sleep(1)
 
diff --git a/srnemqtt/config.py b/srnemqtt/config.py
index de435eb..2b680a7 100644
--- a/srnemqtt/config.py
+++ b/srnemqtt/config.py
@@ -1,6 +1,7 @@
 # -*- coding: utf-8 -*-
 import importlib
 import os
+from io import RawIOBase
 from time import sleep
 from typing import Any, Dict, List, Optional, Type
 
@@ -52,6 +53,23 @@ def get_consumers(conf: Optional[Dict[str, Any]] = None) -> List[BaseConsumer]:
     return consumers
 
 
+def get_producers(conf: Optional[Dict[str, Any]] = None) -> List[RawIOBase]:
+    raise NotImplementedError
+    if conf is None:
+        conf = get_config()
+
+    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))
+
+    write_config(conf)
+    return consumers
+
+
 if __name__ == "__main__":
     conf = get_config()
 
diff --git a/srnemqtt/sources/__init__.py b/srnemqtt/sources/__init__.py
new file mode 100644
index 0000000..5d697bc
--- /dev/null
+++ b/srnemqtt/sources/__init__.py
@@ -0,0 +1,7 @@
+# -*- coding: utf-8 -*-
+from abc import ABCMeta
+from io import RawIOBase
+
+
+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