Add serial and Arduino file

This commit is contained in:
2022-06-24 15:55:13 -07:00
parent 27fc1f5e16
commit 0e638e51bf
12 changed files with 133 additions and 73 deletions

View File

@ -1 +1 @@
__version__ = "2.3.0"
__version__ = "2.3.1"

View File

@ -213,6 +213,15 @@ class AppConfig(ConfigBase):
required=True
)
SERIAL_PATH = StringConfigEntry(
key_path=[
CONFIG_NODE_ROOT,
CONFIG_NODE_SERIAL,
"path"
],
required=False
)
DEVICE_PATTERNS = ListConfigEntry(
item_type=RegexConfigEntry,
item_args={

View File

@ -22,6 +22,7 @@ CONFIG_NODE_ROOT = "barcode_server"
CONFIG_NODE_SERVER = "server"
CONFIG_NODE_HTTP = "http"
CONFIG_NODE_MQTT = "mqtt"
CONFIG_NODE_SERIAL = "serial"
CONFIG_NODE_STATS = "stats"
CONFIG_NODE_PORT = "port"

View File

@ -0,0 +1,23 @@
import serial
import logging
# import time as sleep
from prometheus_async.aio import time
from barcode_server.barcode import BarcodeEvent
from barcode_server.notifier import BarcodeNotifier
from barcode_server.stats import SERIAL_NOTIFIER_TIME
LOGGER = logging.getLogger(__name__)
class SerialNotifier(BarcodeNotifier):
def __init__(self, path: str, usb: serial):
super().__init__()
self.path = path
self.usb = usb
@time(SERIAL_NOTIFIER_TIME)
async def _send_event(self, event: BarcodeEvent):
self.usb.write(event.barcode.encode())
LOGGER.debug(f"Notified {self.path}: {event.barcode}")

View File

@ -25,4 +25,5 @@ REST_TIME_DEVICES = REST_TIME.labels(endpoint=ENDPOINT_DEVICES)
NOTIFIER_TIME = Summary('notifier_processing_seconds', 'Time spent in a notifier', ['type'])
WEBSOCKET_NOTIFIER_TIME = NOTIFIER_TIME.labels(type='websocket')
HTTP_NOTIFIER_TIME = NOTIFIER_TIME.labels(type='http')
SERIAL_NOTIFIER_TIME = NOTIFIER_TIME.labels(type='serial')
MQTT_NOTIFIER_TIME = NOTIFIER_TIME.labels(type='mqtt')

View File

@ -1,3 +1,4 @@
import serial
import asyncio
import logging
from typing import Dict
@ -13,6 +14,7 @@ from barcode_server.const import *
from barcode_server.notifier import BarcodeNotifier
from barcode_server.notifier.http import HttpNotifier
from barcode_server.notifier.mqtt import MQTTNotifier
from barcode_server.notifier.serial import SerialNotifier
from barcode_server.notifier.ws import WebsocketNotifier
from barcode_server.stats import REST_TIME_DEVICES, WEBSOCKET_CLIENT_COUNT
from barcode_server.util import input_device_to_dict
@ -33,6 +35,8 @@ class Webserver:
self.barcode_reader = barcode_reader
self.barcode_reader.add_listener(self.on_barcode)
self.usb = {}
self.notifiers: Dict[str, BarcodeNotifier] = {}
if config.HTTP_URL.value is not None:
http_notifier = HttpNotifier(
@ -54,6 +58,11 @@ class Webserver:
)
self.notifiers["mqtt"] = mqtt_notifier
if config.SERIAL_PATH.value is not None:
self.usb = serial.Serial(config.SERIAL_PATH.value, 9600, timeout=2)
serial_notifier = SerialNotifier(config.SERIAL_PATH.value, self.usb)
self.notifiers["serial"] = serial_notifier
async def start(self):
# start detecting and reading barcode scanners
await self.barcode_reader.start()