BlogContact

Release Notes

What's new in boneIO Black?

What's new in the application?

On this subpage, you will find all the information regarding new versions of the application as well as the changes occurring within them.

πŸš€ Upgrade Instructions

  1. Use the WebUI auto-update β€” navigate to System Update and click "Update"
  2. Or via SSH: pip install --upgrade boneio==1.4.4
  3. Restart the application

boneIO v1.4.4 Release Notes - Newest release!

v1.4.2 (2026-06-03)

πŸ› Bug Fixes

System Migration Helper (boneio-migrate)

  • Tolerant systemctl reload/restart: Migration helper no longer fails when reloading or restarting a service that isn't currently active. This fixes the critical issue where setup_boneio.sh failed to apply migrations during image building because mosquitto was stopped at the time.

##✨ New Features

OLED Shutdown Messages

  • Late-phase shutdown service (boneio-oled-shutdown.service): New systemd service that displays "System stopped. Safe to unplug." on the OLED screen after the network has gone down during shutdown.
  • Restart-aware ExecStopPost: boneio.service now only shows "Shutting down..." during actual system shutdown. During systemctl restart boneio, the OLED skips the stop message and goes directly to "is starting...".

πŸ“¦ Migration: v1.4.3

This release includes migration v1.4.3 which automatically:

  1. Installs boneio-oled-shutdown.service (late-phase shutdown OLED message)
  2. Updates boneio.service with shutdown-aware ExecStopPost

The migration runs automatically on first startup after upgrade.

v1.4.2

v1.4.2 (2026-06-03) Hotfix β€” TimePeriod object handling in input forms.

πŸ› Bug Fixes

  • EventForm crash β€” parseMs() called .match() on TimePeriod objects ({milliseconds: 220}) instead of strings, causing Uncaught TypeError: val.match is not a function. Replaced with the existing convertTimeperiodToMilliseconds() utility.
  • BinarySensorForm wrong bounce_time β€” typeof data.bounce_time === 'number' always returned false for TimePeriod objects, displaying default 120ms instead of the configured value. Fixed using convertTimeperiodToMilliseconds().

πŸ›‘οΈ Improvements

  • Pre-commit hook β€” Added tsc --noEmit TypeScript type-check before vitest to catch build-breaking issues (unused variables, type errors) before commit.

v1.4.1

v1.4.1 (2026-06-03) Hotfix release with SSL certificate renewal and Modbus chart improvements.

πŸ› Bug Fixes

  • SSL certificate renewal β€” _cert_needs_refresh() was checking file modification time (st_mtime) instead of the actual X.509 expiry date. If the cert file was touched by backup/copy/rsync, mtime would reset and the certificate would never be renewed even after expiry. Now parses the real Not After date using openssl x509 and refreshes when the cert expires within 14 days.

  • Modbus sparkline charts for energy meters β€” shouldRenderHistory() only whitelisted temperature/humidity sensors (by name pattern or unit %, Β°C, rh%). Energy meters with units like W, kWh, V, A, Hz, VA, var were excluded. Changed to show charts for all numeric read-only sensors that have a unit of measurement.

v1.4.0

Changelog β€” v1.4.0 v1.4.0 (2026-06-03)

Major release β€” remote device support, irrigation overhaul, AI-assisted configuration, system monitoring, and dozens of bug fixes.

πŸ”Œ Remote Devices

  • Remote Outputs (remote_outputs) β€” register switches and lights from remote ESPHome/MQTT devices as first-class outputs with ON/OFF/TOGGLE, area assignment, and interlock groups.
  • Brightness control β€” remote ESPHome lights get a real-time brightness slider with smooth animations and debounced API calls.
  • Remote Binary Sensors β€” subscribe to binary sensors on ESPHome devices for use as action triggers.
  • WLED brightness support β€” WLED devices support brightness via the remote device API.
  • Remote cover tilt β€” tilt actions for venetian blinds on remote boneIO devices.

