H200 hub paired with an S200B button. Button presses are recorded in the Tapo app's activity history (so the hub is receiving them), but I cannot find any local API method that exposes them. T100 motion and T110 contact on the same hub work fine because they expose stateful fields in get_device_info — S200B has no such field, only its identity/signal/battery.
Same setup on the H100 works via get_trigger_logs per the workaround in #1117. On H200 that method returns an empty log.
Setup
- Hub: H200, firmware
1.6.1 Build 20251230 rel.64168
- Child: S200B, fw
1.13.0 Build 250226 Rel.134253
- python-kasa current
main
- Library detects hub as
SmartCamDevice over SmartCamProtocol, child as SmartChildDevice over _ChildCameraProtocolWrapper
hub.update() succeeds, 3 children enumerated, all show TriggerLogs in child.modules
What I tried
All queries via child.protocol.query(...):
get_trigger_logs -> {"start_id": 0, "logs": [], "sum": 0} (sum=0 across many button presses)
get_event_logs -> Error: UNSPECIFIC_ERROR(-1001) for method: get_event_logs
get_double_click -> UNSPECIFIC_ERROR(-1001)
get_double_click_status, get_double_click_info -> same
get_trigger_log_config / get_trigger_log_status -> same
get_recent_event(s), get_latest_event, get_button_pressed, get_press_status -> same
For completeness, the H100-era control_child wrapper against the hub returns UNSUPPORTED_METHOD(-40106) on H200, as expected (smartcam protocol).
Components reported by S200B (component_nego)
['device', 'quick_setup', 'trigger_log', 'time', 'device_local_time',
'account', 'synchronize', 'cloud_connect', 'iot_cloud', 'firmware',
'localSmart', 'battery_detect', 'double_click', 'child_migrate']
Both trigger_log AND double_click are declared but neither appears populated by any locally queryable method. Contrast with T100/T110 on the same hub — those expose detected: bool / open: bool directly in get_device_info and surface correctly in HA's tplink integration.
get_device_info on S200B (no event-related fields)
parent_device_id, master_key, hw_ver, fw_ver, device_id, mac, type, model,
hw_id, oem_id, specs, category, bind_count, status_follow_edge, status,
lastOnboardingTimestamp, rssi, signal_level, jamming_rssi, jamming_signal_level,
at_low_battery, migrate_status, migrate_support, nickname, avatar
Repro snippet
import asyncio
from kasa import Discover, Credentials
async def main():
hub = await Discover.discover_single(
"<HUB_IP>",
credentials=Credentials("<email>", "<password>"),
)
await hub.update()
s200b = next(c for c in hub.children if c.model == "S200B")
# Press the button several times before this query.
print(await s200b.protocol.query({"get_trigger_logs": {"start_id": 0}}))
# -> {'get_trigger_logs': {'start_id': 0, 'logs': [], 'sum': 0}}
print(await s200b.protocol.query({"get_event_logs": {"start_id": 0}}))
# -> raises UNSPECIFIC_ERROR(-1001)
asyncio.run(main())
Question
Does the H200 firmware actually expose child trigger/event history through any local request? The components declare trigger_log and double_click exist, but no get_* invocation I tried surfaces the data — only the Tapo app does, presumably via cloud. Happy to capture additional traces or test specific request shapes if there's a known smartcam wrapper I'm missing.
Related: #1117 (S200B on H100 — the workaround there doesn't apply because the underlying method returns empty on H200).
H200 hub paired with an S200B button. Button presses are recorded in the Tapo app's activity history (so the hub is receiving them), but I cannot find any local API method that exposes them. T100 motion and T110 contact on the same hub work fine because they expose stateful fields in
get_device_info— S200B has no such field, only its identity/signal/battery.Same setup on the H100 works via
get_trigger_logsper the workaround in #1117. On H200 that method returns an empty log.Setup
1.6.1 Build 20251230 rel.641681.13.0 Build 250226 Rel.134253mainSmartCamDeviceoverSmartCamProtocol, child asSmartChildDeviceover_ChildCameraProtocolWrapperhub.update()succeeds, 3 children enumerated, all showTriggerLogsinchild.modulesWhat I tried
All queries via
child.protocol.query(...):For completeness, the H100-era
control_childwrapper against the hub returnsUNSUPPORTED_METHOD(-40106)on H200, as expected (smartcam protocol).Components reported by S200B (
component_nego)Both
trigger_logANDdouble_clickare declared but neither appears populated by any locally queryable method. Contrast with T100/T110 on the same hub — those exposedetected: bool/open: booldirectly inget_device_infoand surface correctly in HA'stplinkintegration.get_device_infoon S200B (no event-related fields)Repro snippet
Question
Does the H200 firmware actually expose child trigger/event history through any local request? The components declare
trigger_loganddouble_clickexist, but noget_*invocation I tried surfaces the data — only the Tapo app does, presumably via cloud. Happy to capture additional traces or test specific request shapes if there's a known smartcam wrapper I'm missing.Related: #1117 (S200B on H100 — the workaround there doesn't apply because the underlying method returns empty on H200).