Add serial and Arduino file
This commit is contained in:
@ -1 +1 @@
|
||||
__version__ = "2.3.0"
|
||||
__version__ = "2.3.1"
|
||||
|
@ -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={
|
||||
|
@ -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"
|
||||
|
23
barcode_server/notifier/serial.py
Normal file
23
barcode_server/notifier/serial.py
Normal 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}")
|
@ -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')
|
||||
|
@ -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()
|
||||
|
Reference in New Issue
Block a user