🌿 Irrigation

  • Multi-zone irrigation controller β€” schedules, per-zone intervals (run_every_n), water source management, master valve/pump support, and a full dashboard UI with real-time zone countdown.
  • Sequential water source activation β€” water sources with multiple outputs activate in order with configurable delays (output_start_delay, output_stop_delay). Deactivation in reverse order.
  • Interlock-aware activation β€” if an output is blocked by an interlock during water source activation, already-activated outputs are rolled back and a fault notification is sent.
  • Zone enabled toggle β€” each zone can be individually enabled/disabled. Reflected in HA dashboard.
  • Zone run_every_n skip counter β€” zones with run_every_n > 1 correctly track their skip counters across multi-cycle runs. next_run_iso, next_run_pretty, skip_count published as valve entity attributes in HA.
  • Next Run Time sensor β€” device_class=timestamp sensor showing when the next scheduled run will occur (e.g. "in 19 hours").
  • HA Dashboard YAML generator β€” one-click export of a complete Lovelace dashboard per controller, with zones, durations, schedules, and controls.
  • Irrigation AI assistant β€” AI-powered configuration wizard for creating irrigation setups from natural language descriptions.
  • Schedule timezone fix β€” schedule times are now treated as local time instead of UTC.
  • Dynamic duration max β€” zone duration max is based on configured duration + 20 min (clamped to [30, 120]) instead of hardcoded 1440 min.
  • Single-zone optimization β€” controllers with 1 zone skip unnecessary auto_advance, reverse, and next_valve entities.
  • Manual start responsiveness β€” clicking "Start" responds instantly; pump/valve delays no longer block the UI.

πŸ“Š System Monitoring

  • System sensors (CPU, Disk, Memory)* β€” percentage-based sensors with rich attributes:
    • Disk: disk_total_gib, disk_used_gib, disk_free_gib
    • Memory: memory_total_gib, memory_used_gib, memory_available_gib
  • Instant sensor values on UI load β€” system sensors are included in WebSocket initial states, eliminating the 10-60s blank period after opening the UI.
  • Sensor attributes in UI β€” GraphCard displays compact attribute chips (e.g. Total: 28.65 GiB | Used: 2.28 GiB | Free: 25.19 GiB) with dynamic unit extraction.
  • HA json_attributes_topic β€” system sensors publish attributes as JSON, visible in HA's "More Info" dialog without extra entities.

🏠 Home Assistant Integration

  • suggested_area in HA discovery β€” irrigation and other entities auto-assign to the correct area.
  • json_attributes_topic β€” system sensors expose detailed metrics as HA entity attributes.
  • Entity category reorganization β€” entities placed in proper HA categories (diagnostic, config).
  • Republish states on MQTT reconnect β€” ensures HA always has the latest state.
  • Output groups in HA β€” groups exposed with member outputs visible.
  • Remote output interlock β€” interlock checks enforced for remote outputs and dimmer brightness.

πŸ–₯️ OLED Display

  • Screensaver timer reset β€” screensaver countdown now resets from the last button press instead of the first.
  • Sleep behavior fix β€” fixed single-click sleep toggle.

πŸŽ›οΈ Covers

  • Venetian tilt restore β€” new tilt_restore_after_close option automatically restores the previous tilt angle after moving to an intermediate position. Skipped at extremes (0% / 100%).
  • Cover relay dropdown fix β€” filter now accepts outputs with output_type of cover, none, or missing.
  • Cover position precision β€” fixed float/int rounding drift during movement.

πŸ€– AI Configuration Assistant

  • Output type awareness β€” AI correctly distinguishes between lights (brightness actions) and switches (toggle/on/off).
  • Remote device guidance β€” AI knows about remote outputs, covers, and binary sensors.
  • Irrigation valve type filter β€” AI explicitly avoids "light" type outputs for irrigation.

🧩 UI / UX Improvements

  • Input type change without restar β€” switching between "Event Entity" and "Binary Sensor" takes effect immediately.
  • InputsView navigation fix β€” long press on an input correctly navigates to its settings (not areas).
  • Clipboard in HA addon iframe β€” fixed navigator.clipboard.writeText() in HA ingress iframe with document.execCommand('copy') fallback.
  • Sidebar section grouping β€” remote and restart-required sections visually grouped.
  • Template duplication β€” deep-clone templates with adjusted IDs.
  • Irrigation zones β€” collapsible accordion with reorder buttons and add-at-bottom.
  • Live graphs β€” sparkline charts in sensor/modbus views.
  • Modbus device temporary disable β€” turn off a single Modbus device without removing config.

