casambi-bt-revamped 0.3.12.dev1__tar.gz → 0.3.12.dev2__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 (27) hide show
  1. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/PKG-INFO +1 -1
  2. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/setup.cfg +1 -1
  3. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_casambi.py +1 -1
  4. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_client.py +48 -40
  5. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_switch_events.py +27 -25
  6. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/casambi_bt_revamped.egg-info/PKG-INFO +1 -1
  7. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/LICENSE +0 -0
  8. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/README.md +0 -0
  9. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/pyproject.toml +0 -0
  10. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/__init__.py +0 -0
  11. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_cache.py +0 -0
  12. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_constants.py +0 -0
  13. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_discover.py +0 -0
  14. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_encryption.py +0 -0
  15. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_invocation.py +0 -0
  16. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_keystore.py +0 -0
  17. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_network.py +0 -0
  18. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_operation.py +0 -0
  19. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_unit.py +0 -0
  20. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/errors.py +0 -0
  21. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/py.typed +0 -0
  22. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/casambi_bt_revamped.egg-info/SOURCES.txt +0 -0
  23. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/casambi_bt_revamped.egg-info/dependency_links.txt +0 -0
  24. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/casambi_bt_revamped.egg-info/requires.txt +0 -0
  25. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/casambi_bt_revamped.egg-info/top_level.txt +0 -0
  26. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/tests/test_switch_event_logs.py +0 -0
  27. {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/tests/test_unit_state_logs.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: casambi-bt-revamped
3
- Version: 0.3.12.dev1
3
+ Version: 0.3.12.dev2
4
4
  Summary: Forked Casambi Bluetooth client library with switch event support, use original if no special need. https://github.com/lkempf/casambi-bt
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.12.dev1
3
+ version = 0.3.12.dev2
4
4
  author = rankjie
5
5
  author_email = rankjie@gmail.com
6
6
  description = Forked Casambi Bluetooth client library with switch event support, use original if no special need. https://github.com/lkempf/casambi-bt
@@ -400,7 +400,7 @@ class Casambi:
400
400
  def _dataCallback(
401
401
  self, packetType: IncommingPacketType, data: dict[str, Any]
402
402
  ) -> None:
403
- self._logger.info(f"Incomming data callback of type {packetType}")
403
+ self._logger.debug("Incomming data callback of type %s", packetType)
404
404
  if packetType == IncommingPacketType.UnitState:
405
405
  self._logger.debug(
406
406
  f"Handling changed state {b2a(data['state'])} for unit {data['id']}"
@@ -478,24 +478,28 @@ class CasambiClient:
478
478
  return
479
479
 
480
480
  packetType = decrypted_data[0]
481
- self._logger.debug(f"Incoming data of type {packetType}: {b2a(decrypted_data)}")
481
+ if self._logger.isEnabledFor(logging.DEBUG):
482
+ self._logger.debug(
483
+ "Incoming data of type %d: %s", packetType, b2a(decrypted_data)
484
+ )
482
485
 
483
486
  if packetType == IncommingPacketType.UnitState:
484
487
  self._parseUnitStates(decrypted_data[1:])
485
488
  elif packetType == IncommingPacketType.SwitchEvent:
486
489
  # Stable logs for offline analysis: packet seq + encrypted + decrypted.
487
490
  # (Decrypted data includes the leading packet type byte.)
488
- self._logger.info(
489
- "[CASAMBI_RAW_PACKET] Encrypted #%s: %s",
490
- device_sequence,
491
- b2a(raw_encrypted_packet),
492
- )
493
- self._logger.info(
494
- "[CASAMBI_DECRYPTED] Type=%d #%s: %s",
495
- packetType,
496
- device_sequence,
497
- b2a(decrypted_data),
498
- )
491
+ if self._logger.isEnabledFor(logging.DEBUG):
492
+ self._logger.debug(
493
+ "[CASAMBI_RAW_PACKET] Encrypted #%s: %s",
494
+ device_sequence,
495
+ b2a(raw_encrypted_packet),
496
+ )
497
+ self._logger.debug(
498
+ "[CASAMBI_DECRYPTED] Type=%d #%s: %s",
499
+ packetType,
500
+ device_sequence,
501
+ b2a(decrypted_data),
502
+ )
499
503
  # Pass the device sequence as the packet sequence for consumers,
500
504
  # and still include the raw encrypted packet for diagnostics.
501
505
  seq_for_consumer = device_sequence if device_sequence is not None else self._inPacketCount
@@ -509,13 +513,14 @@ class CasambiClient:
509
513
  # In the future we might want to parse the revision and issue a warning if there is a mismatch.
510
514
  pass
511
515
  else:
512
- self._logger.info(f"Packet type {packetType} not implemented. Ignoring!")
516
+ self._logger.debug("Packet type %d not implemented. Ignoring!", packetType)
513
517
 
514
518
  def _parseUnitStates(self, data: bytes) -> None:
515
519
  # Ground truth: casambi-android `v1.C1775b.V(Q2.h)` parses decrypted packet type=6
516
520
  # as a stream of unit state records. Records have optional bytes depending on flags.
517
- self._logger.info("Parsing incoming unit states...")
518
- self._logger.debug("Incoming unit state: %s", b2a(data))
521
+ self._logger.debug("Parsing incoming unit states...")
522
+ if self._logger.isEnabledFor(logging.DEBUG):
523
+ self._logger.debug("Incoming unit state: %s", b2a(data))
519
524
 
520
525
  pos = 0
521
526
  oldPos = 0
@@ -559,19 +564,20 @@ class CasambiClient:
559
564
  padding = data[pos : pos + padding_len] if padding_len else b""
560
565
  pos += padding_len
561
566
 
562
- self._logger.debug(
563
- "[CASAMBI_UNITSTATE_PARSED] unit=%d flags=0x%02x prio=%d online=%s on=%s con=%s sid=%s extra_byte=%d state=%s padding=%s",
564
- unit_id,
565
- flags,
566
- prio,
567
- online,
568
- on,
569
- con,
570
- sid,
571
- extra_byte,
572
- b2a(state),
573
- b2a(padding),
574
- )
567
+ if self._logger.isEnabledFor(logging.DEBUG):
568
+ self._logger.debug(
569
+ "[CASAMBI_UNITSTATE_PARSED] unit=%d flags=0x%02x prio=%d online=%s on=%s con=%s sid=%s extra_byte=%d state=%s padding=%s",
570
+ unit_id,
571
+ flags,
572
+ prio,
573
+ online,
574
+ on,
575
+ con,
576
+ sid,
577
+ extra_byte,
578
+ b2a(state),
579
+ b2a(padding),
580
+ )
575
581
 
576
582
  self._dataCallback(
577
583
  IncommingPacketType.UnitState,
@@ -609,17 +615,19 @@ class CasambiClient:
609
615
  as a stream of INVOCATION frames. Switch button events are INVOCATIONs.
610
616
  """
611
617
 
612
- self._logger.info(
613
- "Parsing incoming switch event packet #%s... Data: %s",
614
- packet_seq,
615
- b2a(data),
616
- )
617
- self._logger.info(
618
- "[CASAMBI_SWITCH_PACKET] Full data #%s: hex=%s len=%d",
619
- packet_seq,
620
- b2a(data),
621
- len(data),
622
- )
618
+ if self._logger.isEnabledFor(logging.DEBUG):
619
+ data_hex = b2a(data)
620
+ self._logger.debug(
621
+ "Parsing incoming switch event packet #%s... Data: %s",
622
+ packet_seq,
623
+ data_hex,
624
+ )
625
+ self._logger.debug(
626
+ "[CASAMBI_SWITCH_PACKET] Full data #%s: hex=%s len=%d",
627
+ packet_seq,
628
+ data_hex,
629
+ len(data),
630
+ )
623
631
 
624
632
  events, stats = self._switchDecoder.decode(
625
633
  data,
@@ -628,7 +636,7 @@ class CasambiClient:
628
636
  arrival_sequence=self._inPacketCount,
629
637
  )
630
638
 
631
- self._logger.info(
639
+ self._logger.debug(
632
640
  "[CASAMBI_SWITCH_SUMMARY] packet=%s frames=%d button_frames=%d input_frames=%d ignored=%d emitted=%d suppressed_same_state=%d",
633
641
  packet_seq,
634
642
  stats.frames_total,
@@ -147,18 +147,19 @@ class SwitchEventStreamDecoder:
147
147
  # Stable identifier for consumers to deduplicate further if needed.
148
148
  event_id = f"invoke:{frame.origin:04x}:{frame.age:04x}:{frame.opcode:02x}:{frame.target:04x}"
149
149
 
150
- self._logger.info(
151
- "[CASAMBI_BUTTON_EVENT] packet=%s unit=%d button=%d event=%s opcode=0x%02x origin=0x%04x age=0x%04x flags=0x%04x payload=%s",
152
- packet_seq,
153
- unit_id,
154
- button,
155
- event,
156
- frame.opcode,
157
- frame.origin,
158
- frame.age,
159
- frame.flags,
160
- b2a(frame.payload),
161
- )
150
+ if self._logger.isEnabledFor(logging.DEBUG):
151
+ self._logger.debug(
152
+ "[CASAMBI_BUTTON_EVENT] packet=%s unit=%d button=%d event=%s opcode=0x%02x origin=0x%04x age=0x%04x flags=0x%04x payload=%s",
153
+ packet_seq,
154
+ unit_id,
155
+ button,
156
+ event,
157
+ frame.opcode,
158
+ frame.origin,
159
+ frame.age,
160
+ frame.flags,
161
+ b2a(frame.payload),
162
+ )
162
163
 
163
164
  return {
164
165
  # Back-compat / existing consumers
@@ -252,19 +253,20 @@ class SwitchEventStreamDecoder:
252
253
  return None
253
254
  self._last_input_code[state_key] = input_code
254
255
 
255
- self._logger.info(
256
- "[CASAMBI_INPUT_AS_BUTTON] packet=%s unit=%d button=%d event=%s code=0x%02x opcode=0x%02x origin=0x%04x age=0x%04x flags=0x%04x payload=%s",
257
- packet_seq,
258
- unit_id,
259
- button,
260
- mapped_event,
261
- input_code,
262
- frame.opcode,
263
- frame.origin,
264
- frame.age,
265
- frame.flags,
266
- b2a(frame.payload),
267
- )
256
+ if self._logger.isEnabledFor(logging.DEBUG):
257
+ self._logger.debug(
258
+ "[CASAMBI_INPUT_AS_BUTTON] packet=%s unit=%d button=%d event=%s code=0x%02x opcode=0x%02x origin=0x%04x age=0x%04x flags=0x%04x payload=%s",
259
+ packet_seq,
260
+ unit_id,
261
+ button,
262
+ mapped_event,
263
+ input_code,
264
+ frame.opcode,
265
+ frame.origin,
266
+ frame.age,
267
+ frame.flags,
268
+ b2a(frame.payload),
269
+ )
268
270
  event = mapped_event or "input_event"
269
271
  self._logger.debug(
270
272
  "[CASAMBI_INPUT_EVENT] packet=%s unit=%d input=%d opcode=0x%02x origin=0x%04x age=0x%04x flags=0x%04x code=%s ch=%s val=%s payload=%s",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: casambi-bt-revamped
3
- Version: 0.3.12.dev1
3
+ Version: 0.3.12.dev2
4
4
  Summary: Forked Casambi Bluetooth client library with switch event support, use original if no special need. https://github.com/lkempf/casambi-bt
5
5
  Home-page: https://github.com/rankjie/casambi-bt
6
6
  Author: rankjie