[Release] Reolink Integration - Cameras, Doorbells, NVRs & Home Hubs

Turn on logging and send to me

The line 413 error is Hubitat throttling the app for overall load, not a bug on that specific line, so I'm looking at why the app runs so often on your setup. My suspicion is that polling isn't being skipped on your standalone cameras even though their event connections are up.

Two things would help:

  1. Which camera is source 9 (model and firmware), and does the reconnect loop only happen on that one?
  2. As a temporary workaround, try raising the poll interval on each camera device's Preferences from 3s to 30s, then check whether the load drops in Performance stats after an hour or so.
    3.Full debug logging from the integration. (Only a short window and put back to Error only)

Release: Reolink Integration v1.6.2

Fixes heavy hub load and repeated event-connection reconnects on installs with many standalone cameras.

Problem:
The app's internal scheduler ran every second, even when every camera was connected for real-time events and nothing needed polling. On hubs with several standalone cameras, this added up to a large share of total hub time. Hubitat then throttled the app with "LimitExceededException: excessive hub load" errors, and cameras logged errors many times a minute. Separately, some Device Bridges reconnected every few minutes with a "no real traffic received in 90s" message, even though the connection was actually healthy.

The Fix:

  • The scheduler now runs every second only while a camera actually needs polling (its event connection is down, or event updates are turned off). Otherwise it checks every 30 seconds.
  • The scheduler no longer saves its data when nothing has changed.
  • If an event connection drops, polling fallback still starts within about a second.
  • Fixed a timing issue in the Device Bridge that could make a healthy connection look stale and trigger an unneeded reconnect.

Update through HPM, then open the Reolink Integration app and click Done once to restart the scheduler.

Release: Reolink Integration v1.6.3

Fixes constant event-connection reconnects from 1.6.2, fixes bridges not reconnecting after a hub reboot, and makes connection logging much quieter.

Problem:

  • After updating to 1.6.2, every Device Bridge logged "no real traffic received in 90s" and reconnected about every 40 seconds, even on healthy connections.
  • After a hub reboot, a bridge could show as connected while its connection was actually gone, and it wouldn't reconnect on its own.
  • Routine reconnects filled the logs, even when nothing was actually wrong.

The Fix:

  • The connection watchdog now tracks traffic correctly and waits 180 seconds instead of 90 before treating a quiet connection as dead.
  • Bridges now always reconnect after a hub reboot or driver update.
  • Routine reconnects are silent. At the default Errors Only level you'll only see:
    • a warning if a source is actually offline,
    • a note when it comes back online,
    • an error if it gives up,
    • a single warning if a connection keeps dropping and reconnecting.
  • Less hub load from logging, especially with many standalone cameras.
  • The app can now only be installed once per hub, and setup works fully from the first page without clicking Done first.
  • Tips & Troubleshooting now recommends an NVR or Home Hub if you have more than about 10 standalone cameras.

Update through HPM, then open the Reolink Integration app and click Done once.

Thanks for the quick reply.

Click to Expand

I captured a Full debug window of about 5 minutes (09:55:24 to 10:00:05 hub time), then set the log level back to Errors Only. Your suspicion looks right: the standalone sources are polling constantly even though their event subscriptions are on.

Settings

  • useEventSubscription is true for sources 1, 2, 3, 5, 6, 7, 8, 9 and 10. Only source 4 has it false.
  • Source 5 isn't created (create_5_0 = false).
  • The main page shows one source as "Polling" and the rest as "Configured" or "Online".

What the log shows
Sources 2, 3, 4, 6, 7 and 8 each run this pair roughly every 3 seconds, matching the 3s default poll interval:

  • Reolink source N: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face=..., people=..., vehicle=...}
  • Reolink source N: GetMdState (ch 0) succeeded -- raw: {state=0}
  • Reolink source N ch 0: response received (still awake)

Each call is preceded by reusing cached token, expires in ~3300s, so it's not a token or login loop.
Source 9 also ran GetAiState/GetMdState at 09:59:45-46, right as its event subscription came back (event subscription ACTIVE, event connection connected).
The window had about 2,061 debug lines, roughly 7 per second, with 7 or more sources polling at once. At ~486 ms average per run, that matches the excessive-load throttling.

Other things in the log

  • Device Bridge (source 9) receives pushes it doesn't handle: cmd_id 78, 79 and 291. Device Bridge (source 10) receives cmd_id 93. The body is logged only as <?xml version="1.0" encoding="UTF-8" ?>, so the payload is cut off.
  • Source 10 logs keepalive sent, connection healthy. Source 9 previously logged no real traffic received in 90s... forcing a reconnect every 4-6 minutes, which I saw before this window.

