def test_parse_request_status(self): data = b"A83300150026A3" msg = messages.parse(data) self.assertIsInstance(msg, messages.RequestStatusMessage) self.assertEqual(msg.data, data.decode("ascii")) self.assertEqual(msg.destination, "33") self.assertEqual(msg.source, "00")
def test_parse_turn_off_state(self): data = b"A8B833120198A3" msg = messages.parse(data) self.assertIsInstance(msg, messages.StateMessage) self.assertEqual(msg.data, data.decode("ascii")) self.assertEqual(msg.status, "off") self.assertEqual(msg.source, "33")
def test_parse_turn_off_command(self): data = b"A83300120121A3" msg = messages.parse(data) self.assertIsInstance(msg, messages.CommandMessage) self.assertEqual(msg.data, data.decode("ascii")) self.assertEqual(msg.status, "off") self.assertEqual(msg.destination, "33") self.assertEqual(msg.source, "00")
def execute(self, connection): connection.serial.write(b"@r") length = int(connection.serial.read(), 16) if length == 0: return data = connection.serial.read(length * 2) message = parse(data) # Filter duplicated state messages. The filtering feature # of SCSGate is buggy and causes @r to always return 0 available # messages if isinstance(message, StateMessage): if self._last_raw_state_message == data: return else: self._last_raw_state_message = data self._notification_endpoint(message)
def start(self): """ Monitor the bus for events and handle them """ print("Entering monitoring mode, press CTRL-C to quit") serial = self._connection.serial while True: serial.write(b"@R") length = int(serial.read(), 16) data = serial.read(length * 2) message = messages.parse(data) if not (self._options.filter and message.entity and message.entity in self._devices): logging.debug(" ".join(message.bytes)) if not self._options.config or \ message.entity is None or \ message.entity in self._devices: continue print("New device found") ha_id = input("Enter home assistant unique ID: ") name = input("Enter name: ") self._add_device(scs_id=message.entity, ha_id=ha_id, name=name)
def test_parse_unknown_long_message(self): data = b"A8330015000026A3" msg = messages.parse(data) self.assertIsInstance(msg, messages.UnknownMessage) self.assertEqual(msg.data, data.decode("ascii")) self.assertIsNone(msg.entity)
def test_parse_ack(self): data = b"A5" msg = messages.parse(data) self.assertIsInstance(msg, messages.AckMessage) self.assertIsNone(msg.entity)