Незначительно причесан код (убраны дублирующиеся строки).
[mqtt-noolite.git] / nmd / nl_mqtt.py
index d0b26b3ba6ace0291b4639af9f7cf09fa18de9ba..d4ce7aec82b0c71b705e76f1f85a9c5711871f6d 100644 (file)
@@ -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]