aiobmsble 0.3.0__py3-none-any.whl → 0.4.1__py3-none-any.whl

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 (36) hide show
  1. aiobmsble/__main__.py +1 -1
  2. aiobmsble/basebms.py +2 -2
  3. aiobmsble/test_data/__init__.py +102 -0
  4. aiobmsble/test_data/abc_bms.json +34 -0
  5. aiobmsble/test_data/ant_bms.json +18 -0
  6. aiobmsble/test_data/ant_leg_bms.json +19 -0
  7. aiobmsble/test_data/braunpwr_bms.json +34 -0
  8. aiobmsble/test_data/cbtpwr_bms.json +90 -0
  9. aiobmsble/test_data/cbtpwr_vb_bms.json +20 -0
  10. aiobmsble/test_data/daly_bms.json +100 -0
  11. aiobmsble/test_data/dpwrcore_bms.json +18 -0
  12. aiobmsble/test_data/ecoworthy_bms.json +100 -0
  13. aiobmsble/test_data/ective_bms.json +104 -0
  14. aiobmsble/test_data/ej_bms.json +107 -0
  15. aiobmsble/test_data/felicity_bms.json +24 -0
  16. aiobmsble/test_data/ignore.json +48 -0
  17. aiobmsble/test_data/jbd_bms.json +440 -0
  18. aiobmsble/test_data/jikong_bms.json +54 -0
  19. aiobmsble/test_data/neey_bms.json +65 -0
  20. aiobmsble/test_data/ogt_bms.json +16 -0
  21. aiobmsble/test_data/pro_bms.json +15 -0
  22. aiobmsble/test_data/redodo_bms.json +151 -0
  23. aiobmsble/test_data/renogy_bms.json +19 -0
  24. aiobmsble/test_data/renogy_pro_bms.json +16 -0
  25. aiobmsble/test_data/roypow_bms.json +54 -0
  26. aiobmsble/test_data/seplos_bms.json +96 -0
  27. aiobmsble/test_data/seplos_v2_bms.json +41 -0
  28. aiobmsble/test_data/tdt_bms.json +14 -0
  29. aiobmsble/test_data/tianpwr_bms.json +13 -0
  30. {aiobmsble-0.3.0.dist-info → aiobmsble-0.4.1.dist-info}/METADATA +48 -9
  31. aiobmsble-0.4.1.dist-info/RECORD +64 -0
  32. aiobmsble-0.3.0.dist-info/RECORD +0 -37
  33. {aiobmsble-0.3.0.dist-info → aiobmsble-0.4.1.dist-info}/WHEEL +0 -0
  34. {aiobmsble-0.3.0.dist-info → aiobmsble-0.4.1.dist-info}/entry_points.txt +0 -0
  35. {aiobmsble-0.3.0.dist-info → aiobmsble-0.4.1.dist-info}/licenses/LICENSE +0 -0
  36. {aiobmsble-0.3.0.dist-info → aiobmsble-0.4.1.dist-info}/top_level.txt +0 -0
aiobmsble/__main__.py CHANGED
@@ -31,7 +31,7 @@ async def scan_devices() -> dict[str, tuple[BLEDevice, AdvertisementData]]:
31
31
  scan_result: dict[str, tuple[BLEDevice, AdvertisementData]] = (
32
32
  await BleakScanner.discover(return_adv=True)
33
33
  )
34
- logger.info(scan_result)
34
+ logger.debug(scan_result)
35
35
  logger.info("%i BT devices in range.", len(scan_result))
36
36
  return scan_result
37
37
 
aiobmsble/basebms.py CHANGED
@@ -379,8 +379,8 @@ class BaseBMS(ABC):
379
379
  if reset:
380
380
  self._inv_wr_mode = None # reset write mode
381
381
  await self._client.disconnect()
382
- except BleakError:
383
- self._log.warning("disconnect failed!")
382
+ except (BleakError, TimeoutError) as exc:
383
+ self._log.error("disconnect failed! (%s)", type(exc).__name__)
384
384
 
385
385
  async def _wait_event(self) -> None:
386
386
  """Wait for data event and clear it."""
