bluetooth: Bluetooth Low Energy is now a supported protocol. Pair a nearby peripheral from the Network Discovery panel in Device Manager, browse the services and characteristics it exposes, and map any of them to data points you can read, write, or subscribe to for live updates. A paired device carries straight into the create-device wizard with its details already filled in.
bluetooth: Peripherals in range of a remote site work from wherever you are. Pairing and every read and write after it are routed to the adapter that actually saw the device, so a Bluetooth sensor at another site behaves like a local one.
rule chains: The Write Field block can now be given a value directly instead of a code expression. It shows the control that fits the field being written: a dropdown of that field's own labels for choice fields, number inputs, a checkbox, a date and time picker, or an entity picker. Previously a choice field could only be set by knowing its numeric position, and typing the label itself silently wrote nothing.
device manager: Discovery results now show which connection and which node found each device, so on a multi-node system you can tell where a result came from.
Bug Fixes
connections: Saved endpoint credentials (API keys, passwords, and tokens) had been treated as missing since late June, so requests went out unauthenticated even when a valid credential was stored. It showed up as authentication failures from integrations that need a key, such as Google TTS rejecting calls as coming from an unregistered caller. Credentials are now read correctly everywhere.
connections: Changing a protocol-specific setting on a data point that was already running had no effect until something else forced a reconnect. The affected point now resubscribes with the new setting straight away. This applies to MQTT, CoAP, and OPC UA.
limits: A node started without explicit subscription limits configured came up with its protocols and data point mappings switched off, and refused logins with "Session limit reached" when nothing was near capacity. An unset limit now means unrestricted rather than disabled.
historian: The time range picker was shifted by your UTC offset, so "Today" could display as starting at 4:00 AM and query a window hours away from the one shown. Ranges now match the times displayed. Anyone operating at UTC was unaffected.
voice: In cloud-managed deployments, Google Home accounts that had never had an identifier set shared a single default, so devices and status reports from one account could surface against another. Each account now uses its own identifier automatically. Endpoints with an identifier set by hand are left alone; if your devices do not appear after updating, relink the integration in the Google Home app to re-sync them.
voice: A node with both Google Home and Alexa installed lost whichever of the two started second, because they used the same internal port. Both now run together.
voice: Google Home now stops with a clear error when its access token is missing, instead of continuing without one.
rule chains: Running a chain from the editor reported "Execution completed with unknown status" even when it succeeded, and left the status bar on Idle. The real result is now reported.
script manager: Execution History listed every run as UNKNOWN with a 0% success rate next to a summary card reporting successes, and discarded any run older than about six minutes. It now shows real run records, keeps about a day of history, and the program list updates in place after a run instead of continuing to read "Never run".
integrations: Uninstalling an integration could delete a component that another installed integration was still using, leaving the survivor running against something that no longer existed. Shared components are now kept until the last integration using them is removed.
integrations: A failed install left behind whatever its setup had already created. Orphaned programs and schedules kept running against definitions that had been removed, filling the logs with errors. A failed install now rolls back everything it created.
integrations: When an install fails because the script engine stopped, the error now says so instead of reporting a two-minute timeout, which pointed at the wrong cause.
scripts: A script waiting on a stalled read or write could tie up a shared worker for as long as it took, and enough of them starved unrelated work. Those calls are now bounded and return an ordinary error the script can catch and retry.
scripts: Deleting a scheduled program left its schedule running, firing every two seconds against a program that no longer existed until the service was restarted. Schedules are now removed with their program.
permissions: Scripts could bypass field permissions by using single-value reads and writes, which were not checked the way batched operations were. All operations are now checked.
permissions: A user whose first assigned role had been deleted logged in holding that dead role and ended up with no effective permissions. Login now selects the first role that still exists.
reliability: Installing an integration that created many items at once could kill the background data handler inside several services at the same time. Those services stayed up but stopped responding to changes, which was hard to spot. They no longer fail this way.
reliability: Deleting an entity emitted a phantom "created" event alongside the delete to everything watching, and a badly formed parent relationship could hang permission checks indefinitely. Both are fixed.
dashboards: Chart cards now scope their history queries correctly and draw each series separately, instead of mixing readings from unrelated points into one line.
schematics: The Target Entity field no longer discards what you type, navigation buttons sit where they are placed and work outside the builder, and style changes made to a shape now reach the screen instead of applying only after a reload.
interface: Creating a theme now saves it, the layout editor properties panel stays inside its sidebar at the correct width, sidebars with several sections are no longer clipped, entity search no longer repeats the same result, field pickers stay scoped to what is selected, and the plant and HVAC icons that dashboards already referenced now render.
Performance
permissions: Permission checks are substantially cheaper on every operation. The location of the item being checked is now resolved in a single request instead of one per level of the tree, inherited roles and name lookups are cached and refreshed only when the model changes, and shipped permissions state how they should be evaluated rather than being interpreted from scratch each time.
rule chains: A Delay block no longer occupies a CPU core for the length of the delay, and a chain sitting in a delay now shuts down promptly instead of holding up a restart.
throughput: Data operations are now dispatched as they arrive rather than waiting on a fixed interval, cutting latency under load.