diff options
author | Evgeny Zinoviev <me@ch1p.io> | 2024-02-19 01:44:02 +0300 |
---|---|---|
committer | Evgeny Zinoviev <me@ch1p.io> | 2024-02-19 01:44:11 +0300 |
commit | 3741f7cf78a288e967415ccb6736c888a21c211b (patch) | |
tree | a48d8331c9936d6c108de4d0f9179a089b1e56e6 /bin/relay_mqtt_http_proxy.py | |
parent | d79309e498cdc1358c81367ce2a93a5731e517d1 (diff) |
web_kbn: almost completely ported lws to python
Diffstat (limited to 'bin/relay_mqtt_http_proxy.py')
-rwxr-xr-x | bin/relay_mqtt_http_proxy.py | 67 |
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() |