summaryrefslogtreecommitdiff
path: root/src/home/relay
diff options
context:
space:
mode:
Diffstat (limited to 'src/home/relay')
-rw-r--r--src/home/relay/__init__.py16
-rw-r--r--src/home/relay/__init__.pyi2
-rw-r--r--src/home/relay/sunxi_h3_client.py39
-rw-r--r--src/home/relay/sunxi_h3_server.py82
4 files changed, 0 insertions, 139 deletions
diff --git a/src/home/relay/__init__.py b/src/home/relay/__init__.py
deleted file mode 100644
index 406403d..0000000
--- a/src/home/relay/__init__.py
+++ /dev/null
@@ -1,16 +0,0 @@
-import importlib
-
-__all__ = ['RelayClient', 'RelayServer']
-
-
-def __getattr__(name):
- _map = {
- 'RelayClient': '.sunxi_h3_client',
- 'RelayServer': '.sunxi_h3_server'
- }
-
- if name in __all__:
- module = importlib.import_module(_map[name], __name__)
- return getattr(module, name)
-
- raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
diff --git a/src/home/relay/__init__.pyi b/src/home/relay/__init__.pyi
deleted file mode 100644
index 7a4a2f4..0000000
--- a/src/home/relay/__init__.pyi
+++ /dev/null
@@ -1,2 +0,0 @@
-from .sunxi_h3_client import RelayClient as RelayClient
-from .sunxi_h3_server import RelayServer as RelayServer
diff --git a/src/home/relay/sunxi_h3_client.py b/src/home/relay/sunxi_h3_client.py
deleted file mode 100644
index 8c8d6c4..0000000
--- a/src/home/relay/sunxi_h3_client.py
+++ /dev/null
@@ -1,39 +0,0 @@
-import socket
-
-
-class RelayClient:
- def __init__(self, port=8307, host='127.0.0.1'):
- self._host = host
- self._port = port
- self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-
- def __del__(self):
- self.sock.close()
-
- def connect(self):
- self.sock.connect((self._host, self._port))
-
- def _write(self, line):
- self.sock.sendall((line+'\r\n').encode())
-
- def _read(self):
- buf = bytearray()
- while True:
- buf.extend(self.sock.recv(256))
- if b'\r\n' in buf:
- break
-
- response = buf.decode().strip()
- return response
-
- def on(self):
- self._write('on')
- return self._read()
-
- def off(self):
- self._write('off')
- return self._read()
-
- def status(self):
- self._write('get')
- return self._read()
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()