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)
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' })
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)
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)
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)
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)
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)
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)