From 0a667b6b374c8adaaac1626e5a23b4f236aa45e8 Mon Sep 17 00:00:00 2001 From: Philipp Grimm Date: Sun, 17 Mar 2024 23:14:21 +0100 Subject: [PATCH] tests added for F6-02-01/02 as sender EEP --- tests/test_switch.py | 72 +++++++++++++++++--- tests/test_switchable_light.py | 119 +++++++++++++++++++++++++++++++-- 2 files changed, 175 insertions(+), 16 deletions(-) diff --git a/tests/test_switch.py b/tests/test_switch.py index f7e5deb..2b3b6d6 100644 --- a/tests/test_switch.py +++ b/tests/test_switch.py @@ -17,14 +17,12 @@ class TestSwitch(unittest.TestCase): def mock_send_message(self, msg: ESP2Message): self.last_sent_command.append( msg ) - def create_switch(self, sender_eep_string:str) -> EltakoSwitch: + def create_switch(self, sender_eep_string:str, sender_id:AddressExpression = AddressExpression.parse('00-00-B0-01')) -> EltakoSwitch: gateway = GatewayMock() dev_id = AddressExpression.parse('00-00-00-01') dev_name = 'device name' eep_string = 'M5-38-08' - sender_id = AddressExpression.parse('00-00-B0-01') - dev_eep = EEP.find(eep_string) sender_eep = EEP.find(sender_eep_string) @@ -77,15 +75,70 @@ def test_switch_value_changed_with_sender_epp_A5_38_08(self): self.assertEqual(self.last_sent_command[0].data[3], 8) self.last_sent_command = [] - def test_switch_value_changed_with_sender_epp_F6_02_01(self): - switch = self.create_switch('F6-02-01') + def test_switch_value_changed_with_sender_epp_F6_02_01_left(self): + switch = self.create_switch('F6-02-01', AddressExpression.parse('00-00-B0-01 left')) + switch.send_message = self.mock_send_message + switch._on_state = False + + # status update message from relay + #8b 05 70 00 00 00 00 00 00 01 30 + # data = 0x30 + on_msg = RPSMessage(address=b'\x00\x00\x00\x01', status=b'\x30', data=b'\x30', outgoing=False) + # 8b 05 50 00 00 00 00 00 00 01 30 + # data = 0x10 + off_msg = RPSMessage(address=b'\x00\x00\x00\x01', status=b'\x30', data=b'\x10', outgoing=False) + + switch.value_changed(on_msg) + self.assertEqual(switch.is_on, True) + self.assertEqual(switch.state, 'on') + + switch.value_changed(on_msg) + self.assertEqual(switch.is_on, True) + self.assertEqual(switch.state, 'on') + + switch.value_changed(off_msg) + self.assertEqual(switch.is_on, False) + self.assertEqual(switch.state, 'off') + + switch.value_changed(off_msg) + self.assertEqual(switch.is_on, False) + self.assertEqual(switch.state, 'off') + + switch.value_changed(on_msg) + self.assertEqual(switch.is_on, True) + self.assertEqual(switch.state, 'on') + + self.last_sent_command = [] + switch.turn_on() + self.assertEqual(len(self.last_sent_command), 2) + self.assertEqual(type(self.last_sent_command[0]), RPSMessage) + self.assertEqual(self.last_sent_command[0].status, 0x30) + self.assertEqual(self.last_sent_command[0].data[0], 0x30) # on + self.assertEqual(self.last_sent_command[1].status, 0x30) + self.assertEqual(self.last_sent_command[1].data[0], 0x20) + + self.last_sent_command = [] + switch.turn_off() + self.assertEqual(len(self.last_sent_command), 2) + self.assertEqual(type(self.last_sent_command[0]), RPSMessage) + self.assertEqual(self.last_sent_command[0].status, 0x30) + self.assertEqual(self.last_sent_command[0].data[0], 0x10) #off + self.assertEqual(self.last_sent_command[1].status, 0x30) + self.assertEqual(self.last_sent_command[1].data[0], 0x00) + self.last_sent_command = [] + + + def test_switch_value_changed_with_sender_epp_F6_02_01_right(self): + switch = self.create_switch('F6-02-01', AddressExpression.parse('00-00-B0-01 right')) switch.send_message = self.mock_send_message switch._on_state = False # status update message from relay #8b 05 70 00 00 00 00 00 00 01 30 + # data = 0x70 on_msg = RPSMessage(address=b'\x00\x00\x00\x01', status=b'\x30', data=b'\x70', outgoing=False) # 8b 05 50 00 00 00 00 00 00 01 30 + # data = 0x50 off_msg = RPSMessage(address=b'\x00\x00\x00\x01', status=b'\x30', data=b'\x50', outgoing=False) switch.value_changed(on_msg) @@ -113,20 +166,21 @@ def test_switch_value_changed_with_sender_epp_F6_02_01(self): self.assertEqual(len(self.last_sent_command), 2) self.assertEqual(type(self.last_sent_command[0]), RPSMessage) self.assertEqual(self.last_sent_command[0].status, 0x30) - self.assertEqual(self.last_sent_command[0].data[0], 0x10) # on + self.assertEqual(self.last_sent_command[0].data[0], 0x70) # on self.assertEqual(self.last_sent_command[1].status, 0x30) - self.assertEqual(self.last_sent_command[1].data[0], 0x00) + self.assertEqual(self.last_sent_command[1].data[0], 0x60) self.last_sent_command = [] switch.turn_off() self.assertEqual(len(self.last_sent_command), 2) self.assertEqual(type(self.last_sent_command[0]), RPSMessage) self.assertEqual(self.last_sent_command[0].status, 0x30) - self.assertEqual(self.last_sent_command[0].data[0], 0x30) #off + self.assertEqual(self.last_sent_command[0].data[0], 0x50) #off self.assertEqual(self.last_sent_command[1].status, 0x30) - self.assertEqual(self.last_sent_command[1].data[0], 0x20) + self.assertEqual(self.last_sent_command[1].data[0], 0x40) self.last_sent_command = [] + def test_initial_loading_on(self): switch = self.create_switch('F6-02-01') switch._attr_is_on = None diff --git a/tests/test_switchable_light.py b/tests/test_switchable_light.py index 2db2e77..b080eaa 100644 --- a/tests/test_switchable_light.py +++ b/tests/test_switchable_light.py @@ -12,19 +12,17 @@ # EltakoEntity.send_message = mock.Mock(return_value=None) class TestSwitchableLight(unittest.TestCase): + last_sent_command = [] def mock_send_message(self, msg: ESP2Message): - self.last_sent_command = msg + self.last_sent_command.append( msg ) - def create_switchable_light(self) -> EltakoSwitchableLight: + def create_switchable_light(self, sender_eep_string:str = 'A5-38-08', sender_id:AddressExpression = AddressExpression.parse('00-00-B0-01')) -> EltakoSwitchableLight: gateway = GatewayMock() dev_id = AddressExpression.parse('00-00-00-01') dev_name = 'device name' eep_string = 'M5-38-08' - sender_id = AddressExpression.parse('00-00-B0-01') - sender_eep_string = 'A5-38-08' - dev_eep = EEP.find(eep_string) sender_eep = EEP.find(sender_eep_string) @@ -68,15 +66,121 @@ def test_switchable_light_value_changed(self): self.assertIsNone(light.state) + def test_switchable_light_value_changed_with_sender_epp_F6_02_01_left(self): + light = self.create_switchable_light('F6-02-01', AddressExpression.parse('00-00-B0-01 left')) + light.send_message = self.mock_send_message + light._on_state = False + + # status update message from relay + #8b 05 70 00 00 00 00 00 00 01 30 + # data = 0x30 + on_msg = RPSMessage(address=b'\x00\x00\x00\x01', status=b'\x30', data=b'\x30', outgoing=False) + # 8b 05 50 00 00 00 00 00 00 01 30 + # data = 0x10 + off_msg = RPSMessage(address=b'\x00\x00\x00\x01', status=b'\x30', data=b'\x10', outgoing=False) + + light.value_changed(on_msg) + self.assertEqual(light.is_on, True) + self.assertEqual(light.state, 'on') + + light.value_changed(on_msg) + self.assertEqual(light.is_on, True) + self.assertEqual(light.state, 'on') + + light.value_changed(off_msg) + self.assertEqual(light.is_on, False) + self.assertEqual(light.state, 'off') + + light.value_changed(off_msg) + self.assertEqual(light.is_on, False) + self.assertEqual(light.state, 'off') + + light.value_changed(on_msg) + self.assertEqual(light.is_on, True) + self.assertEqual(light.state, 'on') + + self.last_sent_command = [] + light.turn_on() + self.assertEqual(len(self.last_sent_command), 2) + self.assertEqual(type(self.last_sent_command[0]), RPSMessage) + self.assertEqual(self.last_sent_command[0].status, 0x30) + self.assertEqual(self.last_sent_command[0].data[0], 0x30) # on + self.assertEqual(self.last_sent_command[1].status, 0x30) + self.assertEqual(self.last_sent_command[1].data[0], 0x20) + + self.last_sent_command = [] + light.turn_off() + self.assertEqual(len(self.last_sent_command), 2) + self.assertEqual(type(self.last_sent_command[0]), RPSMessage) + self.assertEqual(self.last_sent_command[0].status, 0x30) + self.assertEqual(self.last_sent_command[0].data[0], 0x10) #off + self.assertEqual(self.last_sent_command[1].status, 0x30) + self.assertEqual(self.last_sent_command[1].data[0], 0x00) + self.last_sent_command = [] + + + def test_switchable_light_value_changed_with_sender_epp_F6_02_01_right(self): + light = self.create_switchable_light('F6-02-01', AddressExpression.parse('00-00-B0-01 right')) + light.send_message = self.mock_send_message + light._on_state = False + + # status update message from relay + #8b 05 70 00 00 00 00 00 00 01 30 + # data = 0x70 + on_msg = RPSMessage(address=b'\x00\x00\x00\x01', status=b'\x30', data=b'\x70', outgoing=False) + # 8b 05 50 00 00 00 00 00 00 01 30 + # data = 0x50 + off_msg = RPSMessage(address=b'\x00\x00\x00\x01', status=b'\x30', data=b'\x50', outgoing=False) + + light.value_changed(on_msg) + self.assertEqual(light.is_on, True) + self.assertEqual(light.state, 'on') + + light.value_changed(on_msg) + self.assertEqual(light.is_on, True) + self.assertEqual(light.state, 'on') + + light.value_changed(off_msg) + self.assertEqual(light.is_on, False) + self.assertEqual(light.state, 'off') + + light.value_changed(off_msg) + self.assertEqual(light.is_on, False) + self.assertEqual(light.state, 'off') + + light.value_changed(on_msg) + self.assertEqual(light.is_on, True) + self.assertEqual(light.state, 'on') + + self.last_sent_command = [] + light.turn_on() + self.assertEqual(len(self.last_sent_command), 2) + self.assertEqual(type(self.last_sent_command[0]), RPSMessage) + self.assertEqual(self.last_sent_command[0].status, 0x30) + self.assertEqual(self.last_sent_command[0].data[0], 0x70) # on + self.assertEqual(self.last_sent_command[1].status, 0x30) + self.assertEqual(self.last_sent_command[1].data[0], 0x60) + + self.last_sent_command = [] + light.turn_off() + self.assertEqual(len(self.last_sent_command), 2) + self.assertEqual(type(self.last_sent_command[0]), RPSMessage) + self.assertEqual(self.last_sent_command[0].status, 0x30) + self.assertEqual(self.last_sent_command[0].data[0], 0x50) #off + self.assertEqual(self.last_sent_command[1].status, 0x30) + self.assertEqual(self.last_sent_command[1].data[0], 0x40) + self.last_sent_command = [] + def test_switchable_light_trun_on(self): light = self.create_switchable_light() light.send_message = self.mock_send_message # test if command is sent to eltako bus + self.last_sent_command = [] light.turn_on() self.assertEqual( - self.last_sent_command.body, + self.last_sent_command[0].body, b'k\x07\x01\x00\x00\t\x00\x00\xb0\x01\x00') def test_switchable_light_trun_off(self): @@ -84,9 +188,10 @@ def test_switchable_light_trun_off(self): light.send_message = self.mock_send_message # test if command is sent to eltako bus + self.last_sent_command = [] light.turn_off() self.assertEqual( - self.last_sent_command.body, + self.last_sent_command[0].body, b'k\x07\x01\x00\x00\x08\x00\x00\xb0\x01\x00') def test_initial_loading_on(self):