ControlBird 0.1.46

v0.1.46
Platform

Features

  • reports: A new Reports app. Write a report template the way you write a page, drop in live data blocks (tables, charts, aggregates), and generate a run that is frozen exactly as produced, so reading it later shows what was generated, not what the data looks like now. Six starter templates are included. A run exports as PDF, self-contained HTML, Markdown or zipped CSV straight from the viewer, and a failed export says so instead of leaving you waiting on a download that never arrives. Reports also appears on nodes that existed before this release, not only fresh installs.
  • email: Mail connections can now receive mail, not just send it, over IMAP or directly from a Microsoft 365 mailbox, with the transport chosen explicitly and limits on what inbound mail may store enforced before anything arrives. Gmail and Microsoft 365 accounts connect with a sign-in instead of copied server settings, and outgoing mail can authenticate as the connected account. An outbound message can carry an attachment, a rule chain can send one specific email on request, the device view shows whether an email actually went out, and an alarm is raised when a mail connection's authorization genuinely breaks.
  • history: Any field now shows its history even when no historian table was ever configured for it, answered from the node's own change record, including what a value held at a given instant and how that answer is known. The same history is available to scripts and to ControlBird AI.
  • ControlBird AI: The configuration assistant is now called ControlBird AI. Hand it a floor-plan image and it extracts the real geometry (rooms, diagonal walls, doors) into a working schematic, then binds the plan's rooms to live equipment in one step, with an approval card that shows exactly what will be placed and a report of any room left without a device. It refuses placements that would bind to nothing rather than drawing dead visuals, can put a schematic on a dashboard, and adds navigation buttons that place and label themselves. OpenRouter joins the selectable providers, temperature and reply-length limits are configurable, rate-limited turns wait the requested time instead of failing, a truncated reply is labelled as such, and a turn whose actions failed can no longer report itself as a success.
  • discovery: Device discovery now lives inside the Device Manager tree. Scan results form their own group with live scanner status, each discovered device has a detail pane, pairing happens straight from the tree, and several discovered devices can be added in one pass.
  • publishing: Serving points out over a server connection is now discoverable: drag a point onto a connection to publish it, or take a guided path with a review step. The platform suggests a free protocol address, shows where a point is already published, and unpublishes safely. A served point can be paused without deleting it, and Modbus block reads and writes now work across points configured separately.
  • nfc: An NFC tag can open a chosen layout when scanned, full-screen as a kiosk or inside the shell, and what the tag shows is authorable. A tag keeps working after the node behind it is replaced.
  • layouts: Layouts are now a library rather than a single switch: keep as many as you need, assign one to a user, and layouts built by ControlBird AI land in the library alongside your own.
  • alarms: Severity rules are validated when configuration loads, an alarm that can never fire says so, and fixing a misconfigured alarm no longer needs a restart. A severity change the node was down for is repaired on return, and an alarm enabled while the node was down re-arms. Operators can acknowledge alarms while configuration stays with engineers.
  • configuration: Configuration can now carry real file content: 3D assets and alarm tones ship as files rather than encoded text. Uploads stream instead of holding the whole file in memory, downloads stream at any size, and file content nothing references any more is reclaimed without ever touching a file still in use.
  • time: Time-range pickers now state and honour the timezone they mean.

Bug Fixes

  • security: Stored credentials are sealed at rest across the board (integration connection credentials, account access and refresh tokens, signing keys, TLS private keys and auto-login keys), and reading a credential requires the specific permission for it rather than any signed-in session. A user can no longer grant themselves a role, starting an account-connect flow requires an authenticated operator, sign-in tokens are never accepted on the strength of a built-in default secret, the PostgreSQL-compatible query interface fully verifies token signatures, and secrets are never rendered into email bodies.
  • portability: Exported configuration now carries every cross-reference by path instead of by node-local id, so dashboards, chart cards, badges, schematics, reports and rule chains keep their bindings when configuration is imported on another node, and cloning a branch of the device tree remaps the references inside it.
  • reliability: A node that cannot read its saved state no longer starts empty over it, a rebuilt node no longer resurrects data from its previous life, and saved changes are never discarded ahead of what has actually been made durable.
  • sessions: Two simultaneous requests from the same user no longer evict each other's session.
  • protocols: A live protocol endpoint picks up a configuration change without a restart, re-enabling a controller brings its engine straight back, and a point mapping whose configuration becomes valid later is registered when it does.
  • ui: A live theme switch retints the whole schematic rather than half of it, a gauge bound to live data ticks while an unbound card stops inventing a number, opening a floor plan in the builder no longer deletes its devices, a tap on mobile reaches the app you can actually see, and an attached image renders as a thumbnail instead of as raw text.

Performance

  • memory: A burst of large writes no longer multiplies memory use while it is being written out.
  • clustering: A node stops re-sending its own values that did not change, and an internal status list is no longer broadcast ten times a second.