@@ -0,0 +1,102 @@
1
+ """Test advertisements for aiobmsble package."""
2
+
3
+ from importlib import resources
4
+ import json
5
+ from typing import Any
6
+
7
+ from bleak.backends.scanner import AdvertisementData
8
+
9
+ from tests.bluetooth import generate_advertisement_data
10
+
11
+ type BmsAdvList = list[tuple[AdvertisementData, str, list[str]]]
12
+
13
+
14
+ def _json_dict_to_advdata(json_dict: dict[str, Any]) -> AdvertisementData:
15
+ """Generate an AdvertisementData instance from a JSON dictionary."""
16
+
17
+ if "manufacturer_data" in json_dict:
18
+ json_dict["manufacturer_data"] = {
19
+ int(k): bytes.fromhex(v) for k, v in json_dict["manufacturer_data"].items()
20
+ }
21
+ if "service_data" in json_dict:
22
+ json_dict["service_data"] = {
23
+ k: bytes.fromhex(v) for k, v in json_dict["service_data"].items()
24
+ }
25
+ if "platform_data" in json_dict:
26
+ json_dict["platform_data"] = tuple(json_dict.get("platform_data", []))
27
+
28
+ return generate_advertisement_data(**json_dict)
29
+
30
+
31
+ def bms_advertisements() -> BmsAdvList:
32
+ """Provide all available BMS advertisements from test data directory.
33
+
34
+ Load all *_bms.json files from the packaged test data directory.
35
+
36
+ Returns:
37
+ BmsAdvList: List of tuples containing advertisement, bms type,
38
+ and a list of comments, i.e. list[tuple[AdvertisementData, str, list[str]]]
39
+
40
+ """
41
+ all_data: BmsAdvList = []
42
+
43
+ for resource in resources.files(__package__).iterdir():
44
+ if resource.name.endswith("_bms.json"):
45
+ with resource.open("r", encoding="UTF-8") as f:
46
+ raw_data: Any = json.load(f)
47
+ assert isinstance(raw_data, list)
48
+
49
+ for entry in raw_data:
50
+ assert isinstance(entry, dict)
51
+ assert {"advertisement", "type"}.issubset(set(entry.keys()))
52
+ adv: AdvertisementData = _json_dict_to_advdata(
53
+ entry["advertisement"]
54
+ )
55
+ bms_type: str = entry["type"]
56
+ comments: list[str] = entry["_comments"]
57
+
58
+ assert isinstance(adv, AdvertisementData)
59
+ assert isinstance(bms_type, str)
60
+ assert isinstance(comments, list)
61
+ assert all(isinstance(c, str) for c in comments)
62
+ assert resource.name == f"{bms_type}.json"
63
+
64
+ all_data.append((adv, bms_type, comments))
65
+ return all_data
66
+
67
+
68
+ def ignore_advertisements() -> BmsAdvList:
69
+ """Provide a list of advertisements that shall not be identified as a valid BMS.
70
+
71
+ Load ignore.json files from the packaged test data directory.
72
+
73
+ Returns:
74
+ BmsAdvList: List of tuples containing advertisement, reason why not to detect,
75
+ and a list of comments, i.e. list[tuple[AdvertisementData, str, list[str]]]
76
+
77
+ """
78
+ data: BmsAdvList = []
79
+
80
+ with (
81
+ resources.files(__package__)
82
+ .joinpath("ignore.json")
83
+ .open("r", encoding="UTF-8") as f
84
+ ):
85
+ raw_data: Any = json.load(f)
86
+ assert isinstance(raw_data, list)
87
+
88
+ for entry in raw_data:
89
+ assert isinstance(entry, dict)
90
+ assert {"advertisement", "reason"}.issubset(set(entry.keys()))
91
+ adv: AdvertisementData = _json_dict_to_advdata(entry["advertisement"])
92
+ reason: str = entry["reason"]
93
+ comments: list[str] = entry["_comments"]
94
+
95
+ assert isinstance(adv, AdvertisementData)
96
+ assert isinstance(reason, str)
97
+ assert isinstance(comments, list)
98
+ assert all(isinstance(c, str) for c in comments)
99
+
100
+ data.append((adv, reason, comments))
101
+
102
+ return data
@@ -0,0 +1,34 @@
1
+ [
2
+ {
3
+ "advertisement": {
4
+ "local_name": "SOK-24V1127",
5
+ "service_uuids": [
6
+ "0000fff0-0000-1000-8000-00805f9b34fb"
7
+ ],
8
+ "rssi": -94
9
+ },
10
+ "type": "abc_bms",
11
+ "_comments": [
12
+ "source pcap (https://github.com/patman15/BMS_BLE-HA/issues/168)"
13
+ ]
14
+ },
15
+ {
16
+ "advertisement": {
17
+ "local_name": "SOK-AA02120",
18
+ "service_uuids": [
19
+ "00001800-0000-1000-8000-00805f9b34fb",
20
+ "00001801-0000-1000-8000-00805f9b34fb",
21
+ "0000180a-0000-1000-8000-00805f9b34fb",
22
+ "0000180f-0000-1000-8000-00805f9b34fb",
23
+ "0000ffe0-0000-1000-8000-00805f9b34fb",
24
+ "0000fff0-0000-1000-8000-00805f9b34fb",
25
+ "f000ffc0-0451-4000-b000-000000000000"
26
+ ],
27
+ "rssi": -62
28
+ },
29
+ "type": "abc_bms",
30
+ "_comments": [
31
+ "source log (https://github.com/patman15/BMS_BLE-HA/issues/394)"
32
+ ]
33
+ }
34
+ ]
@@ -0,0 +1,18 @@
1
+ [
2
+ {
3
+ "advertisement": {
4
+ "local_name": "ANT-BLE24C-001",
5
+ "manufacturer_data": {
6
+ "8979": "88a0aabbcc900001"
7
+ },
8
+ "service_uuids": [
9
+ "0000ffe0-0000-1000-8000-00805f9b34fb"
10
+ ],
11
+ "rssi": -70
12
+ },
13
+ "type": "ant_bms",
14
+ "_comments": [
15
+ "source advmon (https://github.com/patman15/BMS_BLE-HA/issues/366)"
16
+ ]
17
+ }
18
+ ]
@@ -0,0 +1,19 @@
1
+ [
2
+ {
3
+ "advertisement": {
4
+ "local_name": "ANT-BLE16S",
5
+ "manufacturer_data": {
6
+ "1623": "88a0aabbcca12345"
7
+ },
8
+ "service_uuids": [
9
+ "0000ffe0-0000-1000-8000-00805f9b34fb",
10
+ "0000fee7-0000-1000-8000-00805f9b34fb"
11
+ ],
12
+ "rssi": -31
13
+ },
14
+ "type": "ant_leg_bms",
15
+ "_comments": [
16
+ "source HA Bluetooth"
17
+ ]
18
+ }
19
+ ]
@@ -0,0 +1,34 @@
1
+ [
2
+ {
3
+ "advertisement": {
4
+ "local_name": "HSKS-25A-118",
5
+ "manufacturer_data": {
6
+ "123": "02ffff7b"
7
+ },
8
+ "service_uuids": [
9
+ "0000ff00-0000-1000-8000-00805f9b34fb"
10
+ ],
11
+ "rssi": -70
12
+ },
13
+ "type": "braunpwr_bms",
14
+ "_comments": [
15
+ "source pcap (https://github.com/patman15/BMS_BLE-HA/issues/303)"
16
+ ]
17
+ },
18
+ {
19
+ "advertisement": {
20
+ "local_name": "BL-25F-170-118",
21
+ "manufacturer_data": {
22
+ "123": "02ffff7d"
23
+ },
24
+ "service_uuids": [
25
+ "0000ff00-0000-1000-8000-00805f9b34fb"
26
+ ],
27
+ "rssi": -76
28
+ },
29
+ "type": "braunpwr_bms",
30
+ "_comments": [
31
+ "source LOG (https://github.com/patman15/BMS_BLE-HA/issues/303)"
32
+ ]
33
+ }
34
+ ]
@@ -0,0 +1,90 @@
1
+ [
2
+ {
3
+ "advertisement": {
4
+ "local_name": "170R000121",
5
+ "manufacturer_data": {
6
+ "21330": "2134ba03ec110cb4010500010000"
7
+ },
8
+ "service_uuids": [
9
+ "00001800-0000-1000-8000-00805f9b34fb",
10
+ "00001801-0000-1000-8000-00805f9b34fb",
11
+ "0000180a-0000-1000-8000-00805f9b34fb",
12
+ "0000fd00-0000-1000-8000-00805f9b34fb",
13
+ "0000ff90-0000-1000-8000-00805f9b34fb",
14
+ "0000ffb0-0000-1000-8000-00805f9b34fb",
15
+ "0000ffc0-0000-1000-8000-00805f9b34fb",
16
+ "0000ffd0-0000-1000-8000-00805f9b34fb",
17
+ "0000ffe0-0000-1000-8000-00805f9b34fb",
18
+ "0000ffe5-0000-1000-8000-00805f9b34fb",
19
+ "0000fff0-0000-1000-8000-00805f9b34fb"
20
+ ],
21
+ "tx_power": 0,
22
+ "rssi": -75
23
+ },
24
+ "type": "cbtpwr_bms",
25
+ "_comments": [
26
+ "source LOG, https://github.com/patman15/BMS_BLE-HA/issues/59"
27
+ ]
28
+ },
29
+ {
30
+ "advertisement": {
31
+ "local_name": "170R000086",
32
+ "manufacturer_data": {
33
+ "21330": "2134ba03ec110cf8010500010000"
34
+ },
35
+ "service_uuids": [
36
+ "00001800-0000-1000-8000-00805f9b34fb",
37
+ "00001801-0000-1000-8000-00805f9b34fb",
38
+ "0000180a-0000-1000-8000-00805f9b34fb",
39
+ "0000fd00-0000-1000-8000-00805f9b34fb",
40
+ "0000ff90-0000-1000-8000-00805f9b34fb",
41
+ "0000ffb0-0000-1000-8000-00805f9b34fb",
42
+ "0000ffc0-0000-1000-8000-00805f9b34fb",
43
+ "0000ffd0-0000-1000-8000-00805f9b34fb",
44
+ "0000ffe0-0000-1000-8000-00805f9b34fb",
45
+ "0000ffe5-0000-1000-8000-00805f9b34fb",
46
+ "0000fff0-0000-1000-8000-00805f9b34fb"
47
+ ],
48
+ "tx_power": 0,
49
+ "rssi": -73
50
+ },
51
+ "type": "cbtpwr_bms",
52
+ "_comments": [
53
+ "source LOG"
54
+ ]
55
+ },
56
+ {
57
+ "advertisement": {
58
+ "local_name": "140R000288",
59
+ "manufacturer_data": {
60
+ "0": "ffffffff6400ff000000000000000000"
61
+ },
62
+ "service_uuids": [
63
+ "0000fff0-0000-1000-8000-00805f9b34fb"
64
+ ],
65
+ "rssi": -82
66
+ },
67
+ "type": "cbtpwr_bms",
68
+ "_comments": [
69
+ "source BT monitor (https://github.com/patman15/BMS_BLE-HA/issues/176)"
70
+ ]
71
+ },
72
+ {
73
+ "advertisement": {
74
+ "local_name": "100R0002E3",
75
+ "manufacturer_data": {
76
+ "21330": "2134ba03ec110909010500010000"
77
+ },
78
+ "service_uuids": [
79
+ "000003c1-0000-1000-8000-00805f9b34fb"
80
+ ],
81
+ "tx_power": 0,
82
+ "rssi": -76
83
+ },
84
+ "type": "cbtpwr_bms",
85
+ "_comments": [
86
+ "source advmon (https://github.com/patman15/BMS_BLE-HA/issues/197)",
87
+ "Creabest"
88
+ ]
89
+ }
90
+ ]
@@ -0,0 +1,20 @@
1
+ [
2
+ {
3
+ "advertisement": {
4
+ "local_name": "VB024000390",
5
+ "manufacturer_data": {
6
+ "16963": "545e0211f82e0ca88942"
7
+ },
8
+ "service_uuids": [
9
+ "0000fff0-0000-1000-8000-00805f9b34fb",
10
+ "0000ffb0-0000-1000-8000-00805f9b34fb"
11
+ ],
12
+ "rssi": -73
13
+ },
14
+ "type": "cbtpwr_vb_bms",
15
+ "_comments": [
16
+ "source advmon (https://github.com/patman15/BMS_BLE-HA/issues/240)",
17
+ "Creabest"
18
+ ]
19
+ }
20
+ ]
@@ -0,0 +1,100 @@
1
+ [
2
+ {
3
+ "advertisement": {
4
+ "local_name": "DL-46640102XXXX",
5
+ "manufacturer_data": {
6
+ "25670": "010209ac"
7
+ },
8
+ "service_uuids": [
9
+ "0000fff0-0000-1000-8000-00805f9b34fb"
10
+ ],
11
+ "rssi": -58
12
+ },
13
+ "type": "daly_bms",
14
+ "_comments": [
15
+ "source LOG (https://github.com/patman15/BMS_BLE-HA/issues/89)"
16
+ ]
17
+ },
18
+ {
19
+ "advertisement": {
20
+ "local_name": "DL-401710015C9B",
21
+ "manufacturer_data": {
22
+ "770": "16401710015c9b444c"
23
+ },
24
+ "rssi": -36
25
+ },
26
+ "type": "daly_bms",
27
+ "_comments": [
28
+ "source LOG, proxy (https://github.com/patman15/BMS_BLE-HA/issues/160)"
29
+ ]
30
+ },
31
+ {
32
+ "advertisement": {
33
+ "local_name": "JHB-501812XXXXXX",
34
+ "manufacturer_data": {
35
+ "260": "0150181201a3b34a4842"
36
+ },
37
+ "rssi": -46
38
+ },
39
+ "type": "daly_bms",
40
+ "_comments": [
41
+ "source BTctl (https://github.com/patman15/BMS_BLE-HA/issues/145)"
42
+ ]
43
+ },
44
+ {
45
+ "advertisement": {
46
+ "local_name": "Randomname",
47
+ "manufacturer_data": {
48
+ "260": "0150181201a4944a4842"
49
+ },
50
+ "rssi": -36
51
+ },
52
+ "type": "daly_bms",
53
+ "_comments": [
54
+ "source LOG (https://github.com/patman15/BMS_BLE-HA/issues/160#issuecomment-2629318416)",
55
+ "JHB-50181201A494"
56
+ ]
57
+ },
58
+ {
59
+ "advertisement": {
60
+ "local_name": "BT270-2",
61
+ "manufacturer_data": {
62
+ "770": "16401712011197444c"
63
+ },
64
+ "rssi": -60
65
+ },
66
+ "type": "daly_bms",
67
+ "_comments": [
68
+ "source BTctl (https://github.com/patman15/BMS_BLE-HA/issues/174#issuecomment-2637936795)"
69
+ ]
70
+ },
71
+ {
72
+ "advertisement": {
73
+ "local_name": "DL-40160901534C",
74
+ "manufacturer_data": {
75
+ "258": "04"
76
+ },
77
+ "rssi": -87
78
+ },
79
+ "type": "daly_bms",
80
+ "_comments": [
81
+ "source advmon (https://github.com/patman15/BMS_BLE-HA/issues/204)",
82
+ "16S LiFePo 250A BMS"
83
+ ]
84
+ },
85
+ {
86
+ "advertisement": {
87
+ "local_name": "DL-FB4C2E0000000",
88
+ "manufacturer_data": {
89
+ "771": "00b4c2e0000000444c00"
90
+ },
91
+ "rssi": -81
92
+ },
93
+ "type": "daly_bms",
94
+ "_comments": [
95
+ "proxy LOG (https://github.com/patman15/BMS_BLE-HA/issues/85)",
96
+ "Bulltron battery",
97
+ "MAC address (Bouffalo Lab)"
98
+ ]
99
+ }
100
+ ]
@@ -0,0 +1,18 @@
1
+ [
2
+ {
3
+ "advertisement": {
4
+ "local_name": "TBA-13500277",
5
+ "service_uuids": [
6
+ "00001800-0000-1000-8000-00805f9b34fb",
7
+ "00001801-0000-1000-8000-00805f9b34fb",
8
+ "0000180a-0000-1000-8000-00805f9b34fb",
9
+ "0000fff0-0000-1000-8000-00805f9b34fb"
10
+ ],
11
+ "rssi": -72
12
+ },
13
+ "type": "dpwrcore_bms",
14
+ "_comments": [
15
+ "source BTctl (https://github.com/patman15/BMS_BLE-HA/issues/52#issuecomment-2390048120)"
16
+ ]
17
+ }
18
+ ]
@@ -0,0 +1,100 @@
1
+ [
2
+ {
3
+ "advertisement": {
4
+ "local_name": "ECO-WORTHY 02_B8EF",
5
+ "manufacturer_data": {
6
+ "49844": "e0fab8f0"
7
+ },
8
+ "service_uuids": [
9
+ "00001800-0000-1000-8000-00805f9b34fb",
10
+ "00001801-0000-1000-8000-00805f9b34fb",
11
+ "0000fff0-0000-1000-8000-00805f9b34fb"
12
+ ],
13
+ "rssi": -50
14
+ },
15
+ "type": "ecoworthy_bms",
16
+ "_comments": [
17
+ "source LOG, proxy (https://github.com/patman15/BMS_BLE-HA/issues/164#issue-2825586172)",
18
+ "MAC address, correct, public"
19
+ ]
20
+ },
21
+ {
22
+ "advertisement": {
23
+ "local_name": "ECO-WORTHY 02_50DB",
24
+ "manufacturer_data": {
25
+ "47912": "ed0050dc"
26
+ },
27
+ "rssi": -49
28
+ },
29
+ "type": "ecoworthy_bms",
30
+ "_comments": [
31
+ "source BTctl (https://github.com/patman15/BMS_BLE-HA/issues/253)",
32
+ "MAC address, correct, public"
33
+ ]
34
+ },
35
+ {
36
+ "advertisement": {
37
+ "local_name": "ECO-WORTHY 0B_5AD4",
38
+ "manufacturer_data": {
39
+ "57570": "5a783c31"
40
+ },
41
+ "service_uuids": [
42
+ "0000fff0-0000-1000-8000-00805f9b34fb"
43
+ ],
44
+ "rssi": -86
45
+ },
46
+ "type": "ecoworthy_bms",
47
+ "_comments": [
48
+ "source advmon (https://github.com/patman15/BMS_BLE-HA/issues/286)",
49
+ "MAC address, correct, private"
50
+ ]
51
+ },
52
+ {
53
+ "advertisement": {
54
+ "local_name": "ECO-WORTHY 02_3DDF",
55
+ "manufacturer_data": {
56
+ "15996": "821c3de0"
57
+ },
58
+ "rssi": -49
59
+ },
60
+ "type": "ecoworthy_bms",
61
+ "_comments": [
62
+ "source proxy LOG (https://github.com/patman15/BMS_BLE-HA/issues/295)",
63
+ "MAC address, correct, public"
64
+ ]
65
+ },
66
+ {
67
+ "advertisement": {
68
+ "local_name": "DCHOUSE 01_4F9F",
69
+ "manufacturer_data": {
70
+ "57570": "5a72a745"
71
+ },
72
+ "service_uuids": [
73
+ "0000fff0-0000-1000-8000-00805f9b34fb"
74
+ ],
75
+ "rssi": -68
76
+ },
77
+ "type": "ecoworthy_bms",
78
+ "_comments": [
79
+ "source advmon (https://github.com/patman15/BMS_BLE-HA/issues/326)",
80
+ "MAC address correct"
81
+ ]
82
+ },
83
+ {
84
+ "advertisement": {
85
+ "local_name": "ECO-WORTHY 0B_198D",
86
+ "manufacturer_data": {
87
+ "59362": "798e373d"
88
+ },
89
+ "service_uuids": [
90
+ "0000fff0-0000-1000-8000-00805f9b34fb"
91
+ ],
92
+ "rssi": -50
93
+ },
94
+ "type": "ecoworthy_bms",
95
+ "_comments": [
96
+ "source advmon (https://github.com/patman15/BMS_BLE-HA/issues/386)",
97
+ "MAC address, correct, private"
98
+ ]
99
+ }
100
+ ]
@@ -0,0 +1,104 @@
1
+ [
2
+ {
3
+ "advertisement": {
4
+ "local_name": "NWJ20221223010330\u0011",
5
+ "manufacturer_data": {
6
+ "65535": "30554437a2d2"
7
+ },
8
+ "service_uuids": [
9
+ "0000ffe0-0000-1000-8000-00805f9b34fb"
10
+ ],
11
+ "rssi": -56
12
+ },
13
+ "type": "ective_bms",
14
+ "_comments": [
15
+ "source LOG"
16
+ ]
17
+ },
18
+ {
19
+ "advertisement": {
20
+ "local_name": "NWJ20221223010388\u0011",
21
+ "manufacturer_data": {
22
+ "65535": "3055443762ec"
23
+ },
24
+ "service_uuids": [
25
+ "0000ffe0-0000-1000-8000-00805f9b34fb"
26
+ ],
27
+ "rssi": -47
28
+ },
29
+ "type": "ective_bms",
30
+ "_comments": [
31
+ "source LOG"
32
+ ]
33
+ },
34
+ {
35
+ "advertisement": {
36
+ "local_name": "$PFLAC,R,RADIOID\r\n",
37
+ "manufacturer_data": {
38
+ "65535": "10554433e8b4"
39
+ },
40
+ "service_uuids": [
41
+ "0000ffe0-0000-1000-8000-00805f9b34fb"
42
+ ],
43
+ "rssi": -47
44
+ },
45
+ "type": "ective_bms",
46
+ "_comments": [
47
+ "nRF Connect (https://github.com/patman15/BMS_BLE-HA/issues/82#issuecomment-2498299433)"
48
+ ]
49
+ },
50
+ {
51
+ "advertisement": {
52
+ "local_name": "NWJ20200720020539",
53
+ "manufacturer_data": {
54
+ "0": "3414b59d78e74c"
55
+ },
56
+ "service_uuids": [
57
+ "0000ffe0-0000-1000-8000-00805f9b34fb"
58
+ ],
59
+ "rssi": -127
60
+ },
61
+ "type": "ective_bms",
62
+ "_comments": [
63
+ "BTctl (https://github.com/patman15/BMS_BLE-HA/issues/137)"
64
+ ]
65
+ },
66
+ {
67
+ "advertisement": {
68
+ "local_name": "ZM20210512010036�",
69
+ "manufacturer_data": {
70
+ "0": "fc45c3bcd6a8"
71
+ },
72
+ "service_uuids": [
73
+ "0000ffe0-0000-1000-8000-00805f9b34fb"
74
+ ],
75
+ "rssi": -48
76
+ },
77
+ "type": "ective_bms",
78
+ "_comments": [
79
+ "source BTctl (https://github.com/patman15/BMS_BLE-HA/issues/194)",
80
+ "Topband"
81
+ ]
82
+ },
83
+ {
84
+ "advertisement": {
85
+ "local_name": "xxxxxxx20126\f",
86
+ "manufacturer_data": {
87
+ "65535": "3055443792f2"
88
+ },
89
+ "service_uuids": [
90
+ "00001800-0000-1000-8000-00805f9b34fb",
91
+ "00001801-0000-1000-8000-00805f9b34fb",
92
+ "0000ffe0-0000-1000-8000-00805f9b34fb",
93
+ "f000ffc0-0451-4000-b000-000000000000"
94
+ ],
95
+ "rssi": -127
96
+ },
97
+ "type": "ective_bms",
98
+ "_comments": [
99
+ "source advmon (https://github.com/patman15/BMS_BLE-HA/issues/276)",
100
+ "renamed",
101
+ "value: MAC address"
102
+ ]
103
+ }
104
+ ]