Download
Download
Get CeresFlows for your platform.
Latest Version:
v1.1.96
- ● **Unified Expander Test Dialog & Declarative Commissioning Actions:** Introduced a dedicated hardware testing and commissioning center for expander modules (Modbus RTU relay boards, I2C ADC, and IO expanders). Features direct channel toggling and automated 2-second pulse testing without requiring pre-configured virtual devices, live visual indicators showing free versus occupied channels with actuator safety overrides, and full Declarative Service Actions support (Modbus Slave ID re-addressing, baud rate switching, and Master All ON/OFF commands) with automated database configuration synchronization.
System Requirements
Operating System
Windows 10/11 (64-bit), Linux (modern 64-bit distributions), or Raspberry Pi OS (64-bit).
Processor
1GHz or faster 64-bit (x86 or ARM64). 2 cores recommended for high-load installations.
Memory
1GB minimum for headless systems. 2GB+ recommended for desktop usage with local UI.
Storage
50MB for installation. Additional space recommended for long-term execution logs (SQLite).
Network
Local network access required for controller discovery and dashboard access.
v1.1.96
07-09-2026Added
- - **Unified Expander Test Dialog & Declarative Commissioning Actions:** Introduced a dedicated hardware testing and commissioning center for expander modules (Modbus RTU relay boards, I2C ADC, and IO expanders). Features direct channel toggling and automated 2-second pulse testing without requiring pre-configured virtual devices, live visual indicators showing free versus occupied channels with actuator safety overrides, and full Declarative Service Actions support (Modbus Slave ID re-addressing, baud rate switching, and Master All ON/OFF commands) with automated database configuration synchronization.
Fixed
- - **Seamless Multi-Tier Historical GDD Calculation:** Resolved an issue where Growing Degree Days (GDD) heat accumulation stalled or appeared to freeze near the target goal due to background trace compaction pruning raw records older than retention threshold. The GDD calculator now employs a hybrid two-tier reading model, seamlessly querying 30-minute daily min/max aggregates from the compact WARM layer and combining them with high-resolution execution traces, ensuring complete season-long heat accumulation without data gaps.
v1.1.95
06-09-2026Added
- - **Device Service Actions Menu & Advanced Hardware Commands:** Introduced an advanced hardware service tab in the Device Inspector, allowing operators to execute model-specific firmware commands, Modbus register configuration (Slave ID, Baud Rate), zero tare calibrations, and EEPROM flash persistence directly from the UI with safety confirmations and automatic configuration synchronization.
v1.1.94
06-09-2026Fixed
- - **Modbus RTU FC05 Relay Switching Support on ESP32 Microcontrollers:** Resolved an issue where Modbus RTU relay expander modules failed to toggle or switch output channels on ESP32, ESP32-S3, and ESP32-C6 controllers. Added dedicated handling for Function Code 05 (`Write Single Coil`) across 32-bit MCU firmware routines, correctly framing coil activation (`0xFF00` / `65280` for ON, `0x0000` / `0` for OFF), validating 8-byte echo response packets, and supporting FC01/FC02 coil bitmask status reads.
v1.1.93
05-09-2026Fixed
- - **I2C Relay Power-On Glitch & Expander Lifecycle Initialization:** Resolved an issue where all relay channels on I2C expander modules (such as XL9535 / PCA9535) appeared as ON or activated simultaneously upon controller reboot or system restart. Introduced an automated Expander Lifecycle initialization sequence (`INIT`) executed upon controller connection, reversed command sequencing to guarantee output data updates precede direction register activation, and added a driver safeguard in `universal_driver` to detect and nullify uninitialized Power-On Reset (`0xFF`) states.
v1.1.92
04-09-2026Added
- - **ESP32-S3 N16R8 Controller Hardware Support & Unified Firmware:** Added comprehensive hardware integration for the high-performance ESP32-S3 N16R8 microcontroller (Dual-Core 240MHz, 16MB Flash, 8MB Octal PSRAM). Includes complete hardware pinout mapping (A1–A10 WiFi-safe analog ADC1 channels, D0–D48 digital channels), dedicated virtual bus definitions for I2C and RS485/Modbus RTU hardware serial, automated Octal bus safety pin locks to prevent hardware crashes, rich visual port manager badges, and unified modular firmware with dynamic command discovery.
v1.1.91
03-09-2026Added
- - **Dynamic Value Block for Flow Automation:** Added a dedicated Dynamic Value block (`DYNAMIC_VALUE`) to the Flow Editor and backend automation engine. Enables adaptive parameter adjustments (such as graduated EC/pH dosing or moisture-based irrigation scaling) based on an ordered table of condition rules with first-match evaluation, full unit-awareness via `UnitAwareInput`, reorderable rule cards, configurable fallback default values, and rich execution telemetry in the Flow Console.
v1.1.90
02-09-2026Added
- - **Simple Mode Actuator Control Panel & Touch Duration Stepper:** Added a dedicated touch-optimized control panel for pumps, valves, and relays with automated initial hardware status reading, large interactive hero power button with live pulse state indicators, unified single-line quick timer presets (`10s`, `30s`, `1m`, `5m`), an exact numerical stepper with unit selection (seconds, minutes, hours), real-time countdown timer, and detailed activation history logs with daily execution metrics.
Fixed
- - **Non-Destructive Actuator & Relay State Polling:** Resolved a hardware glitch where refreshing or querying digital output devices (such as pumps, valves, and relays) caused momentary coil flickers or unintended state toggles. Removed forced `pinMode(pin, INPUT)` invocations from microcontroller firmware routines (`DIGITAL_READ`) across target profiles (`arduino_uno_r4_wifi`, `firebeetle2_esp32_c6`, `firebeetle2_esp32_e`), enabling pure passive reading of output registers without dropping coil drive.
- - **Actuator Execution History in Device Traces:** Resolved an issue in historical telemetry queries where trace records containing only run duration (`actuator_duration`) were omitted, ensuring all automated relay and pump activation events populate reliably in device history logs.
v1.1.89
01-09-2026Added
- - **Simple Mode — Field Operator Panel & Touch Dashboard (Phase 1):** Introduced an alternative, touch-optimized user interface designed specifically for small touchscreens, field tablets, and simplified greenhouse operation. Features an isolated layout with a collapsible 5-tab touch dock navigation (with 1-click full-screen hide/expand), a persistent sticky header with live program status and an instant Advanced View toggle, an Active Program hero card displaying real-time time window states (`DONE`, `ACTIVE`), trigger cycle intervals, and next-check countdowns, and a customizable touch sensor grid with an interactive sensor picker dialog.
v1.1.88
01-09-2026Added
- - **Save Active Program Modifications to Template:** Added ability to export live configured slots, triggers, and condition rules from the Active Program dashboard directly back to the original automation template (with overwrite confirmation) or save as a brand new independent template in the library with customized naming and description.
- - **Visual Flow Replica Mapping & Quick Jump in Variable Configuration:** Enhanced the Program Variable Configuration modal with interactive flow twin highlighting, replica count badges (`[🔗 2x]`) with multi-trigger tooltips, and one-click quick jump chips to easily identify and navigate synchronized flows across multiple triggers.
v1.1.87
31-08-2026Added
- - **Advanced Time & Calendar Trigger Strategies:** Expanded `Current Time` trigger conditions with dedicated evaluation strategies, allowing automations to execute on specific weekdays, periodic interval days (e.g. every 3 days relative to crop start date), or exact calendar dates. Enhanced the Active Program timeline hero cards with real-time countdown, cycle progress badges (e.g. `Day 1/3`), and next scheduled activation indicators.
- - **Smart Variable Synchronization Across Trigger Flow Replicas:** Enhanced the Program Variable Configuration modal with automated parameter synchronization across identical flows shared among multiple triggers. All common variables default to a locked, synchronized state—allowing operators to configure hardware constants and targets once and have them propagate instantaneously across all triggers. Individual parameters can be unlocked independently with one click for custom fine-tuning (e.g., custom dosing volumes or specific EC targets per trigger), while retaining one-click re-synchronization to master values without losing context.
- - **Global Top-Level Ambient Pause Banner & Timeout Safeguards:** Added a high-visibility, ambient warning banner positioned at the very top of the application across all pages whenever an automated program is paused. Features a live countdown timer with adaptive urgency styling (shifting to an animated alert pulse when under 5 minutes), quick-action buttons for instant resumption (`Resume`) and duration extension (`+30 min`), and a direct shortcut to pause settings.
- - **Fail-Safe Pause Timeout Actions & Expiry Modal:** Added configurable behavior for when a program pause duration expires in Settings. Operators can select between `Auto-Resume (Safe for Plants)`—which automatically restarts automation so crops never miss critical irrigation or climate cycles—and `Emergency Stop`. When the timeout expires in the active browser session, an interactive dialog prompts the operator with options to resume immediately, extend by 30 minutes, or stop the program.
- - **Direct Flow Execution History Links in Trigger Log:** Enhanced the Trigger Log journal dialog with instant 1-click drill-down into historical flow executions. Single-flow trigger firings render as direct interactive status buttons, while multi-flow sequences provide a clean dropdown menu listing each executed step in order. Clicking any entry opens the Flight Recorder, state inspector, and step-by-step console logs for that exact historical execution.
- - **Flow Execution History, Audit Controls & Surgical Deletion:** Enhanced the Flow execution history system with complete lifecycle management and granular audit controls. Operators can filter sessions by source (Program Schedule vs Manual Intervention / Tests), filter by quick time presets (24h, 7d, 30d) or pick specific dates with a dedicated Calendar picker, view live duration statistics (Min, Avg, Max) calculated from real execution traces, surgically delete individual erroneous or test session records, and clear all historical runs for a specific flow with safety confirmation dialogs.
- - **Flow Flight Recorder & State Inspector:** Upgraded the Flow Viewer into an analytical flight recorder for deep diagnostics of complex automation runs. Features include an interactive Variable State Timeline showing start-to-end values with color-coded delta indicators and chronological mutation history for all runtime variables, a dedicated Block Inspector activated by clicking any canvas node to display total execution counts, initial/final readings, condition decisions, and dispatched hardware commands, dynamic console buffer sizing (100, 500, or All logs) with synchronized block/variable filtering, and direct JSON audit log exports.
Changed
- - **Modernized Automation Templates (Programs) Dashboard & Schedule Insights:** Redesigned the Templates management interface to match system-wide UI/UX standards, introducing situation-aware KPI metric cards (Total Programs, Active in System with live heartbeat pulse, Total Time Slots, Integrated Flows), real-time search across program/slot/flow names, status filter tabs, interactive schedule tooltips detailing time windows and check intervals, contained flow chip mappings, copyable ID tags, and one-click program activation controls.
- - **Modernized Flows Dashboard & Real-Time Program Assignment Mapping:** Completely redesigned the Flows management page with situation-aware top KPI metric cards (Total Flows, Active in Programs, Ready to Run, Total Runs), real-time search, status filter tabs, and interactive column sorting. Enhanced the Programs column with smart assignment badges that prominently highlight the active controlling program with pulse indicators and provide detailed multi-template tooltips. Upgraded row actions to a primary Edit button with an organized dropdown menu for testing, history, duplication, export, and deletion.
v1.1.86
30-08-2026Added
- - **Flow Execution History & Visual Replay Modal:** Added a comprehensive execution history modal accessible directly from the Flows list page. Operators can view a clickable execution count badge on each flow, open an audit log of past sessions sorted chronologically with status indicators (Completed, Error, Running), filter by status or search by date/trigger, and launch an instant 1-click visual diagram replay showing exact node execution paths, sensor values, and console logs.
- - **Binary Arithmetic Expressions ($Target = A \text{ [OP] } B$) in Flow Calculations:** Upgraded Calculations / Variable blocks (`MATH_VARIABLE`) to full binary expression evaluation. Operators can now perform arithmetic between two independent variables in a single block without temporary accumulator nodes, while preserving minimalist single-value interfaces for SET, ABS, and CLAMP operations.
- - **Inline Absolute Value (|x|) in Flow Calculations / Variable Blocks:** Added a direct "Return absolute value (|x|)" option inside Calculations / Variable blocks (`MATH_VARIABLE`) right below the operation selector on both canvas nodes and the properties panel. When calculating differences (e.g. `Target - Current`), operators can immediately obtain non-negative values without chaining an extra ABS node, streamlining flow layouts and saving canvas space.
Fixed
- - **Flow Health Diagnostics Variable Usage Matrix:** Resolved an issue where variables used in Calculations / Variable, Wait, and Log blocks were not detected in the Variable Usage Matrix, causing active variables to be mistakenly flagged as unused.
v1.1.85
29-08-2026Added
- - **Consecutive Checks Evaluation for Sensor & Index Triggers (Noise Immunity):** Added a new evaluation mode for physical sensor and calculated index trigger conditions requiring a customizable number of consecutive matching readings (e.g. 2, 3, or more checks) before an automation flow is triggered. If a transient electrical spike or momentary fluctuation drops the reading back to normal, the counter automatically resets, preventing accidental or premature irrigation and equipment activation.
- - **Data-Driven Evaluation Capabilities for Calculated Indices:** Configured index evaluation options via the central index catalog (`supportedEvaluationModes`). Indexes such as Substrate DryBack natively support Live and Confirmed Checks while hiding Rolling Averages to prevent irrigation latency; atmospheric indexes (VPD, LTD, Dew Point) support all three modes; and cumulative integrators (DLI, GDD, ET₀) automatically hide the evaluation selector for a clutter-free interface.
- - **Unified Sensor Rolling Average Engine & Clean Dashboard Display:** Centralized rolling average computations across automation triggers and remote monitoring with multi-timeframe resolution, timezone synchronization, and combined active/archive telemetry querying. Enhanced the Active Slot Hero trigger cards with a streamlined live-to-average status comparison (`↳ Live: X% ➔ 5m Avg: Y%`) and live confirmation counters for both sensors and indices (`↳ Live: X% · Confirmed: 1/2`).
v1.1.84
28-08-2026Changed
- - **Sensor Rolling Average Evaluation in Trigger Conditions:** Introduced configurable evaluation modes for trigger conditions on physical sensors, allowing operators to choose between instantaneous readings and historical rolling averages over custom time intervals (e.g. 5m, 15m, 30m, 1h). The period input natively supports flexible time units (seconds, minutes, hours) via `UnitAwareInput` and eliminates trigger flapping caused by transient sensor spikes or momentary cloud cover over solar radiation sensors.
- - **Autonomous Indicator & Metadata Mirroring in CFL Remote Hub:** Integrated generic, self-describing indicator metadata across DTO pipelines and the remote Web Viewer, enabling rolling average status lines and agronomic telemetry trends to mirror automatically in the Hub without manual frontend updates.
- - **Time-Bounded Substrate DryBack Peak Stabilization:** Refactored the substrate dryback calculation engine to dynamically anchor peak moisture readings to the exact post-irrigation stabilization window ($T_{run}$ to $T_{run} + \text{settlingMinutes}$). DryBack calculations now maintain absolute precision across multi-day drydowns and overnight transitions, remaining stable through system restarts without scanning historical telemetry limits.
- - **Extended Time Units for Index Data Freshness (Seconds, Minutes, Hours, Days):** Enhanced the Max Data Age configuration with unit-aware inputs supporting seconds, minutes, hours, and days, enabling intuitive thresholds for sensors operating on low-frequency nocturnal cycles (e.g. 30–60 min).
- - **Automation Safety Alerts in Calculated Indices:** Added clear visual safety warnings in the Index Configuration modal explaining that automated triggers automatically pause execution if sensor telemetry exceeds the Max Data Age window, preventing unintended actions during sensor communication dropouts.
- - **Live Agronomic DryBack Sub-Row in Active Program Monitoring:** Active timeline trigger cards now render a contextual sub-row beneath Substrate DryBack conditions displaying the full irrigation lifecycle at a glance ($V_{peak} \rightarrow V_{current} \text{ with target threshold}$ e.g., $\text{55.5\%} \rightarrow \text{55.3\%} \cdot \text{Target: } \le \text{53.5\%}$), giving operators immediate situational awareness of physical substrate moisture.
v1.1.83
27-08-2026Added
- - **CeresFlows Link (CFL) — Remote Greenhouse Monitoring:** Introduced an entirely new subsystem that allows operators to remotely observe their greenhouse from any device with a browser — without static IP addresses, VPN configurations, or port forwarding. The system works by establishing a secure, always-on outgoing connection from the local system to a lightweight relay server (Hub), which web viewers then connect to on demand.
- - **Zero Infrastructure Setup:** No router configuration required. The local CeresFlows system initiates all connections outward, meaning it works on mobile data, standard home internet, or behind any corporate firewall.
- - **On-Demand Data Delivery:** Sensor readings, relay statuses, controller states, and the active program's runtime are only transmitted when a viewer actively requests them — not as a constant stream. This keeps bandwidth usage near zero between refreshes and protects the local system from any load.
- - **100% Read-Only — Safety Guaranteed:** In this release, the remote connection is strictly observational. No external party can start, stop, or alter any automation, trigger any relay, or modify any setting through the remote link. The local system remains 100% autonomous and continues operating normally even if the internet is unavailable.
- - **Bank-Grade Authentication:** The connection uses a cryptographic challenge-response protocol (HMAC-SHA256) with single-use tokens. The shared secret never travels over the network in readable form, and every authentication token expires after 30 seconds and can only be used once, preventing replay attacks.
- - **Privacy-First Snapshot Sanitizer:** Remote snapshots contain only meaningful operational data — sensor values, device statuses, and program state. Internal hardware addresses, calibration data, Wi-Fi credentials, and any other sensitive configuration are automatically excluded before transmission.
- - **Intelligent Refresh Caching:** If multiple viewers request a refresh at the same moment, the system issues only a single request to the local node and shares the response across all viewers simultaneously. This prevents any situation where multiple concurrent web sessions could overload the local Raspberry Pi or Android server.
- - **Resilient Auto-Reconnect:** If the connection to the relay server is interrupted (network drop, server restart), the local system automatically retries the connection with progressively increasing wait intervals, reaching a steady retry rhythm within 30 seconds. No manual intervention is needed.
- - **Web Viewer Dashboard:** A standalone web page (no installation required) provides a live view of all sensors, controllers, relays, and the active automation program across five tabs: Devices, Controllers, Dashboard (sensor reading cards), Analytics (Phase 2 placeholder), and Settings.
- - **System Audit Logging:** Every successful remote connection and every disconnection is recorded in the system event log, providing a complete audit trail for operators who want to know when and how the system was accessed remotely.
v1.1.82
26-08-2026Added
- - **Three-Tier Canvas View Modes (Minimal, Compact, Detailed):** Added a global 3-way view switcher in the Flow Editor toolbar allowing operators to adjust the diagram density to match their workflow:
- - **Minimal (Header-Only):** Collapses blocks to a sleek ~36px single-line bar displaying only block title, icon, status, and ports, enabling a bird's-eye view of complex 50+ node automation pipelines without canvas scrolling.
- - **Compact (Summary):** Standard clean layout highlighting device names, target variables, durations, and logic previews (~90px).
- - **Detailed (On-Canvas Controls):** Expands full interactive form controls, dropdowns, and input fields directly inside each node on the canvas.
- - **Automatic Vertical Spacing Scaling (Anti-Overlap Y-Scale):** Switching between `Minimal`, `Compact`, and `Detailed` modes automatically scales the vertical spacing ($Y$-coordinates) between nodes proportionally. Expanding into `Detailed` mode spreads blocks downward to prevent overlapping bodies, while collapsing into `Minimal` mode contracts spacing back together to eliminate empty gaps, paired with smooth animated camera centering (`fitView`).
- - **Individual Node View Mode Overrides:** Added a dedicated *View Mode* submenu to every block's `•••` action menu. Operators can individually override any block to `Minimal`, `Compact`, or `Detailed`, or leave it on `Auto (Global)` to seamlessly follow the top toolbar switcher.
- - **Refined Node Headers & Top-Left Corner Error Badges:** Block titles now dynamically expand to use 100% of available header space without truncation. Validation errors have been relocated to an illuminated top-left corner badge (`-top-2.5 -left-2.5`) with pulsating glow, eliminating any collision with the top-right `•••` action menu.
- - **Automation Template (Plan) Duplication:** Added the ability to clone automation templates directly from the Templates list table (`/templates`). The duplicate workflow creates a 100% independent copy with isolated slot and trigger identifiers (`UUID`), while automatically remapping linked trigger references in Fallback configurations (`FallbackTriggerID` and `FallbackConditions`).
- - **Flow Block Bypass & Disable:** Operators can now temporarily disable/bypass linear automation blocks (sensors, actuators, delays, calculations, logs) directly within the Flow Editor. Disabled blocks remain structurally connected on the canvas (preserving all inputs, outputs, and editable parameters) while the automation engine skips hardware execution in 0ms with a dedicated `bypassed` trace event.
- - **Node Action Menu (3-Dots):** Added a compact context menu (`•••`) to node headers across all block types with one-click actions to Enable/Disable, Duplicate, Change View Mode, and Delete blocks.
- - **Bypass-Aware Validation & Flow Health:** The Flow Validator automatically dismisses hardware errors for disabled blocks, allowing flows to be saved and executed even with disconnected/missing sensors. The Flow Health panel dynamically updates variable usage matrices to reflect active writers.
- - **Composite Trigger Condition Groups (Multi-Tier Logic):** Enhanced Automation Template triggers with support for multiple condition groups. Instead of being limited to a single flat list of conditions, operators can now create distinct condition groups, each with its own internal `AND` or `OR` evaluation logic:
- - **Sequential Short-Circuit Evaluation:** The automation engine checks groups in order from top to bottom (Group 1, Group 2, etc.). As soon as any condition group is completely fulfilled according to its internal operator (`AND` or `OR`), the trigger fires immediately and subsequent groups are skipped.
- - **Intuitive Visual Builder:** The trigger configuration dialog allows seamlessly adding new groups (`+ Add Group`) and choosing whether conditions inside each group must all be met (`ALL / AND`) or at least one must be met (`AT LEAST ONE / OR`), with clear visual `── OR ──` dividers separating group cards.
- - **Full Backward Compatibility & Live Monitoring:** Existing triggers remain fully functional without modification. Active program monitoring and time slot cards render all condition groups with live sensor readings and operational state.
- - **Live Trigger Pacing Cooldown Lock & Streamlined 3-Dots Action Menu:** Enhanced active program timeline monitoring (`ActiveSlotHero`) with real-time operational feedback for trigger pacing and protection intervals:
- - **Live Cooldown Lock & Countdown Badge:** When a trigger has a configured repeat interval (cooldown) and has executed, its status circle transitions to an illuminated padlock icon (`🔒`) accompanied by a live countdown badge (e.g., `🔒 01:45:20 (12:00)`). The timer ticks down every second, automatically unlocking (`●`) at the designated minute without requiring page refreshes.
- - **Streamlined 3-Dots Context Menu (`•••`):** Consolidated secondary header controls (Force Run, 1/2/7-Day Skip Submenu, Edit Settings, and Reordering) into a compact 3-dots action menu, saving over 120px of horizontal space and eliminating button clutter.
- - **Template View Pacing Tags:** Time slot cards in template builders render a subtle badge (e.g., `⏳ 120m`) to indicate configured cooldown protection at a glance.
v1.1.81
24-08-2026Added
- - **Reference Evapotranspiration (ET0 / ETc) Calculated Index:** Added a comprehensive crop water demand calculation engine that estimates daily water loss ($\text{mm/day} = \text{L/m}^2/\text{day}$) using solar radiation/DLI, air temperature, relative humidity, and crop coefficient ($K_c$).
- - **Instantaneous Transpiration Flux Telemetry:** The ET0 index card renders real-time transpiration velocity in $\text{mm/h}$ alongside today's cumulative evaporated volume, active DLI light energy, and crop factor $K_c$.
- - **Transpiration-Driven Irrigation Automation Triggers:** Added full support for **Step Accumulator Mode** (triggers precision irrigation flows every $X\text{ mm}$ of evaporated water today) and **Instantaneous Transpiration Rate Mode** (triggers cooling/misting during midday solar radiation spikes) with interactive in-modal live preview.
v1.1.80
24-08-2026Added
- - **Growing Degree Days (GDD) Calculated Index:** Added a comprehensive physiological heat accumulation index that tracks thermal energy delivered to crops above a biological baseline ($T_{base}$) with optional high-temperature cutoff ($T_{upper}$) from planting date to harvest.
- - **Phenological Target Progress & Smart Forecast ETA:** The GDD index card visually tracks accumulated degree-days against target harvest/milestone thresholds, featuring a real-time progress bar, daily gain telemetry, and a smart projected completion date (*Smart Forecast ETA*).
- - **Dedicated GDD Automation Triggers:** Added support for both **Daily Heat Progress Mode** (for daytime heat regulation and night compensation) and **Cumulative Milestone Mode** (for automated stage transitions and harvest flush programs) in Program Rules and Triggers with interactive in-modal live preview.
v1.1.79
23-08-2026Added
- - **Multi-Strategy Agronomic Index Automation Triggers (DLI, VPD, LTD, Dryback, Dew Point):** Operators can now utilize Calculated Agronomic Indices directly inside Program Rules & Triggers to automate environmental control, precision irrigation, and crop protection with multi-strategy evaluation:
- - **Daily Light Integral (DLI):** Supports **Step Accumulator Mode** (triggers irrigation every X mol of accumulated solar radiation, resetting virtually without losing fractional photons) and **Absolute Daily Target Mode** (monitors total cumulative light delivered from 00:00 to manage supplemental grow lights).
- - **Vapor Pressure Deficit (VPD):** Supports **Instantaneous Mode** (fast reactive microclimate control like foggers and fans), **Configurable Moving Average** (smoothed 15-minute window to filter transient door openings and prevent relay chatter), and **Daily Stress Duration** (tracks cumulative minutes above custom stress thresholds for deploying thermal shade screens or stress-recovery irrigation).
- - **Leaf Temperature Depression (LTD):** Supports **Instantaneous Mode** (real-time transpiration cooling check), **Configurable Moving Average** (smooths sensor shadows and airflow spikes), and **Daily Thermal Stress Duration** (tracks cumulative minutes of low/absent leaf cooling to protect crops against sunburn and stomata collapse).
- - **Substrate Dryback:** Supports **Relative Dryback Mode** (monitors moisture percentage drops since the last stabilized watering peak to create autonomous, self-adjusting closed-loop irrigation cycles) alongside a configurable settling window delay.
- - **Dew Point (Td) & Condensation Margin:** Supports **Instantaneous Mode** (real-time saturation temperature) and **Condensation Margin Mode** (evaluates the temperature delta between leaf/air surface and dew point to trigger automated dehumidification or heating before condensation droplets and fungal diseases like Botrytis can form).
- - **Dynamic In-Modal Contextual Guidance & Poka-Yoke Safeguards:** Added an interactive guidance callout box inside the Trigger Modal that dynamically renders agronomic explanations, practical recommendations, and warnings against exact equality (`=`) for continuous and accumulated metrics.
- - **Granular Index Trigger Control (UI Toggle):** Added a dedicated **"Enable for Triggers & Rules"** switch in the Create / Edit Calculated Index dialog. Operators can selectively choose which individual index instances appear in automation rule dropdowns, keeping trigger menus clean and uncluttered.
- - **Modular Agronomic Index Architecture:** Restructured calculated indices into independent, pluggable modules (VPD, DLI, LTD, Dryback, Dew Point) with dedicated calculation engines and isolated trigger evaluation pipelines, laying the architectural foundation for future agronomic indices (Evapotranspiration ET0, Growing Degree Days GDD, and Stress Integrals).
v1.1.78
22-08-2026Added
- - **Device Archives — Interactive Timeline Preview & Data Hygiene:** Transformed the Device Archives module into an active, interactive inspection hub. Added an interactive ECharts modal dialog (`ArchivePreviewDialog`) for inspecting standalone SQLite (`.db`) archives with a `dataZoom` time slider, full resolution zoom, and view switchers (Line, Area, Bar). Includes visual **Spike Selection & Deletion (Brush Tool)** allowing operators to box-select noisy readings or electrical glitches directly on the chart and permanently delete them from the archive database by record ID, alongside a **Date Range Trimmer** to prune preliminary test periods.
- - **Self-Describing Archive Metadata:** Enhanced the SQLite archive export engine to automatically compute and persist physical measurement units (`primary_unit`), metric selectors (`primary_metric`), aggregated statistics (`min_val`, `max_val`, `avg_val`), recording frequency (`sample_interval_sec`), and span duration (`data_span_days`) directly into the archive's `metadata` table, allowing any module to instantly render the dataset without schema guessing.
- - **Smart Advisor — Dual Data Source (Sensor Archive Integration):** Enabled Smart Advisor calibration models to run directly against long-term standalone SQLite archive files (`data_source: "archive"`) in addition to the live operational database, allowing operators to calibrate irrigation and climate models from months of accumulated historical data.
- - **Modbus RTU 2-Channel & 4-Channel Relay Expander Templates:** Added dedicated hardware expander templates for 2-channel (`modbus_2ch_relay`) and 4-channel (`modbus_4ch_relay`) Modbus RTU relay modules with automatic channel-based model mapping in the Relay Configuration Wizard.
Changed
- - **Device Archives — Action Menu & Safe Archive Deletion:** Replaced the single export button in the Device Archives table with a unified action menu (`...`) featuring Preview, Sync & Download, and a safe archive deletion workflow with confirmation dialogs.
Fixed
- - **Modbus RTU Relay Status Reading & Dynamic Variable Substitution:** Resolved Modbus RTU 8-channel relay expander status reading timeouts by switching to standard 8-coil batch reading (`FC01` with `startAddr: 0, len: 8`) and enabled automatic template variable evaluation (`substituteVariables`) in `responseProcessing` for all Modbus expander commands.
v1.1.77
21-08-2026Added
- - **Device Historical Data Archives (Backup & Restore):** Added a new **Device Archives** tab under Settings → Backup & Restore, giving operators the ability to export and incrementally accumulate the complete raw execution trace history for any individual sensor or actuator as a standalone, self-contained SQLite (`.db`) database file. Each archive includes a `metadata` table (device name, type, role, model, analytics label, initial creation, last synchronization timestamp, total records, full date range, source system) and a `raw_traces` table with a composite unique index — an immutable, incremental copy of every recorded event for that device (sensor readings, actuator doses in mL, duration, flow measurements, and the full JSON snapshot). The export operates in **Incremental Append/Merge Mode** (`INSERT OR IGNORE`) — existing historical records in the archive file are never erased, even if older raw traces have been pruned from the operational database after retention compaction (180 days). New traces are smoothly merged on demand. The export is triggered via a single click of the **Export & Download** button — the file is simultaneously supplemented on the server under `data/archives/sensors/{label}.db` and downloaded to the operator's browser. The table displays full device information, real consolidated historical ranges, archive status, and file size, with filtering by type (All / Sensors / Actuators) and free-text search. This feature lays the foundation for future Stage 2 algorithmic archival analytics (cycle detection, VPD aggregation, tank volume events).
v1.1.76
21-08-2026Added
- - **Smart Advisor System (New Module):** Introduced the **Smart Advisor** module — a dedicated analytical intelligence engine that inspects long-term historical sensor telemetry to generate precise, data-driven system configuration recommendations and physical calibrations. Accessible via a full-featured Template Gallery with Grid and List views, the module is designed as an expandable framework for specialized agronomical and automation tuning algorithms.
- - **Irrigation Calibration Template (Advisor):** Launched the inaugural Smart Advisor template, **Irrigation Calibration**, powered by a physical moisture curve State Machine (`DRYING` → `RISING` → `PEAK` → `DRAINING` → `STABILIZED`). By analyzing real historical absorption cycles across different substrate types (Rockwool, Coco, Coco+Perlite, Soil, Perlite) and irrigation methods (Drip, Direct Feed, Flood & Drain, Top Spray), the algorithm accurately calculates the substrate's true absorption fill rate (%/min), gravitational drainage run-off drop (%), and calculates the recommended pump run time to reach target moisture without over-saturating. Includes support for custom physical parameter overrides (settling window and rise slope threshold), auto-tuning sensitivity detection, and multi-tier calculation confidence indicators.
v1.1.75
21-08-2026Added
- - **Device Wizard — Multi-Dimensional Filtering (Protocol & Role):** Added dedicated **Role** (EC, pH, Soil Moisture, Soil/Water/Air Temperature, Water Level, Flow Rate, Solar/PAR, Leaf Temp, ORP, Weight Scale) and **Protocol** (RS485/Modbus, Analog 0-10V/4-20mA, Digital/GPIO, I2C, 1-Wire) dropdown filters to Step 2 of the Device Wizard. Operators can rapidly narrow down catalog models by physical wiring interface and measurement capability.
- - **Device Wizard — Selected Hardware Model Summary Banner & Quick-Change Action:** Added a dedicated hardware model summary banner at the top of Step 3 (Configure Node). Operators can instantly verify the exact driver model name, full description, operating voltage, physical interface, and default role with visual badges, along with a 1-click `[Change Model]` button to quickly return to Step 2 if needed.
- - **Device Wizard — Smart Companion Metrics Visibility & Expandable Family Viewer:** When searching for a host sensor by name, all companion metric cards are automatically revealed under the parent card. Under active role filters, a `[Show all N metrics]` toggle allows operators to expand and explore all integrated sensors of the hardware device family with clear role badges.
Changed
- - **Device Wizard — Unified Search & Filter Group-Aware Hierarchy & Smart Reset:** Unified search and filter behavior with automatic group-aware hierarchy: parent multi-sensors are displayed with `Includes Matching Metrics` badges, auto-expanding relevant children. Added automatic filter resets upon modal reopen/category navigation and an interactive Empty State with a 1-click `[Reset Filters]` button.
- - **Device Wizard — Intelligent Role Grouping & Instant Host Configuration:** Enhanced Step 2 with group-aware hierarchy: selecting a measurement role (such as EC) displays both standalone sensors and multi-metric host devices tagged with a prominent `Includes [Role]` badge, automatically filtering and expanding the relevant companion metric while hiding unrelated metrics. In search mode, clicking the `[+ Add Parent First]` button now instantly selects the required host sensor and advances directly to the configuration step in a single click.
v1.1.74
20-08-2026Changed
- - **Device Inventory — Collapsible Hierarchy & Controller Filtering:** Enhanced the Device Inventory modal with a collapsible tree view for multi-channel and companion sensors (e.g. secondary metrics linked via parent sensor), preventing active companion devices from being falsely labeled as "Not Linked". Child sensors now cleanly inherit their parent sensor's controller and connection state, display live status with direct access to hardware settings, and auto-expand during search. Added a dedicated Controller filter dropdown to instantly filter the inventory by all, specific, or unassigned devices, plus an Expand/Collapse All toolbar toggle and dual physical/entity counters.
- - **Device Wizard — Hierarchical Model Selector & Intelligent Parent-Child Linking:** Improved Step 2 (Select Device Model) by visually grouping companion sensor metrics under their respective host sensor template. When browsing by category, child metrics under uninstalled parent sensors are locked with clear guidance (`Requires [Parent Name] First`), while child metrics under installed parent sensors are unlocked for instant 1-click selection. In search mode, companion sensors display a parent breadcrumb and an instant `[+ Add Parent First]` shortcut button. Corrected badge layout so that voltage warnings and unlock buttons no longer obscure device metadata.
v1.1.73
18-08-2026Added
- - **Solar Irradiance / PAR Sensor Template (CWT RS485):** Added a dedicated hardware sensor template for the CWT Modbus-RTU Solar Irradiance / PAR sensor (`par_rs485_cwt`), providing real-time solar irradiance measurement (0–1800 W/m²) over RS485 with built-in Modbus commissioning support.
- - **Leaf Temperature & Humidity Sensor Templates (CWT-LEAF-TH RS485):** Added dedicated hardware sensor templates for the CWT Leaf Temperature (`cwt_leaf_temp`) and Leaf Wetness/Humidity (`cwt_leaf_humidity`) dual Modbus-RTU sensor, enabling real-time leaf temperature monitoring, Leaf Temperature Depression (LTD) calculations, and leaf wetness disease prevention.
- - **Hydrostatic Water Level Sensor Template (CWT-WLS RS485):** Added a dedicated hardware sensor template for the CWT-WLS Submersible Hydrostatic Liquid Level Transmitter (`cwt_wls_water_level`), providing precision tank level (`distance`) and volume (`volume`) monitoring via RS485 Modbus-RTU.
- - **Brass Water Flow & Temperature Sensor Template (YF-B6-Temp G3/4):** Added a dedicated hardware sensor template for the YF-B6 Brass Hall-Effect water flow meter (`yf_b6_flow_rate`), featuring high-precision pulse flow metering (396 pulses/L, 1–30 L/min) and integrated NTC water temperature detection.
Changed
- - **Hardware Catalog — Sticky Tab Navigation & Table UX:** Fixed detail dialog tabs to remain sticky during scroll. Enhanced the main catalog table with a permanent sticky header, TanStack pagination with customizable page sizes (10/15/25/50/All), and bidirectional column sorting by device Type.
v1.1.72
17-08-2026Fixed
- - **Active Program — Window Recovery & Concurrency Conflict Prevention:** Resolved an issue where time windows could remain permanently stuck in `PENDING` state after an error or crash. Restarting an active program now automatically clears broken/failed window states and restores active time windows, while preserving daily trigger counts and journal history. Added pre-execution checks and API guards to prevent engine busy collisions when starting or resuming programs during manual flow execution.
v1.1.71
16-08-2026Added
- - **Active Program Manual Actions:** Enabled one-shot execution of custom Flows directly from the Active Program dashboard during paused, loaded, or stopped states. Operators can select any flow from the database and configure one-time global variables (with full unit-aware conversion and tolerance support). All resource consumption (water, nutrients) and sensor traces are seamlessly attributed to the active program's daily journal and statistics.
Changed
- - **Hardware Catalog Media Optimization & Offline Media Pack:** Optimized the application footprint and startup performance by delivering lightweight embedded thumbnails for instant offline device browsing, with high-resolution photo galleries available via an optional standalone media pack (`catalog-media.zip`).
Fixed
- - **Hardware Catalog Production Loading:** Resolved an issue where the Hardware Catalog could not load device definitions and images in production builds.
- - **Witness Sensor Stabilization & Accurate Trace Recording:** Resolved an issue where Witness Sensor stabilization delay created duplicate preliminary traces in execution history and caused inaccurate post-drainage volume calculations in Journal and Resource Analytics. Preliminary traces are now updated cleanly in place upon completion and fresh sensor readings are captured directly.
- - **Active Program — Trigger Execution Counts & State Continuity:** Resolved an issue where stopping and restarting an active program within the same day prematurely reset trigger execution counts (e.g. 3/5 back to 0/5) and cooldown timestamps. Daily execution progress and pacing intervals are now preserved across program pauses, stops, and restarts until midnight reset.
- - **Active Program — Time Window State Synchronization on Resume/Restart:** Resolved an issue where time windows within the active schedule remained stuck in `PENDING` status instead of transitioning to `ACTIVE` after resuming or restarting a program, while preserving check intervals without premature trigger executions.
v1.1.70
14-08-2026Added
- - **Analog Sensor Templates (CWT Soil Moisture & Temperature):** Added dedicated hardware sensor templates for CWT Industrial Soil Moisture (`cwt_soil_analog_moisture`) and Soil Temperature (`cwt_soil_analog_temperature`) analog sensors, providing full support for 4-20mA current loops (via conversion boards like DFRobot SEN0262) as well as 0-5V and 0-10V analog voltage signals with two-point linear calibration and multi-point curves.
v1.1.69
10-08-2026Added
- - **Hardware Catalog:** Introduced a built-in hardware catalog accessible under the Hardware menu. Users can browse all sensors, controllers, and expanders that have been tested and integrated into CeresFlows, filter by type and measurement role (distance, EC, pH, volume, etc.), and view detailed information including full descriptions, technical specifications, per-controller wiring guides with pin tables, and purchase links. Each device entry is backed by static content files (JSON + Markdown), supporting bilingual display (EN/BG) with automatic locale fallback.
v1.1.68
08-08-2026Fixed
- - **Database Backup Export — Android Serialization & Download Fix:** Resolved an issue where exporting a JSON database backup from an Android host over the network resulted in a file populated with null bytes (`0x00`). Implemented explicit byte serialization and headers in backend `BackupHandler.Export` alongside delayed URL revocation in frontend `BackupTab`.
v1.1.67
05-08-2026Fixed
- - **Resource Manager — Event Log ON/OFF Session Pairing & Total Synchronization:** Refactored detailed consumption log SQL query in Resource Details (`getDetailTableByLabels`) to use ON/OFF witness event pairing (`LEAD` windowing). Aligned event-level volume deltas and durations with Total Amount cards for 100% mathematical precision and exact session counts.
v1.1.66
03-08-2026Fixed
- - **Device Calibration UI — Stability & State Synchronization:** Resolved an issue where changing calibration methods or updating device roles could cause the calibration modal to freeze or display an empty method selection dropdown, ensuring instant and reliable UI updates without requiring a full page refresh.
- - **Resource Manager — Single-Day Stock Forecast & UI Clarification:** Fixed an issue where selecting a single 24-hour calendar day in Resource Details triggered an unintended 7-day fallback in stock remaining days forecast (`Est. Days Left`), and added an explicit baseline rate subtitle (`Based on selected period avg`) to the card for clear forecast transparency.
v1.1.65
02-08-2026Added
- - **Resource Manager — Stock Reconciliation (Checkpoints):** Implemented an inventory level synchronization mechanism allowing users to record actual container volumes (Checkpoints), correct pump measurement drift, and manage reconciliation audit history without altering raw telemetry or financial supply records.
v1.1.64
02-08-2026Added
- - **Android USB Serial Support:** Added full support for directly connecting hardware controllers to Android devices via USB (OTG). CeresFlows now automatically detects attached hardware and provides a stable, plug-and-play USB connection directly from the Android app without requiring a local network.
Changed
- - **Active Program — Asynchronous Force Run Execution:** Updated trigger Force Run execution on the backend scheduler to run flows asynchronously in a background goroutine, allowing frontend confirmation modal dialogs to close instantly upon confirmation without blocking operator interaction or timeline tracking.
v1.1.63
01-08-2026Added
- - **Actuator Control Panel — Hardware TTL & Backend Timer Persistence:** Upgraded actuator test runs to pass hardware-level `ttl` (Time-To-Live) payloads to MCU controllers while tracking active test sessions in the backend (`HardwareService`). Closing and re-opening the Monitor & Test dialog now seamlessly hydrates the live remaining countdown (`⏱️ Remaining: MM:SS`) from the backend Single Source of Truth, while the MCU guarantees hardware-level automatic safety shutoff.
v1.1.62
31-07-2026Added
- - **RS485 Device Sensor Templates (XY-MD04 / XY-MD02):** Added Mother and Child device templates for XY-MD04 RS485 Temperature & Humidity sensor (`xymd04_air_temp` Mother template for Temperature and `xymd04_air_humidity` Child template for Humidity) using Modbus RTU FC04 (Read Input Registers) with divisor 10, signed 16-bit support, and integrated Modbus Slave ID commissioning configuration targeting register 257 (`0x0101`).
- - **Modbus Bus Scanner — FC04 Input Register Probing:** Added support for probing Modbus FC04 (Read Input Registers) during local bus discovery scans across backend controller API and MCU firmware scan routines (`handleModbusScan`), allowing automatic discovery of Input Register sensors (such as XY-MD04 and EID041-G01S).
- - **RS485 Device Sensor Templates (CDEBYTE EID041-G01S):** Added device templates for CDEBYTE EID041-G01S RS485 Temperature & Humidity sensor (`eid041_g01s_air_temp` Mother template for Temperature and `eid041_g01s_air_humidity` Child template for Humidity) using Modbus RTU FC04 input registers with divisor 10, signed 16-bit support, and integrated Modbus Slave ID commissioning configuration.
Changed
- - **Modbus Bus Scanner UI — Probe FC Selector & ID Range:** Upgraded the Probe FC selector in the Modbus Commissioning Bus Scanner (`ModbusCommissioningModal`) to a compact dropdown menu with short function code options (`FC03`, `FC04`, `FC01`) and updated the default ID scan range from 10 to 20.
- - **Calculated Indices as Automation Triggers:** Added full support for using DB-configured Calculated Indices (such as VPD, LTD, and Dew Point) as activation conditions in program triggers (`TriggerModal`) across both the Template Editor and Active Program Dashboard. Momentary calculated indices are automatically categorized under a dedicated `📈 Calculated Indices` section in the condition dropdown, with automatic unit resolution (`kPa`, `°C`) and standard unit conversions. Integrated backend `index:<UUID>` namespace evaluation in `TriggerMatcher` with automatic staleness/offline detection for component sensors, ensuring invalid or missing sensor telemetry safely prevents trigger execution and logs a diagnostic warning.
- - **Active Program — Trigger Pacing & Fixed Clock Grid:** Introduced a dedicated Repeat Interval & Calculation Mode system for program triggers (`pacingIntervalMinutes`, `pacingMode`, `gridStartTime`). Operators can now configure triggers to repeat periodically (e.g. every 60 minutes) with two modes: **Relative Cooldown** (enforces $N$ minutes gap after actual execution timestamp to protect pumps/sensors) and **Fixed Clock Grid** (aligns execution to exact wall-clock hours like 10:00, 11:00, 12:00... skipping missed grid slots during program pause). Includes full UI modal integration in `TriggerModal.tsx` and dual-language localization.
- - **Active Program — Force Run Trigger:** Added an instant force execution button (`⚡`) to trigger headers in the Active Program Dashboard timeline, enabling operators to manually trigger any specific trigger unconditionally without stopping the program, editing conditions, or setting manual skips. Includes a safety confirmation modal with dynamic warnings for `BREAK` triggers and daily execution limit caps, automatic concurrency lockouts when flows are running, and instant check countdown resets (`LastCheck`).
- - **Journal — Trigger Log Search & Filtering:** Added interactive search (matching execution time, trigger name, and executed flow names) and dual filtering dropdowns (by Trigger and by Action behavior) to the Trigger Log modal in the Journal page, along with an empty state display and full dual-language (EN/BG) localization.
- - **Actuator Control Panel — Custom Test Duration & Countdown:** Replaced the legacy 5s/10s quick test buttons in the Monitor & Test actuator control panel with a unified custom duration input and time unit selector (`sec`, `min`, `hours`). Added a 60-minute safety cap for test runs, an automatic 60-minute fallback countdown when starting without a specified duration, live countdown remaining time display, duration input locking during execution, and automatic teardown on component unmount.
- - **Active Program Timeline — Trigger Log Button:** Added a `ClipboardList` log button to the `LOGIC TRIGGERS` header in active window cards (`ActiveSlotHero`), allowing operators to view executed triggers and flow history for any running time window directly from the dashboard timeline.
- - **Configurable Program Pause Timeout & Paused State Timer Guard:** Added a dedicated System Settings panel (`TimeSettingsSection`) for configuring maximum program pause duration (`system.max_pause_minutes`, defaulted to 60 minutes) with full i18n localization. Freezes active check countdowns (`NextCheckTimer`) on the dashboard while paused, displaying a `PAUSED` badge and preventing false overdue checks or premature Emergency Stops during trigger editing.
Fixed
- - **Active Dashboard Index Name Resolution:** Resolved an issue on the Active Program Dashboard timeline (`ActiveSlotHero`) where calculated index trigger conditions displayed raw internal UUID identifiers (e.g. `index:f17014b...`) instead of human-readable index names (`VPD`) and live calculated readings.
- - **Automation Triggers & Unit Conversion:** Resolved a unit conversion mismatch in `TriggerModal`, `TimeSlotCard`, and backend `TriggerMatcher` where conditions for calculated indices (such as VPD) and pressure sensors were displayed as raw base units (e.g. `0.29 psi`) instead of standard user display units (`2.0 kPa`). Integrated automatic base-to-sensor unit normalization in Go `TriggerMatcher` to ensure 100% accurate trigger condition evaluation.
- - **Browser SPA Refresh & Redirect Loop Prevention:** Resolved a browser `ERR_TOO_MANY_REDIRECTS` issue that occurred when refreshing sub-pages directly (e.g. `/hardware-v2/:id`, `/editor/:id`). Disabled automatic server-side trailing-slash redirects (`r.RedirectTrailingSlash = false`, `r.RedirectFixedPath = false`) in the Gin Web Server and added explicit `Cache-Control: no-cache, no-store, must-revalidate` headers for embedded frontend `index.html` responses, guaranteeing clean SPA page reloads on the exact same URL across all application routes.
v1.1.61
28-07-2026Added
- - **Condition-Based Fallback Execution for Time Windows:** Introduced an advanced Fallback execution strategy for program Time Windows. Previously, Fallback flows executed strictly when a window reached its end without encountering a `BREAK` trigger — causing `CONTINUE` triggers (such as periodic watering rules) to always fire the Fallback at window close regardless of whether watering had already occurred. With the new Condition-Based Fallback mode, users can define flexible logical rules (`ALL (AND)` / `AT LEAST ONE (OR)`) and threshold operators (`<`, `<=`, `==`, `>=`) based on actual trigger execution counts during the active window. For example, a window can now be configured to run Fallback flows at window close *only if* a specific watering trigger fired less than 1 time (`< 1`). If the primary trigger successfully executed during the window (e.g. 1/4 or 2/4 times), the Fallback is automatically bypassed and the window completes cleanly, eliminating unnecessary duplicate irrigation or redundant fallback actions.
Changed
- - **Controller Management & UI Navigation:** Enhanced the Hardware Controller management view (`ManageControllerGrid`) with a sticky search & filter toolbar (`sticky top-0`) with glassmorphic backdrop blur and edge-to-edge styling. Added an automated floating "Scroll to Top" navigation button (`ArrowUp`) that smoothly appears when scrolling down past 300px and returns the user to the top of the view upon click.
- - **Controller Layout & Pin Palette:** Streamlined Hardware Controller view layout by removing redundant assets header to save ~100px of vertical screen space and embedding pin capacity statistics badges (`Free`, `Mapped`, `Locked`) contextually into the Pin Map palette view.
- - **Active Program Flow Viewer Modal:** Enhanced Active Program Flow Viewer Modal UI/UX by adding an explicit X close button in the top-right header and preventing accidental dismissal on backdrop clicks.
Fixed
- - **Expander Card Drag & Drop:** Resolved an issue in Controller Details view where hardware expander cards were pinned to the top and could not be reordered alongside sensors and actuators. Added persistent `controller_order` support for expanders in backend database and API.
v1.1.60
27-07-2026Added
- - **Captive Portal WiFi Setup (Arduino Uno R4 WiFi):** Added a new opt-in "Advanced Feature" in the Firmware Builder for the Arduino Uno R4 WiFi. When activated, the controller monitors its WiFi connection and — after a configurable initial delay — automatically starts a password-protected Access Point named `CeresFlows-XXXX`. Users can connect to it, open `192.168.4.1` in a browser, and enter new WiFi credentials without reflashing. After saving, the controller restarts and connects to the new network, persisting the credentials in EEPROM. The AP runs for a configurable duration, then resets automatically to retry the station connection — creating a full cyclic STA→AP→STA recovery loop.
- - **Firmware Builder — Conditional Feature Settings:** The Settings step in the Firmware Builder now dynamically shows additional configuration fields when an Advanced Feature is selected. For the Captive Portal, three new fields appear: **AP Password** (default: `ceres1234`), **AP Active Duration** (default: 300 seconds), and **Initial Delay Before AP** (default: 60 seconds). These fields are visually separated under a "Feature Settings" section with a left-border accent.
- - **Firmware Builder — Feature `#define` Injection:** The firmware generator now automatically injects `#define FEATURE_X` macros at the top of the generated `.ino` file for all active Advanced Features. This ensures `#ifdef` blocks inside the firmware template are correctly activated by the C preprocessor.
Changed
- - **Active Program UI:** Set the Diagnostic Insight Panel at the bottom of the Active Program Dashboard to be collapsed by default, saving vertical screen space upon loading while remaining expandable on demand.
Fixed
- - **Active Plan & Trigger Timers:** Resolved an issue where the trigger check countdown timer remained stuck in an "Executing..." or overdue state after long-running flows completed. The scheduler now updates the slot's last check timestamp to the exact completion time of the entire trigger batch and immediately re-queues the ticker, properly resetting the post-execution interval countdown.
- - **Database Performance & WAL Management:** Added automatic startup WAL checkpoint (`PRAGMA wal_checkpoint(TRUNCATE)`) and a 1000-page autocheckpoint limit (`wal_autocheckpoint(1000)`) in `InitDB`. This prevents unbounded `.db-wal` file growth, immediately flushes lingering WAL logs to the main database on server startup, and significantly improves query speeds for analytics and historical data.
- - **Bus Scanner & Modbus Relays:** Resolved an issue in the Bus Scanner where registered Modbus relay modules and hardware expanders were omitted from the occupied bus IDs query and reported as `Unknown` during bus discovery scans.
v1.1.59
26-07-2026Added
- - **Controller Devices Drag & Drop Reordering:** Implemented full drag-and-drop card reordering for devices, sensors, actuators, and expanders within the Controller Details view (`ManageControllerGrid`). Users can now drag device cards via a dedicated grip handle (`:::`) to custom reorder nodes on any controller grid, with positions persistently saved across all clients via `controller_order` database persistence.
- - **Web-Based System Configuration Manager:** Introduced a visual Dual-Mode Config Editor (`config.yaml`) under System Settings, allowing users to toggle and customize server ports, notification encryption, embedded MQTT broker options, and AI Agent / MCP integration directly from the web interface in both Form and Raw YAML modes.
- - **Android System Configuration Storage Mirroring:** Added automatic two-way synchronization between internal system configuration and public storage (`Documents/CeresFlows/config.yaml`) on Android devices, giving users direct access to review or edit system settings using external file managers.
- - **Android Multicast & Network Scanner Optimization:** Enabled hardware-level Wi-Fi Multicast Lock (`CHANGE_WIFI_MULTICAST_STATE`) and `SO_BROADCAST` socket options on Android, allowing seamless UDP discovery and ping communication with controllers across local greenhouse Wi-Fi networks.
- - **Modbus Commissioning & Expanders:** Added Function Code (FC06 Single / FC16 Multi) selection and expander module integration (such as Modbus RTU 8-channel relay boards) to the Modbus Commissioning Tool, enabling seamless slave ID re-addressing across all RS485 devices.
- - **Unassigned Pins & Port Management:** Resolved a wizard validation issue that blocked users from saving devices with `none` (unassigned) pins. Users can now set device pins to `none` (unassigned) to temporarily free up controller ports (e.g. D10, D11) for replacement devices without deleting existing devices or losing historical telemetry.
- - **Sensor Analytics & History:** Comprehensive `analytics_label` historical continuity across all system modules (`AnalyticsSensorService`, `GetDeviceHistory`, `GetDashboardStats`, and `ConclusionsService`). When a sensor or actuator is replaced with a new hardware device sharing the same `Analytics Label`, historical time-series data, DLI calculations, Device Details History tab, Dashboard mini-charts/sparklines, and AI anomaly conclusions now seamlessly continue without losing past readings.
- - **Flow Editor Math Block:** Added validation rules for `MATH_VARIABLE` blocks, ensuring an error is triggered when no Target Variable is selected or when a required source variable is missing.
- - **Flow Editor Actuator Block:** Removed hardcoded fallback action from detailed node view, ensuring newly added actuator blocks display an empty action placeholder (`Action...`) until an action is selected, matching the properties control panel.
- - **Flow Editor WAIT Block:** Resolved validation errors when using variables for wait duration and allowed 0s duration for instant pass-through delays. Added default 0s duration initialization for new WAIT blocks and updated collapsed canvas node previews to properly display 0s.
- - **Modbus Verification:** Enhanced slave ID commissioning verification with intelligent dual-probe scanning (testing FC03 Holding Registers and FC01 Coils sequentially), preventing false verification errors on Modbus relay modules.
Fixed
- - **Hardware & Flows:** Resolved automatic flow execution failures for actuators connected to Modbus RTU relay modules (Relay Module path). The engine's `ON` and `OFF` commands now correctly send the proper Modbus FC05 coil values (ON = 0xFF00, OFF = 0x0000) instead of always sending 0 (OFF). Both the Relay Module and Expander connection paths in the hardware service now perform a command-aware lookup — using a command-specific definition (`ON`, `OFF`) from the relay template when available, and falling back to the generic `WRITE` definition otherwise.
- - **Hardware & Flows:** Resolved an issue where timed actuator actions (`DOSE`, `PULSE_ON`) connected to Modbus RTU relays would count down correctly but fail to physically activate the relay. The dosing quantity value (e.g. 75 ml) was incorrectly being forwarded to the primitive `ON` command, overriding the relay template's hardcoded coil activation value (0xFF00 = 65280). The timed execution path now correctly strips dosing-specific parameters (`value`, `amount`, `unit`) before issuing the `ON` command to the hardware.
v1.1.58
22-07-2026Added
- - **Android Server Platform Support:** Added full support for running CeresFlows directly on Android smartphones as a dedicated, standalone automation server. Users can now repurpose an Android phone to host the system with continuous 24/7 background operation, automatic startup on device power-on, and protection against sleep or Wi-Fi power disconnects.
Changed
- - **Database Performance & WAL Architecture:** Upgraded SQLite connection pool to support 10 concurrent WAL readers (`SetMaxOpenConns(10)`, `SetMaxIdleConns(5)`), eliminating Go-level thread serialization bottlenecks. Added physical composite B-Tree database indexes on `execution_traces` (`(event_type, timestamp)`, `(timestamp, event_type)`, `(flow_id, event_type, timestamp)`) and `controllers` (`(is_active, status)`), eliminating full-table scans during analytics and system queries without any data loss.
Fixed
- - **Resource Manager:** Resolved an issue where long ON/OFF actuator runs with witness level sensors were undercounting consumed volumes in Stock Inventory calculations due to SQL window function ordering.
- - **Resource Compaction:** Enhanced background compaction worker to pair ON and OFF actuator traces and aggregate witness sensor flow deltas into `sensor_readings_compact` buckets, ensuring zero data loss when raw traces pass 30 days.
v1.1.57
19-07-2026Added
- - **Active Programs:** Added a user-facing system crash detection and recovery modal. Upon login or page refresh, if an unclean shutdown is detected during active program execution, a recovery dialog displays the interrupted time slot, active trigger, and flow details, allowing the user to resume, ignore, or stop the program.
- - **Active Programs:** Added a background auto-resolve safety timer for crash recovery on server startup (defaults to 60s config, auto-applying 'ignore', 'resume', or 'stop').
- - **Active Programs:** Added a visual countdown timer in the Crash Recovery Modal UI to inform the user of impending auto-resolve actions.
Changed
- - **Witness Sensor Stabilization:** Transitioned witness sensor measurements to an insert-then-update transactional model. A preliminary record is written immediately when the actuator action executes (before the stabilization delay starts), ensuring data preservation if the system crashes during the delay. The record is updated to its final state once the stabilization delay finishes.
- - **Resource Analytics:** Added approximate indicators (`~` symbol) and detailed warning tooltips in the Daily Journal and Summary tables to flag resource consumption measurements that were interrupted by a system crash before the stabilization delay could finish.
- - **Active Programs:** Refactored recovery execution to sequentially run any remaining matched triggers in the queue after resuming from an unclean shutdown.
- - **System Settings:** Added a "Crash Recovery" configuration section in the General tab to manage the auto-resolve timeout duration and the default recovery action.
v1.1.56
16-07-2026Changed
- - **Active Programs:** Users can now edit time windows and trigger conditions, as well as reorder triggers, while a program is in Pause mode. This allows modifying the active strategy on-the-fly without needing to completely stop the program and lose execution history.
Fixed
- - **Device Monitor:** Resolved an issue in the Device Test Dialog where selecting a different display unit converted the value correctly but failed to update the displayed unit label in the UI.
v1.1.55
12-07-2026Added
- - **Hardware Integration:** Added the device template for the TinyF (DVP0501C1) laser ranging sensor, enabling distance and volume measurements.
- - **Hardware Integration:** Implemented a new `"ascii_csv"` response parser in the backend hardware service to support parsing comma-separated values (distance, confidence) and selecting target fields by index, configuring the TinyF sensor template to use this parser and a stable 9600 baud rate.
Fixed
- - **Hardware & Flows:** Resolved flow execution failures for actuators connected to I2C (XL9535) and Modbus RTU relay modules by adding control commands (ON, OFF, TurnOn, TurnOff, OPEN, CLOSE, STOP) to the expander write-command mapping whitelist.
v1.1.54
11-07-2026Changed
- - **Resource Manager:** Updated the default statistics view to show the current day instead of a 30-day range on initialization, significantly reducing initial load times.
Fixed
- - **Build & Distribution:** Resolved a version sync lag where the Changelog and application version displayed in the UI lagged behind by up to two releases. Integrated the markdown-to-JSON changelog parser directly into the build pipeline and rescheduled the asset copy operations to execute before compiling the frontend bundle.
v1.1.53
10-07-2026Added
- - **Diagnostic Conclusions Module:** Introduced a new "Diagnostic Conclusions" layer in the Analytics dashboard (Calculated Indices tab), enabling rule-based agronomic insights derived from historical sensor and index data.
- - Users can add, edit, and delete conclusion instances (e.g., "Climate Stress Zone 1", "Mold Risk Greenhouse") from a dedicated catalog of 10 diagnostic types, including Climate Stress, Mold Risk (Botrytis), DIF Analysis, Root Zone Temperature Stress, Substrate Moisture, EC Stability, pH Stability, Light Profile, Peak Stress Period, and Daily Recommendation.
- - Each conclusion is automatically analyzed for the current day upon loading, displaying a color-coded ECharts timeline bar of status periods (Normal / Warning / Critical), total stress duration, peak stress window, and a human-readable recommendation.
- - Input mappings are role-based: each conclusion type declares which sensors or configured indices it requires, and the setup form dynamically filters compatible sensors by category (temperature, humidity, light, EC, pH, moisture).
- - The backend analysis engine retrieves high-density raw `execution_traces` data, applies a 120-second temporal alignment threshold, merges contiguous status periods, and computes derived statistics (dominant status, total stress minutes, peak period).
- - Shared index math logic (VPD, LTD formulas) was centralized into a dedicated utility module to ensure full calculation consistency between real-time indices and historical conclusions.
- - Full Bulgarian and English localization for all UI labels, status messages, form fields, catalog names, and descriptions.
v1.1.52
10-07-2026Fixed
- - **Calculated Indices — Older Catalog Crash Prevention:** Resolved a critical `TypeError: Cannot read properties of undefined (reading 'toLowerCase')` crash occurring when rendering or editing computed indices (such as VPD, LTD, or DLI) on target deployment platforms (e.g. Raspberry Pi 5) with older built-in catalog data configurations.
- - Added robust case-insensitive normalization to ensure all catalog fields (`role`, `category`, `label`) default to lowercase keys at hydration time, preventing runtime mismatches.
- - Implemented defensive programming checks and fallback bounds throughout `IndicesPage.tsx` and `UnitAwareInput.tsx` to handle missing fields and prevent crash behaviors when accessing undefined properties.
v1.1.51
09-07-2026Changed
- - **Flow Execution Console — Live & History Parity:** Achieved full data parity between the Live and History views in the Flow Console.
- - Sensor readings (`SENSOR_READ`) now appear correctly in the History console. Previously, sensor data was persisted as `BLOCK_END` records in the database and was not rendered as rich sensor entries. The frontend now automatically re-maps these records to `SENSOR_READ` format, displaying the measured value and unit exactly as in the Live view.
- - Removed `NODE_START` and `NODE_SUCCESS` lifecycle events from the History console. These internal events carry no user-relevant information and were adding noise to the log. Node highlighting on the flow graph is preserved via a separate background pass.
- - The Live viewer now shows all events that occurred **before** the user opened it. When opening a running flow mid-execution, the system fetches the real session ID from the database (including RUNNING sessions), loads all past events, and pre-populates the console before the WebSocket stream continues.
- - `WAIT` block timers in the Live viewer now display the **correct remaining time** when loaded from history. Previously, the countdown always started from the full duration. The timer now calculates elapsed time from the event timestamp and initializes at the true remaining duration.
v1.1.50
09-07-2026Added
- - **Template Editor — Trigger Phase Grouping & Reordering:** Logic triggers in time slot cards are now visually separated into two distinct execution phases: **Phase 1 – Continuous** (triggers that run and pass execution forward) and **Phase 2 – Break** (triggers that halt the window on match). Up/Down reorder controls are available exclusively for Phase 1 (continue) triggers, allowing users to define a precise execution priority sequence. The new order is immediately persisted to the template definition.
- - **Active Program Dashboard — Trigger Phase Grouping & Reordering:** The same Phase 1 / Phase 2 grouping and reorder controls are now available directly in the Active Program timeline view. Reordering is permitted only when the program is in `stopped` or `loaded` state, ensuring execution safety. Changes are hot-patched into the active plan's definition snapshot without requiring a program restart.
v1.1.49
07-07-2026Added
- - **Active Programs — Trigger-Level Skip Logic:** Implemented granular, time-based trigger suppression within time slots. Users can skip individual logic triggers for a specified number of days via a new calendar-clock popover in the dashboard slot view. Skip statuses are visually indicated by amber borders, reduced opacity, and dynamic "skipped until" date badges, and a summarized skipped triggers counter is displayed in Simple Slot Cards.
- - **Active Programs — Persistent Day-Reset (IsNewDay):** Improved the reliability of the daily scheduler reset by persisting the last successful reset date (`LastResetDate` as `YYYY-MM-DD`) in the active plan runtime state. Upon server startup, the system compares the current date with the persisted date to guarantee that midnight resets are correctly executed even if the server was offline during the midnight boundary.
v1.1.48
06-07-2026Fixed
- - **Resource Manager — Chart Date Display:** Resolved an issue where timestamps on the Daily Consumption chart and Event History table were shifted by the local UTC offset (e.g., `05.07.2026 03:00:00` instead of `05.07.2026`). The bug was caused by JavaScript's native `new Date("YYYY-MM-DD")` parsing date-only strings as UTC midnight, which shifted them by the local timezone offset when displayed. Date-only values are now correctly parsed as local midnight, eliminating the time shift.
- - **Resource Manager — PULSE_ON Consumption Not Counted:** Resolved a critical issue where pumps using the `PULSE_ON` action type (timed pulse execution with a witness sensor) reported **0 liters** consumed in the Resource Manager, despite correctly recording the sensor delta in the database. The analytics engine only handled the classic `ON` → `OFF` paired event pattern and completely ignored `PULSE_ON` events. All five HOT-layer aggregation queries now correctly read the pre-computed `sensor_capture.delta` field directly from each `PULSE_ON` record, ensuring accurate consumption totals, daily breakdowns, and event history amounts for pulse-based pumps.
v1.1.47
04-07-2026Added
- - **Modbus Support in Hardware Modules:** Upgraded the Hardware Modules manager to support adding, configuring, and scanning Modbus RTU-based expanders via the controller's UART ports (in addition to existing I2C-based expanders). Includes field selection for UART port, Slave ID (1-247), Baud rate, and live Modbus bus scanning.
- - **Modbus RTU Relay Module:** Integrated the GY18123 8-channel Modbus RTU Relay Module template (`modbus_8ch_relay`) and updated the Relay Wizard configuration to support register-based channels and connection strategy routing (Direct GPIO vs Modbus RTU) without physical pin requirements.
v1.1.46
03-07-2026Changed
- - **Sensor Out-of-Range UI Warnings:** Added visual warning indicators (amber badges, pulsing status dots, and border highlights) for sensors in the out-of-range diagnostic state across the Controller Grid, Expanded View, Inventory Sheet, and Stats Bar.
Fixed
- - **Sensor Status Accuracy:** Resolved a misleading status behavior where sensors reporting values outside their configured bounds (e.g., a temperature sensor stuck at 0°C) were marked as `error`, falsely indicating a hardware failure. The system now correctly distinguishes between a **hardware error** (communication failed) and a **logical out-of-range** reading (sensor works, value is outside expected bounds). Out-of-range readings now set `sub_status: out_of_range` while keeping `status: online`, allowing automation flows to continue running using their configured fallback strategy (`useLastValid` or `error`) without unnecessary blocking. Status automatically recovers to normal on the next valid reading.
- - **Flow Testing Variable Units:** Resolved an issue in the Flow Test dialog where global variable units were hardcoded and could not be switched or converted. Integrated the standard `UnitAwareInput` component to support dynamic unit selection, and ensured that all variable values and tolerances are correctly normalized and persisted in their respective base units.
v1.1.45
30-06-2026Fixed
- - **Analytics & Resource Usage:** Corrected pump irrigation active runtime reporting by isolating actual pump runtime from witness sensor stabilization periods. The stabilization delay (`witnessDelaySeconds`) is now dynamically subtracted from duration aggregates in both the Journal and Resource Manager views.
v1.1.44
29-06-2026Added
- - **UI — Reusable Glassmorphic Loader:** Created a new, highly reusable `<LoadingOverlay />` component inside `components/common/`. It provides visual feedback during asynchronous dashboard transitions using a backdrop blur, a spinner, and click-prevention overlays.
Changed
- - **Resource Manager — Performance Optimization:** Eliminated N+1 query bottlenecks in the `calculateStockInfo` routine, reducing dashboard load times and period-switch latency from seconds to milliseconds. Refactored telemetry queries to batch-fetch first active times, global consumption, and current usage for all active profiles in unified operations.
- - **Resource Manager — Intelligent Forecast Caching:** Added a mathematical bypass for the "All Days" preset, automatically reusing global consumption data instead of executing fallback period queries since the minimum telemetry timestamp matches the first active date.
- - **Resource Manager — Visual Feedback:** Integrated the new `<LoadingOverlay />` component to fade-out active content and display a spinner during period switches, preventing the UI from appearing frozen while queries resolve.
Fixed
- - **Resource Manager — GORM SQLite Scan Error:** Fixed a database driver scan crash where SQLite text-based timestamps could not be scanned directly into GORM `time.Time` structs. Implemented timezone-aware string parsing across multiple standard datetime formats.
v1.1.43
27-06-2026Added
- - **Resource Manager:** Implemented stock removal/discard operations in the `RefillEditorDialog` form via a segmented control. Added dynamic UI field validation to hide price and currency fields during removals, and applied negative quantity adjustments for accurate inventory reduction.
- - **Resource Manager:** Upgraded the refill history table in `StockProfileEditorDialog` to dynamically color-code positive additions (green) and negative removals (red) with dynamic sign indicators for audit clarity.
- - **Resource Manager:** Added dynamic custom date range support to resource usage analytics and consolidated period selection into a reusable `PeriodSelector` component. Added automatic short-period fallback and adaptive onboarding guards to backend forecasting logic for precise average calculations.
- - **Device History — Type-Aware Telemetry Correction:** Added the ability to manually correct historical telemetry records directly from the Device History tab, with a form that adapts to the record type. Witness Sensor records (used by pumps with flow tracking) now expose dedicated **Start Value** and **End Value** fields with a live delta preview, automatically recalculating daily consumption in the Resource Manager. Dosing pump records expose a volume field, and standard sensor records expose a value field. Time-based records are read-only and display a visual indicator. All edits trigger an automatic re-aggregation of the affected WARM-layer analytics bucket.
Changed
- - **Scheduler Journal Persistence (Session-Aware Windows):** Upgraded the scheduler journal and analytics system to a session-aware composite key architecture (`windowID_date_programID`). This allows the system to accurately track and display individual execution attempts (supporting mid-day program restarts and skipped windows) without state shadowing. Updated the frontend Journal UI to manage accordion expansions and details caching using these session keys, resolving flickering issues.
- - **Journal Live Fallback & Compatibility:** Implemented a robust fallback mechanism in live trace aggregation and recovery workers that automatically extracts missing program metadata from execution trace session IDs, maintaining backwards compatibility with historical data and preventing duplicate UI rows.
v1.1.42
24-06-2026Fixed
- - **RS485 Modbus RTU:** Added Function Code 16 (0x10) Write Multiple Registers support across all active 32-bit firmware profiles (Uno R4, FireBeetle C6, and ESP32-E), Go APIs, and React frontend. Fixed response validation to accept new slave ID or broadcast address, resolving persistent `TIMEOUT_OR_CRC` address change commissioning errors.
v1.1.41
23-06-2026Added
- - **Telegram Bot:** Implemented a new dashboard-aware `/sensors` command, displaying real-time values, units, and online/offline status for pinned sensors.
- - **Telegram Bot:** Added a new dashboard-aware `/actuators` command to list pinned pumps and relays with their logical state (Running/Idle) and online/offline status.
- - **Telegram Bot:** Programmatically registered bot commands list to display the command menu directly in the Telegram UI.
Fixed
- - **Telegram Bot:** Switched formatting from Markdown to HTML to prevent API parsing errors caused by reserved characters (like decimals `.`) in telemetry data.
- - **Telegram Bot:** Fixed template rendering for critical errors and device offline events by implementing regex-based placeholder matching (allowing optional whitespace) and case-insensitive key lookups. Added detailed pre-flight check formatting and automatic message fallbacks for nested error logs.
- - **Dashboard Configuration:** Fixed a bug where saving dashboard settings accidentally disabled the section due to missing parameters (`isEnabled`, `sortOrder`) in the frontend payload.
- - **Dashboard Configuration:** Automatically prune deleted, legacy, or mismatched device IDs from selection modals for both sensors and actuators.
v1.1.40
23-06-2026Added
- - **Notifications:** Added rich block-execution telemetry notifications in Telegram, showing detailed sensor readings, actuator runtimes, dosing volumes, and witness sensor state changes.
v1.1.39
23-06-2026Fixed
- - **Notifications:** Resolved Telegram notification provider persistence and bot initialization failure after system restarts.
v1.1.38
22-06-2026Changed
- - **Device Calibration:** Upgraded EC and pH Calibration Wizards to support dynamic, multi-point calibration standards with zero/neutral point enforcement, temperature-aware calculations, and user-defined custom calibration points.
Fixed
- - **Resource Manager:** Resolved an application crash (`Cannot read properties of null (reading 'filter')`) when opening the module or attempting to add a new profile when no devices or stock profiles were registered. Added slice initializations in backend Go services and defensive array fallbacks in React dialogs.
v1.1.37
20-06-2026Fixed
- - **RS485 Modbus Scanning (FireBeetle 2 ESP32-E & C6):** Replaced the fragile and destructive echo cancellation / byte-counting logic in the firmware with a robust ID-peeking, packet-frame matching, and CRC-validated scan method. Increased the minimum probe timeout to 250ms to reliably support slow-responding sensors (such as 4800 baud soil probes).
- - **FireBeetle 2 Pin Mappings:** Corrected swapped pin labels (D10/GPIO17 and D12/GPIO4) in the ESP32-E configuration template. Resolved duplicate/incorrect pin definitions in the ESP32-C6 template by removing a redundant GPIO 5 allocation and adding the missing A3 (GPIO 4) port. Synchronized default Modbus scan pins in the C6 firmware to match the template.
v1.1.36
18-06-2026Changed
- - **Expanded Device History Limits:** Increased the backend safety limit from 1000 to 3000 records, and implemented high-resolution client-side filtering (50, 100, 200, 600, 3000) and a dynamic "Today" option displaying data points since 00:00.
Fixed
- - **Time Unit Formatting in Journal:** Resolved an issue where time-based values in the Journal module's "Resource Usage" section (e.g., pump run durations) would inconsistently show in seconds instead of minutes despite the "Smart Auto" setting. Removed the rigid whole-number scaling restriction and implemented dynamic adaptive decimal precision for auto-scaled time values.
- - **Insight Engine Suggestions:** Resolved an issue where the suggestion generator queried a non-existent database column (`metrics_json`), causing it to incorrectly report that target sensors (like `ec_ali`) had no database records when a query returned zero results.
- - **Insight Engine Metric Mapping:** Corrected the `manual_amount` target metric mapping to return physical volume and preserve the configured unit (`ml`) instead of defaulting to the abstract number of `doses` for dosing pumps.
v1.1.35
15-06-2026v1.1.34
14-06-2026Added
- - **PAR Sensor DLI Analytics:** Implemented a new analytical endpoint to calculate Daily Light Integral (DLI) using trapezoidal integration over execution trace telemetry.
- - **DLI Dashboard Display:** Updated the `SmartSensorCard` to dynamically swap the standard trend indicator with a specialized DLI summary for PAR sensors.
- - **Sensor Lab DLI Smart Tooltip:** Added a Smart Tooltip in the Sensor Lab that dynamically correlates and displays the exact Daily Light Integral (DLI) for each individual day when analyzing PAR sensors over multi-day periods.
- - **Sensor Lab DLI Monitor:** Enhanced the Device Monitor tab with a dedicated "Daily Light Integral" data panel (in mol/m²/d) alongside time and reading tracking.
- - **Diagnostic Insight Panel:** Created a collapsible Diagnostic Insight Panel in the Active Program Dashboard for real-time tracking of program lifecycle events (Start, Pause, Resume, Stop, and Critical Errors) with detailed crash payload visualization.
- - **Program Run History Archival:** Enabled automatic database persistence of program execution history (total run duration, final execution status, and crash details) to the `program_run_history` table upon unloading.
- - **Critical Failure Telemetry:** Upgraded the system-wide execution engine to log and emit detailed `CRITICAL_ERROR` system events for both pre-flight startup guard failures and active program runtime crashes.
- - **Program-Specific Event Filtering:** Added a backend query parameter (`programId`) to retrieve system events filtered by a specific active program session using SQLite JSON extraction.
Changed
- - **Sensor Lab Hourly Granularity:** Extended the hourly downsampling threshold from 7 to 31 days in the backend analytics service to prevent premature daily averaging and preserve high-resolution data for multi-week PAR sensor charts.
- - **Date Formatting Standardization:** Standardized all user-facing date displays across the frontend (including Resource Detail view, Runtime Detail view, Data Management Section, and Inventory Dashboard modal) to use the dot-separated format (`dd.MM.yyyy` or `dd.MM.yyyy HH:mm:ss`).
Fixed
- - **Telemetry Data Duplication:** Resolved a critical data duplication issue where sensor readings were recorded twice for every single measurement (both during the raw sensor read phase and the block end phase). This fix halves the storage footprint for sensor histories, ensures 100% accurate count and average metrics in the compaction workers and dashboard analytics, and eliminates visual clutter in the Device History tab.
- - **Actuator Inverted Status:** Resolved a display bug where actuators with inverted activation logic (`invertedLogic: true`) erroneously showed up as "Running" on the dashboard when they were actually idle, and vice versa. Status evaluation is now directly driven by the normalized logical state, as physical logic inversion is already fully managed at the backend hardware driver boundary.
- - **Value Formatting Crash:** Resolved a critical React crash ("Cannot read properties of null") caused by passing null or undefined telemetry values to the global unit standardizer (`formatValue`). The system now safely falls back to a `--` placeholder.
- - **Execution Management Program Names:** Resolved an issue where program template names were displayed as blank UUID IDs in the Advanced Session Explorer by refactoring the query to join against persistent program run history records and fall back to ephemeral flow sessions.
v1.1.33
13-06-2026Added
- - **Virtual Time Triggers:** Integrated the `system:time` virtual sensor into the UI layer to allow precise, time-gated automation triggers. Updated the trigger configuration modal with dynamic HTML5 time inputs and static 24h labels, and updated slot cards and active program dashboards to render conditions in human-readable `HH:mm` format instead of raw integers.
Fixed
- - **Trigger operator layout:** Resolved UI overlap for the `between` operator in the trigger condition modal by using a compact symbol representation (`<>`) in both the select trigger button and dropdown list.
v1.1.32
12-06-2026Added
- - **Telemetry History Management:** Added the ability to manually delete erroneous sensor and actuator records directly from the Device History tab. The system intelligently recalculates all affected aggregates (Averages, Minimums, Maximums, and Totals) in the WARM storage layer automatically, ensuring data integrity in the Resource Manager and Analytics dashboards without requiring a full system recalculation.
- - **Telemetry History Table Optimization:** Added interactive history table features to DeviceHistoryTab with column sorting, global search, and local pagination.
v1.1.31
11-06-2026Added
- - **Calibration Portability:** Added granular export and import of active calibration data directly from the device calibration view, with role verification, soft warnings for hardware resolution (ADC) mismatch, and auto-switching to the imported calibration strategy if compatible.
Fixed
- - **Flow Editor Notification Persistence:** Resolved an issue where block-level notification settings (Channel and Mode) were dropped during deserialization when loading a flow, causing them to be lost on subsequent saves.
- - **Resource Manager — Stock Inventory Unit Mismatch:** Resolved a critical calculation error where refill amounts were stored in the display unit (e.g. L) instead of the base unit (ml), causing the "Consumed" and "Remaining" fields in the Stock Inventory panel to display wildly incorrect values (e.g. 61,275 L instead of 61.28 L). The system now correctly stores all refill amounts in the base unit and uses the Measurement Standards system to display them in the user's preferred unit.
v1.1.30
09-06-2026Fixed
- - **Insight Engine Stability:** Resolved a runtime crash (`Cannot read properties of null (reading 'find')`) in the Insight Engine caused by `null` values returned from the backend when no metrics or target resource statistics are available in history.
v1.1.29
08-06-2026Added
- - **Automated Update System:** Integrated an automated system update notification badge to the layout header.
- - **Interactive Changelog:** Added an interactive "What's New" Changelog dialog showing recently added features and bug fixes.
- - **License Status Modernization:** Updated the License & System Status dialog with version tracking and platform-aware download links.
Fixed
- - **Timezone Settings Reliability:** Resolved timezone loading errors (such as `unknown time zone Europe/Sofia`) on systems without a full Go installation (e.g., Windows runtime environments) by embedding the standard IANA timezone database (`tzdata`) directly in the backend binary.
v1.1.28
06-06-2026Added
- - **Advanced Sensor Template Builder:** Extended the hardware template builder with full support for complex protocols, including `I2C_SEQUENCE` multi-step scripts, custom UART streaming/sliding window response parsers (ASCII float, Atlas EZO, A02YYUW), Modbus multi-register inputs, and automated commissioning/address-changing steps.
v1.1.27
03-06-2026Added
- - **Universal Range Guard for Compensation:** Integrated a robust, dynamic physical range guard at the `Compensate()` dispatcher level. It validates both raw inputs and final compensated values against target device bounds stored in the database, preventing non-physical or corrupted readings across all sensor types.
- - **Remote Controller Reset:** Added the ability to remotely restart hardware controllers directly from the dashboard and controller settings sidebar.
- - **Dashboard Custom Ordering:** Introduced drag-and-drop functionality for the Dashboard grid. Users can now seamlessly reorder sensor and actuator cards by dragging the dedicated grip icon, allowing full customization of the monitoring layout. Order preferences are persisted automatically per dashboard section.
Changed
- - **Dynamic Compensation Limits:** Replaced hardcoded temperature compensation limits with dynamic validation ranges. The system now dynamically fetches and validates external temperature readings against the specific sensor's database configuration, executing an EventBus alert and safe 25°C fallback upon violation.
- - **Dashboard Quick Actions:** Users can now click on any sensor or actuator card directly from the Dashboard to instantly open its Device Test Dialog, bypassing the Hardware Management page for faster monitoring and testing.
Fixed
- - **Device Range Seeding on Creation:** Corrected the device template parser to traverse the `"measurements"` structure instead of the nonexistent `"units"` field. Newly created devices now correctly seed their initial `config.validation.range` limits in the database automatically.
- - **Dashboard Status Rendering:** Fixed a display bug where never-read devices would show extremely large offline durations (e.g., 739769 Days) and incorrectly appear as "ON" if inverted logic was enabled. Unread devices now correctly display "Never" and default to an "OFF" state.
- - **Network Scanner Actions:** Fixed an issue where the "Update IP" and "Link MAC" action buttons were not functioning when discovering existing controllers with changed network configurations.
- - **Sensor Precision Fallback:** Resolved an issue where unmapped sensor units bypassed formatting, displaying excessive decimal precision (e.g., `60.7666...`). A fallback formatting is now safely applied to maintain a clean UI.
v1.1.26
02-06-2026Fixed
- - **Scheduler Stability — Pause/Resume Context Bug:** Fixed a critical bug where the scheduler would reuse an expired (cancelled) execution context after Resume, causing unpredictable behavior during pause/resume cycles. The scheduler now correctly creates a fresh context on every resume.
- - **Scheduler Stability — Telemetry Hub Blocking:** Eliminated a scheduler stall caused by a full telemetry buffer overflowing on paused states. All runtime events are now published via the central EventBus instead of the legacy synchronous telemetry channel, removing the blocking dependency entirely.
v1.1.25
31-05-2026Added
- - **Declarative I2C Software Address Changing:** Added support for software-configured I2C sensor addresses in the commissioning wizard. The wizard dynamically loads write steps from the sensor template configuration and executes them sequentially.
- - **Scanned I2C Address Pre-filling:** Scanned I2C addresses on the bus are now clickable, pre-filling the "Current Address" input.
- - **Visual Database Occupied I2C Addresses:** Integrated database scan visualization in the I2C Bus Scanner, showing registered database devices/expanders on the selected port and mapping them dynamically onto live scan results.
Changed
- - **Unification of Commissioning Wizard UI:** Redesigned the commissioning modal layout to unify the Scan buttons inline. Replaced redundant/confusing Back button navigation with a single Close action.
Fixed
- - **I2C Bus Reliability and Scan Recovery:** Implemented a robust two-tier I2C Bus Recovery mechanism to automatically detect and clear locked I2C buses (SDA stuck LOW). The system now executes proactive bus recovery (9 clock pulses to release SDA) before running `I2C_SCAN`, and reactive recovery with a single transaction retry for failed `I2C_TRANSFER`, `I2C_SEQUENCE`, and `I2C_UART_BRIDGE` operations, preventing sensor communication lockups after initial readings.
- - **Database Scanner String Nullability Tolerance:** Fixed SQLite address lookup to tolerate empty strings (`''`) in the `deleted_at` column and added `COALESCE` query support to find I2C addresses stored as either `slaveId` or `addr` in device configurations.
v1.1.24
30-05-2026Fixed
- - **Journal State Persistence:** Fixed a circular cache bug in GetWindowDetails where a cached FAILED snapshot shadowed subsequent successful runs of the same window. The system now automatically bypasses the cache for failed states and forces live recalculations during aggregation.
v1.1.23
30-05-2026Fixed
- - **Automation Session Conflicts:** Resolved database UNIQUE constraint failures during automatic cycle logging in the Journal by introducing a unique UUID suffix to the scheduler's flow execution session IDs.
- - **Orphan Trace Classification:** Enabled proper identification and cleanup of orphaned flow execution traces without associated sessions in the Data Management tab by updating the event classification and purge filters.
v1.1.22
30-05-2026Fixed
- - **Scheduler Stall Prevention:** Resolved a critical execution stall where the scheduler remained stuck in a "pending" status if a running automation plan was paused and then stopped or deactivated. Implemented context-aware pause cancellation in the execution engine to ensure the scheduler resets its execution state cleanly.
v1.1.21
27-05-2026Changed
- - **Device Test Dialog Loading Feedback:** Added visual loading indicators and UI locking in the sensor test dialog during active read operations. Replaced interval-based live streaming with a sequential timeout flow to prevent bus congestion.
Fixed
- - **Sensor History Payload and Limit Optimization:** Fixed an issue where the sensor history record limit parameter (50, 100, 500) was ignored by the backend DB query. Optimized network payload sizes by over 10x by omitting the heavy raw execution `data_json` blob from history responses, greatly improving chart and table rendering speeds without affecting flow debugging traces.
v1.1.20
20-05-2026Added
- - **MCP4725 DAC Expander Support:** Added full integration for the MCP4725 I2C Digital-to-Analog Converter (DAC) expander, enabling high-precision voltage and variable speed control for connected actuators (such as dosing pumps).
- - **Dynamic I2C Sequence Engine:** Introduced the `I2C_SEQUENCE` command, allowing execution of multi-step I2C read/write/delay scripts. It features backend runtime mathematical expression evaluation (`$VALUE`, bitwise shifts, and masks) to dynamically scale and format raw values for I2C registers.
- - **Dynamic ADC Resolution:** Added a drop-down selector in the device validation settings for analog (ADC/Raw) sensors to easily specify the physical bit depth resolution (e.g., 10-bit, 12-bit, 16-bit). This automatically sets and enforces the correct maximum hardware limits (e.g., 4095, 32767) for the sensor's valid ranges and fallback constraints.
v1.1.19
19-05-2026Added
- - **I2C Expander Support:** Added native support for I2C hardware expander modules (such as the ADS1115 Analog-to-Digital Converter), allowing users to connect significantly more sensors to a single controller. These expander modules can be easily attached and managed via the new "Hardware Modules" menu in the Add Device wizard.
- - **I2C Bus Scanning:** The "Modbus Commissioning Tool" has been upgraded into a unified **Bus Scanner**. Users can now perform live scans of the I2C bus to automatically discover the hardware addresses (in decimal and hex) of connected expanders and sensors, making configuration simple and error-free.
v1.1.18
18-05-2026Fixed
- - **Flow Control Block Default State:** Resolved an issue where creating a Flow Control block with a default control type of `LOOP_BACK` was unrecognized by the graph editor, requiring users to toggle away and back to register the state. Integrated an automatic frontend synchronization hook that immediately registers default state values in the React Flow node model upon creation.
- - **System-Wide Time Unit Normalization:** Hardened the time execution engine across Wait, Actuator Set (Safety TTL, Witness Delay), and Loop (timeout, interval) blocks to strictly treat durations as base unit (seconds) in database storage and backend execution. This prevents "double-conversion" bugs while introducing a dynamic telemetry reverse-conversion layer for the Wait block, ensuring live UI logs correctly display the user-preferred units (e.g. minutes) while the engine executes in seconds.
v1.1.17
14-05-2026Added
- - **Modbus Bus Commissioning Tool:** Added a dedicated tool for configuring RS485/Modbus RTU sensors directly from the UI, without needing external software. Users can scan the connected bus to discover all active Slave IDs, identify which are already registered in the system, and change a sensor's address via a standard FC06 write command — with automatic verification after the write. The tool is accessible from the "Add Device" wizard footer and supports both "Direct" mode (when the current Slave ID is known) and "Discovery" mode (bus scan across a user-defined ID range).
- - **Slave ID Default Warning:** The "Via Bus" hardware configuration tab now displays a warning when a user enters Slave ID `1`, as this is the factory default for most RS485 sensors. The warning recommends using the Commissioning Tool to change the address before adding the device, preventing future bus conflicts.
- - **Bus Collision Awareness:** The Commissioning Tool automatically queries the database for all devices already assigned to the selected bus and controller, displaying their names, Slave IDs, and online status. A suggested free ID is calculated and pre-filled automatically.
v1.1.16
13-05-2026Added
- - **RS485 Modbus Bus Integration:** The system now supports connecting multiple RS485/Modbus RTU sensors to a shared hardware serial bus (UART_BUS_1), without occupying individual GPIO pins. Sensors such as PAR meters and multi-parameter soil probes can coexist on the same bus using unique Slave IDs (1–247).
- - **Multi-Sensor Bus Discovery (MODBUS_SCAN):** Controllers can now scan the RS485 bus and automatically detect connected Modbus devices by their Slave ID, enabling quick hardware verification before adding sensors in the UI.
- - **Bus-Aware Device Wizard:** The "Add Device" wizard now automatically identifies RS485 sensors and presents a dedicated "Via Bus" configuration tab, where users select the bus port and enter a unique Slave ID. Manual pin selection is hidden — the bus handles routing automatically.
- - **Child Sensor Auto-Inheritance:** When adding child sensors (e.g. Humidity, EC) that share a physical module with a parent sensor (e.g. Temperature), the Slave ID is inherited automatically from the parent. Users only select the parent device — no manual Slave ID entry required.
- - **Slave ID Conflict Guard:** The system validates that no two devices share the same Slave ID on the same bus. If a conflict is detected during save, a clear error is shown with the name of the conflicting device.
- - **Data-Driven Hardware Stability Protocol:** Implemented a new, template-based safety mechanism for controllers like Arduino Uno R4. The system now intelligently detects when hardware constraints (such as UART pin assignments) require a system restart to maintain stability. Users are automatically warned when adding, editing, or removing sensors that affect these shared resources, ensuring clean transitions and preventing communication failures.
v1.1.15
11-05-2026Added
- - **Intelligent Hardware Inversion (Active Low/High):** Implemented a robust logic prioritization system where devices (pumps, valves) inherit the activation logic (`triggerLogic`) from their parent relay module, with a fallback to individual device settings.
- - **Fail-Safe Hardware Configuration:** Added strict validation to ensure that commands are only sent to hardware with valid logic definitions, preventing accidental activation due to missing or corrupt configurations.
Fixed
- - **Digital Status Consistency:** Resolved an issue where Active Low devices reported inverted states in the UI; status readings and telemetry are now automatically normalized based on the resolved effective inversion logic.
v1.1.14
06-05-2026Added
- - **Voltage Override Bypass:** Introduced an advanced bypass mechanism in the Device Wizard to allow hardware selection despite voltage mismatches (e.g., when using level shifters), featuring a contextual security confirmation.
- - **Enhanced Wizard Readability:** Optimized the visual state of all incompatible device models by removing grayscale effects and implementing color-coded hints, ensuring hardware error reasons remain perfectly legible.
- - **Native Windows Desktop Integration:** The application now runs as a professional background service with a dedicated System Tray icon for lifecycle management.
- - **Improved Logging Architecture:** Implemented a non-volatile logging system that writes to `data/logs/system.log` with automatic rotation. Logs can be opened instantly from the Tray menu.
- - **Dynamic Diagnostic Console:** Added support for the `--debug` flag, allowing developers to spawn a real-time CMD console on-demand without affecting the background process stability.
- - **Single-Instance Enforcement:** Integrated a Windows Mutex system to prevent multiple instances from running on the same port, ensuring zero resource conflicts.
- - **System-Wide Hardware Failsafe (FlowGuard):** Upgraded the proactive safety mechanism to perform a global hardware audit across *all* participating flows before an Active Plan is permitted to start. If any critical component is offline, missing, or dangerously stale without a configured fallback, the system enforces a hard block on execution. Diagnostic feedback is now elegantly grouped and deduplicated by flow, providing a clear, scrollable UI to instantly pinpoint failing sensors or actuators.
Changed
- - **Standardized Hardware Pin Management:** Transitioned to a robust 3-state model (Free, Occupied, Locked) across the entire ecosystem. The dashboard and pin-map now provide 100% data consistency by visually muting system-reserved pins and correctly excluding them from the available free pin counts, preventing configuration errors.
- - **Operational Fallback Visibility:** Enhanced the Device Inventory and Controller Management interfaces to explicitly display active Fallback strategies (Cache or Default values). This ensures operational transparency, allowing immediate identification of sensors running on emergency backup logic directly from the data grid.
- - **Intelligent Deep Sleep Synchronization:** Overhauled the hardware status engine to resolve "Indigo Deadlock" issues. Introduced a 2-minute grace period for sleeping controllers to allow natural UDP check-ins before triggering active recovery. Added self-healing logic that automatically detects and re-synchronizes rebooted controllers back to deep sleep.
- - **Enhanced Connectivity Reliability:** Implemented a new 3-attempt PING standard for connectivity verification, providing robust protection against transient network interference and packet loss.
- - **Intelligent Settings Tracking:** Modernized the Controller Sidebar with a professional "isDirty" state. The Save button now visually indicates unsaved changes by turning green, while remaining muted and disabled when the configuration matches the database, preventing redundant API calls and improving UX clarity.
Fixed
- - **FlowGuard Diagnostic Clarity:** Resolved an issue where runtime hardware validation errors displayed missing flow names. The system now accurately resolves and displays the affected Flow Name, ensuring precise and actionable error reporting.
v1.1.13
26-04-2026Added
- - **OTA (Over-The-Air) Firmware Updates:** Integrated directly into the Controller Settings interface, enabling remote .bin flashing for supported hardware over HTTP.
Changed
- - **Improved UX in Flow Editor:** Input fields in Loop, Wait, and Condition nodes now correctly handle empty states while editing, preventing the automatic "reset to 0" behavior and making value replacement much smoother.
- - **Canvas Interaction Refinement:** Added `nodrag` class to interaction-critical inputs on the Flow Editor canvas to prevent canvas-dragging events from interfering with text input.
Fixed
- - **Loop Block Input Fix:** Resolved a bug where the "EVERY" (interval) value could not be typed directly into the block's canvas interface due to a state synchronization race condition.
- - **Active Program UI Sync:** Resolved a race condition where the "Checking..." status failed to update in real-time. The system now utilizes a WebSocket-first architecture for immediate state propagation and precise timer synchronization.
- - **Relay Configuration Wizard:** Fixed a navigation bug in the Device Wizard where the "Back" button was hidden during relay setup, ensuring consistent navigation flow.
v1.1.12
25-04-2026Added
- - **Zero-Touch Deep Sleep Telemetry:** Introduced a revolutionary "Config-on-Wake" battery-saving mode for ultra-low power wireless boards (like the FireBeetle ESP32-C6).
- - The controller can now sleep over 99% of the time, waking up only to automatically execute all configured sensor readings, transmit telemetry data instantly to the backend, and return to sleep.
- - Eliminates the need for manual C++ programming. Users can dynamically change the Deep Sleep interval, calibrate sensors, and modify hardware configurations entirely through the CeresFlows Web UI. The backend automatically synchronizes these changes seamlessly the next time the device wakes up.
v1.1.11
21-04-2026Added
- - **Advanced Hardware Noise Filtering:** Replaced basic signal smoothing with an industrial-grade "Consensus Average" algorithm. This powerful filter actively detects and deletes extreme electrical spikes or voltage drops before they reach your data, resulting in incredibly smooth, jitter-free charts and preventing false automation triggers.
- - **Per-Point Calibration Notes:** Added the ability to record custom notes (up to 100 characters) for every single calibration point. Perfect for documenting environmental conditions, chemical batch numbers, or volume measurements directly alongside sensor data.
- - **Hardware-Aware ADC Validation:** System now dynamically adapts to controller resolution (10-bit vs 12-bit) for sensor readings and calibration.
Changed
- - **Technical Documentation Audit:** Synchronized all reference files with the new hardware-aware architecture.
Fixed
- - Resolved TypeScript build errors to ensure frontend stability.
v1.1.10
21-04-2026Added
- - **FireBeetle 2 ESP32-C6 Support:** Official integration for the DFRobot FireBeetle 2 platform.
- - Added a specialized `lipo_battery_monitor` template for internal power tracking.
- - Introduced **Battery Level (%)** role, allowing users to track state-of-charge with optional multi-point non-linear curves.
Changed
- - **Calibration UX Modernization:** Upgraded the standard Linear and Offset wizards to allow manual raw ADC value entry. This enables 0-point calibration and virtual sensor setup without requiring physical hardware grounding/triggering.
- - **Hardware Selection Clarity:** Refined the FireBeetle 2 pinout definition to prioritize primary functions. Multi-purpose analog pins (D6, D12) are now hidden from sensor selection lists by default to reduce configuration ambiguity.
v1.1.9
18-04-2026Added
- - **Automation Integrity Guard:** Implemented live hardware validation for the Flows system.
- - Added real-time detection of orphaned device references in both the Editor and Flows Management list.
- - Fixed a critical bug where flow license status (`is_licensed`) was lost during updates.
- - Resolved race conditions in the Flows list ensuring accurate hardware status display on page refresh.
- - **Collapsible Global Navigation:** Introduced a premium, space-saving "Mini-Sidebar" mode for the main navigation menu.
- - **Intelligent Mini-Mode:** The sidebar can now collapse to a compact 80px strip, providing significantly more horizontal workspace for analytics and flow editing.
- - **Contextual Popovers:** Integrated high-performance floating popovers for navigation groups (Automation, Fertilizer, etc.), ensuring full navigation depth remains accessible even in collapsed mode.
- - **Global State Persistence:** Added automatic preference tracking via `uiStore`, allowing the system to remember and restore the user's preferred sidebar state across sessions.
- - **Enhanced Visual Feedback:** Implemented smooth Framer-motion-style transitions, SVG-rotated indicators, and glassmorphism tooltips for a premium desktop-app feel.
- - **Flow Editor Workspace Optimization:**
- - **Collapsible Palette:** Added a toggle for the node palette (Sidebar), allowing users to switch to a "Mini-Mode" (icons only) to maximize the drawing canvas.
- - **Slide-out Properties Panel:** Implemented a full collapse mechanism for the right-hand settings panel, including a vertical "Quick Marker" for fast access to properties and diagnostics.
- - **Contextual Tooltips:** Enriched the collapsed Palette with right-aligned tooltips for immediate block identification.
Changed
- - **Canvas-First Block Configuration:** Modernized complex automation blocks (`LOG`, `MATH_VARIABLE`, `LOOP`, `FLOW_CONTROL`) to feature an interactive, stacked UI directly on the Flow Editor canvas. This significantly reduces reliance on the side properties panel for primary configuration (e.g., selecting math operations, toggling variables, or setting loop targets).
- - **Unit-Aware Flow Properties:** Standardized block property panels to utilize automatic unit formatting and conversion, ensuring math limits, sensor readings, and timer values accurately display their correct native metrics.
- - **Standardized Responsive Layouts:** Optimized the entire platform for stable performance on resolutions down to **1366×768**. Key improvements include:
- - **Dialog Layout Contract:** Implemented a mandatory "Sticky Header/Footer, Scrolling Body" pattern for all large modals, preventing element clipping on low-vertical-resolution screens.
- - **Active Program Dashboard Fix:** Resolved a critical UI clipping issue in the Timeline view, enabling vertical scrolling for active slots and ensuring constant visibility of the program progress bar.
- - **Global Scrollbar Standardization:** Unified all internal scrollbars with a custom, high-density theme and established strict rules against inline scrollbar definitions.
- - **Global Device Inventory:** A centralized management interface for all system devices and relays.
- - Implemented a high-performance searchable and filterable table with multi-page pagination.
- - Added direct "one-click" navigation from inventory to specific controllers.
- - Integrated hardware configuration wizard directly into the inventory view.
- - Real-time status visualization for all hardware components (Active, Error, Offline).
v1.1.8
17-04-2026Added
- - **TDS Sensor Support:** Added official support for Analog TDS Sensors (0-1000 ppm) with a dedicated hardware template and calibrated `linear_ec` temperature compensation.
- - **Explicit PPM Scaling Options:** Upgraded EC and TDS unit configurations to explicitly offer 500, 640, and 700 ppm scaling choices in the UI dropdowns, replacing the generic and uncalibrated "ppm" unit marker for significantly improved accuracy.
v1.1.7
12-04-2026Added
- - **Interactive Onboarding Guide:** Introduced a comprehensive 13-step visual tutorial system designed to guide new users through the initial system setup. This covers hardware controller configuration, device attachment (sensors/pumps), and the creation of the first automation flows. Includes a dedicated intro step with links to the CeresFlows HUB for firmware and templates.
v1.1.6
11-04-2026Added
- - **Refined Hardware Lifecycle & 'Disabled' Status:** Introduced a first-class `Disabled` status taxonomy to replace the misleading "Offline" state for manually deactivated hardware. Inactive controllers now adopt a neutral, muted visual style (amber), distinguishing administrative deactivation from critical connection failures (red).
- - **Smart Hardware Watchdog:** Hardened the backend synchronization engine to explicitly ignore disabled controllers. This prevents unnecessary connection attempts, significantly reduces log spam, and ensures that manually deactivated hardware remains silent until explicitly re-enabled.
- - **Atomic State Restoration:** Enhanced the status cascading logic to respect individual device settings. Re-enabling a controller now restore its connected devices to their last known active state, while keeping manually disabled sub-devices in their deactivated state.
Changed
- - **Intelligent Hardware Status Propagation:** Overhauled the device status lifecycle to eliminate the "OFFLINE" paradox. Key improvements include:
- - **Context-Aware Initialization:** Newly created devices now automatically inherit the "Online" status if their parent controller or relay is already active, ensuring immediate operational visibility.
- - **Cascading Status Sync:** Enhanced the configuration update logic to instantly propagate parent connectivity status to sensors and actuators during re-assignment or hardware modification.
- - **Hierarchy-First UI Logic:** Refined the Hardware V2 dashboard to prioritize parent controller health. Sensors are now visually treated as "Online" as long as the communication path is healthy, removing misleading "Offline" indicators while preserving "Error" or "Disabled" alerts.
- - **Enhanced Hardware Management UI:** Refined the V2 management interface for better clarity and context:
- - **Unified Asset Context:** Redesigned the "Asset Header" to provide a centered, real-time view of hardware resource occupancy (Free, Mapped, and Locked Pins), using standardized professional terminology.
- - **Streamlined Onboarding:** Improved the "Empty Devices" guide with a high-visibility badge for the active controller and a clearer call-to-action button ("Attach Sensor / Device") to better align with user intent.
- - **Refined Status Messaging:** Updated system-wide hardware notifications to accurately differentiate between "System" and specific "Controller" connectivity events.
Fixed
- - **Hardware Status Race Conditions:** Resolved a conflict where transport closure synchronization could incorrectly overwrite a manual 'Disabled' status with a generic 'Offline' flag in the database.
v1.1.5
10-04-2026Added
- - **Remote System Lifecycle Management:** Implemented a robust, cross-platform mechanism to remotely **Restart** and **Shutdown** the backend server directly from the Web UI. Features include:
- - **Graceful Shutdown:** Ensures all active services (Automation, Hardware, MQTT, DB) close safely before process termination.
- - **Cross-Platform Restart:** Uses `syscall.Exec` on Linux and independent process spawning on Windows to reliably recover the server without manual terminal intervention.
- - **Safe-Mode Integration:** Commands are accessible even when the system is in "Safe Mode" due to license expiration, enabling remote recovery after license renewal.
- - **Modernized Recovery UI:** A new, full-screen "Restart Required" overlay with two-step confirmation and automatic browser polling to detect and reload once the system is back online.
- - **Settings Integration:** A dedicated "System" tab in Settings for routine maintenance and power management.
- - **Infrastructure Health Monitoring:** Introduced a dedicated **Server Offline** diagnostic screen. This prevents misleading "License Required" errors when the backend is unreachable. Features include:
- - **Smart Connectivity Detection:** Transparently distinguishes between network-level connection failures and application-level license violations.
- - **Automated Recovery Polling:** The frontend now automatically pings the backend every 3 seconds during outages, self-healing the session as soon as the core service returns.
- - **Premium Diagnostic UI:** A specialized, non-intrusive dashboard for infrastructure issues with real-time reconnection animations.
v1.1.4
10-04-2026Added
- - **CeresVault Slot Management:** Introduced a new, non-blocking license enforcement system. Users can now manually assign "slots" to Controllers, Devices, and Automation Flows, or move excess resources into the "Vault" (disabled state) to stay within license limits. This ensures the system remains fully operational and manageable for self-service recovery even during resource violations, allowing for flexible hardware reassignment without requiring a new license file.
v1.1.3
09-04-2026Added
- - **Contextual Variable Management:** Implemented an integrated variable management workflow within the Flow Editor. Features a modernized, searchable `Popover` interface with direct deep-linking to the Variable Manager, allowing for seamless creation and modification of local and global variables directly from automation blocks.
- - **Modernized Unit Selection:** Completely redesigned the `UnitSelector` component with a premium, searchable interface. Highlights include localized alphabetical category sorting (EN/BG), sticky group headers for context, "Quick Jump" pills for rapid navigation, and optimized event handling to resolve nested scrolling issues in complex automation dialogs.
v1.1.2
09-04-2026Added
- - **Advanced Hardware Browser:** Implemented a premium, amber-themed "Advanced Browser" dialog for sensors and actuators. Features include high-performance fuzzy search, controller-based filtering, and a dedicated UI for managing large hardware inventories.
- - **Orphan Device Safety Guards:** Developed an automated detection system for "orphan" devices (unassigned sensors/actuators). These devices are now visually dimmed, labeled as "Unassigned" with red status indicators, and programmatically disabled in selection menus to prevent automation errors. Includes contextual tooltips explaining the missing hardware assignment.
- - [Added] Live hardware integrity validation in Flow Editor and Flows list.
- - [Added] Automatic synchronization of flow validation status when referenced devices are deleted.
- - [Fixed] Critical bug where flow license status (`is_licensed`) was lost during updates.
- - [Fixed] Race condition in Flows list causing false-positive validation errors on page refresh.
- - **Enhanced Controller-Aware Selection:** Integrated a dual-section filter dropdown in the quick device selector, allowing users to filter devices by either functional category (Water, Air, etc.) or specific hardware controller nodes.
- - **Hardware Abstraction Layer (H.A.L.):** Implemented a robust unification layer for hardware configurations. This provides a bridge between legacy V1/V4 keys and V5 standards, ensuring that older device records are automatically "healed" and fully compatible with the new calibration system.
Changed
- - **Premium Selector UI:** Upgraded the quick device selector with a high-visibility `3px` border, increased height for better presence, and a custom CF-themed internal scrollbar. Added controller name badges to list items for immediate hardware context.
- - **Management UI Terminology:** Standardized terminology across the system to **"Device Function (Role)"** and **"Conversion Strategy"**, improving clarity in the adoption and configuration workflows.
- - **Optimistic Calibration Feedback:** Implemented an optimistic state management pattern in the Calibration interface. Changes to device roles and active strategies are now reflected in the UI instantly, without waiting for server round-trips.
Fixed
- - **Controller Name Race Condition:** Resolved a data-reactive bug where controller names would initially appear as "Unknown" in the browser due to asynchronous loading dependencies. Names now correctly resolve and display as soon as hardware data is fetched.
- - **Role/Strategy Persistence:** Resolved a critical bug where selected device functions and calibration strategies were not correctly persisted or were lost during synchronization between the Wizard and Calibration interfaces.
- - **Wizard State Leakage:** Fixed a bug where the Hardware Wizard would remember data from a previously edited device when switching to "Add" mode. Implemented explicit state cleanup in `ManageControllerV2` to ensure a clean start from Step 1 for all new adoptions.
- - **Backend Legacy Resolution:** Fixed issues where the hardware execution service failed to resolve roles or calibration data for devices with legacy configuration schemas.
v1.1.1
08-04-2026Changed
- - **Centralized Hardware Validator:** Consolidated fragmented compatibility logic into a single, shared utility (`HardwareValidator`). All hardware constraints (pin types, availability, and voltage matching) are now managed from a unified "Source of Truth," ensuring 100% logic synchronization between device selection and pin configuration.
- - **Unified Visual Status Engine:** Refactored the interactive Pin Map and the Device Wizard to use a shared metadata system. This ensures that status indicators (Red/Emerald dots, lock icons, and tooltips) are perfectly consistent across all hardware-related UI components.
Fixed
- - **Hardware Configuration Persistence:** Resolved a critical bug where changes to "Operational Mode" and "Resource Role" were not saved due to stale function closures in the Device Wizard. Implemented the `useImperativeHandle` (Controller Pattern) to ensure the save action always executes with the latest UI state, guaranteeing 100% data persistence for edited devices.
- - **DS18B20 Compatibility Detection:** Resolved an issue where specific 1-Wire capabilities (like `ONEWIRE_READ_TEMP`) were not correctly recognized as satisfying general protocol requirements.
- - **Missing Hardware Translations:** Added localized strings for generic hardware capability errors in both Bulgarian and English locales.
v1.1.0
08-04-2026Added
- - **Hardware Relationship Icons:** Replaced text-heavy "Mother/Child" badges with modern, color-coded icons (Workflow for Mother, Link for Child) and integrated tooltips for better spatial efficiency.
- - **Immediate UI Invalidation:** Implemented a real-time status synchronization pattern using WebSocket-driven React Query invalidation, ensuring hardware status changes (e.g., Online/Offline transitions) are reflected in the UI within milliseconds.
- - **Architectural Standards:** Formalized the "Immediate UI" and "Real-time UI Sync" patterns in the system-wide integration and UX documentation for future feature development.
Changed
- - **Standardized Hardware Grid:** Implemented a unified header height across all device cards to ensure a consistent, professional layout regardless of relationship status.
- - **Dynamic Group Label Fallback:** Developed an intelligent fallback mechanism for hardware group labels that automatically extracts identifiers from device model names when explicit tags are missing.
- - **Backend Status Propagation:** Upgraded the `HardwareService` to emit global `DEVICE_ONLINE` and `DEVICE_OFFLINE` events for individual sensors and relays, ensuring the entire system reacts to granular hardware state changes.
Fixed
- - **Sensor Group Persistence:** Fixed a bug in the device configuration wizard that prevented `parentTag` data from being correctly saved to the database.
- - **Hardware Grid TypeScript Integrity:** Resolved property-access errors in the Hardware V2 management interface by standardizing the data structure for mixed Device and Relay nodes.
- - **Manual Test Sync:** Fixed an issue where manual device tests (`Read Once`) would update the database but fail to trigger an immediate status refresh in the management grid.
v1.0.9
07-04-2026Fixed
- - **Hardware Adoption Lifecycle:** Stabilized the device adoption workflow by ensuring accurate real-time port availability reporting (Red/Emerald occupancy indicators) across all setup steps.
- - **Connection Type Persistence:** Implemented robust payload sanitization when switching between Relay, Parent, and Direct connections, ensuring legacy hardware associations are explicitly cleared in the database.
v1.0.8
06-04-2026Added
- - **Hardware V2 Management Interface:** A completely redesigned dual-pane workspace for controllers, sensors, and relays, featuring a collapsible sidebar for unified configuration and real-time status monitoring.
- - **Visual Controller Schematics:** Integrated a fully visual pin-mapping system (`PinMapView`) that displays the literal physical board layout for each controller model, with interactive highlights for assigned and available ports.
- - **Multi-Step Device Wizard (V2):** A streamlined 4-step onboarding process for adding/editing devices, including smart capability filtering (e.g., restricting PWM devices to compatible pins) and instant validation.
- - **Advanced Port Conflict Prevention:** Developed a system-wide port reservation engine that automatically detects and locks busy physical pins, preventing hardware level conflicts before they happen.
- - **Global Hardware Localization:** Implemented full translation support (Bulgarian and English) for the entire hardware management stack, including all interactive wizards, tooltips, and system status labels.
- - **Unit-Aware Hardware Configuration:** Extended the `UnitAwareInput` standard to all device configuration forms, ensuring physical values (like temperature compensation or thresholds) are correctly handled in preferred units (e.g., Celsius vs Fahrenheit).
- - **Persistent UI Preferences:** The system now intelligently remembers interface configurations across the Hardware module (such as view modes and sidebar states), ensuring personalized workspaces remain exactly as users left them, while intelligently forcing open required panels during new hardware setup workflows.
Changed
- - **Capacity-Focused Stats Dashboard:** Replaced the legacy status bar with a compact "Info Belt" in the hardware header, prioritizing controller capacity visualization (assigned vs. available pins/channels).
- - **Responsive Management Workspace:** Enhanced UI responsiveness with Framer Motion animations and glassmorphism styling, optimized for high-density hardware setups.
v1.0.7
05-04-2026Fixed
- - **Hardened Hardware Synchronization:** Eliminated "ghost" online statuses and UI flickering for MQTT and WiFi-connected controllers (e.g., Arduino Nano, Uno R4) by enforcing a strict, pessimistic PING-only status propagation model.
- - **MQTT Retained Message Filter:** Implemented a global transport-level filter to explicitly ignore stale "retained" messages from the MQTT broker for both command-responses and device announcements. This ensures the system only reacts to real-time hardware events.
- - **Unique Command Traceability:** Developed a controller-specific ID prefixing system (UUID-based) for all background PING and INFO commands. This prevents cross-device command collisions where one controller could accidentally intercept and respond to another's status request.
- - **Absolute Backend Timeouts:** Added a strict 3.5s hardware response window (3s PING + 0.5s grace) in the backend Hardware Manager. This explicitly drops "late-arriving" network packets, preventing them from triggering false "Online" status updates after a synchronization cycle has already timed out.
- - **Frontend UX Optimization:** Reduced the hardware refresh blocking timeout to 4 seconds, aligning UI feedback with the new hardened backend synchronization window for a snappier and more accurate status reporting experience.
v1.0.6
02-04-2026Changed
- - **Intelligent Hardware Lifecycle:** Implemented cascading status synchronization for the entire hardware stack. Setting a controller to "Inactive" now automatically marks all its connected devices (including nested child sensors and relay-driven actuators) and relays as "Offline" in the UI. Re-activating the controller restores them to "Online" before reconnection.
- - **Robust Controller Deletion:** Enhanced the controller removal process to ensure a clean system state. Deleting a controller now immediately closes its hardware connection, detaches all directly linked sensors, and clears relay assignments, preventing "zombie" references in the database.
- - **High-Performance Cascade Engine:** Replaced manual iteration with a single, highly-optimized raw SQL query to handle bulk status updates across complex hardware topologies (parent/child and relay-linked devices) in one atomic operation.
- - **Native App Immersion:** Globally disabled the default browser right-click context menu across the entire interface. This reinforces the dedicated "App Mode" experience, preventing accidental navigation or element inspection, while ensuring standard keyboard shortcuts (like Ctrl+C / Ctrl+V) continue to work seamlessly.
Fixed
- - **Controller Settings Update:** Resolved an edge-case error ("unsupported type map") that prevented users from editing network parameters (like IP or Port) on existing controllers. Connection details are now correctly deserialized and securely mapped to the database structure.
- - **License System Tampering:** Addressed a vulnerability where manipulating the system clock could bypass license expiration during system startup. The anti-tamper mechanisms are now strictly enforced regardless of the license validity state.
- - **Automation API Protection:** Secured undocumented API routes (`/api/flows`, `/api/activeplan`, `/api/templates`) by properly enforcing license verification, preventing headless script modifications while the UI is locked.
- - **Flow Editor Inputs:** Resolved a persistent UX frustration where duration and timeout fields stubbornly reverted to defaults (like `1` or `60`) when cleared. Fields can now be completely emptied, making number replacement much smoother.
- - **Help Drawer UI:** Fixed a responsive layout issue in the Documentation Drawer where the search bar would visually overlap and block the Close ("X") button.
v1.0.5
31-03-2026Added
- - **Unified Hardware Communication (CPS v2):** Implemented the CeresFlows Communication Protocol v2 across the backend. This standardizes all system commands (PING, STATUS, INFO) into a compact, universal JSON format, replacing legacy pipe-delimited text for significantly better reliability.
- - **Automated Controller Discovery:** The backend now automatically fetches controller `capabilities` via the `INFO` command upon connection. This data is stored in the database, allowing the system to dynamically identify which commands (e.g., DHT_READ, I2C, Modbus) a specific controller supports.
- - **Smart Numeric Request IDs:** Optimized command tracking by switching from long string-based IDs to short numeric values (max 6 digits). This resolve memory overflow issues on 8-bit controllers (like Arduino Nano) while maintaining full traceability.
- - **Intelligent Variable Speed Control (PWM):** Added adaptive PWM control components directly to the Actuator Testing Panel. The system now automatically identifies PWM-capable devices and replaces the standard ON/OFF relay switch with a 0-100% speed slider. This is backed by a new, highly optimized hardware payload filter that strictly reduces serial traffic, ensuring 8-bit controllers (like the Arduino Uno R3) can process ultra-fast live speed adjustments flawlessly.
- - **ESP8266 NodeMCU Support:** Officially integrated the ESP8266 NodeMCU as a recognized network controller. Users can now natively configure this low-cost WiFi board with full system support, unlocking all 17 hardware capabilities (including I2C, SPI, and Modbus RTU) out of the box with zero-dependency firmware.
Changed
- - **Streamlined Protocol Logic:** Simplified the hardware message handler by removing redundant "heartbeat" checks and consolidating success detection. The system now relies strictly on the numeric `"ok": 1` response field as the single source of truth for command execution.
- - **Ultrasonic Sensor Range:** Increased the ultrasonic sensor (HC-SR04) hardware timeout to 50ms in the firmware, allowing it to correctly read much larger distances up to 3+ meters without failing prematurely.
Fixed
- - **Network Scanner Capability Loss:** Fixed a bug where controller capabilities (commands) successfully discovered by the Network Scanner were not transferred to the Controller Wizard. Controllers added via network scanning now correctly save and display their full capability set without requiring a manual refresh.
- - **Controller Port Lifecycle:** Fixed an issue where setting a controller to "Inactive" did not properly release the physical COM port. The port is now immediately freed in Windows (allowing Arduino re-flashing without closing CeresFlows), and toggling back to "Active" instantly and safely re-establishes the connection without requiring a page refresh or crashing the system.
- - **Relay Controller Display:** Resolved a legacy bug preventing the system from correctly identifying the physical controller associated with a relay. Relays will now accurately display their assigned controller in the hardware table and predictably retain their selection when modified.
- - **Wireless Controller Connectivity:** Resolved a protocol communication mismatch that caused WiFi Controllers (e.g., UNO R4 WiFi, ESP series) to appear as 'Offline' in the UI immediately after successfully pairing via the Network Scanner.
- - **Custom Network Ports (UDP):** Fixed an issue where CeresFlows ignored custom UDP ports defined during Controller setup, forcing traffic through a default port. The system now strictly communicates using the unique network ports assigned to each device.
- - **Hardware Console Testing:** Corrected a bug in the Web UI Hardware Testing Console where manual commands (like toggling a relay or reading a sensor) failed to execute on the physical board due to an internal ID formatting error.
v1.0.4
30-03-2026Added
- - **Smart Hardware Rate Limiting (Cooldown):** Implemented an intelligent group-based cooldown system in the backend. CeresFlows now automatically tracks the last reading time for every physical sensor chip (like DHT22) to prevent hardware collisions. If a Flow or a Burst-Read tries to poll the same sensor too quickly, the system will transparently wait for the required recovery period (e.g. 2s), ensuring 100% stability without manual user intervention.
- - **Hardware Noise Filtering Configurator:** The Template Builder now provides a dedicated UI section for defining default noise filtering settings (`Sample Count` and `Sample Delay`). This allows developers to bake physical safety requirements directly into sensor templates, which the system then enforces globally.
Changed
- - **High-Precision Sample Delays:** Significantly increased the maximum allowed sample delay from 500ms up to 2000ms. This enables correct configuration for slow-responding digital sensors (DHT21/22/AM2301) and complex Modbus devices, ensuring more accurate and reliable data filtering.
- - **Intelligent Template Authoring:** The Template Builder now respects user-provided data paths (`valueField`). It will no longer automatically overwrite custom fields (e.g. `humidity`) when changing sensor commands, making multi-value combined sensor setup significantly faster.
Fixed
- - **Grouped Sensor Reading (DHT22 Mother/Child):** Resolved a critical issue where "Child" sensors would fail or return incorrect values when read immediately after their "Mother" sensor. The system now correctly routes data paths and manages hardware timing independently for all interleaved sensor groups.
v1.0.3
29-03-2026Added
- - **Flow Editor Zones & Canvas Shortcuts:** The Flow Editor now supports visual Zones, allowing users to logically group related automation blocks together with custom titles and colors. A new Shortcuts menu was also added to the canvas to reveal powerful native features like Shift-Drag multi-selection, making complex flow construction significantly faster and more organized.
- - **Variable Speed Pump Control:** The Flow Editor now supports dynamically adjusting actuator speeds (e.g., dosing pumps) between 0-100% using the new `SET_SPEED` action, which enables real-time inline adjustments based on sensor feedback.
- - **Advanced Math Operations:** Added `CLAMP` and `ABS` operations to the Math/Variable block. The `CLAMP` function drastically simplifies automation limits by restricting a variable between a minimum and maximum boundary in a single step, eliminating the need for complex `IF` block chains.
- - **Automatic Unit Normalization:** CeresFlows now intelligently scales raw hardware readings (e.g., converting centimeters to millimeters or ppm to uS/cm) before saving or calibrating, eliminating the need for manual configuration and ensuring graphs and UI components always display the correct scale.
Changed
- - **App Mode Launcher:** The application now launches in a clean, native-looking window (without address bar or browser chrome) when opened automatically. The window features the CeresFlows logo and title, providing a more focused, zero-distraction desktop experience.
Fixed
- - **Variable Speed Calibration:** Fixed an issue where PWM-capable devices did not present their required percentage-based speed calibration menus. The hardware setup wizard now intelligently restricts physical pin selection to only those ports that actually support pulse-width modulation, preventing setup errors.
v1.0.2
27-03-2026Added
- - **Global Documentation Search:** Integrated a full-text fuzzy search engine (`MiniSearch`) into the Help system. Users can now search across all documentation modules (BG/EN) from the Help Drawer header, with real-time preview snippets for faster discovery and navigation.
Changed
- - **Flow Editor Variables:** Translated the "Variables" toolbar button to Bulgarian with an amber highlight style, and improved the Variable Manager to clarify tab selection by defaulting to Local variables and applying a distinct active background state.
- - **Flow Editor Connection Mechanics:** Completely overhauled the node connection user experience. Replaced strict point-to-point dragging with a flexible "Click-to-Connect" interaction model. Clicking a source node now attaches a visual routing line to the cursor and illuminates all valid target nodes.
- - **Forgiving Node Drop Targets:** Users can now click or drag-and-drop a connection *anywhere* onto a target node's bounding box to establish a link, significantly reducing the precision required to build automation flows.
- - **Modernized Device Action Menu:** Replaced the ambiguous "Test" play icon in device tables with a comprehensive action menu (`...`). This provide direct, clearly-labeled access to Monitoring, Calibration, History, and Settings tabs, improving navigation and discoverability for new users.
Fixed
- - **Flow Editor Robustness:** Fixed validation logic to correctly identifier disconnected flows as Drafts immediately after creation, and resolved a race condition that caused duplicate flow entries during the save process.
v1.0.1
26-03-2026Added
- - **Modernized Backup & Restore:** Complete overhaul with support for more data types including Fertilizer, Resources, and System Configurations.
- - **Full Bulgarian Help Localization:** All 37 documentation modules have been translated into Bulgarian, providing comprehensive guidance across the entire platform.
- - **New Grouped Interface:** Organized layout for easier management of backup archives.
- - **Restore Validation:** Added a safety check that inspects backup files and warns about potential configuration issues before performing a restore.
Changed
- - **Granular Restore Logic:** Improved restoration process that now allows for precision "Wipe & Replace" of specific data groups without affecting other system settings.
- - **Optimized Backup Size:** Reduced archive sizes by automatically excluding large temporary logs and redundant system data.
v1.0.0
25-03-2026Added
- - Initial release of the CeresFlows system.