Add Anker MagGo 3-in-1 Wireless Charger (A25x7) support - #41
Conversation
Adds a device profile for the Anker MagGo 3-in-1 wireless charger (model A25x7, serial prefix ASHDKXU). It reuses the Prime charger ECDH + AES-GCM negotiation and telemetry framing. - Streams telemetry only after a subscribe command (0x0200 / "4200"), like the C1000 Gen 2; sent from _post_connect(). - Telemetry arrives on command 4300; the three wireless pads live in TLV params a2/a3/a4 with the Prime charger per-port shape. - Exposes per-pad power (W) + status and a computed total. Reverse-engineered from BLE captures. The ECDH encryption negotiation was confirmed live against real hardware. Per-pad power was confirmed against an Apple Watch charging at 2.8 W (a2[6:8] LE 0x011d = 285 -> 2.85 W). Per-pad voltage/current fields are present but their scaling was not confidently confirmed for wireless pads, so only power + status are exposed. Claude-Session: https://claude.ai/code/session_014PHXj8zVt63X4FV8YBag7E
flip-dots
left a comment
There was a problem hiding this comment.
This is really good, pretty much the only major thing it needs is some tests. Please let me know if you need any help with those.
- moduleauthor now a real name/email (radzio GitHub noreply) - Rework class docstring to match other device modules; move protocol detail (TLV a2/a3/a4 framing, subscribe/telemetry commands, scaling notes) into a collapsible note. Refer to the C1000 Gen 2 as "C1000G2". - Rename total_power -> power_out (matches the existing HA "Total Power Out" sensor). No dedicated total exists in telemetry; it is computed as the sum of the three pads. - Add MagGo3in1 to examples/demo.py. - Add tests using two real captures: two cases in the parameterised telemetry-parsing test, plus two end-to-end telemetry-packet-processing cases (bonus). Full suite: 72 passed. Claude-Session: https://claude.ai/code/session_014PHXj8zVt63X4FV8YBag7E
|
Looks good now, I forgot to mention that it needs to be added to the docs and supported devices in the README.md so I have sorted that out myself. In terms of when a new release with this device will be done, I think I will wait a bit to see if #27 can be included in that release first, so probably in a few days. |
|
Hi @radzio The structures are pretty much identical to the BLE messages, but the message codes may differ. You can also use the export system module to provide a randomized export from your account, including MQTT messages. I would need that to debug and develop the implementation. When running such an export, you can play around in the App to trigger messages and power or setting changes, which will then become visible in the replay of the messages. |
Adds a device profile for the Anker MagGo 3-in-1 Wireless Charger (model A25x7, serial prefix
ASHDKXU) — phone MagSafe pad + Apple Watch puck + earbuds pad.How it works
It's part of the same
8c85…/0000ff09family as the Prime chargers and reusesPrimeDevice's ECDH + AES-GCM negotiation and telemetry framing. Two model-specific details:0x0200(4200with the encryption flag), payloada10121. Sent from_post_connect().4300. The report carries the three wireless pads in TLV paramsa2/a3/a4, each using the Prime charger per-port shape (04 <status> <volt LE> <current LE> <power LE>).Exposes per-pad power (W) + status and a computed total.
Testing / confidence
Reverse-engineered from BLE captures (nRF/iOS PacketLogger + on-device probing):
a2[6:8]little-endian0x011d= 285 → 2.85 W.[2:4]/[4:6]but their scaling wasn't confidently confirmed for wireless pads, so only power + status are exposed here (kept conservative, matching the style of the existing charger profiles).Companion HA integration PR: flip-dots/HaSolixBLE (adds the model to the dropdown + sensors).
https://claude.ai/code/session_014PHXj8zVt63X4FV8YBag7E