# Change Log

All notable changes to `homebridge-nest-accfactory` are documented in this file.  
Pre-release notes for alpha and beta versions are maintained separately in `PRERELEASE_NOTES.md`.  
This project adheres to [Semantic Versioning](http://semver.org/).

### Known Issues

- Some newer Nest/Google cameras may use different video sizes or aspect ratios, causing the video to appear slightly cropped or not fill the screen correctly
- Enabling HomeKit Secure Video (HKSV) on battery-powered cameras will significantly reduce battery life
- Motion sensing on wired Nest Protect devices may report incorrect states due to recent firmware changes
- Video from Google Home-hosted streams may be slow to start up

## v0.4.4 (2026/10/20)

### ⚠️ Compatibility Changes

- Cameras and doorbells now require **FFmpeg 7.1 or newer**, including the video and audio codecs required by the plugin
- Homebridge 2 users must update to **Homebridge 2.4.0 or newer**; Homebridge 1.x remains supported on Node.js 22 and 24
- Added Node.js 26 beta support when using Homebridge 2.4.0 or newer
- Home/Away, Weather, Thermostats, Temperature Sensors and Heat Links now require the Google API to be enabled; Nest REST-only accounts no longer provide these accessories. Weather forecasts continue to use Nest REST polling
- Removed the HomeKit chime switch and the `chimeSwitch` option; configure the indoor chime and Quiet Time in Nest/Google Home instead

### 📹 Cameras and Doorbells

- Fixed a regression caused by a protobuf library update that reconnected NexusTalk cameras when two-way talk ended
- Fixed live view closing when the HomeKit microphone was idle, improving two-way audio availability before and between conversations
- Improved live-view startup time for cameras connected through Google Home and recovery after damaged or incomplete video packets
- Improved cleanup after failed or interrupted streams and recordings, preventing delayed callbacks from stopping replacement sessions or reopening streams after they were closed
- Improved HomeKit Secure Video recording startup and compatibility across software and hardware encoders
- Fixed Raspberry Pi hardware encoder detection and selection, including systems where the encoder is not `/dev/video0`; unavailable or unusable hardware encoders fall back to software encoding [@pace8](https://github.com/pace8)
- Fixed Raspberry Pi streaming failures with some video settings, recordings that would not appear or play in the Home app, and intermittent Raspberry Pi 4 HKSV timeouts [@pace8](https://github.com/pace8)
- Restored camera off/on control through the Home app recording settings after a camera was switched off in the Nest app [#345](https://github.com/n0rt0nthec4t/homebridge-nest-accfactory/issues/345) [@go-faustino](https://github.com/go-faustino)
- Fixed standalone Nest Cam battery devices being identified as wired floodlight cameras
- Restored camera activity polling and corrected Google camera event handling, including vehicle and package events
- Default to two simultaneous live viewers per camera; `maxStreams` supports one to four viewers independently of HKSV recording
- Added `ignoreIndoorChime` to allow HomeKit doorbell alerts while the indoor chime is disabled. It defaults to `false`; Quiet Time continues to silence HomeKit doorbell alerts

### 🏠 Accessories and Controls

- Fixed Home/Away status failing to update in the Home app or incorrectly showing Away during startup
- Fixed weather accessories sometimes failing to appear during startup and restored regular weather updates
- Improved accessory discovery when device details arrive across separate updates, including thermostats, Heat Links, Protects, locks and cameras
- Fixed thermostat Off changes made in the Nest app not appearing correctly in HomeKit
- Fixed thermostat humidity controls and readings when heating/cooling was off or humidifier and dehumidifier capabilities changed
- Fixed temperature sensor active status not updating when the thermostat selected a different sensor
- Corrected fan and hot-water timer deadlines and initial thermostat and Heat Link values
- Improved external Daikin thermostat controls, including switching fan or dehumidifier operation off and keeping controls independent across multiple thermostats
- Failed device commands now report errors instead of updating the plugin's saved state as though the change succeeded

### 🔐 Reliability and Privacy

- Improved account reauthorisation, reconnect handling and shutdown so retired connections cannot restart background work or overwrite current device state
- Improved handling of Nest and Google updates so incomplete or rejected Nest data does not overwrite the preferred Google device state
- Improved support-dump redaction for credentials and personal details, and limited diagnostic collection and output
- Preserved configuration file permissions during legacy migration and restricted access to backups containing credentials

### 🔁 Maintenance

- Updated HomeKit support and dependencies while retaining existing accessory identities and Eve history compatibility
- Improved stream failure diagnostics and expanded automated regression coverage

## v0.4.3 (2026/08/11)

### ⚠️ Compatibility Changes

- Homebridge 2 users must update to **Homebridge 2.3.1 or newer** before installing this release
- Updated Eve history support for Homebridge's new storage system
  - Existing Eve history data remains compatible and is not migrated, rewritten, or lost

### 🛠️ Fixes

- Fixed a Nest × Yale lock startup regression affecting some accessories [@alexis-andino](https://github.com/alexis-andino) / [@DigitalFokus](https://github.com/DigitalFokus)
- Fixed thermostat setpoint changes from HomeKit so heat and cool targets update the correct Nest setpoints
- Fixed Homebridge UI-X validation warnings from optional blank Home/Device placeholder rows [@starlessblack](https://github.com/starlessblack)
- Fixed Heat Link Eve Home history and status handling

### 📹 Camera Streaming Improvements

- Major internal rewrite of camera and doorbell streaming to improve reliability across live view and HomeKit Secure Video
- Improved WebRTC streaming for Google Home-hosted cameras, with smoother live playback and fewer short audio interruptions
- Improved audio/video synchronisation during live camera playback
- Improved handling of brief network jitter, packet reordering, and stream timing drift
- Improved handling of large, high-resolution WebRTC keyframes using bounded limits that adapt to the source resolution and bitrate
- Improved WebRTC video jitter-buffer performance by reducing repeated packet scans, sorting, and queue rebuilding
- Reduced repeated H264 frame scanning and unnecessary keyframe copying when preparing video output
- Added WebRTC connection and media statistics to support dumps, including ICE/DTLS state, candidate details, round-trip time, packet loss, jitter, NACKs, and PLIs
- Improved HomeKit Secure Video (HKSV) startup and decoder compatibility
- Improved stream recovery and reconnect handling for Nest and Google Home camera sessions
- Improved camera handling after Nest/Google credential refreshes, backend redirects, and device migration events
- Reduced ffmpeg timestamp warnings during live streaming and recording

### 🔁 Behaviour Changes / Improvements

- Improved thermostat and Heat Link service updates when optional fan, humidifier, dehumidifier, hot water temperature, or hot water boost features appear or change
- Improved Nest/Google account connection, retry, token refresh, and shutdown handling
- Improved Nest Protect smoke, carbon monoxide, wired/battery, and heat/temperature status handling
- Aligned device naming across plugins for more consistent HomeKit accessory names

### 📦 Dependency Updates

- Updated `chalk` from `5.6.2` to `6.0.0`
- Updated `protobufjs` from `8.0.3` to `8.7.2`
- Updated `werift` from `0.23.0` to `0.24.4`, removing the transitive `werift-ice` and `ip` dependency chain
  
## v0.4.1 (2026/05/07)

### ⚠️ Compatibility Changes

- Minimum supported Homebridge 2.x version is now **2.0.2**
  - Includes Homebridge-side fixes required for reliable HomeKit Secure Video behaviour
  - Earlier Homebridge 2.x releases are no longer officially supported

- Minimum supported FFmpeg version is now **6.1**
  - Older FFmpeg 6.0 builds are no longer officially supported

### ✅ Homebridge 2.x

- Removed the beta tag from Homebridge 2.x support
- Homebridge 2.x is now considered stable and fully supported when running **Homebridge 2.0.2 or newer**

### 🛠️ Fixes

- Fixed handling of Nest Heat Link hot water temperature data [@dhemesbrahma-commits](https://github.com/dhemesbrahma-commits)
  - Prevents HomeKit warnings when hot water temperature is unavailable
  - Hot water temperature controls are now hidden when unsupported by the connected system

- Improved FFmpeg detection and compatibility
  - Better support for macOS Homebrew installations, including Apple Silicon systems
  - Improved automatic FFmpeg discovery across supported platforms
  - Improved handling of custom FFmpeg paths and startup failures

- Improved camera streaming stability and cleanup
  - Fixed ffmpeg process exit handling for live streams, recordings, and two-way audio
  - Helps prevent stale HomeKit camera sessions after unexpected ffmpeg exits
  - Improved cleanup of reconnect, observe, and streaming timers during shutdown and reconnect cycles

- Improved protobuf and gRPC handling
  - Added shared protobuf schema caching to reduce repeated protobuf loading across camera and transport modules
  - Improved stability of long-running Google observe and streaming connections

- Improved HTTP retry handling
  - Retry logic now avoids retrying authentication and client-side failures such as `401`, `403`, and `404`
  - Reduces unnecessary API requests and improves overall reliability

- Improved internal logging and diagnostics
  - Improved handling of failed background API and gRPC requests to avoid unexpected plugin instability

### 📦 Dependency Updates

- Updated `protobufjs` from `8.0.1` to `8.0.3`
- Updated `werift` from `0.22.9` to `0.23.0`

## v0.4.0 (2026/04/30)

### ⚠️ Breaking Changes

- Dropped support for Node.js 20
  - Minimum supported Node.js version is now **22**
  - Node.js 20 is approaching end-of-life and is no longer actively tested
  - This plugin is now tested against Node.js **22 and 24**, aligning with newer Homebridge environments

- **HomeKit Secure Video (HKSV) is now mandatory for all cameras**
  - The `hksv` configuration option has been removed
  - All cameras now expose HKSV capability by default
  - Recording behaviour is controlled via HomeKit settings in the Apple Home app

- Plugin debug logging is now **independent of Homebridge debug mode**
  - Running Homebridge with `-D` will no longer enable debug output for this plugin
  - Debug output is now controlled by the `debug` configuration option (Verbose Logging)

- Weather station configuration is now **per-home**
  - Global `weather` and `elevation` options have been removed
  - Weather settings must now be configured using the `"homes"` array
  - Existing configurations may need to be updated to re-enable weather stations

### ✨ New Features

- Added support for a new `"accounts"` section in `config.json` to enable multiple Nest and Google accounts  
- Added plugin-level **verbose logging** option  
  - Enables debug output without requiring Homebridge debug mode  
  - Verbose log messages are displayed in gray to mirror Homebridge debug mode for easier identification  
- Added `logMotionEvents` option (global and per-device, enabled by default)  
  - Controls logging of motion events for cameras, doorbells, and Nest Protect devices  
- Added support for Nest Hub Max (1st gen, wired)  
- Added new **Home/Away accessory** per structure  
  - Exposes Nest home/away state as a HomeKit **OccupancySensor**  
  - Replaces occupancy reporting previously exposed on thermostat devices  

### ⚙️ Configuration & GUI

- Updated Nest/Google account configuration in the GUI to a combined **Accounts** section  
- Added **Home Settings** section to the GUI configuration  
  - Configure settings for individual Nest or Google homes  
- Added **Device Settings** section to the GUI configuration  
  - Configure global device-level options  
  - Supports per-device overrides  
  - Not all configuration options are exposed in the GUI and may require manual configuration  

### 🎥 Camera & Motion

- Updated camera motion handling — only a single motion sensor is now exposed per camera  
- Improved reliability of camera and doorbell snapshot images  
- Improved camera streaming stability and performance 

### 🔁 Behaviour Changes / Improvements

- Prefer Google API data when a device is available from both Google and Nest APIs
- Disabled weather stations are no longer reported as "excluded" in logs  

### 🛠️ Fixes

- Fixed an issue affecting live view and HKSV recording on migrated Nest/Google cameras  
- Fixed an issue affecting audio talkback on some older migrated Nest/Google cameras  
- Fixed an issue where the Google API observe connection could terminate on slow networks, causing the plugin to stop  
- Fixed an issue where Nest Protect settings would not update when Eve history integration was enabled

### 🧹 Internal Changes

- Refactored core modules to align with the updated base class  
- General code cleanup and stability improvements  

### 📚 Documentation

- Updated `README.md` with documentation for:  
  - `"accounts"` configuration section (`./README.md#Account Configuration`)  
  - Updated `"devices"` configuration section (`./README.md#devices`)  
  - Updated `"homes"` configuration section (`./README.md#homes`)  
  - Verbose logging and Support Dump options  
  - HKSV behaviour (recording is triggered by general motion events and does not support individual recording filters)   

### 📦 Dependency Updates

- Removed `undici` dependancy 
- Updated `protobufjs` from `8.0.0` to `8.0.1`

## v0.3.9 (2026/02/18)

- General code cleanup and stability improvements
- Fixed remaining issues with snapshot handling on some Nest/Google cameras
- Added strict checks to ensure the ffmpeg binary includes all required libraries for streaming from Nest/Google cameras, as per `README.md`
- Added battery level reporting for Nest/Google battery powered cameras (experimental)
- Updated `README.md` with a recommendation for a pre-built ffmpeg binary option
- Refined thermostat mode and temperature adjustments from the Home app

## v0.3.8 (2026/02/06)

- General code cleanup and stability improvements
- Fixed WebRTC streaming issues when a home does not contain any devices [@benbean303](https://github.com/benbean303)
- Fixed an issue where snapshots could appear empty on some Nest/Google cameras
- Added support for Nest Cam Outdoor (2nd gen, wired)
- Added support for Nest Doorbell (3rd gen, wired)

## v0.3.7 (2025/12/17)

This marks the final release of 2025. A huge thank you to everyone who’s used the plugin, reported issues, tested changes, and contributed feedback throughout the year. Your support genuinely helps shape the project.

- Fixed parsing of time values in the configuration file [@currybeast](https://github.com/currybeast)
- Added support for **Nest Cam Indoor (3rd gen, wired)**
- Added support for **Nest Doorbell (2nd gen, wired)**
- Added support for **Nest Thermostat (3rd gen v2)**
- Updated `README.md` with instructions to obtain Google issueToken and cookie using Safari (the only supported method)
- Refined repetitive connection status logging to only appear in debug mode [@MorelloCherry](https://github.com/MorelloCherry)

## v0.3.6 (2025/12/01)

- General code cleanup and stability improvements for Homebridge 2.0 compatibility
- Fixed an issue where hot water temperature control was not exposed for certain Nest Heat Link configurations [@josdegroot] (https://github.com/josdegroot)
- Added support for a new `"homes"` section in `config.json` to enable per-home configuration options
- Updated `README.md` with documentation for the new `"homes"` configuration section (`./README.md#homes`)
- Updated `README.md` to clarify Google authentication requirements, including that the required cookie **should start with `SIDCC=`**
- Removed the deprecated `"elevation"` device-specific configuration option

## v0.3.5 (2025/11/21)

- General code cleanup and stability improvements
- Fixed battery level reporting for Nest Thermostat (2020) 
- Updated instructions for obtaining access token for Nest accounts
- Updated instructions for obtaining issue token and cookie for Google accounts  
- Updated disclaimer in `README.md` to clarify support for official Homebridge installations only
- Added debug logging for thermostat mode and temperature changes received from outside of HomeKit [@MorelloCherry](https://github.com/MorelloCherry)

## v0.3.4 (2025/10/17)

- General code cleanup and stability improvements  
- General typo and grammar corrections  
- Fixed handling of the per-device `"hksv"` setting  
- Fixed thermostat cooling stage 3 checking  
- Fixed thermostat fan state checking
- Fixed periodic camera snapshots when camera is turned off
- Updated camera resource assets

## v0.3.3 (2025/08/23)

- Refined timeout warnings for camera and doorbell snapshot capture  
- Fixed video feed on/off control for HKSV-enabled cameras  
- Fixed battery percentage and transition state reporting for Nest × Yale Locks  
- Fixed handling of the global `"exclude"` device setting  
- Fixed support for `~` (home directory) in the `"ffmpegPath"` option  
- Fixed fan-related errors for Nest Thermostats  
- Improved authorisation handling: Nest/Google login will no longer retry repeatedly on `Unauthorized` or `Forbidden` responses  
- Fans that support only a single speed will now expose **only On/Off**, without the `RotationSpeed` control

### Thanks
Special thanks to [@Edwin](https://github.com/DigitalFokus) for testing and feedback on refinements to Nest X Yale support!

## v0.3.2 (2025/08/09)

- Now Homebridge Verified
- Refactored core to use the updated base class
- Refactored plugins for better codebase separation
- General code cleanup and improved stability
- Improved camera streaming and HKSV recording
- Initial support for video hardware acceleration during recording
- Initial support for Nest x Yale locks (more testing needed)
- Fixed missing audio on newer Nest/Google cameras
- Fixed missing Nest/Google cameras after Google Home migration
- Fixed startup errors caused by invalid thermostat temperature settings
- Fixed doorbell notifications
- Fixed EveHome integration (history recording)
- Fixed interference from other `undici`/`fetch` instances in Homebridge
- Fixed issue when setting device properties via Nest API
- Added support for hot water temperature control on compatible EU/UK thermostats — [see README](./README.md#devices)
- Removed support for using Nest Heat Link devices as room temperature sensors
- Removed standalone Docker version

### Thanks
Special thanks to [@Daniel](https://github.com/no1knows), [@Matthew](https://github.com/mphyde), [@Erik](https://github.com/esille), [@Neil](https://github.com/BertrumUK) and [@Guy](https://github.com/grhall) for testing and feedback on this release!
 
## v0.3.1 (2025/06/16)

- Minor stability improvements affecting standalone docker version

## v0.3.0 (2025/06/14)

- General code cleanup and stability improvements
- Introduced plugin-style architecture for Nest/Google devices
- Updated `README.md` to reflect changes to the `"devices"` section in configuration
- Prevent excluded devices from being restored from Homebridge cache
- Added internal support for selecting active temperature sensor (not yet exposed to HomeKit)
- Fixed loss of custom devices section when using the plugin config UI
- Fixed motion services being recreated when restored from Homebridge cache
- Fixed missing devices for Nest FieldTest accounts
- Added hot water heating boost (on/off) support for compatible EU/UK Thermostats
- Added support for Nest Heat Link devices as room temperature sensors

### Deprecation Notice
- Support for the standalone Docker version of this plugin is planned to be deprecated in an upcoming release. While it currently remains functional, future updates may no longer include Docker-specific build support. Users are encouraged to transition to standard Homebridge installations where possible.

### Known Issues

- Audio from newer Nest/Google cameras and doorbells is currently silent (blank audio output)
- The ip npm package has a known security advisory [GHSA-2p57-rm9w-gvfp](https://github.com/advisories/GHSA-2p57-rm9w-gvfp); this is used indirectly via the werift library

### Thanks
Special thanks to [@Daniel](https://github.com/no1knows) and [@Brad](https://github.com/bcullman) for testing and feedback on this release!

## v0.2.11 (2025/04/17)

- General code cleanup and bug fixes

## v0.2.9 (2025/03/23)

- General code cleanup and bug fixes
- Support for Nest Protect(s) in Google Home app
- Default location to check for ffmpeg binary is now `/usr/local/bin`
- Logs Nest Protect(s) self testing status

## v0.2.5 (2024/12/10)

- Fix for dropped sub modules.. Do not know why!

## v0.2.4 (2024/12/10)

- Fix for camera video stream when audio disabled

## v0.2.3 (2024/12/06)

- General code cleanup and bug fixes
- Fix for HomeKit Secure Video recording for migrated camera/doorbell to Google Home

## v0.2.2 (2024/10/05)

- Improved handling of configuration file with docker/standalone version
- Warning about the use of legacy configuration options with docker/standalone version

## Known Issues

- Audio from newer Nest/Google camera/doorbell devices is still blank
- npm package [ip](https://github.com/advisories/GHSA-2p57-rm9w-gvfp) has severity issue. This is being used in external library (werift)

## v0.2.1 (2024/10/05)

- HomeKit support for multiple speeds on thermostat(s)
- Audio library in docker release went walkabout. Added back in

## Known Issues

- Audio from newer Nest/Google camera/doorbell devices is still blank
- npm package [ip](https://github.com/advisories/GHSA-2p57-rm9w-gvfp) has severity issue. This is being used in external library (werift)

## v0.2.0 (2024/10/04)

## Breaking Change

Unfortunately, from version **0.2.0**, I've made some breaking changes in the code to help move forward with the project. 
So, what does this mean for you, the end user.
1) You'll need to remove all previously discovered devices from HomeKit before adding them back in after upgrading to this version
2) If using Homebridge version, remove any cached acccesory data associated with this plug-in
3) If using docker/standalone version, remove the 'persist' folder
4) Re-add devices to HomeKit once version upgraded
5) Any HomeKit Secure Video recordings will be lost
6) Will need to re-configure camera streaming and notification options
6) Any automations will need to be re-created in HomeKit
7) History in EveHome app will be lost

Apologies for this change, as I can understand what an inconvience and frustration it will be :-(

## Changes

- General code cleanup and bug fixes
- Common configuration between Homebridge plug-in and docker/standalone versions
- Seemlessly allow Nest/Google devices to be migrated between Nest <-> Google Home apps

## Known Issues

- Audio from newer Nest/Google camera/doorbell devices is still blank
- npm package [ip](https://github.com/advisories/GHSA-2p57-rm9w-gvfp) has severity issue. This is being used in external library (werift)


## v0.1.9 (alpha)

- General code cleanup and bug fixes
- Aligned version numbering to old Nest_accfactory repo
- Audio talkback support for newer Nest/Google camera/doorbell devices

## v0.0.7 (alpha)

- General code cleanup and bug fixes
- Updated streaming/recording support for newer Nest/Google camera/doorbell devices
    - No incoming audio, just video stream

## v0.0.6 (2024-09-14)

- Fix for two/way audio starting on non-enabled HKSV camera/doorbells

## v0.0.5 (2024-09-13)

- General code cleanup and bug fixes
- External dependancy reductions, dropped pbf and axios libraries
- Nest Cam with Floodlight support with light on/off and brightness control
- Fixed issued with setting range temperatures on Nest Thermostat(s)

## v0.0.4 (2024-09-07)

- Camera/Doorbell support for snapshots and live video re-introduced
- HomeKit Secure Video recording support re-introduced
- Should support Nest Thermostat 4th Gen (untested)
- *might* have finally resolved audio sync issues with live video and recording
- Depending on the libraries present in ffmpeg binary, we limit functionality for camera/doorbells
    - missing libspeex = no two-way audio
    - missing libfdk_aac = no audio
    - missing libx264 = no streaming/recording
- Cleanup fix for when removing a camera/doorbell from Nest/Google
- Fix for virtual weather device when missing configured city and/or state details
- Fix for retrieving data from Nest systems when using both a Nest and Google accounts
- Initial support for newer Nest/Google camera/doorbell devices (streaming/recording - coming)

## v0.0.1 (2024-08-27)

- Inital re-coding from Nest_accfactory code base. These projects will now share a common code base
- Camera/Doorbell support currently removed will re-worked
