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.
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/PKG-INFO +1 -1
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/setup.cfg +1 -1
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_casambi.py +1 -1
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_client.py +48 -40
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_switch_events.py +27 -25
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/casambi_bt_revamped.egg-info/PKG-INFO +1 -1
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/LICENSE +0 -0
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/README.md +0 -0
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/pyproject.toml +0 -0
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/__init__.py +0 -0
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_cache.py +0 -0
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_constants.py +0 -0
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_discover.py +0 -0
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_encryption.py +0 -0
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_invocation.py +0 -0
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_keystore.py +0 -0
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_network.py +0 -0
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_operation.py +0 -0
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_unit.py +0 -0
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/errors.py +0 -0
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/py.typed +0 -0
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/casambi_bt_revamped.egg-info/SOURCES.txt +0 -0
- {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
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/casambi_bt_revamped.egg-info/requires.txt +0 -0
- {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
- {casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/tests/test_switch_event_logs.py +0 -0
- {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.
|
|
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.
|
|
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
|
{casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_casambi.py
RENAMED
|
@@ -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.
|
|
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']}"
|
{casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_client.py
RENAMED
|
@@ -478,24 +478,28 @@ class CasambiClient:
|
|
|
478
478
|
return
|
|
479
479
|
|
|
480
480
|
packetType = decrypted_data[0]
|
|
481
|
-
self._logger.
|
|
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.
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
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.
|
|
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.
|
|
518
|
-
self._logger.
|
|
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.
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
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.
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
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.
|
|
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,
|
{casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_switch_events.py
RENAMED
|
@@ -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.
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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.
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_constants.py
RENAMED
|
File without changes
|
{casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_discover.py
RENAMED
|
File without changes
|
{casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_encryption.py
RENAMED
|
File without changes
|
{casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_invocation.py
RENAMED
|
File without changes
|
{casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_keystore.py
RENAMED
|
File without changes
|
{casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_network.py
RENAMED
|
File without changes
|
{casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/src/CasambiBt/_operation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/tests/test_switch_event_logs.py
RENAMED
|
File without changes
|
{casambi_bt_revamped-0.3.12.dev1 → casambi_bt_revamped-0.3.12.dev2}/tests/test_unit_state_logs.py
RENAMED
|
File without changes
|