casambi-bt-revamped 0.3.0.dev2__tar.gz → 0.3.2.dev1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. {casambi_bt_revamped-0.3.0.dev2/src/casambi_bt_revamped.egg-info → casambi_bt_revamped-0.3.2.dev1}/PKG-INFO +1 -1
  2. {casambi_bt_revamped-0.3.0.dev2 → casambi_bt_revamped-0.3.2.dev1}/setup.cfg +1 -1
  3. {casambi_bt_revamped-0.3.0.dev2 → casambi_bt_revamped-0.3.2.dev1}/src/CasambiBt/_client.py +16 -4
  4. {casambi_bt_revamped-0.3.0.dev2 → casambi_bt_revamped-0.3.2.dev1/src/casambi_bt_revamped.egg-info}/PKG-INFO +1 -1
  5. {casambi_bt_revamped-0.3.0.dev2 → casambi_bt_revamped-0.3.2.dev1}/LICENSE +0 -0
  6. {casambi_bt_revamped-0.3.0.dev2 → casambi_bt_revamped-0.3.2.dev1}/README.md +0 -0
  7. {casambi_bt_revamped-0.3.0.dev2 → casambi_bt_revamped-0.3.2.dev1}/pyproject.toml +0 -0
  8. {casambi_bt_revamped-0.3.0.dev2 → casambi_bt_revamped-0.3.2.dev1}/src/CasambiBt/__init__.py +0 -0
  9. {casambi_bt_revamped-0.3.0.dev2 → casambi_bt_revamped-0.3.2.dev1}/src/CasambiBt/_cache.py +0 -0
  10. {casambi_bt_revamped-0.3.0.dev2 → casambi_bt_revamped-0.3.2.dev1}/src/CasambiBt/_casambi.py +0 -0
  11. {casambi_bt_revamped-0.3.0.dev2 → casambi_bt_revamped-0.3.2.dev1}/src/CasambiBt/_constants.py +0 -0
  12. {casambi_bt_revamped-0.3.0.dev2 → casambi_bt_revamped-0.3.2.dev1}/src/CasambiBt/_discover.py +0 -0
  13. {casambi_bt_revamped-0.3.0.dev2 → casambi_bt_revamped-0.3.2.dev1}/src/CasambiBt/_encryption.py +0 -0
  14. {casambi_bt_revamped-0.3.0.dev2 → casambi_bt_revamped-0.3.2.dev1}/src/CasambiBt/_keystore.py +0 -0
  15. {casambi_bt_revamped-0.3.0.dev2 → casambi_bt_revamped-0.3.2.dev1}/src/CasambiBt/_network.py +0 -0
  16. {casambi_bt_revamped-0.3.0.dev2 → casambi_bt_revamped-0.3.2.dev1}/src/CasambiBt/_operation.py +0 -0
  17. {casambi_bt_revamped-0.3.0.dev2 → casambi_bt_revamped-0.3.2.dev1}/src/CasambiBt/_unit.py +0 -0
  18. {casambi_bt_revamped-0.3.0.dev2 → casambi_bt_revamped-0.3.2.dev1}/src/CasambiBt/errors.py +0 -0
  19. {casambi_bt_revamped-0.3.0.dev2 → casambi_bt_revamped-0.3.2.dev1}/src/CasambiBt/py.typed +0 -0
  20. {casambi_bt_revamped-0.3.0.dev2 → casambi_bt_revamped-0.3.2.dev1}/src/casambi_bt_revamped.egg-info/SOURCES.txt +0 -0
  21. {casambi_bt_revamped-0.3.0.dev2 → casambi_bt_revamped-0.3.2.dev1}/src/casambi_bt_revamped.egg-info/dependency_links.txt +0 -0
  22. {casambi_bt_revamped-0.3.0.dev2 → casambi_bt_revamped-0.3.2.dev1}/src/casambi_bt_revamped.egg-info/requires.txt +0 -0
  23. {casambi_bt_revamped-0.3.0.dev2 → casambi_bt_revamped-0.3.2.dev1}/src/casambi_bt_revamped.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: casambi-bt-revamped
3
- Version: 0.3.0.dev2
3
+ Version: 0.3.2.dev1
4
4
  Summary: Enhanced Casambi Bluetooth client library with switch event support
5
5
  Home-page: https://github.com/rankjie/casambi-bt
