summaryrefslogtreecommitdiff
path: root/bin/relay_mqtt_http_proxy.py
diff options
context:
space:
mode:
authorEvgeny Zinoviev <me@ch1p.io>2024-02-19 01:44:02 +0300
committerEvgeny Zinoviev <me@ch1p.io>2024-02-19 01:44:11 +0300
commit3741f7cf78a288e967415ccb6736c888a21c211b (patch)
treea48d8331c9936d6c108de4d0f9179a089b1e56e6 /bin/relay_mqtt_http_proxy.py
parentd79309e498cdc1358c81367ce2a93a5731e517d1 (diff)
web_kbn: almost completely ported lws to python
Diffstat (limited to 'bin/relay_mqtt_http_proxy.py')
-rwxr-xr-xbin/relay_mqtt_http_proxy.py67
1 files changed, 36 insertions, 31 deletions
diff --git a/bin/relay_mqtt_http_proxy.py b/bin/relay_mqtt_http_proxy.py
index 23938e1..866ead3 100755
--- a/bin/relay_mqtt_http_proxy.py
+++ b/bin/relay_mqtt_http_proxy.py
@@ -2,6 +2,7 @@
import logging
import __py_include
+from aiohttp import web
from homekit import http
from homekit.config import config, AppConfigUnit
from homekit.mqtt import MqttPayload, MqttWrapper, MqttNode, MqttModule, MqttNodesConfig
@@ -15,7 +16,6 @@ mqtt: Optional[MqttWrapper] = None
mqtt_nodes: dict[str, MqttNode] = {}
relay_modules: dict[str, Union[MqttRelayModule, MqttModule]] = {}
relay_states: dict[str, MqttRelayState] = {}
-
mqtt_nodes_config = MqttNodesConfig()
@@ -67,41 +67,47 @@ def on_mqtt_message(node: MqttNode,
relay_states[node.id].update(**kwargs)
-class RelayMqttHttpProxy(http.HTTPServer):
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
- self.get('/relay/{id}/on', self.relay_on)
- self.get('/relay/{id}/off', self.relay_off)
- self.get('/relay/{id}/toggle', self.relay_toggle)
+# -=-=-=-=-=-=- #
+# Web interface #
+# -=-=-=-=-=-=- #
+
+routes = web.RouteTableDef()
+
+
+async def _relay_on_off(self,
+ enable: Optional[bool],
+ req: web.Request):
+ node_id = req.match_info['id']
+ node_secret = req.query['secret']
+
+ node = mqtt_nodes[node_id]
+ relay_module = relay_modules[node_id]
+
+ if enable is None:
+ if node_id in relay_states and relay_states[node_id].ever_updated:
+ cur_state = relay_states[node_id].enabled
+ else:
+ cur_state = False
+ enable = not cur_state
- async def _relay_on_off(self,
- enable: Optional[bool],
- req: http.Request):
- node_id = req.match_info['id']
- node_secret = req.query['secret']
+ node.secret = node_secret
+ relay_module.switchpower(enable)
+ return self.ok()
- node = mqtt_nodes[node_id]
- relay_module = relay_modules[node_id]
- if enable is None:
- if node_id in relay_states and relay_states[node_id].ever_updated:
- cur_state = relay_states[node_id].enabled
- else:
- cur_state = False
- enable = not cur_state
+@routes.get('/relay/{id}/on')
+async def relay_on(self, req: web.Request):
+ return await self._relay_on_off(True, req)
- node.secret = node_secret
- relay_module.switchpower(enable)
- return self.ok()
- async def relay_on(self, req: http.Request):
- return await self._relay_on_off(True, req)
+@routes.get('/relay/{id}/off')
+async def relay_off(self, req: web.Request):
+ return await self._relay_on_off(False, req)
- async def relay_off(self, req: http.Request):
- return await self._relay_on_off(False, req)
- async def relay_toggle(self, req: http.Request):
- return await self._relay_on_off(None, req)
+@routes.get('/relay/{id}/toggle')
+async def relay_toggle(self, req: web.Request):
+ return await self._relay_on_off(None, req)
if __name__ == '__main__':
@@ -127,8 +133,7 @@ if __name__ == '__main__':
mqtt.connect_and_loop(loop_forever=False)
- proxy = RelayMqttHttpProxy(config.app_config['listen_addr'])
try:
- proxy.run()
+ http.serve(config.app_config['listen_addr'], routes=routes)
except KeyboardInterrupt:
mqtt.disconnect()