summaryrefslogtreecommitdiff
path: root/src/relay_mqtt_http_proxy.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/relay_mqtt_http_proxy.py
parentb7cbc2571c1870b4582ead45277d0aa7f961bec8 (diff)
parentbdbb296697f55f4c3a07af43c9aaf7a9ea86f3d0 (diff)
Merge branch 'master' of ch1p.io:homekit
Diffstat (limited to 'src/relay_mqtt_http_proxy.py')
-rwxr-xr-xsrc/relay_mqtt_http_proxy.py67
1 files changed, 0 insertions, 67 deletions
diff --git a/src/relay_mqtt_http_proxy.py b/src/relay_mqtt_http_proxy.py
deleted file mode 100755
index 098facc..0000000
--- a/src/relay_mqtt_http_proxy.py
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/env python3
-from home import http
-from home.config import config
-from home.mqtt import MqttRelay, MqttRelayState
-from home.mqtt.esp import MqttEspDevice
-from home.mqtt.payload import MqttPayload
-from home.mqtt.payload.relay import InitialDiagnosticsPayload, DiagnosticsPayload
-from typing import Optional
-
-mqtt_relay: Optional[MqttRelay] = None
-relay_states: dict[str, MqttRelayState] = {}
-
-
-def on_mqtt_message(device_id, message: MqttPayload):
- if isinstance(message, InitialDiagnosticsPayload) or isinstance(message, DiagnosticsPayload):
- kwargs = dict(rssi=message.rssi, enabled=message.flags.state)
- if device_id not in relay_states:
- relay_states[device_id] = MqttRelayState()
- relay_states[device_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)
-
- async def _relay_on_off(self,
- enable: Optional[bool],
- req: http.Request):
- device_id = req.match_info['id']
- device_secret = req.query['secret']
-
- if enable is None:
- if device_id in relay_states and relay_states[device_id].ever_updated:
- cur_state = relay_states[device_id].enabled
- else:
- cur_state = False
- enable = not cur_state
-
- mqtt_relay.set_power(device_id, enable, device_secret)
- return self.ok()
-
- async def relay_on(self, req: http.Request):
- return await self._relay_on_off(True, 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)
-
-
-if __name__ == '__main__':
- config.load('relay_mqtt_http_proxy')
-
- mqtt_relay = MqttRelay(devices=[MqttEspDevice(id=device_id) for device_id in config.get('relay.devices')])
- mqtt_relay.configure_tls()
- mqtt_relay.set_message_callback(on_mqtt_message)
- mqtt_relay.connect_and_loop(loop_forever=False)
-
- proxy = RelayMqttHttpProxy(config.get_addr('server.listen'))
- try:
- proxy.run()
- except KeyboardInterrupt:
- mqtt_relay.disconnect()