class SensorCube(AdapterWithBattery): def __init__(self, devices): super().__init__(devices) self.switch = SelectorSwitch(devices, 'cube', 'action') self.switch.add_level('Off', None) self.switch.add_level('Flip 90', 'flip90') self.switch.add_level('Flip 180', 'flip180') self.switch.add_level('Tap', 'tap') self.switch.add_level('Shake', 'shake') self.switch.add_level('Fall', 'fall') self.switch.add_level('Slide', 'slide') self.switch.add_level('Rotate Left', 'rotate_left') self.switch.add_level('Rotate Right', 'rotate_right') self.switch.set_selector_style(SelectorSwitch.SELECTOR_TYPE_MENU) self.devices.append(self.switch) self.devices.append(CustomSensor(devices, 'angle', 'angle', ' (Rotation Angle)')) self.devices.append(CustomSensor(devices, 'side', 'side', ' (Side)')) def convert_message(self, message): message = super().convert_message(message) if 'to_side' in message.raw: message.raw['side'] = message.raw['to_side'] return message def handle_command(self, alias, device, command, level, color): device_data = self._get_legacy_device_data() self.switch.handle_command(device_data, command, level, color)
class TradfriRemoteSwitchOnOff(AdapterWithBattery): def __init__(self, devices): super().__init__(devices) self.switch = SelectorSwitch(devices, 'switch', 'click') self.switch.add_level('Off', 'off') self.switch.add_level('On', 'on') self.switch.add_level('Up', 'brightness_up') self.switch.add_level('Down', 'brightness_down') self.switch.add_level('Stop', 'brightness_stop') self.switch.set_selector_style(SelectorSwitch.SELECTOR_TYPE_BUTTONS) self.switch.disable_value_check_on_update() self.devices.append(self.switch) def handleMqttMessage(self, device_data, message): if 'click' not in message.raw: return converted_message = self.convert_message(message) click = message.raw['click'] if click == '': return else: for device in self.devices: device.handle_message(device_data, converted_message) def handleCommand(self, alias, device, device_data, command, level, color): self.switch.handle_command(device_data, command, level, color)
class WXKG11LM(AdapterWithBattery): def __init__(self, devices): super().__init__(devices) self.switch = SelectorSwitch(devices, 'switch', 'state') self.switch.add_level('Off', None) self.switch.add_level('Click', 'single') self.switch.add_level('Double Click', 'double') self.switch.add_level('Triple Click', 'triple') self.switch.add_level('Quadruple Click', 'quadruple') self.switch.add_level('Long Click', 'hold') self.switch.add_level('Long Click Release', 'release') self.switch.set_selector_style(SelectorSwitch.SELECTOR_TYPE_MENU) self.switch.disable_value_check_on_update() self.devices.append(self.switch) def convert_message(self, message): message = super().convert_message(message) if 'click' in message.raw: message.raw['state'] = message.raw['click'] elif 'action' in message.raw: message.raw['state'] = message.raw['action'] return message def handleCommand(self, alias, device, device_data, command, level, color): self.switch.handle_command(device_data, command, level, color)
class DJT11LM(AdapterWithBattery): def __init__(self, devices): super().__init__(devices) self.switch = SelectorSwitch(devices, 'action', 'action') self.switch.add_level('Off', None) self.switch.add_level('Vibration', 'vibration') self.switch.add_level('Drop', 'drop') self.switch.add_level('Tilt', 'tilt') self.switch.set_selector_style(SelectorSwitch.SELECTOR_TYPE_MENU) self.devices.append(self.switch) self.devices.append( CustomSensor(devices, 'stgth', 'strength', ' (Strength)')) self.devices.append( JSONSensor(devices, 'angle', 'angle_raw', ' (Angle)')) def handle_command(self, alias, device, command, level, color): device_data = self._get_legacy_device_data() self.switch.handle_command(device_data, command, level, color) def convert_message(self, message): message = super().convert_message(message) message.raw['angle_raw'] = { 'angle': message.raw['angle'], 'angle_x': message.raw['angle_x'], 'angle_y': message.raw['angle_y'], 'angle_z': message.raw['angle_z'], 'angle_x_absolute': message.raw['angle_x_absolute'], 'angle_y_absolute': message.raw['angle_y_absolute'], } return message
class KEF1PA(AdapterWithBattery): def __init__(self, devices): super().__init__(devices) self.switch = SelectorSwitch(devices, 'KEF1PA', 'action') self.switch.add_level('Off', None) self.switch.add_level('Panic', 'panic') self.switch.add_level('Home', 'home') self.switch.add_level('Away', 'away') self.switch.add_level('Sleep', 'sleep') self.switch.set_selector_style(SelectorSwitch.SELECTOR_TYPE_MENU) self.devices.append(self.switch) def handleCommand(self, alias, device, device_data, command, level, color): self.switch.handle_command(device_data, command, level, color)
class WXKG02LM(AdapterWithBattery): def __init__(self, devices): super().__init__(devices) self.switch = SelectorSwitch(devices, 'switch', 'click') self.switch.add_level('Off', None) self.switch.add_level('Switch 1', 'left') self.switch.add_level('Switch 2', 'right') self.switch.add_level('Both_Click', 'both') self.switch.set_selector_style(SelectorSwitch.SELECTOR_TYPE_BUTTONS) self.devices.append(self.switch) def handleCommand(self, alias, device, device_data, command, level, color): self.switch.handle_command(device_data, command, level, color)
class SensorVibration(AdapterWithBattery): def __init__(self, devices): super().__init__(devices) self.switch = SelectorSwitch(devices, 'action', 'action') self.switch.add_level('Off', None) self.switch.add_level('Vibration', 'vibration') self.switch.add_level('Drop', 'drop') self.switch.add_level('Tilt', 'tilt') self.switch.set_selector_style(SelectorSwitch.SELECTOR_TYPE_MENU) self.devices.append(self.switch) def handleCommand(self, alias, device, device_data, command, level, color): self.switch.handle_command(device_data, command, level, color)
class TradfriRemoteSwitchOnOff(AdapterWithBattery): def __init__(self, devices): super().__init__(devices) self.switch = SelectorSwitch(devices, 'switch', 'click') self.switch.add_level('Off', 'off') self.switch.add_level('On', 'on') self.switch.add_level('Up', 'brightness_up') self.switch.add_level('Down', 'brightness_down') self.switch.add_level('Stop', 'brightness_stop') self.switch.set_selector_style(SelectorSwitch.SELECTOR_TYPE_BUTTONS) self.devices.append(self.switch) def handleCommand(self, alias, device, device_data, command, level, color): self.switch.handle_command(device_data, command, level, color)
class SNZB01(AdapterWithBattery): def __init__(self, devices): super().__init__(devices) self.switch = SelectorSwitch(devices, 'switch', 'action') self.switch.add_level('Off', None) self.switch.add_level('Click', 'single') self.switch.add_level('Double Click', 'double') self.switch.add_level('Long Press', 'long') self.switch.set_selector_style(SelectorSwitch.SELECTOR_TYPE_BUTTONS) self.switch.disable_value_check_on_update() self.devices.append(self.switch) def handleCommand(self, alias, device, device_data, command, level, color): self.switch.handle_command(device_data, command, level, color)
class GiraLightLink(Adapter): def __init__(self, devices): super().__init__(devices) self.switch = SelectorSwitch(devices, 'switch', 'action') self.switch.add_level('Off', 'off') self.switch.add_level('On', 'on') self.switch.add_level('1', 'select_0') self.switch.add_level('2', 'select_1') self.switch.add_level('3', 'select_2') self.switch.add_level('4', 'select_3') self.switch.set_selector_style(SelectorSwitch.SELECTOR_TYPE_MENU) self.switch.disable_value_check_on_update() self.devices.append(self.switch) def handleCommand(self, alias, device, device_data, command, level, color): self.switch.handle_command(device_data, command, level, color)
class HeimanAlarmRemoteAdapter(AdapterWithBattery): def __init__(self, devices): super().__init__(devices) self.switch = SelectorSwitch(devices, 'Remote', 'action') self.switch.add_level('Off', None) self.switch.add_level('Arm all zones', 'arm_all_zones') self.switch.add_level('Arm partial zones', 'arm_partial_zones') self.switch.add_level('Disarm', 'disarm') self.switch.add_level('Emergency', 'emergency') self.switch.set_selector_style(SelectorSwitch.SELECTOR_TYPE_MENU) self.devices.append(self.switch) def convert_message(self, message): message = super().convert_message(message) return message def handleCommand(self, alias, device, device_data, command, level, color): self.switch.handle_command(device_data, command, level, color)
class WXKG01LM(AdapterWithBattery): def __init__(self, devices): super().__init__(devices) self.switch = SelectorSwitch(devices, 'switch', 'click') self.switch.add_level('Off', None) self.switch.add_level('Click', 'single') self.switch.add_level('Double Click', 'double') self.switch.add_level('Triple Click', 'triple') self.switch.add_level('Quadruple Click', 'quadruple') self.switch.add_level('Many clicks', 'many') self.switch.add_level('Long Click', 'long') self.switch.add_level('Long Click Release', 'long_release') self.switch.set_selector_style(SelectorSwitch.SELECTOR_TYPE_MENU) self.devices.append(self.switch) def handleCommand(self, alias, device, device_data, command, level, color): self.switch.handle_command(device_data, command, level, color)
class TradfriRemoteCloseOpen(AdapterWithBattery): def __init__(self, devices): super().__init__(devices) self.switch = SelectorSwitch(devices, 'switch', 'click') self.switch.add_level('Up', 'open') self.switch.add_level('Down', 'close') self.switch.add_level('Release', 'release') self.switch.set_selector_style(SelectorSwitch.SELECTOR_TYPE_BUTTONS) self.switch.disable_value_check_on_update() self.devices.append(self.switch) def handleCommand(self, alias, device, device_data, command, level, color): Domoticz.Debug(str(command) + str(level) + str(color)) self.switch.handle_command(device_data, command, level, color) return { 'topic': device_data['friendly_name'] + '/set', 'payload': json.dumps({"state": command.upper()}) }
class TradfriRollerBlind(Adapter): def __init__(self, devices): super().__init__(devices) self.switch = SelectorSwitch(devices, 'switch', 'click') self.switch.add_level('Up', 'open') self.switch.add_level('Down', 'close') self.devices.append(self.switch) def handleCommand(self, alias, device, device_data, command, level, color): self.switch.handle_command(device_data, command, level, color) if (command.upper() == "ON"): command = "close" else: command = "open" return { 'topic': device_data['friendly_name'] + '/set', 'payload': json.dumps({"state": command.upper()}) }
class SmartMiniSwitch(AdapterWithBattery): def __init__(self, devices): super().__init__(devices) self.switch = SelectorSwitch(devices, 'switch', 'action') self.switch.add_level('Off', None) self.switch.add_level('Up', 'up') self.switch.add_level('Up: hold', 'up_hold') self.switch.add_level('Up: release', 'up_release') self.switch.add_level('Circle: click', 'circle_click') self.switch.add_level('Circle: hold', 'circle_hold') self.switch.add_level('Circle: release', 'circle_release') self.switch.add_level('Down', 'down') self.switch.add_level('Down: hold', 'down_hold') self.switch.add_level('Down: release', 'down_release') self.switch.set_selector_style(SelectorSwitch.SELECTOR_TYPE_MENU) self.switch.disable_value_check_on_update() self.devices.append(self.switch) def handleCommand(self, alias, device, device_data, command, level, color): self.switch.handle_command(device_data, command, level, color)
class WXKG07LM(AdapterWithBattery): def __init__(self, devices): super().__init__(devices) self.switchLeft = SelectorSwitch(devices, 'btn', 'action', ' (Left Click)') self.switchLeft.add_level("Off", None) self.switchLeft.add_level('Click', 'left') self.switchLeft.add_level('Long click', 'left_long') self.switchLeft.add_level('Double click', 'left_double') self.switchLeft.disable_value_check_on_update() self.switchRight = SelectorSwitch(devices, 'btn_1', 'action', ' (Right Button)') self.switchRight.add_level("Off", None) self.switchRight.add_level('Click', 'right') self.switchRight.add_level('Long click', 'right_long') self.switchRight.add_level('Double click', 'right_double') self.switchRight.set_selector_style( SelectorSwitch.SELECTOR_TYPE_BUTTONS) self.switchRight.disable_value_check_on_update() self.switchBoth = SelectorSwitch(devices, 'btn_2', 'action', ' (Both Buttons)') self.switchBoth.add_level("Off", None) self.switchBoth.add_level('Click', 'both') self.switchBoth.add_level('Long Click', 'both_long') self.switchBoth.add_level('Double Click', 'both_double') self.switchBoth.set_selector_style( SelectorSwitch.SELECTOR_TYPE_BUTTONS) self.switchBoth.disable_value_check_on_update() self.devices.append(self.switchLeft) self.devices.append(self.switchRight) self.devices.append(self.switchBoth) def convert_message(self, message): message = super().convert_message(message) if 'click' in message.raw: message.raw['state'] = message.raw['click'] elif 'action' in message.raw: message.raw['state'] = message.raw['action'] return message def handleCommand(self, alias, device, device_data, command, level, color): self.switchLeft.handle_command(device_data, command, level, color) self.switchRight.handle_command(device_data, command, level, color) self.switchBoth.handle_command(device_data, command, level, color)
class TradfriRemoteControl(AdapterWithBattery): def __init__(self, devices): super().__init__(devices) self.switch = ToggleSwitch(devices, 'switch', 'action') self.arrow_left = SelectorSwitch(devices, 'arrowL', 'action', ' (Left Arrow)') self.arrow_left.add_level('Off', None) self.arrow_left.add_level('Click', 'arrow_left_click') self.arrow_left.add_level('Hold', 'arrow_left_hold') self.arrow_left.add_level('Release', 'arrow_left_release') self.arrow_left.set_selector_style( SelectorSwitch.SELECTOR_TYPE_BUTTONS) self.arrow_right = SelectorSwitch(devices, 'arrowR', 'action', ' (Right Arrow)') self.arrow_right.add_level('Off', None) self.arrow_right.add_level('Click', 'arrow_right_click') self.arrow_right.add_level('Hold', 'arrow_right_hold') self.arrow_right.add_level('Release', 'arrow_right_release') self.arrow_right.set_selector_style( SelectorSwitch.SELECTOR_TYPE_BUTTONS) self.brightness_up = SelectorSwitch(devices, 'brUp', 'action', ' (Brightness Up)') self.brightness_up.add_level('Off', None) self.brightness_up.add_level('Click', 'brightness_up_click') self.brightness_up.add_level('Hold', 'brightness_up_hold') self.brightness_up.add_level('Release', 'brightness_up_release') self.brightness_up.set_selector_style( SelectorSwitch.SELECTOR_TYPE_BUTTONS) self.brightness_down = SelectorSwitch(devices, 'brDown', 'action', ' (Brightness Down)') self.brightness_down.add_level('Off', None) self.brightness_down.add_level('Click', 'brightness_down_click') self.brightness_down.add_level('Hold', 'brightness_down_hold') self.brightness_down.add_level('Release', 'brightness_down_release') self.brightness_down.set_selector_style( SelectorSwitch.SELECTOR_TYPE_BUTTONS) self.devices.append(self.switch) self.devices.append(self.arrow_left) self.devices.append(self.arrow_right) self.devices.append(self.brightness_up) self.devices.append(self.brightness_down) def handleCommand(self, alias, device, device_data, command, level, color): if alias == self.switch.alias: self.switch.handle_command(device_data, command, level, color) if alias == self.arrow_left.alias: self.arrow_left.handle_command(device_data, command, level, color) if alias == self.arrow_right.alias: self.arrow_right.handle_command(device_data, command, level, color) if alias == self.brightness_up.alias: self.brightness_up.handle_command(device_data, command, level, color) if alias == self.brightness_down.alias: self.brightness_down.handle_command(device_data, command, level, color) def handleMqttMessage(self, device_data, message): if 'action' not in message.raw: return converted_message = self.convert_message(message) action = message.raw['action'] if action == 'toggle': self.switch.handle_message(device_data, converted_message) if action.startswith('brightness_up'): self.brightness_up.handle_message(device_data, converted_message) if action.startswith('brightness_down'): self.brightness_down.handle_message(device_data, converted_message) if action.startswith('arrow_right'): self.arrow_right.handle_message(device_data, converted_message) if action.startswith('arrow_left'): self.arrow_left.handle_message(device_data, converted_message)