X-Git-Url: https://git.rvb.name/mqtt-noolite.git/blobdiff_plain/dda5094610cb182ba33ab5035b47c4856b93ad43..c15dd3cefc6978701a5ea5a647d4eb22816b7b6c:/nmd/nl_mqtt.py?ds=inline diff --git a/nmd/nl_mqtt.py b/nmd/nl_mqtt.py index 25f96da..ab7b997 100644 --- a/nmd/nl_mqtt.py +++ b/nmd/nl_mqtt.py @@ -60,7 +60,6 @@ class MqttDriver(metaclass=Singleton): await self.commands_to_send_queue.put(payload) else: try: - mtrf_command = None address = subtopic.split('/') if len(address)==2: channel = int(address[0]) @@ -74,93 +73,81 @@ class MqttDriver(metaclass=Singleton): command = address[0] channel = None id = None + command = command.lower() + print("%s: %s (%s)" % (command,channel,id)) - if command == "on": - if id == '.': - mtrf_command = { "mode": 2, "ch": channel, "cmd": 2, "ctr": 1 } - elif id: - mtrf_command = { "mode": 2, "ch": channel, "cmd": 2, "id0": int(id[0:2],16), "id1": int(id[2:4],16), "id2": int(id[4:6],16), "id3": int(id[6:8],16), "ctr": 8 } - else: - mtrf_command = { "mode": 0, "ch": channel, "cmd": 2 } + + mtrf_command = { "ch": channel } + if id == '.' or id == 'TX-F': + mtrf_command["mode"] = 2 + elif id =='TX': + mtrf_command["mode"] = 0 + elif id =='RX': + mtrf_command["mode"] = 1 + elif id =='RX-F': + mtrf_command["mode"] = 3 + elif id: + mtrf_command["mode"] = 2 + mtrf_command["ctr"] = 8 + mtrf_command["id0"] = int(id[0:2],16) + mtrf_command["id1"] = int(id[2:4],16) + mtrf_command["id2"] = int(id[4:6],16) + mtrf_command["id3"] = int(id[6:8],16) + else: + mtrf_command["mode"] = 0 + + if command == "power": + payload = payload.decode('utf-8').lower() + print( "command: POWER " + payload ) + if payload == "off": + mtrf_command["cmd"] = 0 + else: + mtrf_command["cmd"] = 2 + + elif command == "on": + mtrf_command["cmd"] = 2 + elif command == "off": - if id == '.': - mtrf_command = { "mode": 2, "ch": channel, "cmd": 0, "ctr": 1 } - elif id: - mtrf_command = { "mode": 2, "ch": channel, "cmd": 0, "id0": int(id[0:2],16), "id1": int(id[2:4],16), "id2": int(id[4:6],16), "id3": int(id[6:8],16), "ctr": 8 } - else: - mtrf_command = { "mode": 0, "ch": channel, "cmd": 0 } + mtrf_command["cmd"] = 0 + elif command == "brightness": - brightness = int(payload) - if id == '.': - mtrf_command = { "mode": 2, "ch": channel, "cmd": 6, "d0": brightness, "ctr": 1 } - elif id: - mtrf_command = { "mode": 2, "ch": channel, "cmd": 6, "d0": brightness, "id0": int(id[0:2],16), "id1": int(id[2:4],16), "id2": int(id[4:6],16), "id3": int(id[6:8],16), "ctr": 8 } - else: - mtrf_command = { "mode": 0, "ch": channel, "cmd": 6, "d0": brightness } + mtrf_command["cmd"] = 6 + mtrf_command["d0"] = int(float(payload)) + + elif command == "dimmer": + mtrf_command["cmd"] = 6 + mtrf_command["d0"] = int(round(float(payload)*255/100)) + elif command == "state": - if id == '.': - mtrf_command = { "mode": 2, "ch": channel, "cmd": 128, "ctr": 1 } - elif id: - mtrf_command = { "mode": 2, "ch": channel, "cmd": 128, "id0": int(id[0:2],16), "id1": int(id[2:4],16), "id2": int(id[4:6],16), "id3": int(id[6:8],16), "ctr": 8 } + mtrf_command["cmd"] = 128 + elif command == "load_preset": - if id == '.': - mtrf_command = { "mode": 2, "ch": channel, "cmd": 7, "ctr": 1 } - elif id: - mtrf_command = { "mode": 2, "ch": channel, "cmd": 7, "id0": int(id[0:2],16), "id1": int(id[2:4],16), "id2": int(id[4:6],16), "id3": int(id[6:8],16), "ctr": 8 } - else: - mtrf_command = { "mode": 0, "ch": channel, "cmd": 7 } + mtrf_command["cmd"] = 7 + elif command == "save_preset": - if id == '.': - mtrf_command = { "mode": 2, "ch": channel, "cmd": 8, "ctr": 1 } - elif id: - mtrf_command = { "mode": 2, "ch": channel, "cmd": 8, "id0": int(id[0:2],16), "id1": int(id[2:4],16), "id2": int(id[4:6],16), "id3": int(id[6:8],16), "ctr": 8 } - else: - mtrf_command = { "mode": 0, "ch": channel, "cmd": 8 } + mtrf_command["cmd"] = 8 + elif command == "temp_on": delay = (int(payload) + 3)//5 - d0 = delay % 256 - d1 = delay // 256 - if id == '.': - mtrf_command = { "mode": 2, "ch": channel, "cmd": 25, "fmt": 6, "d0": d0, "d1": d1, "ctr": 1 } - elif id: - mtrf_command = { "mode": 2, "ch": channel, "cmd": 25, "fmt": 6, "d0": d0, "d1": d1, "id0": int(id[0:2],16), "id1": int(id[2:4],16), "id2": int(id[4:6],16), "id3": int(id[6:8],16), "ctr": 8 } - else: - mtrf_command = { "mode": 0, "ch": channel, "cmd": 25, "fmt": 6, "d0": d0, "d1": d1 } + mtrf_command["cmd"] = 25 + mtrf_command["d0"] = delay % 256 + mtrf_command["d1"] = delay // 256 + mtfr_command["fmt"] = 6 + elif command == "bind": - if id == 'tx-f': - mtrf_command = { "mode": 2, "ch": channel, "cmd": 15 } - elif id == 'tx': - mtrf_command = { "mode": 0, "ch": channel, "cmd": 15 } - elif id == 'rx': - mtrf_command = { "mode": 1, "ch": channel, "cmd": 15 } - elif id == 'rx-f': - mtrf_command = { "mode": 3, "ch": channel, "cmd": 15 } - else: - mtrf_command = { "mode": 0, "ch": channel, "cmd": 15 } + mtrf_command["cmd"] = 15 + elif command == "unbind": - if id == '.' or id == 'tx-f': - mtrf_command = { "mode": 2, "ch": channel, "cmd": 9 } - elif id == 'tx': - mtrf_command = { "mode": 0, "ch": channel, "cmd": 9 } - elif id == 'rx': - mtrf_command = { "mode": 1, "ch": channel, "cmd": 9, "ctr": 5 } - elif id == 'rx-f': - mtrf_command = { "mode": 3, "ch": channel, "cmd": 9, "ctr": 5 } - else: - mtrf_command = { "mode": 0, "ch": channel, "cmd": 9 } - elif command == "service": - if id == '.': - mtrf_command = { "mode": 2, "ch": channel, "cmd": 131, "d0": 1 } - elif id: - mtrf_command = { "mode": 2, "ch": channel, "cmd": 131, "d0": 1, "id0": int(id[0:2],16), "id1": int(id[2:4],16), "id2": int(id[4:6],16), "id3": int(id[6:8],16), "ctr": 8 } + mtrf_command["cmd"] = 9 - if mtrf_command: - await self.commands_to_send_queue.put(mtrf_command) + elif command == "service": + mtrf_command["cmd"] = 131 except Exception as e: logger.exception(e) continue + await self.commands_to_send_queue.put(mtrf_command) async def send_command_to_noolite(self): @@ -311,12 +298,14 @@ class MqttDriver(metaclass=Singleton): dev_state = data[2] % 16 try: message['dev_state'] = [ 'OFF', 'ON', 'TEMPORARY_ON' ][dev_state] + message['POWER'] = message['dev_state'] finally: None dev_mode = data[2] // 128 if dev_mode: message['dev_binding'] = 'ON' message['brightness'] = data[3] + message['DIMMER'] = int(round(data[3]*100/255)) elif fmt == 1: message['dev_aux'] = data[2] message['dev_legacy'] = data[3]