The SDK discovers only the exact name Tap Timer and start() always writes [0x01, 0x00, 0x00, minutes]. That misses Holman BX2.
Confirmed only on the original BX2 Dual Outlet Bluetooth Tap Timer MK1 (SKU CO3112):
https://www.holmanindustries.com.au/product/bx2-dual-outlet-bluetooth-tap-timer-mk1/
Holman has superseded that with a newer BX2:
https://www.holmanindustries.com.au/product/bx2-dual-outlet-bluetooth-tap-timer/
I have not tested the newer model. The rest of this issue is MK1.
MK1 advertises the name exactly BX2. The vendor service is c521f000-0d70-4d4f-8e43-40d84c50ab38 (already HOLMAN_CO3011). An exact allowlist of Tap Timer and BX2 finds it. An empty alias does not match.
Start is still four bytes on f006. Byte 1 selects the outlet:
start = [0x01, tap_index, 0x00, minutes]
tap_index 0 = zone 1 -> 01 00 00 NN
tap_index 1 = zone 2 -> 01 01 00 NN
stop = [0x00, 0x00, 0x00, 0x00]
I have confirmed those writes on a live BX2 MK1. Zone 1 is the same payload the SDK already sends.
start() should take a zone (1 or 2). The CLI should gain --zone. That flag does not exist today.
Some BX1/BX2 units expose c001. Writing AE 8E there first unlocks the session so the following f006 write is accepted. If c001 is missing, skip it.
Other names or UUIDs can use overrides instead of more hardcoded models:
HOLMAN_ACCEPTED_ALIASES (or accepted_aliases) adds extra exact advertised names
HOLMAN_SERVICE_UUIDS (or service_uuids) replaces the vendor UUID filter (defaults stay CO3015 / CO3012 / CO3011)
CO3012 stays in the default UUID list. This issue is about BX2 MK1.
The SDK discovers only the exact name
Tap Timerandstart()always writes[0x01, 0x00, 0x00, minutes]. That misses Holman BX2.Confirmed only on the original BX2 Dual Outlet Bluetooth Tap Timer MK1 (SKU CO3112):
https://www.holmanindustries.com.au/product/bx2-dual-outlet-bluetooth-tap-timer-mk1/
Holman has superseded that with a newer BX2:
https://www.holmanindustries.com.au/product/bx2-dual-outlet-bluetooth-tap-timer/
I have not tested the newer model. The rest of this issue is MK1.
MK1 advertises the name exactly
BX2. The vendor service isc521f000-0d70-4d4f-8e43-40d84c50ab38(already HOLMAN_CO3011). An exact allowlist ofTap TimerandBX2finds it. An empty alias does not match.Start is still four bytes on
f006. Byte 1 selects the outlet:I have confirmed those writes on a live BX2 MK1. Zone 1 is the same payload the SDK already sends.
start()should take a zone (1 or 2). The CLI should gain--zone. That flag does not exist today.Some BX1/BX2 units expose
c001. WritingAE 8Ethere first unlocks the session so the followingf006write is accepted. Ifc001is missing, skip it.Other names or UUIDs can use overrides instead of more hardcoded models:
HOLMAN_ACCEPTED_ALIASES(oraccepted_aliases) adds extra exact advertised namesHOLMAN_SERVICE_UUIDS(orservice_uuids) replaces the vendor UUID filter (defaults stay CO3015 / CO3012 / CO3011)CO3012 stays in the default UUID list. This issue is about BX2 MK1.