πŸ› Bug Fixes

  • Irrigation run_every_n skip counter desync β€” _eligible_zones() side effects caused counters to diverge. Split into pure filter + single-call counter update.
  • Config cache staleness β€” invalidate_config_cache() now clears ConfigHelper._config_cache.
  • TimePeriod empty string crash β€” frontend-sent "" for optional TimePeriod fields no longer crashes Cerberus.
  • Remote output MQTT state β€” remote outputs now publish state to MQTT (previously HA showed "unavailable").
  • Interlock bypass on dimmer brightness β€” brightness changes now check interlock before allowing > 0.
  • ESPHome entity type routing β€” control_output() auto-detects entity type instead of always delegating to control_switch().
  • ESPHome connect-before-lookup β€” entity commands no longer silently fail when entities haven't been populated.
  • Output group form ID β€” form now uses correct boneio_output reference.
  • Interlock Groups API β€” fixed always-returning-empty due to wrong attribute reference; added config-based fallback.
  • Frontend brightness deduplication β€” WebSocket now considers brightness field in deduplication.
  • Frontend slider jump-back β€” eliminated stale ESPHome callback processing.

boneIO Black v1.3.1 Release Notes

Maintenance release focused on stability, type safety, and Home Assistant integration improvements.

✨ New Features

  • πŸ”§ Support for legacy 0.2 / 0.3 boards β€” added device definitions for older boneIO Black hardware revisions
  • 🏠 HA Update entity changed to binary sensor β€” firmware update entity is now a binary sensor for cleaner HA integration

πŸ› Bug Fixes

  • Cover position precision β€” fixed inconsistent float/int conversion in cover position calculations, eliminating rounding drift during movement
  • Cover timestamp tracking β€” fixed incorrect timestamps in cover state updates
  • HA discovery device_class β€” fixed null device_class in Home Assistant autodiscovery by storing it directly on the input object
  • HA Update entity state during firmware restart β€” update entity now correctly shows 'Updating' state during firmware restart instead of going offline
  • Event form click handling β€” fixed click event handling in the WebUI event configuration form

♻️ Refactoring

  • Unified device_class β€” refactored device_class to be a single source of truth on the input object (GpioBaseClass)
  • Removed gpio_mode β€” deprecated gpio_mode setting, now handled by kernel overlay
  • Removed CAN System settings β€” CAN configuration migrated to system migrations, manual settings no longer needed
  • Type safety improvements β€” fixed multiple type checker issues across the codebase

⚠️ Duplicate Entity Fix in Home Assistant

If you see duplicated entities for your boneIO Black device in Home Assistant after updating:

  1. Go to Home Assistant β†’ Settings β†’ Devices & Services β†’ Devices tab
  2. Enter Selection Mode, select the boneIO Black devices with duplicated entities, and delete them
  3. Open the boneIO controller's WebUI β†’ Settings β†’ Communication Protocols β†’ MQTT tab
  4. Click "Delete and resend HA Discovery"

This will cleanly re-register all entities without duplicates.

boneIO Black v1.3.0

Spring release β€” packed with new features, protocol support, and a complete WebUI overhaul!

✨ New Features

  • 🌿 Multi-zone irrigation controller β€” schedules, per-zone intervals, water source management, master valve support, and a full dashboard UI with real-time zone countdown. All controlled also from Home Assistant!
  • πŸŽ›οΈ Conditional actions β€” time ranges, date ranges, and entity state conditions with AND/OR logic. Actions fire only when conditions are met
  • πŸŽ›οΈ Each output now has individual action capabilities β€” fine-grained control over what each output can do
  • πŸ“Š Live graphs added to the WebUI dashboard for real-time data visualization
  • πŸ“Š Simple history view for sensors β€” see past values at a glance
  • ⏱️ Timed output with HA input β€” change the timer value directly from Home Assistant, no YAML restart needed
  • πŸ”Œ LoxUDP protocol β€” initial integration for Lox UDP communication
  • πŸ”Œ CANOpen protocol β€” initial support for CAN bus industrial devices
  • 🏠 Experimental ha_child_devices mode for HA discovery β€” organize entities as child devices
  • 🏠 Output groups visible in HA β€” output groups are now exposed to Home Assistant with their member outputs, so you can see which outputs belong to each group
  • 🏠 Entity category reorganization β€” entities moved into proper HA categories (diagnostic, config) for a cleaner HA UI
  • 🏠 Republish states on MQTT autodiscovery resend β€” ensures HA always has the latest state after reconnects
  • πŸ”§ 48Γ—4A legacy board support β€” added device type for older 48-output / 4A boards
  • πŸ”§ Tilt support for remote devices β€” venetian blinds on remote boneIO devices now support tilt actions
  • πŸ“¦ Modbus entity naming β€” custom entity names for Modbus devices
  • πŸ“¦ Temperature sensor rounding β€” configurable decimal rounding for temperature readings
  • πŸ“¦ Serial number in backup filenames β€” easier identification of backup files across multiple devices