6
6
  Author: rankjie
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = casambi-bt-revamped
3
- version = 0.3.0.dev2
3
+ version = 0.3.2.dev1
4
4
  author = rankjie
5
5
  author_email = rankjie@gmail.com
6
6
  description = Enhanced Casambi Bluetooth client library with switch event support
@@ -414,6 +414,9 @@ class CasambiClient:
414
414
  ) -> None:
415
415
  # TODO: Check incoming counter and direction flag
416
416
  self._inPacketCount += 1
417
+
418
+ # Store raw encrypted packet for reference
419
+ raw_packet = data[:]
417
420
 
418
421
  try:
419
422
  data = self._encryptor.decryptAndVerify(data, data[:4] + self._nonce[4:])
@@ -428,7 +431,7 @@ class CasambiClient:
428
431
  if packetType == IncommingPacketType.UnitState:
429
432
  self._parseUnitStates(data[1:])
430
433
  elif packetType == IncommingPacketType.SwitchEvent:
431
- self._parseSwitchEvent(data[1:])
434
+ self._parseSwitchEvent(data[1:], self._inPacketCount, raw_packet)
432
435
  elif packetType == IncommingPacketType.NetworkConfig:
433
436
  # We don't care about the config the network thinks it has.
434
437
  # We assume that cloud config and local config match.
@@ -482,7 +485,7 @@ class CasambiClient:
482
485
  f"Ran out of data while parsing unit state! Remaining data {b2a(data[oldPos:])} in {b2a(data)}."
483
486
  )
484
487
 
485
- def _parseSwitchEvent(self, data: bytes) -> None:
488
+ def _parseSwitchEvent(self, data: bytes, packet_seq: int = None, raw_packet: bytes = None) -> None:
486
489
  """Parse switch event packet which contains multiple message types"""
487
490
  self._logger.info(f"Parsing incoming switch event packet... Data: {b2a(data)}")
488
491
 
@@ -513,7 +516,7 @@ class CasambiClient:
513
516
 
514
517
  # Process based on message type
515
518
  if message_type == 0x08 or message_type == 0x10: # Switch/button events
516
- self._processSwitchMessage(message_type, flags, parameter, payload, data, oldPos)
519
+ self._processSwitchMessage(message_type, flags, parameter, payload, data, oldPos, packet_seq, raw_packet)
517
520
  else:
518
521
  # Log other message types for now
519
522
  self._logger.debug(
@@ -529,7 +532,7 @@ class CasambiClient:
529
532
  f"Remaining data {b2a(data[oldPos:])} in {b2a(data)}."
530
533
  )
531
534
 
532
- def _processSwitchMessage(self, message_type: int, flags: int, button: int, payload: bytes, full_data: bytes, start_pos: int) -> None:
535
+ def _processSwitchMessage(self, message_type: int, flags: int, button: int, payload: bytes, full_data: bytes, start_pos: int, packet_seq: int = None, raw_packet: bytes = None) -> None:
533
536
  """Process a switch/button message (types 0x08 or 0x10)"""
534
537
  if not payload:
535
538
  self._logger.error("Switch message has empty payload")
@@ -563,6 +566,10 @@ class CasambiClient:
563
566
  event_string = "button_press"
564
567
  elif state_byte == 0x02:
565
568
  event_string = "button_release"
569
+ elif state_byte == 0x09:
570
+ event_string = "button_hold"
571
+ elif state_byte == 0x0c:
572
+ event_string = "button_release_after_hold"
566
573
  else:
567
574
  self._logger.warning(f"Unknown state byte: 0x{state_byte:02x}")
568
575
  else:
@@ -585,6 +592,11 @@ class CasambiClient:
585
592
  "event": event_string,
586
593
  "flags": flags,
587
594
  "extra_data": extra_data,
595
+ "packet_sequence": packet_seq,
596
+ "raw_packet": b2a(raw_packet) if raw_packet else None,
597
+ "decrypted_data": b2a(full_data),
598
+ "message_position": start_pos,
599
+ "payload_hex": b2a(payload),
588
600
  },
589
601
  )
590
602
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: casambi-bt-revamped
3
- Version: 0.3.0.dev2
3
+ Version: 0.3.2.dev1
4
4
  Summary: Enhanced Casambi Bluetooth client library with switch event support
5
5
  Home-page: https://github.com/rankjie/casambi-bt
6
6
  Author: rankjie