X-Git-Url: https://git.rvb.name/mqtt-noolite.git/blobdiff_plain/f7d019c1ffa7d028d901b9fae1170b0778d5c605..HEAD:/nmd/nl_mqtt.py?ds=sidebyside diff --git a/nmd/nl_mqtt.py b/nmd/nl_mqtt.py index d0b26b3..d4ce7ae 100644 --- a/nmd/nl_mqtt.py +++ b/nmd/nl_mqtt.py @@ -73,59 +73,93 @@ 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 } - 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" or payload == "0": + 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 } - 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 } - 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 } - 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 } - 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 } - 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 } - 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": + mtrf_command["cmd"] = 15 + + elif command == "unbind": + mtrf_command["cmd"] = 9 + + elif command == "service": + mtrf_command["cmd"] = 131 + + elif command == "start_bind": + mtrf_command["ctr"] = 3 + mtrf_command["cmd"] = 0 + + elif command == "stop_bind": + mtrf_command["ctr"] = 4 + mtrf_command["cmd"] = 0 + + elif command == "clear_bind": + mtrf_command["ctr"] = 5 + mtrf_command["cmd"] = 0 + + elif command == "unbind_addr": + mtrf_command["ctr"] = 7 + mtrf_command["cmd"] = 0 + except Exception as e: logger.exception(e) continue @@ -207,10 +241,6 @@ class MqttDriver(metaclass=Singleton): message['command'] = 'BRIGHT_UP' elif cmd == 4: message['command'] = 'SWITCH' - elif cmd == 5: - message['command'] = 'SWITCH' - elif cmd == 5: - message['command'] = 'BRIGHT_BACK' elif cmd == 5: message['command'] = 'BRIGHT_BACK' elif cmd == 6: @@ -223,12 +253,12 @@ class MqttDriver(metaclass=Singleton): message['command'] = 'UNBIND' elif cmd == 10: message['command'] = 'STOP_REG' -# elif cmd == 11: -# message['command'] = 'BRIGHTNESS_STEP_DOWN' -# elif cmd == 12: -# message['command'] = 'BRIGHTNESS_STEP_UP' -# elif cmd == 13: -# message['command'] = 'BRIGHT_REG' + elif cmd == 11: + message['command'] = 'BRIGHTNESS_STEP_DOWN' + elif cmd == 12: + message['command'] = 'BRIGHTNESS_STEP_UP' + elif cmd == 13: + message['command'] = 'BRIGHT_REG' elif cmd == 15: message['command'] = 'BIND' elif cmd == 16: @@ -280,12 +310,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]