summaryrefslogtreecommitdiff
path: root/src/home/relay/sunxi_h3_server.py
diff options
context:
space:
mode:
authorEvgeny Zinoviev <me@ch1p.io>2023-09-27 00:54:57 +0300
committerEvgeny Zinoviev <me@ch1p.io>2023-09-27 00:54:57 +0300
commitd3a295872c49defb55fc8e4e43e55550991e0927 (patch)
treeb9dca15454f9027d5a9dad0d4443a20de04dbc5d /src/home/relay/sunxi_h3_server.py
parentb7cbc2571c1870b4582ead45277d0aa7f961bec8 (diff)
parentbdbb296697f55f4c3a07af43c9aaf7a9ea86f3d0 (diff)
Merge branch 'master' of ch1p.io:homekit
Diffstat (limited to 'src/home/relay/sunxi_h3_server.py')
-rw-r--r--src/home/relay/sunxi_h3_server.py82
1 files changed, 0 insertions, 82 deletions
diff --git a/src/home/relay/sunxi_h3_server.py b/src/home/relay/sunxi_h3_server.py
deleted file mode 100644
index 1f33969..0000000
--- a/src/home/relay/sunxi_h3_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()