πŸ› Bug Fixes

  • OLED refresh interval β€” fixed display refresh timing causing stale or flickering content
  • Modbus WebUI loading time β€” significantly reduced initial load time of Modbus device view
  • Modbus communication isolation β€” other Modbus traffic is now blocked while using WebUI tools, preventing bus conflicts

♻️ UI / UX Improvements *Hundreds of UI fixes across the entire WebUI β€” padding consistency, card styling, shadow standardization, responsive layout improvements

  • System Settings overhaul β€” redesigned Current Version, Available Versions, App Permissions, CAN Permissions, and Migrations sections
  • Migrations table β€” professional table layout with descriptions, status badges, and GitHub source links

boneIO Black v1.2.0

A lot of new features!

  • possibility to register boneIO Black in boneio.app domain
  • with that possible to install boneIO Black as PWA app!
  • redesigned logger to easier find bugs
  • add I2C scanner in webui tools
  • add support for more remote devices: WLED presets, WLED brightness,
  • add GET/POST /api/log-level endpoints for temporary runtime debug toggle
  • add sortable columns to UISettings tables
  • add smart toggle option for covers
  • add cycle option to long click, so you can cycle across presets, brightness etc while holding button
  • add new templates! Alarm Panel and Thermostat
  • add possibility to backup boneIO Black from boneIO Black Dashboard
  • prepare boneIO Black for boneIO Edge Temp & Humidity sensor *mobile improvements for Settings sidebar and RemoteDeviceTable *add possibility to shutdown system from OLED + button control!

Bug fixes:

  • Cross-debounce: ignore release too close to press
  • fix version comparision dev vs non-dev version
  • add Modbus inter-device delay and timeout config

boneIO Black v1.1.0

  • add LWE03MW and CT F&F energy meters
  • add N4DSC08 temperature RS485 board
  • fix modbus device liquid -sensor extra data inputs
  • add support for 32x5A config in boneio.
  • add firmware update manager with GitHub release checking and Home Assistant integration
  • fix binary sensor loading into HA
  • add initial WLED control support
  • fix time parsing in UI
  • add duration time every 200ms for long click
  • add modbus creator helper tool
  • add new Ultrasonic distance sensor
  • fix webui authentication

boneIO Black v1.0.0

It's finally ready. Almost 10 months of our work!

This app is almost rewritten from scrach. The app need special prepared Debian13 by boneIO. It has device tree prepared for boneIO Black.

This version will work only on Debian 13. Versions 0.x won't work on Debian13!

Breaking changes:

  • new option name for entities which can contain any character

  • id is now lowercase, no spaces, it is generated automatically from device perspective (eg device_id_input_id - boneio_in03)

  • change pin option to boneio_output or boneio_cover in actions

  • topic prefix is no more configurable from settings! It's hardcoded as serial number Changelog:

  • new modular managers of the app, which can reload it's parts without restarting the app

  • libgpiod support for inputs *new i2c driver

  • new rewritten input module

  • new One wire module

  • new Modbus module

  • new cover module

  • new events module

  • new webui with clickable Settings from User Interface! Almost no more yaml! If boneio: section is present.

  • rewritten output group

  • new modbus searcher function from webui

  • new options for virtual sensors

  • add option to provide NodeRed via nginx proxy (port 8443)

  • change pin option to boneio_output or boneio_cover in actions

  • add ability to change Mosquitto password from webui

  • start even with bad MCP

  • add option to manage areas from Black UI

  • add option to change hostname from webui

  • switch from nginx to caddy proxy and let's host https (unsecure)

  • add new actions for event entities: triple click and sequence actions! double_then_long, single_then_long, double_then_single

  • add autodiscovery of other boneio black's

  • show toast in inputs when something is clicked

  • add ability to control other Esphome devices in network (light, switch, cover)

  • add support for older 0.2 boards

  • add option to go to entity setting if long clicked in Card

  • add triple click and possibility to send sequences to mqtt

  • add backup to disk

  • add option to revert firmware via UI

πŸ™ Acknowledgments

Thank you to all users who provided feedback and bug reports during the development cycle!

πŸ“ž Support