diff options
author | Evgeny Zinoviev <me@ch1p.io> | 2022-12-18 05:35:54 +0300 |
---|---|---|
committer | Evgeny Zinoviev <me@ch1p.io> | 2022-12-18 05:35:54 +0300 |
commit | 5f34b77581355ed2e0f03a6eb7607e4c6d508e7e (patch) | |
tree | aab9c635d8a5336fb732bdd3f3237fe6d21392f5 /src/home/relay/server.py | |
parent | 9c5da6f50b850596cca867c1cca0dae17750dc1c (diff) |
pump_bot: rename modules, make it clear it works locally on sunxi h3 board
Diffstat (limited to 'src/home/relay/server.py')
-rw-r--r-- | src/home/relay/server.py | 82 |
1 files changed, 0 insertions, 82 deletions
diff --git a/src/home/relay/server.py b/src/home/relay/server.py deleted file mode 100644 index 1f33969..0000000 --- a/src/home/relay/server.py +++ /dev/null @@ -1,82 +0,0 @@ -import asyncio -import logging - -from pyA20.gpio import gpio -from pyA20.gpio import port as gpioport -from ..util import Addr - -logger = logging.getLogger(__name__) - - -class RelayServer: - OFF = 1 - ON = 0 - - def __init__(self, - pinname: str, - addr: Addr): - if not hasattr(gpioport, pinname): - raise ValueError(f'invalid pin {pinname}') - - self.pin = getattr(gpioport, pinname) - self.addr = addr - - gpio.init() - gpio.setcfg(self.pin, gpio.OUTPUT) - - self.lock = asyncio.Lock() - - def run(self): - asyncio.run(self.run_server()) - - async def relay_set(self, value): - async with self.lock: - gpio.output(self.pin, value) - - async def relay_get(self): - async with self.lock: - return int(gpio.input(self.pin)) == RelayServer.ON - - async def handle_client(self, reader, writer): - request = None - while request != 'quit': - try: - request = await reader.read(255) - if request == b'\x04': - break - request = request.decode('utf-8').strip() - except Exception: - break - - data = 'unknown' - if request == 'on': - await self.relay_set(RelayServer.ON) - logger.debug('set on') - data = 'ok' - - elif request == 'off': - await self.relay_set(RelayServer.OFF) - logger.debug('set off') - data = 'ok' - - elif request == 'get': - status = await self.relay_get() - data = 'on' if status is True else 'off' - - writer.write((data + '\r\n').encode('utf-8')) - try: - await writer.drain() - except ConnectionError: - break - - try: - writer.close() - except ConnectionError: - pass - - async def run_server(self): - host, port = self.addr - server = await asyncio.start_server(self.handle_client, host, port) - async with server: - logger.info('Server started.') - await server.serve_forever() |