casambi-bt-revamped 0.3.7.dev12__tar.gz → 0.3.7.dev13__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.7.dev12/src/casambi_bt_revamped.egg-info → casambi_bt_revamped-0.3.7.dev13}/PKG-INFO +1 -1
  2. {casambi_bt_revamped-0.3.7.dev12 → casambi_bt_revamped-0.3.7.dev13}/setup.cfg +1 -1
  3. {casambi_bt_revamped-0.3.7.dev12 → casambi_bt_revamped-0.3.7.dev13}/src/CasambiBt/_casambi.py +13 -0
  4. {casambi_bt_revamped-0.3.7.dev12 → casambi_bt_revamped-0.3.7.dev13}/src/CasambiBt/_client.py +27 -17
  5. {casambi_bt_revamped-0.3.7.dev12 → casambi_bt_revamped-0.3.7.dev13/src/casambi_bt_revamped.egg-info}/PKG-INFO +1 -1
  6. {casambi_bt_revamped-0.3.7.dev12 → casambi_bt_revamped-0.3.7.dev13}/LICENSE +0 -0
  7. {casambi_bt_revamped-0.3.7.dev12 → casambi_bt_revamped-0.3.7.dev13}/README.md +0 -0
  8. {casambi_bt_revamped-0.3.7.dev12 → casambi_bt_revamped-0.3.7.dev13}/pyproject.toml +0 -0
  9. {casambi_bt_revamped-0.3.7.dev12 → casambi_bt_revamped-0.3.7.dev13}/src/CasambiBt/__init__.py +0 -0
  10. {casambi_bt_revamped-0.3.7.dev12 → casambi_bt_revamped-0.3.7.dev13}/src/CasambiBt/_cache.py +0 -0
  11. {casambi_bt_revamped-0.3.7.dev12 → casambi_bt_revamped-0.3.7.dev13}/src/CasambiBt/_constants.py +0 -0
  12. {casambi_bt_revamped-0.3.7.dev12 → casambi_bt_revamped-0.3.7.dev13}/src/CasambiBt/_discover.py +0 -0
  13. {casambi_bt_revamped-0.3.7.dev12 → casambi_bt_revamped-0.3.7.dev13}/src/CasambiBt/_encryption.py +0 -0
  14. {casambi_bt_revamped-0.3.7.dev12 → casambi_bt_revamped-0.3.7.dev13}/src/CasambiBt/_keystore.py +0 -0
  15. {casambi_bt_revamped-0.3.7.dev12 → casambi_bt_revamped-0.3.7.dev13}/src/CasambiBt/_network.py +0 -0
  16. {casambi_bt_revamped-0.3.7.dev12 → casambi_bt_revamped-0.3.7.dev13}/src/CasambiBt/_operation.py +0 -0
  17. {casambi_bt_revamped-0.3.7.dev12 → casambi_bt_revamped-0.3.7.dev13}/src/CasambiBt/_unit.py +0 -0
  18. {casambi_bt_revamped-0.3.7.dev12 → casambi_bt_revamped-0.3.7.dev13}/src/CasambiBt/errors.py +0 -0
  19. {casambi_bt_revamped-0.3.7.dev12 → casambi_bt_revamped-0.3.7.dev13}/src/CasambiBt/py.typed +0 -0
  20. {casambi_bt_revamped-0.3.7.dev12 → casambi_bt_revamped-0.3.7.dev13}/src/casambi_bt_revamped.egg-info/SOURCES.txt +0 -0
  21. {casambi_bt_revamped-0.3.7.dev12 → casambi_bt_revamped-0.3.7.dev13}/src/casambi_bt_revamped.egg-info/dependency_links.txt +0 -0
  22. {casambi_bt_revamped-0.3.7.dev12 → casambi_bt_revamped-0.3.7.dev13}/src/casambi_bt_revamped.egg-info/requires.txt +0 -0
  23. {casambi_bt_revamped-0.3.7.dev12 → casambi_bt_revamped-0.3.7.dev13}/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.7.dev12
3
+ Version: 0.3.7.dev13
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.7.dev12
3
+ version = 0.3.7.dev13
4
4
  author = rankjie
5
5
  author_email = rankjie@gmail.com
6
6
  description = Enhanced Casambi Bluetooth client library with switch event support
