⚠️ BREAKING CHANGES — ACTION REQUIRED BEFORE UPGRADING
Warning
Infrared entities are removed from indoor monitors that explicitly report no local camera. Affected devices no longer create the Infrared light or Infrared Mode select. Before upgrading, review automations and dashboards that reference those entities and remove or retarget the references. Existing registry entries may remain unavailable.
This is a major-version release candidate because existing entities disappear. Take a Home Assistant backup before upgrading. The exclusion requires a reported VTH device class and an explicit no-camera answer; monitors with a camera or an unknown camera answer retain their previous infrared behavior.
Inherited camera identity migration: Cameras whose normal identity call fails but whose alternate CGI reports a serial adopt that serial. Migration preserves entity IDs. Unresolved collisions stop setup and require a repair or manual guidance. Once a serial is adopted, a temporarily unavailable serial read causes setup to retry rather than rebuilding entities under a generated identity. Keep a Home Assistant backup and review any proposed registry removals before confirming a repair.
Upgrading from 1.x? These earlier breaking changes also apply:
- Illuminator entities: Channels explicitly reporting a white emitter without a supported MiddleLight, NearLight or FarLight brightness bank no longer get an Illuminator light. Update affected automation and dashboard references.
- Camera-less indoor monitors: Affected VTH monitors lose camera-related entities for a local camera they do not have. Retire references to unavailable camera and motion controls.
- HTTP indoor-monitor identities: Generated identities migrate to reported serials while preserving entity IDs. An unresolved conflict stops setup; a backup failure retries without mutating the registries. Keep your Home Assistant backup and resolve logged conflicts before retrying.
- Recorder alarm inputs: Replace references to old per-camera Alarm Local sensors with the corresponding physical recorder terminal sensors.
- Recorder relay outputs: Replace references to duplicate per-channel relay switches with the recorder’s relay switches.
Release candidate for 3.0.0. Requires Home Assistant 2026.8.0 or newer. The latest stable release remains 2.1.0.
New in 3.0.0-rc.2
- Bootstrap NTP settings on devices that hold no server yet: A nonempty NTP table without a server field now receives Enable, Address, Port and UpdatePeriod together. The initial poll interval defaults to ten minutes unless supplied. Timezone settings are preserved, existing-server behavior and fallback lists remain unchanged, and every requested setting is checked on read-back. Empty tables and refused or ignored writes still report failure. (#1170)
- Find doorbell image controls in VideoInOptions: Mirror and Image Rotation can use the reported Flip, Mirror and Rotate90 fields from the alternate table. VideoImageControl remains the first choice, preserving existing camera routing. The chosen table and channel are used for polling, state, writes and failure recovery. Rotation still offers only 0° and 180°, never writes Rotate90, and refuses unsupported or unknown Rotate90 states. (#1171)
Important
Hardware coverage: The contributor measured Mirror/Flip writes and their reverts on a VTO2000A running 3.120.0000.0.R: the picture changed, the other table fields stayed unchanged, and the original picture/settings were restored. This is evidence for that device and firmware.
NTP limitation: The same device’s own web UI was measured storing NTP settings. The integration’s exact four-field bootstrap bundle was checked with simulated device responses and real cache invalidation; it has not been verified on physical hardware. Storing the settings is not proof that the device synchronizes its clock.
Included from 3.0.0-rc.1
- Apply the existing no-camera answer to infrared support: Indoor monitors reporting VTH and an explicit own-video false answer no longer create the Infrared light or Infrared Mode select. Placing the rule in the shared capability check also stops the recurring infrared Lighting read on those monitors. Cameras, doorbells, monitors reporting a camera, and monitors with an unknown camera answer retain the previous capability behavior. (#1168)
- Repository documentation: Include the directory-map corrections from 2.1.1-rc.1: 38 integration modules, about 35,000 lines, 32 services and the missing audio.py/late.py descriptions. AGENTS.md is not part of the HACS integration ZIP. (#1167)
The #1168 contributor supplied diagnostics from two VTH5221D monitors reporting a Lighting table containing only Mode=Off, without a brightness bank. This release uses the device’s existing explicit no-camera answer; absence of a dimmer alone does not decide infrared support. Hardware measurements were supplied by the contributor.
Validation
The combined reviewed integration passed 5,775 tests, including all three real-ffmpeg conversion cases. All 360 Python files pass Black 26.10.0. Five independent NTP checks exercise real shared-cache invalidation, exact bootstrap fields, empty-table refusal and silently ignored settings. Four independent image-control checks exercise the real entity/coordinator/client path, table/channel selection and failure recovery. Skipping port read-back makes its independent check fail; forcing writes to the primary image table makes both fallback wire checks fail. The merged source tree matches the tested combined tree exactly.
Release CI validates HACS, Hassfest, formatting, the full test suite, tag/manifest agreement, ZIP layout and HACS visibility. The 59-file downloadable ZIP is verified byte for byte against the tagged integration files.
This release inherits the remaining hardware and channel-search limitations described in the 2.1.0 release notes, including unverified targeted Gamma/Style writes, autofocus response-body/recorder behavior, and the channel-search progress race. NTP hardware limits are stated above.
Full changelog: 2.1.0...3.0.0-rc.2
Changes since the previous RC: 3.0.0-rc.1...3.0.0-rc.2