Your questions

  1. Source 9, see my next response. Not sure how to relate what source is which camera. . Before this window the reconnect loop showed only on source 9 in the logs I read. Bridge devices for Lower Garage and Basement Door were also very busy in the stats.
  2. Poll interval workaround: not applied yet. I can raise each camera's poll interval from 3s to 30s next and report Performance stats after an hour.
  3. Full debug logs: the excerpt above is from that window. I can paste more raw lines if you need them.

It looks like the poll timer keeps running when event subscription is active. Is there a setting to turn polling off for event-subscribed cameras, or should the app skip the poll while the event connection is healthy?

Logs

Click to Expand
192.168.66.200	Sep 28 09:55:29	1	syslog	debug		2026-09-28T09:55:28.050-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: cached token missing/expired, logging in fresh
192.168.66.200	Sep 28 09:55:29	1	syslog	debug		2026-09-28T09:55:28.438-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: new token acquired, leaseTime=3600s
192.168.66.200	Sep 28 09:55:29	1	syslog	debug		2026-09-28T09:55:28.479-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, package={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 09:55:29	1	syslog	debug		2026-09-28T09:55:28.482-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: reusing cached token, expires in 3569.777s
192.168.66.200	Sep 28 09:55:29	1	syslog	debug		2026-09-28T09:55:28.536-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 09:55:29	1	syslog	debug		2026-09-28T09:55:28.538-04:00 Bryant-Home(new) app 1476 - - Reolink source 2 ch 0: response received (still awake)
192.168.66.200	Sep 28 09:55:29	1	syslog	debug		2026-09-28T09:55:28.548-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: reusing cached token, expires in 3569.709s
192.168.66.200	Sep 28 09:55:30	1	syslog	debug		2026-09-28T09:55:29.307-04:00 Bryant-Home(new) app 1476 - - Reolink source 3: cached token missing/expired, logging in fresh
192.168.66.200	Sep 28 09:55:31	1	syslog	debug		2026-09192.168.66.200	Sep 28 10:00:01	1	syslog	debug		2026-09-28T10:00:00.986-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: reusing cached token, expires in 3297.272s
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.118-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, package={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.122-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: reusing cached token, expires in 3297.138s
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.262-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.265-04:00 Bryant-Home(new) app 1476 - - Reolink source 2 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.276-04:00 Bryant-Home(new) app 1476 - - Reolink source 3: reusing cached token, expires in 3298.341s
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.388-04:00 Bryant-Home(new) app 1476 - - Reolink source 3: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.391-04:00 Bryant-Home(new) app 1476 - - Reolink source 3: reusing cached token, expires in 3298.228s
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.426-04:00 Bryant-Home(new) app 1476 - - Reolink source 3: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.429-04:00 Bryant-Home(new) app 1476 - - Reolink source 3 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.440-04:00 Bryant-Home(new) app 1476 - - Reolink source 4: reusing cached token, expires in 3300.632s
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.509-04:00 Bryant-Home(new) app 1476 - - Reolink source 4: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, package={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.511-04:00 Bryant-Home(new) app 1476 - - Reolink source 4: reusing cached token, expires in 3300.561s
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.569-04:00 Bryant-Home(new) app 1476 - - Reolink source 4: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.572-04:00 Bryant-Home(new) app 1476 - - Reolink source 4 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.584-04:00 Bryant-Home(new) app 1476 - - Reolink source 6: reusing cached token, expires in 3301.68s
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.640-04:00 Bryant-Home(new) app 1476 - - Reolink source 6: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, package={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.642-04:00 Bryant-Home(new) app 1476 - - Reolink source 6: reusing cached token, expires in 3301.622s
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.718-04:00 Bryant-Home(new) app 1476 - - Reolink source 6: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.720-04:00 Bryant-Home(new) app 1476 - - Reolink source 6 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.732-04:00 Bryant-Home(new) app 1476 - - Reolink source 7: reusing cached token, expires in 3303.079s
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.798-04:00 Bryant-Home(new) app 1476 - - Reolink source 7: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, package={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.801-04:00 Bryant-Home(new) app 1476 - - Reolink source 7: reusing cached token, expires in 3303.012s
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.841-04:00 Bryant-Home(new) app 1476 - - Reolink source 7: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.843-04:00 Bryant-Home(new) app 1476 - - Reolink source 7 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.855-04:00 Bryant-Home(new) app 1476 - - Reolink source 8: reusing cached token, expires in 3305.881s
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.899-04:00 Bryant-Home(new) app 1476 - - Reolink source 8: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:01.905-04:00 Bryant-Home(new) app 1476 - - Reolink source 8: reusing cached token, expires in 3305.836s
192.168.66.200	Sep 28 10:00:02	1	syslog	debug		2026-09-28T10:00:02.002-04:00 Bryant-Home(new) app 1476 - - Reolink source 8: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:03	1	syslog	debug		2026-09-28T10:00:02.005-04:00 Bryant-Home(new) app 1476 - - Reolink source 8 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.180-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: reusing cached token, expires in 3294.077s
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.328-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, package={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.332-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: reusing cached token, expires in 3293.928s
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.396-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.400-04:00 Bryant-Home(new) app 1476 - - Reolink source 2 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.411-04:00 Bryant-Home(new) app 1476 - - Reolink source 3: reusing cached token, expires in 3295.206s
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.446-04:00 Bryant-Home(new) app 1476 - - Reolink source 3: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.450-04:00 Bryant-Home(new) app 1476 - - Reolink source 3: reusing cached token, expires in 3295.17s
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.507-04:00 Bryant-Home(new) app 1476 - - Reolink source 3: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.509-04:00 Bryant-Home(new) app 1476 - - Reolink source 3 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.521-04:00 Bryant-Home(new) app 1476 - - Reolink source 4: reusing cached token, expires in 3297.551s
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.569-04:00 Bryant-Home(new) app 1476 - - Reolink source 4: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, package={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.572-04:00 Bryant-Home(new) app 1476 - - Reolink source 4: reusing cached token, expires in 3297.501s
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.629-04:00 Bryant-Home(new) app 1476 - - Reolink source 4: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.631-04:00 Bryant-Home(new) app 1476 - - Reolink source 4 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.643-04:00 Bryant-Home(new) app 1476 - - Reolink source 6: reusing cached token, expires in 3298.62s
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.701-04:00 Bryant-Home(new) app 1476 - - Reolink source 6: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, package={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.704-04:00 Bryant-Home(new) app 1476 - - Reolink source 6: reusing cached token, expires in 3298.561s
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.759-04:00 Bryant-Home(new) app 1476 - - Reolink source 6: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.761-04:00 Bryant-Home(new) app 1476 - - Reolink source 6 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.773-04:00 Bryant-Home(new) app 1476 - - Reolink source 7: reusing cached token, expires in 3300.038s
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.822-04:00 Bryant-Home(new) app 1476 - - Reolink source 7: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, package={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.824-04:00 Bryant-Home(new) app 1476 - - Reolink source 7: reusing cached token, expires in 3299.988s
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.880-04:00 Bryant-Home(new) app 1476 - - Reolink source 7: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.945-04:00 Bryant-Home(new) app 1476 - - Reolink source 7 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:05	1	syslog	debug		2026-09-28T10:00:04.956-04:00 Bryant-Home(new) app 1476 - - Reolink source 8: reusing cached token, expires in 3302.78s
192.168.66.200	Sep 28 10:00:06	1	syslog	debug		2026-09-28T10:00:05.006-04:00 Bryant-Home(new) app 1476 - - Reolink source 8: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:06	1	syslog	debug		2026-09-28T10:00:05.009-04:00 Bryant-Home(new) app 1476 - - Reolink source 8: reusing cached token, expires in 3302.728s
192.168.66.200	Sep 28 10:00:06	1	syslog	debug		2026-09-28T10:00:05.094-04:00 Bryant-Home(new) app 1476 - - Reolink source 8: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:06	1	syslog	debug		2026-09-28T10:00:05.099-04:00 Bryant-Home(new) app 1476 - - Reolink source 8 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:07	1	syslog	debug		2026-09-28T10:00:06.269-04:00 Bryant-Home(new) app 1476 - - Reolink Device Bridge (source 9): keepalive sent, connection healthy
192.168.66.200	Sep 28 10:00:07	1	syslog	debug		2026-09-28T10:00:06.303-04:00 Bryant-Home(new) app 1476 - - Reolink Device Bridge (source 9): unrecognized cmd_id 93 pushed (not currently handled) -- body (first 300 chars): <?xml version="1.0" encoding="UTF-8" ?> <body> <LinkType version="1.1"> <type>LAN</type> </LinkType> </body> 
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.214-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: reusing cached token, expires in 3291.043s
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.337-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, package={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.340-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: reusing cached token, expires in 3290.919s
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.394-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.397-04:00 Bryant-Home(new) app 1476 - - Reolink source 2 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.408-04:00 Bryant-Home(new) app 1476 - - Reolink source 3: reusing cached token, expires in 3292.209s
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.456-04:00 Bryant-Home(new) app 1476 - - Reolink source 3: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.459-04:00 Bryant-Home(new) app 1476 - - Reolink source 3: reusing cached token, expires in 3292.16s
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.515-04:00 Bryant-Home(new) app 1476 - - Reolink source 3: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.518-04:00 Bryant-Home(new) app 1476 - - Reolink source 3 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.529-04:00 Bryant-Home(new) app 1476 - - Reolink source 4: reusing cached token, expires in 3294.542s
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.573-04:00 Bryant-Home(new) app 1476 - - Reolink source 4: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, package={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.576-04:00 Bryant-Home(new) app 1476 - - Reolink source 4: reusing cached token, expires in 3294.497s
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.647-04:00 Bryant-Home(new) app 1476 - - Reolink source 4: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.650-04:00 Bryant-Home(new) app 1476 - - Reolink source 4 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.661-04:00 Bryant-Home(new) app 1476 - - Reolink source 6: reusing cached token, expires in 3295.602s
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.728-04:00 Bryant-Home(new) app 1476 - - Reolink source 6: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, package={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.731-04:00 Bryant-Home(new) app 1476 - - Reolink source 6: reusing cached token, expires in 3295.534s
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.798-04:00 Bryant-Home(new) app 1476 - - Reolink source 6: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.800-04:00 Bryant-Home(new) app 1476 - - Reolink source 6 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.811-04:00 Bryant-Home(new) app 1476 - - Reolink source 7: reusing cached token, expires in 3297s
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.859-04:00 Bryant-Home(new) app 1476 - - Reolink source 7: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, package={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.862-04:00 Bryant-Home(new) app 1476 - - Reolink source 7: reusing cached token, expires in 3296.951s
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.919-04:00 Bryant-Home(new) app 1476 - - Reolink source 7: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.922-04:00 Bryant-Home(new) app 1476 - - Reolink source 7 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.934-04:00 Bryant-Home(new) app 1476 - - Reolink source 8: reusing cached token, expires in 3299.801s
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.991-04:00 Bryant-Home(new) app 1476 - - Reolink source 8: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:08	1	syslog	debug		2026-09-28T10:00:07.994-04:00 Bryant-Home(new) app 1476 - - Reolink source 8: reusing cached token, expires in 3299.743s
192.168.66.200	Sep 28 10:00:09	1	syslog	debug		2026-09-28T10:00:08.039-04:00 Bryant-Home(new) app 1476 - - Reolink source 8: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:09	1	syslog	debug		2026-09-28T10:00:08.042-04:00 Bryant-Home(new) app 1476 - - Reolink source 8 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:12	1	syslog	debug		2026-09-28T10:00:11.270-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: reusing cached token, expires in 3286.989s
192.168.66.200	Sep 28 10:00:12	1	syslog	debug		2026-09-28T10:00:11.348-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, package={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:12	1	syslog	debug		2026-09-28T10:00:11.351-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: reusing cached token, expires in 3286.908s
192.168.66.200	Sep 28 10:00:12	1	syslog	debug		2026-09-28T10:00:11.424-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:12	1	syslog	debug		2026-09-28T10:00:11.426-04:00 Bryant-Home(new) app 1476 - - Reolink source 2 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:12	1	syslog	debug		2026-09-28T10:00:11.429-04:00 Bryant-Home(new) app 1476 - - Reolink source 2: reusing cached token, expires in 3286.828s
192.168.66.200	Sep 28 10:00:13	1	syslog	debug		2026-09-28T10:00:12.307-04:00 Bryant-Home(new) app 1476 - - Reolink source 3: reusing cached token, expires in 3287.31s
192.168.66.200	Sep 28 10:00:13	1	syslog	debug		2026-09-28T10:00:12.367-04:00 Bryant-Home(new) app 1476 - - Reolink source 3: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:13	1	syslog	debug		2026-09-28T10:00:12.369-04:00 Bryant-Home(new) app 1476 - - Reolink source 3: reusing cached token, expires in 3287.249s
192.168.66.200	Sep 28 10:00:13	1	syslog	debug		2026-09-28T10:00:12.446-04:00 Bryant-Home(new) app 1476 - - Reolink source 3: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:13	1	syslog	debug		2026-09-28T10:00:12.449-04:00 Bryant-Home(new) app 1476 - - Reolink source 3 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:13	1	syslog	debug		2026-09-28T10:00:12.453-04:00 Bryant-Home(new) app 1476 - - Reolink source 3: reusing cached token, expires in 3287.165s
192.168.66.200	Sep 28 10:00:14	1	syslog	debug		2026-09-28T10:00:13.448-04:00 Bryant-Home(new) app 1476 - - Reolink source 4: reusing cached token, expires in 3288.623s
192.168.66.200	Sep 28 10:00:14	1	syslog	debug		2026-09-28T10:00:13.509-04:00 Bryant-Home(new) app 1476 - - Reolink source 4: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, package={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:14	1	syslog	debug		2026-09-28T10:00:13.512-04:00 Bryant-Home(new) app 1476 - - Reolink source 4: reusing cached token, expires in 3288.561s
192.168.66.200	Sep 28 10:00:14	1	syslog	debug		2026-09-28T10:00:13.570-04:00 Bryant-Home(new) app 1476 - - Reolink source 4: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:14	1	syslog	debug		2026-09-28T10:00:13.572-04:00 Bryant-Home(new) app 1476 - - Reolink source 4 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:14	1	syslog	debug		2026-09-28T10:00:13.575-04:00 Bryant-Home(new) app 1476 - - Reolink source 4: reusing cached token, expires in 3288.496s
192.168.66.200	Sep 28 10:00:15	1	syslog	debug		2026-09-28T10:00:14.117-04:00 Bryant-Home(new) app 1476 - - Reolink source 6: reusing cached token, expires in 3289.146s
192.168.66.200	Sep 28 10:00:15	1	syslog	debug		2026-09-28T10:00:14.222-04:00 Bryant-Home(new) app 1476 - - Reolink source 6: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, package={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:15	1	syslog	debug		2026-09-28T10:00:14.224-04:00 Bryant-Home(new) app 1476 - - Reolink source 6: reusing cached token, expires in 3289.041s
192.168.66.200	Sep 28 10:00:15	1	syslog	debug		2026-09-28T10:00:14.302-04:00 Bryant-Home(new) app 1476 - - Reolink source 6: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:15	1	syslog	debug		2026-09-28T10:00:14.305-04:00 Bryant-Home(new) app 1476 - - Reolink source 6 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:15	1	syslog	debug		2026-09-28T10:00:14.308-04:00 Bryant-Home(new) app 1476 - - Reolink source 6: reusing cached token, expires in 3288.955s
192.168.66.200	Sep 28 10:00:16	1	syslog	debug		2026-09-28T10:00:15.317-04:00 Bryant-Home(new) app 1476 - - Reolink source 7: reusing cached token, expires in 3289.494s
192.168.66.200	Sep 28 10:00:16	1	syslog	debug		2026-09-28T10:00:15.359-04:00 Bryant-Home(new) app 1476 - - Reolink source 7: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, package={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:16	1	syslog	debug		2026-09-28T10:00:15.362-04:00 Bryant-Home(new) app 1476 - - Reolink source 7: reusing cached token, expires in 3289.451s
192.168.66.200	Sep 28 10:00:16	1	syslog	debug		2026-09-28T10:00:15.482-04:00 Bryant-Home(new) app 1476 - - Reolink source 7: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:16	1	syslog	debug		2026-09-28T10:00:15.485-04:00 Bryant-Home(new) app 1476 - - Reolink source 7 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:16	1	syslog	debug		2026-09-28T10:00:15.488-04:00 Bryant-Home(new) app 1476 - - Reolink source 7: reusing cached token, expires in 3289.323s
192.168.66.200	Sep 28 10:00:17	1	syslog	debug		2026-09-28T10:00:16.669-04:00 Bryant-Home(new) app 1476 - - Reolink source 8: reusing cached token, expires in 3291.067s
192.168.66.200	Sep 28 10:00:17	1	syslog	debug		2026-09-28T10:00:16.727-04:00 Bryant-Home(new) app 1476 - - Reolink source 8: GetAiState (ch 0) succeeded -- raw: {channel=0, dog_cat={alarm_state=0, support=1}, face={alarm_state=0, support=0}, people={alarm_state=0, support=1}, vehicle={alarm_state=0, support=1}}
192.168.66.200	Sep 28 10:00:17	1	syslog	debug		2026-09-28T10:00:16.730-04:00 Bryant-Home(new) app 1476 - - Reolink source 8: reusing cached token, expires in 3291.007s
192.168.66.200	Sep 28 10:00:17	1	syslog	debug		2026-09-28T10:00:16.772-04:00 Bryant-Home(new) app 1476 - - Reolink source 8: GetMdState (ch 0) succeeded -- raw: {state=0}
192.168.66.200	Sep 28 10:00:17	1	syslog	debug		2026-09-28T10:00:16.775-04:00 Bryant-Home(new) app 1476 - - Reolink source 8 ch 0: response received (still awake)
192.168.66.200	Sep 28 10:00:17	1	syslog	debug		2026-09-28T10:00:16.778-04:00 Bryant-Home(new) app 1476 - - Reolink source 8: reusing cached token, expires in 3290.957s```


I'm going to load your patch now.

Thanks for the fix and the quick turnaround. I'm now on v1.6.3 (upgraded from 1.6.1). Here are the results with full debug logs from before and after.

What's fixed

  • Reconnect loop: On 1.6.1, Device Bridge sources 9 (Basement Door) and 10 (Garage lower) each logged "no real traffic received in 90s... forcing a reconnect" every 4-6 minutes, even though keepalives were logged as healthy right up to the reconnect. On 1.6.3, a 5.5-minute Full-debug window showed zero reconnects and zero "connection lost" lines, and the unhandled cmd_id 93 replies to keepalives are no longer logged.
  • LimitExceededException: No excessive hub load on line 413 (parseReolinkState) errors in the hub log since the upgrade.
  • Hub load: App 1476 went from about 34% of total hub time (86% of app busy time) to about 8% in a 5-minute snapshot, and average run time dropped from about 486 ms to about 135 ms.

What I think is left
In the 1.6.3 window, sources 2, 3, 4, 6, 7 and 8 (all standalone cameras) each still polled GetAiState/GetMdState 15 times a minute, with a median gap of about 3.1-3.9 s. That was the same rate as on 1.6.1. That's about 180 camera requests a minute in total.

For sources 2, 3, 6, 7 and 8, useEventSubscription_N is true in the app settings. But in both windows their logs have no event-connection, keepalive or subscription lines at all. Only sources 9 and 10 open an event connection. Source 4 (Doorbell) has event subscription off, so it polls, which is expected. On the main page, sources 2, 3, 6, 7 and 8 show as "Configured" and 9 and 10 as "Online".

The lastUpdateSource attribute agrees: it reads poll on the Garage upper camera (source 2) and the Field camera (source 8), and event on the Basement Door Camera (source 9).

The poll interval workaround
The per-device pollIntervalSec preference was stored as 3 on the Field camera (the driver default is 30). The Doorbell's default is 5. I've set the six polling cameras (sources 2, 3, 4, 6, 7, 8) to 30 s and read the value back to confirm it saved. I'll report load after it's had time to settle.

Camera models and firmware (from Reolink's Info page)

  • Source 2 Garage upper: Elite Floodlight WiFi, firmware v3.2.0.6530_2606232191 (polls)
  • Source 6 Back Yard: Elite Floodlight WiFi, v3.2.0.6530_2606232191 (polls)
  • Source 7 Conservatory: Elite Floodlight WiFi, v3.2.0.6530_2606232191 (polls)
  • Source 3 Front: RLC-823S2, v3.1.0.5714_25112712_v1.0.0.159 (polls)
  • Source 8 Field: RLC-811A, v3.1.0.1643_2402219117 (polls)
  • Source 4 Doorbell: Reolink Video Doorbell PoE, v3.0.0.6460_2605211898 (event subscription off)
  • Source 9 Basement Door: RLC-842A, v3.1.0.1643_2402219328 (event connection works)
  • Source 10 Garage lower: Reolink TrackMix PoE, v3.0.0.5428_2604282150 (event connection works)

Questions

  1. Why would sources 2, 3, 6, 7 and 8 never open an event connection when event updates are enabled? The Field camera (RLC-811A) and the Basement Door camera (RLC-842A) are on the same firmware family (v3.1.0.1643_2402...), yet only the RLC-842A gets an event connection, so it doesn't look like a simple model or firmware limit. Is there anything else that decides whether a source opens one, such as how it was added, or should the app log the reason at Normal level?
  2. Should the app skip GetAiState/GetMdState polling on a source when its event connection is up? And when a source can't establish one, would it be better to back off automatically to the poll interval on the device rather than the 3-4 s I saw?
  3. I noticed pushes with cmd_id 78, 79 and 291 logged as "not currently handled." I assume harmless, but let me know if you'd like the raw bodies.

For context, I use Blue Iris for motion detection, so I only need Hubitat for controlling spotlights and similar. Slow status polling is fine for me. Happy to send more logs.

Thanks, those results are great: the loop is gone, no more throttling, and hub load dropped from 34% to 8%.

For sources 2, 3, 6, 7 and 8, I think their event connections got stuck in a "reconnecting" state during the 1.6.1 overload, so the app never restarts them. If you get a moment, check the Connection status on one of their Discover pages first. I expect it to say "Reconnecting or a false connected."

To kick them loose, for each of those five sources:

  1. Open its Reolink Device Bridge device.
  2. On the Commands tab, run Stop Event Subscription, then Start Event Subscription.

Within a minute they should show Online on the main page and stop polling. Let me know if any don't.

The next release will detect and restart stuck connections automatically. No need to send the cmd_id 78/79/291 bodies, those are harmless.

Thanks, that worked. All eight sources now show Online on the main page, and none are on Polling.

What I did

  • On each Reolink Device Bridge for sources 2, 3, 6, 7 and 8 (Garage upper, Front, Back Yard, Conservatory, Field), I ran Stop Event Subscription, then Start Event Subscription.
  • Each went disconnected, then connecting, then connected within about a minute.
  • Before the restart, the Bridge connectionStatus for Garage upper and Front was disconnected, last changed 2026-09-27 02:00. That fits your stuck-in-reconnecting theory. I didn't capture the earlier status for the other three, and I didn't check the Discover page Connection status first.

Doorbell (source 4)
It was the only source still on Polling, because event-driven updates were turned off for it. I turned them on, and it now shows Online too.

Poll interval
I left pollIntervalSec at 30 s on the six cameras that had been polling. It should now only matter if a connection drops.

I'll re-check hub load after it has run for an hour and post the numbers. Before, it was about 8% of total hub time, and 34% on 1.6.1. Good to hear the next release will detect and restart stuck connections automatically. Thanks for the quick fixes.

This will be corrected in 1.6.4 build shortly.

"Would it be too much trouble to add DNS resolution to the IP address field? I like the flexibility of changing IP addresses wherever possible."

is this on the wish list? :slight_smile:

This is already supported.
You can enter a hostname instead of an IP, either when adding a source or later under Edit connection settings on the source's page. Your router needs to be able to resolve the name for the hub (.local names usually don't work on Hubitat). The next release also relabels the Add source field so it's clearer.

Release: Reolink Integration v1.6.4

Event connections that get stuck or give up now recover on their own, without clicking Done or rebooting.

Problem:

  • Some event connections could get stuck without retrying, for example after the hub was under heavy load. The source then polled every few seconds indefinitely and showed "Configured" instead of "Online." Clicking Done didn't fix it. Only running Stop and Start Event Subscription on the bridge did.
  • A source that gave up after 10 reconnect attempts, for example during a long power or network outage, stayed on polling until the next Done or hub reboot, even after the camera came back.

The Fix:

  • Connection failures that used to stop silently now retry like any other failure.
  • Clicking Done or rebooting the hub now restarts any event connection that isn't actually running, whatever its last status said.
  • A source that gave up tries event mode again as soon as the camera answers, or at least once an hour.
  • The "offline" warning and "giving up" error now appear once per outage, not every retry cycle.
  • The Add source field now reads "IP address or hostname." Hostnames were already supported, this just makes it clear.

Update through HPM, then open the Reolink Integration app and click Done once.

martin lawrence GIF

@JdThomas24 thanks for creating this app/driver and congratulations on getting Hubitat to now include it as a built-in Hubitat Integration Release 2.5.2 Available - News and Updates / Release Notes - Hubitat

I've created a similar app/driver that is not a good or clean as yours but does have a few critical features I need that if you could include in your app/driver I could eliminate the need for my app/driver. Specifically:

  • Commands to turn notifications on/off
  • Commands to enable/disable IR
  • Last motion date/time attribute

Your welcome to use any of the code I created for your app/drivers (I don't need any credit) if you want to add these features. Reolink NVR (RLN8-410) Service Manager & POE Camera and Doorbell Drivers - Custom Apps and Drivers - Hubitat

Something I'm curious about is that all my cameras and doorbell are POE devices. I was surprised that your driver shows they have "battery" capability and reports values for the battery attributes. Any idea where these values are coming from or if in the future you plan to update your drivers to know the difference between POE devices and non-POE devices?

@gomce62 thanks for the kind words, and for sharing your code! Here's where things stand on each of your requests:

IR on/off: this is already covered. Cameras that support it have a Set Night Vision command with a Mode dropdown, which controls the IR lights. It's on each camera's Commands tab, and it's available in Rule Machine as a custom action.

Last motion date/time: good idea. I'm planning to add Last Motion Time and Last Motion Type (person, vehicle, pet, package, or motion) in an upcoming release. For rules, the separate Person, Vehicle, Pet, and Package attributes already let you trigger on a specific type directly.

Notifications on/off: I'd recommend handling this with Hubitat rules instead of toggling the Reolink app's notifications. For example, a rule that sends a notification when Person goes active on a camera, only in Away mode. That gives you full control over when and how you're notified, based on mode, presence, time of day, or anything else Hubitat knows about.

Battery on PoE cameras: on a PoE camera, the only battery-related item should be Battery Mode: wired, which confirms it's on PoE and not battery. The Check Battery command shows because one driver covers both battery and PoE cameras, and Hubitat applies a driver's commands to every device using it. On a wired camera it does nothing. If you're seeing an actual battery percentage on a PoE camera, send a screenshot of its Current States and I'll take a look.

Since Reolink is now built into Hubitat, I'll coordinate these changes so they land in both the built-in and community versions.
Coming in v1.6.5

When i click on install i get Sofabaton?:

You literally caught that while i was fixing it...... :frowning:

This is fixed in GH.

Apologies, (PEBKAC) wrong credentials .... working now

I have Reolink Duo 3v POE with settings below and have the following error.

Thanks for the quick reply and for clarifying that Set Night Vision controls IR on/off. Greatly appreciate you agreeing to add the last motion date/time in a future release. With regard to Notifications on/off, I understand your rationale and can work with that. The reason I had it in my driver is to keep the Reolink App and Website in sync with Hubitat so notification settings can be controlled in multiple places.

As for Battery, I ran the check battery command again on all 5 devices, and they are all still showing as battery devices instead of wired (POE). Here is a snapshot of one of the camera's, the doorbell, and the log.

Here is the log for one of the devices:

**app:234**2026-09-29 9:07:50.731 pm

debug

Reolink source 1: GetBatteryInfo (ch 4) succeeded -- raw: {Battery={adapterStatus=0, batteryPercent=49, batteryVersion=40, chargeStatus=0, current=0, lowPowerFlag=56, temperature=0, voltage=0}}

**app:234**2026-09-29 9:07:50.673 pm

debug

Reolink source 1: reusing cached token, expires in 3412.45s

**app:234**2026-09-29 9:07:49.476 pm

debug

Reolink Device Bridge (source 1): keepalive acknowledged (cmd_id 93)

**app:234**2026-09-29 9:07:49.372 pm

debug

Reolink Device Bridge (source 1): keepalive sent, connection healthy

**app:234**2026-09-29 9:07:39.476 pm

debug

Reolink source 1 ch 4: capabilities rechecked -- PTZ, PTZ Calibration, Spotlight, Night Vision, Siren, Person Detection, Vehicle Detection, Pet Detection

**app:234**2026-09-29 9:07:39.470 pm

debug

Reolink source 1: GetAbility (ch null) succeeded -- raw: {Ability={3g={permit=0, ver=0}, abilityChn=[{aiTrack={permit=6, ver=1}, aiTrackDogCat={permit=6, ver=1}, alarmAudio={permit=0, ver=1}, alarmIoIn={permit=0, ver=0}, alarmIoOut={permit=0, ver=0}, alarmMd={permit=6, ver=1}, alarmRf={permit=0, ver=0}, batAnalysis={permit=0, ver=0}, battery={permit=0, ve

**app:234**2026-09-29 9:07:39.159 pm

debug

Reolink source 1: reusing cached token, expires in 3423.965s

**app:234**2026-09-29 9:22:50.201 pm

debug

Reolink Device Bridge (source 1): keepalive acknowledged (cmd_id 93)

**app:234**2026-09-29 9:22:50.081 pm

debug

Reolink Device Bridge (source 1): keepalive sent, connection healthy

**app:234**2026-09-29 9:22:43.444 pm

debug

Reolink source 1: GetBatteryInfo (ch 2) succeeded -- raw: {Battery={adapterStatus=49, batteryPercent=0, batteryVersion=12841144, chargeStatus=0, current=0, lowPowerFlag=12836472, temperature=0, voltage=0}}

**app:234**2026-09-29 9:22:43.260 pm

debug

Reolink source 1: reusing cached token, expires in 2519.864s

Your camera settings look right. HTTPS on 443 is exactly what's needed. "No response" means Hubitat couldn't reach the camera at all (a wrong password would show a different error), so let's check the network side:

  1. Ping from Hubitat: Settings → Network Test → ping the camera's IP. Does it respond?
  2. Browser check: from a computer on the same network, open https://[camera IP]. Do you get the Reolink login page? (A certificate warning is normal.)
  3. Same network? Is the camera on the same subnet or VLAN as your Hubitat hub? If your cameras are on a separate VLAN, Hubitat needs to be allowed to reach them on port 443, and port 9000 for real-time events.
  4. Connection settings: in the app, under Edit connection settings, confirm the IP matches the camera's current IP and the HTTPS port is 443.

If the ping fails, try Find changed IP in the app. If everything checks out and it still fails, set the log level to Full, run Re-run discovery, and send me the logs on DM.

(The "battery-class" note in that message is just a general hint the app shows when a device doesn't respond. Your Duo 3V PoE isn't being treated as battery-powered.)

@gomce62.web

Thanks for the logs, they pinpointed the issue.
Your cameras are behind an NVR, and the NVR answers the battery query even for PoE channels, but with junk data (for example, zero voltage and nonsense version numbers). The integration was treating any answer as "battery camera." Your camera's own ability report correctly says it has no battery, so I'll switch detection to use that instead. That fix will be in the next release (1.6.5), and it will also clear the incorrect battery values from your PoE devices automatically.

On notifications: thanks for explaining. Keeping the Reolink app and Hubitat in sync makes sense for your setup. For now I'm keeping notifications on the Hubitat rules side, but I'll keep your use case in mind.

1.6.5 will be released today.