@@ -683,6 +683,19 @@ class Casambi:
683
683
  import json
684
684
  data = json.dumps(switch_config, separators=(",", ":")).encode("utf-8")
685
685
 
686
+ # Attempt to start a switch session before sending chunks. Some devices
687
+ # expect an AcquireSwitchSession (opcode 42) handshake prior to ExtPacketSend.
688
+ try:
689
+ await self.start_switch_session(unit_id)
690
+ self._logger.info("Started switch session (AcquireSwitchSession) for unit %s", unit_id)
691
+ except Exception as e:
692
+ # Non-fatal: proceed without session if device doesn't require it.
693
+ self._logger.info(
694
+ "AcquireSwitchSession not acknowledged or unsupported for unit %s (%s); proceeding with ExtPacketSend only.",
695
+ unit_id,
696
+ e,
697
+ )
698
+
686
699
  # Chunk into 61-byte pieces (ExtPacket payload allows 63 total minus 2-byte header)
687
700
  max_chunk = 61
688
701
  seq = 0
@@ -552,21 +552,32 @@ class CasambiClient:
552
552
  # Process based on message type
553
553
  if message_type == 0x08 or message_type == 0x10: # Switch/button events
554
554
  switch_events_found += 1
555
- # Extract button ID - try both upper and lower nibbles
556
- button_lower = parameter & 0x0F
557
- button_upper = (parameter >> 4) & 0x0F
558
-
559
- # Use upper 4 bits if lower 4 bits are 0, otherwise use lower 4 bits
560
- if button_lower == 0 and button_upper != 0:
561
- button = button_upper
555
+
556
+ # Button extraction differs between type 0x08 and type 0x10
557
+ if message_type == 0x08:
558
+ # For type 0x08, the lower nibble is a code that maps to physical button id
559
+ # Using formula: ((code + 2) % 4) + 1 based on reverse engineering findings
560
+ code_nibble = parameter & 0x0F
561
+ button = ((code_nibble + 2) % 4) + 1
562
562
  self._logger.debug(
563
- f"EVO button extraction: parameter=0x{parameter:02x}, using upper nibble, button={button}"
563
+ f"Type 0x08 button extraction: parameter=0x{parameter:02x}, code={code_nibble}, button={button}"
564
564
  )
565
565
  else:
566
- button = button_lower
567
- self._logger.debug(
568
- f"EVO button extraction: parameter=0x{parameter:02x}, using lower nibble, button={button}"
569
- )
566
+ # For type 0x10, use existing logic
567
+ button_lower = parameter & 0x0F
568
+ button_upper = (parameter >> 4) & 0x0F
569
+
570
+ # Use upper 4 bits if lower 4 bits are 0, otherwise use lower 4 bits
571
+ if button_lower == 0 and button_upper != 0:
572
+ button = button_upper
573
+ self._logger.debug(
574
+ f"Type 0x10 button extraction: parameter=0x{parameter:02x}, using upper nibble, button={button}"
575
+ )
576
+ else:
577
+ button = button_lower
578
+ self._logger.debug(
579
+ f"Type 0x10 button extraction: parameter=0x{parameter:02x}, using lower nibble, button={button}"
580
+ )
570
581
 
571
582
  # For type 0x10 messages, we need to pass additional data beyond the declared payload
572
583
  if message_type == 0x10:
@@ -705,13 +716,12 @@ class CasambiClient:
705
716
  f"action={action_display} ({event_string}), flags=0x{flags:02x}"
706
717
  )
707
718
 
708
- # Filter out all type 0x08 messages
719
+ # Log detailed info about type 0x08 messages (now processed, not filtered)
709
720
  if message_type == 0x08:
710
- self._logger.debug(
711
- f"Filtering out type 0x08 event: button={button}, unit_id={unit_id}, "
712
- f"action={action_display}, flags=0x{flags:02x}"
721
+ self._logger.info(
722
+ f"Type 0x08 event processed: button={button}, unit_id={unit_id}, "
723
+ f"action={action_display}, event={event_string}, flags=0x{flags:02x}"
713
724
  )
714
- return
715
725
 
716
726
  self._dataCallback(
717
727
  IncommingPacketType.SwitchEvent,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: casambi-bt-revamped
3
- Version: 0.3.7.dev12
3
+ Version: 0.3.7.dev13
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