def simu_packet_for_process_enocean_message(cls, device: RockerSwitch,
                                             action: RockerAction):
     packet = RockerSwitchTools.create_packet(action=action,
                                              destination=0xffffffff,
                                              sender=0xffffffff)
     message = EnoceanMessage(packet, device._enocean_target)
     device.process_enocean_message(message)
Example #2
0
    def test_proceed_enocean(self):
        enocean_id = 0x05555555

        device = _MockDevice()
        config = {
            CONFKEY_ENOCEAN_TARGET: enocean_id,
            CONFKEY_MQTT_CHANNEL_STATE: "channel",
            CONFKEY_ENOCEAN_SENDER: 1234,
        }
        device.set_config(config)

        time_1 = datetime.datetime.now(tz=get_localzone())

        message = EnoceanMessage(
            payload=PickleTools.unpickle(PACKET_WIN_TILTED),
            enocean_id=enocean_id)
        device.now = time_1
        device.process_enocean_message(message)

        sent_data = json.loads(device.sent_message)
        self.assertEqual(
            sent_data, {
                'device': 'mock',
                'timestamp': time_1.isoformat(),
                'since': time_1.isoformat(),
                'status': 'tilted'
            })
Example #3
0
    def test_proceed_enocean(self):
        device = self.device

        Scenario = namedtuple("Scenario", ["rocker_button", "expected_state"])

        scenarios = [
            Scenario(RockerButton.ROCK3, "on"),
            Scenario(RockerButton.ROCK2, "off"),
        ]

        for scenario in scenarios:
            action = RockerAction(RockerPress.PRESS_SHORT, scenario.rocker_button)
            packet = RockerSwitchTools.create_packet(action)
            packet.dBm = -55
            message = EnoceanMessage(payload=packet, enocean_id=device._enocean_target)

            device.messages = []
            device.process_enocean_message(message)
            self.assertEqual(device._last_refresh_time, device._now())

            self.assertEqual(len(device.messages), 1)
            result = json.loads(device.messages[0])

            compare = {'timestamp': '2020-01-01T02:02:03+00:00', 'status': scenario.expected_state, 'device': 'mock'}
            self.assertEqual(result, compare)
 def simulate_status_via_send_command(command: Fsb61Command):
     device.now = device.now + timedelta(seconds=command.time)
     command_awnser = copy.deepcopy(command)
     command_awnser.sender = device._enocean_target
     packet = Fsb61CommandConverter.create_packet(command_awnser)
     message = EnoceanMessage(enocean_id=device._enocean_target,
                              payload=packet)
     device.process_enocean_message(message)
Example #5
0
    def test_non_rocker_actions(self):
        command = Fsb61Command(type=Fsb61CommandType.CLOSE, time=288.0, sender=1)
        packet = Fsb61CommandConverter.create_packet(command)
        message = EnoceanMessage(payload=packet, enocean_id=packet.sender_int)
        self.device.process_enocean_message(message)

        self.assertEqual(len(self.device.mqtt_commands), 0)
        self.assertEqual(len(self.device.not_handled_messages), 1)
Example #6
0
    def test_proceed_enocean(self):
        device = self.device

        packet = PickleTools.unpickle(PACKET_STATUS_ON_33)
        message = EnoceanMessage(payload=packet,
                                 enocean_id=device._enocean_target)

        device.process_enocean_message(message)

        self.assertEqual(len(device.messages), 1)
        result = json.loads(device.messages[0])

        compare = {
            'timestamp': '2020-01-01T02:02:03+00:00',
            'status': 'on',
            'dimStatus': 33,
            'device': 'mock'
        }
        self.assertEqual(result, compare)
Example #7
0
    def test_proceed_enocean_2(self):
        device = self.device

        action = Fud61Action(Fud61Command.DIMMING, dim_state=90)
        packet = Fud61Eep.create_packet(action)
        packet.dBm = -55
        message = EnoceanMessage(payload=packet,
                                 enocean_id=device._enocean_target)
        device.process_enocean_message(message)

        self.assertEqual(device._last_dim_state, action.dim_state)
        self.assertEqual(device._last_status_request, device._now())

        self.assertEqual(len(device.messages), 1)
        result = json.loads(device.messages[0])

        compare = {
            'timestamp': '2020-01-01T02:02:03+00:00',
            'status': 'on',
            'dimStatus': 90,
            'device': 'mock'
        }
        self.assertEqual(result, compare)
 def simulate_status_packet(status_type):
     command = Fsb61State(type=status_type)
     packet = Fsb61StateConverter.create_packet(command)
     message = EnoceanMessage(enocean_id=device._enocean_target,
                              payload=packet)
     device.process_enocean_message(message)
Example #9
0
 def prepare(press, button, sender):
     device.clear()
     rocker_action = RockerAction(press=press, button=button)
     packet = RockerSwitchTools.create_packet(action=rocker_action, sender=sender)
     message = EnoceanMessage(payload=packet, enocean_id=packet.sender_int)
     device.process_enocean_message(message)
Example #10
0
    def test_mqtt_command(self):
        device = self.device

        def process_mqtt_message_to_action(command) -> Fud61Action:
            message = MQTTMessage()
            message.payload = command

            device.packets.clear()
            device.process_mqtt_message(message)

            self.assertEqual(len(device.packets), 1)
            return Fud61Eep.extract_packet(device.packets[0])

        # loop 1 - init with 100
        action = process_mqtt_message_to_action(b"100")
        self.assertEqual(action.command, Fud61Command.DIMMING)
        self.assertEqual(action.switch_state, SwitchStatus.ON)
        self.assertEqual(action.dim_state, 100)

        # loop 2 - set dim value
        action = process_mqtt_message_to_action(b"50")
        self.assertEqual(action.command, Fud61Command.DIMMING)
        self.assertEqual(action.switch_state, SwitchStatus.ON)
        self.assertEqual(action.dim_state, 50)

        # simulate state
        action_state_simu = Fud61Action(Fud61Command.DIMMING,
                                        dim_state=action.dim_state)
        packet_state_simu = Fud61Eep.create_packet(action_state_simu)
        message_state_simu = EnoceanMessage(payload=packet_state_simu,
                                            enocean_id=device._enocean_target)
        device.process_enocean_message(message_state_simu)
        self.assertEqual(device._last_dim_state, action.dim_state)

        # loop 4 - off
        action = process_mqtt_message_to_action(b"off")
        self.assertEqual(action.command, Fud61Command.DIMMING)
        self.assertEqual(action.switch_state, SwitchStatus.OFF)
        self.assertEqual(action.dim_state, 0)

        # loop 5 - on with old dim state
        action = process_mqtt_message_to_action(b"on")
        self.assertEqual(action.command, Fud61Command.DIMMING)
        self.assertEqual(action.switch_state, SwitchStatus.ON)
        self.assertEqual(action.dim_state, 50)

        # loop 6 - request update
        action = process_mqtt_message_to_action(b"update")
        self.assertEqual(action.command, Fud61Command.STATUS_REQUEST)

        # loop 7 - toggle off
        action = process_mqtt_message_to_action(b"toggle")
        self.assertEqual(action.switch_state, SwitchStatus.OFF)
        self.assertEqual(action.dim_state, 0)

        # loop 7 - toggle on
        device._current_switch_state = SwitchStatus.OFF  # missing enocean update (process_enocean_message)
        action = process_mqtt_message_to_action(b"toggle")
        self.assertEqual(action.command, Fud61Command.DIMMING)
        self.assertEqual(action.switch_state, SwitchStatus.ON)
        self.assertEqual(action.dim_state, 50)