Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

1,930 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

TankAlarm v1.9.3 - Industrial Tank Monitoring System

Release Date: June 11, 2026
Version: 1.9.3
Platform: Arduino Opta + Blues Wireless Notecard

A production-ready industrial monitoring system for remote tank level monitoring, alarm management, and fleet coordination using cellular IoT connectivity.


๐ŸŽฏ Overview

TankAlarm is a complete industrial monitoring solution designed for reliable, remote tank level monitoring with SMS/email alerts. Built on the Arduino Opta industrial controller platform with Blues Wireless cellular connectivity, it provides enterprise-grade reliability without requiring WiFi or wired network infrastructure at remote sites.

System Architecture

The system consists of three components:

  • Client - Remote monitoring device (deployed at tank sites)
  • Server - Central data aggregation and alerting hub (office/headquarters)
  • Viewer - Read-only monitoring device (optional, for remote viewing)
       โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
       โ”‚   CLIENT    โ”‚                  โ”‚   SERVER    โ”‚
       โ”‚  (Remote)   โ”‚                  โ”‚ (HQ/Office) โ”‚
       โ”‚ โ€ข Monitors  โ”‚                  โ”‚ โ€ข Dashboard โ”‚
       โ”‚ โ€ข Sensors   โ”‚                  โ”‚ โ€ข Alerts    โ”‚
       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ–ฒโ”€โ”€โ”€โ”€โ”€โ”€โ”˜                  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ–ฒโ”€โ”€โ”€โ”€โ”€โ”€โ”˜
              โ”‚                                โ”‚
              โ”‚ Cellular                       โ”‚ Cellular
              โ–ผ                                โ–ผ
       โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
       โ”‚            BLUES NOTEHUB (Cloud)             โ”‚
       โ”‚     (Data Exchange & Device Management)      โ”‚
       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                              โ”‚ Cellular/WiFi
                              โ–ผ
                       โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                       โ”‚   VIEWER    โ”‚
                       โ”‚ (Read-Only) โ”‚
                       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                         Ethernet LAN
                        (User Display)

โœจ Key Features

Client (Remote Monitoring)

  • Multi-Sensor Support - Monitor up to 8 objects per device
    • Analog voltage (0-10V)
    • 4-20mA current loop (pressure sensors, level transmitters)
    • Digital on/off (float switches)
    • Pulse counting (flow meters, RPM sensors)
  • Flexible Object Types - Tanks, engines, pumps, gas systems, flow meters
  • Intelligent Alarming - Configurable high/low thresholds with hysteresis and debouncing
  • Rate Limiting - Prevents alert flooding during transient conditions
  • Relay Control - Automated shutoff with multiple modes (momentary, until_clear, manual_reset)
  • Remote Configuration - Update all settings via server web interface
  • Persistent Storage - LittleFS internal flash (no SD card required)
  • Watchdog Protection - Automatic recovery from system hangs
  • Low Power Design - Optimized for battery/solar operation

Server (Central Hub)

  • Web Dashboard - Real-time monitoring of all clients
  • SMS & Email Alerts - Immediate notifications for alarm conditions
  • Daily Reports - Scheduled email summaries
  • Remote Client Management - Configure any client from web interface
  • RESTful API - Programmatic access for automation
  • Fleet Management - Centralized control via Blues Notehub
  • FTP Backup/Restore - Configuration archiving
  • Client Console - Real-time serial log viewing for troubleshooting
  • PIN Authentication - Secure access with constant-time comparison and rate limiting
  • Configuration Import/Export - JSON-based backup and templating
  • Config Comparison - Visual diff before deploying changes
  • Unsaved Changes Warning - Prevents accidental data loss
  • Audit Log - Track configuration changes with timestamps
  • Contextual Tooltips - Inline help for complex configuration options

Viewer (Read-Only Display)

  • Dashboard-Only - No configuration access
  • Stale Data Warnings - Visual indicators for outdated readings
  • Minimal Attack Surface - Secure deployment for public areas
  • Notecard Sync - Automatic data updates from server

๐Ÿ”ง Hardware Requirements

Client Hardware

  • Arduino Opta Lite - Industrial controller (STM32H747XI dual-core)
  • Blues Wireless for Opta - Cellular Notecard carrier board
  • Arduino Opta Ext A0602 (optional) - 4-20mA analog expansion for sensors
  • Sensors - Compatible with 0-10V, 4-20mA, digital, or pulse outputs
  • Power Supply - 12-24V DC (solar + battery recommended for remote sites)

Server Hardware

  • Arduino Opta Lite - Industrial controller
  • Blues Wireless for Opta - Cellular Notecard carrier board
  • Ethernet Connection - RJ45 to local network
  • Power Supply - 12-24V DC

Viewer Hardware (Optional)

  • Arduino Opta Lite - Industrial controller
  • Blues Wireless for Opta - Cellular Notecard carrier board
  • Ethernet Connection - RJ45 to local network
  • Power Supply - 12-24V DC

๐Ÿ“‹ Sensor Compatibility

Tested Sensors

Type Model Interface Application
Pressure Transmitter Dwyer 626-06-CB-P1-E5-S1 4-20mA Tank level (0-5 PSI)
Float Switch Dayton 3BY75 Digital High/low level detection
Hall Effect Sensor Generic Pulse Engine RPM monitoring
Flow Meter Generic Pulse Liquid flow rate

Sensor Interface Types

  • Digital (Float Switches) - Binary on/off, 3.3V/5V compatible
  • Analog Voltage - 0-10V (via Opta Ext A0602)
  • 4-20mA Current Loop - Pressure transmitters, level sensors
  • Pulse Counting - Flow meters, RPM sensors (up to 10 kHz)

๐Ÿš€ Quick Start

1. Hardware Setup

Client (Remote Site):

  1. Install Blues Wireless for Opta carrier on Arduino Opta
  2. Activate Notecard at blues.io
  3. Connect sensors to appropriate inputs
  4. Connect 12-24V DC power (solar recommended)

Server (Office/HQ):

  1. Install Blues Wireless for Opta carrier on Arduino Opta
  2. Activate Notecard at blues.io
  3. Connect Ethernet cable to local network
  4. Connect 12-24V DC power supply

2. Software Installation

Prerequisites:

  • Arduino IDE 2.x or later
  • Arduino Mbed OS Opta Boards core (via Boards Manager)

Required Libraries:

  • ArduinoJson v7.x or later
  • Blues Wireless Notecard (latest)
  • LittleFS (built into Mbed core)
  • Ethernet (built-in)

Installation:

  1. Clone this repository
  2. Install TankAlarm-112025-Common library:
    # Windows PowerShell (as Admin)
    New-Item -ItemType Junction -Path "$env:USERPROFILE\Documents\Arduino\libraries\TankAlarm-112025-Common" -Target "C:\path\to\ArduinoSMSTankAlarm\TankAlarm-112025-Common"
  3. Open the appropriate sketch in Arduino IDE:
    • Client: TankAlarm-112025-Client-BluesOpta/TankAlarm-112025-Client-BluesOpta.ino
    • Server: TankAlarm-112025-Server-BluesOpta/TankAlarm-112025-Server-BluesOpta.ino
    • Viewer: TankAlarm-112025-Viewer-BluesOpta/TankAlarm-112025-Viewer-BluesOpta.ino
  4. Update PRODUCT_UID to match your Blues Notehub project
  5. Compile and upload

3. Blues Notehub Configuration

  1. Create account at notehub.io
  2. Create a new product for your TankAlarm system
  3. Create three fleets:
    • tankalarm-server - For server device(s)
    • tankalarm-clients - For all client devices
    • tankalarm-viewer - For viewer device(s)
  4. Claim all Notecards into the product
  5. Assign each Notecard to the appropriate fleet

Detailed Instructions:

4. Access Web Dashboard

  1. Power on the server and wait for network connection
  2. Check serial monitor (115200 baud) for IP address
  3. Navigate to: http://<server-ip>/
  4. Configure server settings and SMS/email recipients
  5. Configure clients remotely via the dashboard

๐Ÿ“Š Technical Specifications

Client Specifications

  • Lines of Code: 5,488
  • Memory Footprint: ~150KB flash, ~30KB RAM
  • Monitors per Device: Up to 8
  • Sample Interval: Configurable (default: 30 minutes)
  • Alarm Hysteresis: Configurable per monitor
  • Watchdog Timeout: 30 seconds
  • Cellular Connectivity: Blues Wireless Notecard (LTE-M/NB-IoT)
  • Data Persistence: LittleFS internal flash
  • Power Requirements: 12-24V DC, ~2W typical

Server Specifications

  • Lines of Code: 10,328
  • Memory Footprint: ~300KB flash, ~100KB RAM
  • Max Clients: 32 (expandable)
  • Max Tanks: 64 total across all clients
  • Web Server: HTTP (port 80)
  • API Endpoints: 15+ RESTful endpoints
  • Network: Ethernet (10/100 Mbps)
  • Data Persistence: LittleFS internal flash
  • Power Requirements: 12-24V DC, ~3W typical

Viewer Specifications

  • Lines of Code: 763
  • Memory Footprint: ~100KB flash, ~20KB RAM
  • Web Server: HTTP (port 80) - read-only
  • Network: Ethernet (10/100 Mbps)
  • Power Requirements: 12-24V DC, ~2W typical

๐Ÿ“ก Communication Architecture

Fleet-Based Routing (Blues Notehub)

The system uses Blues Notehub fleet-based routing for device-to-device communication:

  1. Client โ†’ Server: Telemetry and alarms routed to tankalarm-server fleet
  2. Server โ†’ Client: Configuration updates routed to specific client device IDs
  3. Server โ†’ Viewer: Status updates sent for dashboard display

Advantages:

  • No hardcoded device IDs in firmware
  • Simplified fleet management
  • Automatic routing via Notehub
  • Scalable to hundreds of devices

Data Flow

CLIENT                      BLUES NOTEHUB              SERVER
  โ”‚                               โ”‚                       โ”‚
  โ”œโ”€โ”€โ”€ telemetry.qo โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค                       โ”‚
  โ”‚         (level data)          โ”‚                       โ”‚
  โ”‚                               โ”œโ”€โ”€โ”€ fleet routing โ”€โ”€โ”€โ”€โ–ถโ”‚
  โ”‚                               โ”‚                       โ”‚
  โ”œโ”€โ”€โ”€ alarm.qo โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค                       โ”‚
  โ”‚      (alarm event)            โ”‚                       โ”‚
  โ”‚                               โ”œโ”€โ”€โ”€ fleet routing โ”€โ”€โ”€โ”€โ–ถโ”‚
  โ”‚                               โ”‚                       โ”‚
  โ”‚                               โ”‚                       โ”œโ”€ SMS/Email
  โ”‚                               โ”‚                       โ”‚  Alerts
  โ”‚                               โ”‚                       โ”‚
  โ”‚                               โ”‚โ—€โ”€โ”€โ”€ config_push.qi โ”€โ”€โ”€โ”ค
  โ”‚                               โ”‚   (new config)        โ”‚
  โ”‚โ—€โ”€โ”€โ”€โ”€ route: device_id โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค                       โ”‚
  โ”‚     (config received)         โ”‚                       โ”‚

๐Ÿ›ก๏ธ Security Features

Authentication

  • PIN-based Access Control - Protect configuration endpoints
  • Constant-Time PIN Comparison - Prevents timing attack analysis
  • Authentication Rate Limiting - Exponential backoff with lockout after 5 failures
  • Optional PIN - Can be disabled for trusted networks
  • Session-based - PIN verified per-session

Input Validation

  • All POST endpoints validate JSON structure
  • Buffer overflow protection on string inputs
  • Range checking on numeric values
  • Client UID length validation with diagnostic logging
  • Hash table bounds checking to prevent out-of-bounds access
  • HTTP 400/401/429/500 status codes for error conditions

Network Security

  • HTTP Only - Deploy on trusted local networks
  • No Internet Exposure - Server should not be internet-facing
  • Ethernet Isolation - Physical network segmentation recommended

Note: HTTPS/TLS not currently supported. For internet-facing deployments, use VPN or reverse proxy with TLS termination.


๐Ÿ“– Documentation

Installation & Setup

Firmware Updates & Provisioning

Update model: The Client (field-deployed) supports secure, rollback-protected over-the-air (OTA) updates via MCUboot. The Server and Viewer are updated locally over USB. See the Server/Viewer strategy note above for the rationale.

Advanced Features

Security & Architecture

Code Reviews & Release History


๐Ÿงช Testing & Deployment

Pre-Deployment Testing Checklist

  • Hardware Validation

    • All sensors reading correctly
    • Relay control functioning
    • Cellular connectivity stable
    • Ethernet connectivity stable
  • Software Validation

    • Firmware version 1.9.3 confirmed
    • All clients reporting to server
    • Alarms triggering correctly
    • SMS/email alerts delivering
    • Web dashboard accessible
  • Network Testing

    • Blues Notehub routing configured
    • Fleet assignments verified
    • Server IP address documented
    • Firewall rules configured (if applicable)
  • Burn-In Testing

    • 48-hour continuous operation test
    • Watchdog recovery test
    • Power cycle recovery test
    • Network failover test

Deployment Checklist

  1. Flash all devices with v1.9.3 firmware
  2. Configure Blues Notehub fleet assignments
  3. Set server IP address and network configuration
  4. Configure SMS/email recipients
  5. Test alarm notifications
  6. Test relay control
  7. Verify web dashboard access
  8. Document device serial numbers and locations
  9. Establish backup schedule (FTP recommended)

๐Ÿ”ฎ Roadmap

v1.2 (Planned)

  • Enhanced email formatting (HTML, attachments)
  • Historical data logging (30-day retention)
  • Graphical trend charts
  • Common header consolidation (centralize duplicated constants)
  • Event-driven Notecard polling (file.changes + change trackers)

v2.0 (Future)

  • Advanced analytics and reporting
  • Predictive maintenance alerts

๐Ÿ“œ License

See LICENSE file for details.


๐Ÿค Support

For technical support, bug reports, or feature requests, please open an issue on GitHub.

Common Resources


๐Ÿ—๏ธ Repository Structure

SenaxTankAlarm/
โ”œโ”€โ”€ TankAlarm-112025-Client-BluesOpta/    # Remote monitoring client
โ”œโ”€โ”€ TankAlarm-112025-Server-BluesOpta/    # Central server & dashboard
โ”œโ”€โ”€ TankAlarm-112025-Viewer-BluesOpta/    # Read-only viewer
โ”œโ”€โ”€ TankAlarm-112025-Common/              # Shared library
โ”œโ”€โ”€ CODE REVIEW/                          # Code reviews & documentation
โ”œโ”€โ”€ RecycleBin/                           # Archived versions
โ”œโ”€โ”€ Tutorials/                            # Getting started guides
โ”œโ”€โ”€ TankAlarm-112025-BillOfMaterials.md    # Hardware BOM
โ””โ”€โ”€ README.md                             # This file


๐Ÿ“‹ Changelog

v1.9.3 (June 11, 2026)

  • Fixed Client OTA blocker (ODFU regression): The Client boot sequence was again configuring the Notecard for STM32 Outboard DFU (card.dfu {"name":"stm32"}) โ€” the same setting v1.8.6 removed because the Blues Wireless for Opta carrier cannot drive ODFU. This caused every Notehub firmware update to fail with {odfu-fail}: stmConnectToBootloader: timeout even though the image downloaded into the Notecard completely. The Client now sends card.dfu {"name":"-"} at boot to actively clear the outboard host type (more robust than simply omitting the call, since the Notecard persists the prior setting). Notehub-delivered firmware now stays in Notecard storage for the host to pull via dfu.get and apply through MCUboot.
  • Clears ODFU before startup sync: The Client now enables the user DFU channel and clears the persisted outboard host type before the first boot-time hub.sync, preventing the first sync after a USB update from re-entering the failing ODFU path.

v1.9.2 (June 11, 2026)

  • First OTA-test release for the MCUboot Client. Build sequence advanced to 192 so the field Client (running 1.9.1 / build 191) can perform a genuine MCUboot A/B swap to a higher version. This is the target image used to validate the staging โ†’ swap โ†’ confirm โ†’ rollback path on the bench before fleet rollout.
  • No functional code changes vs 1.9.1; version/build-sequence bump only.

v1.9.1 (June 11, 2026)

  • Client MCUboot OTA: The Client now updates over-the-air through the Arduino MCUboot bootloader, providing atomic A/B image swap and automatic rollback on a failed boot. Builds are compiled with -DTANKALARM_DFU_MCUBOOT and published as a signed/encrypted .slot.bin.
  • QSPI storage redesign: The Client mounts its LittleFS configuration store on QSPI partition 4 and never reformats the whole device, reserving partition 2 for MCUboot OTA staging. KeyProvisioning now creates the full MBR partition table (p1 WiFi / p2 OTA / p3 KVStore / p4 user) before formatting the OTA partition.
  • Client-only update model: The Server (HQ) and Viewer (separate office) are updated locally over USB with their raw .bin and are intentionally not built with MCUboot, keeping them identical and avoiding QSPI partitioning. See CODE REVIEW/MCUBOOT_SERVER_VIEWER_SUGGESTIONS_06112026.md.
  • New provisioning tutorial: Tutorials/Tutorials-112025/CLIENT_MCUBOOT_PROVISIONING_GUIDE.md documents the one-time USB provisioning flow.

v1.8.6 (June 9, 2026)

  • Reverted Client to IAP firmware updates: Undid the v1.8.5 "Coordinated ODFU" change on the Client. The Blues Wireless for Opta carrier communicates with the Opta over the AUX/I2C expansion bus and does not route the STM32H747 BOOT0/NRST/USART1 lines required for Notecard Outboard DFU (ODFU). The v1.8.5 outboard card.dfu path therefore failed in the field with {odfu-fail}: stmConnectToBootloader: timeout. The Client now uses host-driven IAP (dfu.get + FlashIAP) again โ€” the mechanism that successfully delivered OTA host updates from v1.3.0 through v1.8.4.
  • Removed stuck outboard DFU enable: Dropped the boot-time card.dfu {"name":"stm32","off":true} initialization and the RS-485 quiescing handshake that depended on unrouted hardware.
  • Documentation: Corrected DFU notes to reflect that ODFU is not supported on this carrier without a hardware change (Notecarrier CX/F or hand-wired ALT_DFU lines); IAP remains the supported OTA path.

v1.8.4 (June 8, 2026)

  • Solar Charger Hardening: Fully resolved all R-1 to R-5 and SR-1 to SR-5 implementation review findings to fix no-charge alert false-trips under float charging conditions, prevent stale alert leaks on link drops, enforce strict battery voltage range and charge current plausibility clamps, cache functional codes efficiently, and standardize software-tracked daily limits.
  • Release Refresh: Firmware versioning, package metadata, and release assets are synchronized to the current 1.8.4 source tree.
  • Binary Assets: Client, server, and viewer .bin files are rebuilt and published under the 1.8.4 release naming.

v1.8.3 (June 8, 2026)

  • Genuine Hardware MAC Retrieval: Fixed a critical bug in standard Mbed OS parameterless Ethernet.begin() where raw ethernet interface registration defaulted to temporary/empty MAC values. The Server now retrieves the exact factory block register MAC address (A8:61:0A block) via Ethernet.MACAddress(gMacAddress) before boots, ensuring local router IP reservations (such as 192.168.7.117) are correctly matched and active.
  • Fail-Safe IP State Machine Fallback: Added auto-healing IP negotiation. If DHCP fails or a static IP subnet is misconfigured (e.g., mismatching local gateway range), the initialization dynamically pivots to try the companion network mode rather than failing the network setup completely.
  • Improved Serial Interface Recovery: Hardened board interaction so host diagnostics and debug ports cleanly re-initialize COM configuration after DFU restarts.

v1.8.2 (June 8, 2026)

  • CI/Release Pipeline Modernization: Migrated GitHub Actions workflow dependencies to Node 24-compatible versions to stay ahead of the Node 20 runner deprecation timeline.
  • Arduino CLI Install Hardening: Replaced action-based Arduino CLI setup in CI/release workflows with deterministic direct binary install (arduino-cli 1.4.1) to reduce external runtime coupling and improve reliability.
  • Operational Note: Firmware application behavior is unchanged; this release focuses on build/release infrastructure resilience.

v1.8.1 (June 8, 2026)

  • Viewer Daily Print Reports: Added optional daily plain-text printing from Viewer Opta to LAN printers over JetDirect/Raw TCP (9100).
  • Print Scheduling & Retry: New daily UTC-hour scheduler with retry throttling, day-boundary reset, and config validation for safer unattended operation.
  • Print Delivery Hardening: Viewer now checks post-flush socket health and retries on transfer failure instead of marking the day as complete.
  • Configuration Additions: Added PRINT_ENABLED, PRINTER_IP_1..4, PRINTER_PORT, and PRINT_DAILY_HOUR options in ViewerConfig.h defaults/examples.

v1.8.0 (June 7, 2026)

  • Per-Monitor Report Threshold: Change-based telemetry is now configured per sensor in the sensor's own unit (inches, PSI, RPM, GPM) via the new reportThreshold field, replacing the single global levelChangeThreshold. 0 disables change-based telemetry for that sensor. (CONFIG_SCHEMA_VERSION โ†’ 3)
  • Universal Units in Alarm Logs: Client alarm serial log now labels readings with the monitor's own unit instead of a hardcoded in suffix.
  • Alarm Hysteresis Fix: High and low alarm clear bands are now decoupled, so a latched alarm can no longer get stuck when thresholds are close relative to the hysteresis band.
  • Sensor-Fault Hardening: Total current-loop acquisition failure, invalid sensor ranges, and unknown interfaces now escalate a sensor-fault (return NAN) instead of reporting a plausible-but-fake 0.
  • Wireless Command Safety: Relay/serial/location/sync command inboxes now peek-validate-execute-delete (and gate future schema versions) instead of deleting before processing.
  • Server Identity/Schema Validation: System-alarm, daily, and sensor paths validate the client UID and reject future-schema notes; sensor index is range-checked.
  • Config Dispatch & Offline Replay: Larger config snapshot capacity (4096B) and offline note replay buffer (2304B) so large multi-sensor configs and daily reports survive caching and outages.
  • History Pruning: Hot-tier prune now compacts survivors and skips pre-time-sync snapshots, preventing wrong-entry drops after a clock correction.
  • Daily Reconciliation: Daily reports always include the alarm array (schema 2+), so the server can clear orphaned alarms when a clear note was lost.
  • Note: NOTEFILE_SCHEMA_VERSION remains 2 โ€” the telemetry/alarm/daily note wire format is unchanged.

v1.1.8 (March 16, 2026)

  • Data Integrity: Save all dirty data (registry, metadata, hot tier, history settings) before DFU/reboot โ€” previously only saved config
  • Dedup Daily Summaries: Persist last rollup date and remove duplicates on reboot to prevent double-counted daily entries
  • FTP Backup Expansion: Added tank_registry.json, client_metadata.json, and history_settings.json to nightly FTP backup list
  • Crash Recovery: Added hot_tier.json and archived_clients.json to orphaned .tmp file recovery
  • Warm Tier Fallback: FTP monthly archives now aggregate warm tier daily summaries when hot tier has no data for the target month
  • SMS Rate-Limit Persistence: lastSmsAlertEpoch and smsAlertsInLastHour now survive reboots via tank registry
  • FTP Sync Hour: ftpSyncHour setting now actually controls when nightly FTP archive runs (was previously ignored)
  • History Slots Warning: Rate-limited warning logged when all 20 tank history slots are exhausted
  • Default Fix: hotTierRetentionDays default corrected from 730 to 90 to match actual ring buffer capacity
  • Stale Sensor Pruning: 3-layer auto-pruning system โ€” config-based periodic, per-sensor orphan (72h), dead client removal (7d)
  • FTP Archive Before Removal: Clients active >30 days archived to FTP with date-stamped naming before deletion
  • Archived Clients API: New /api/history/archived endpoint and Historical Data page section for browsing archived client data

v1.1.7 (March 15, 2026)

  • Naming Refactor: Complete elimination of tank-centric numbering from data model โ€” tankNumber โ†’ sensorIndex with new optional userNumber display field
  • API Consistency: All JSON API keys, C++ locals, JS properties, and URL parameters updated from "tank" to "sensorIndex"/"sensor"
  • Backward Compatibility Removal: ~50 dual-key JSON parsing fallbacks removed across all three firmware files
  • Bug Fix: Client saveConfigToFlash() now serializes monitorType (was silently dropped)
  • Bug Fix: Client serializeConfig() fixed to emit sensorIndex correctly
  • Documentation: 8 docs updated to reflect new naming conventions
  • URL Param Rename: /api/history?tank= โ†’ ?sensor=, /api/history/yoy?tank= โ†’ ?sensor=

v1.1.1 (February 20, 2026)

  • Viewer Fleet: Viewer devices now join dedicated tankalarm-viewer fleet for fleet-scoped DFU and routing
  • Relay Forwarding: New relay_forward.qo/.qi protocol for client-to-client relay commands via server
  • Serial ACKs: Client emits serial_ack.qo processing/complete status during serial log requests
  • Config ACK Enhancements: Config version hash (cv) tracked through dispatch โ†’ ACK cycle
  • ArduinoJson v7: Full migration to auto-sizing JsonDocument in Server and Viewer (removed all capacity constants)
  • Notecard Hardening: NULL-safe card.uuid handling across all three sketches
  • Watchdog Fix: Corrected macro name to TANKALARM_WATCHDOG_AVAILABLE across all components
  • Memory Safety: Use JDelete for unsent request cleanup; fix relay body allocation leak
  • Dead Code Removal: ~300 lines of unused helpers removed from Common headers
  • Documentation: 14 tutorial guides updated for three-fleet architecture

v1.1.0 (February 19, 2026)

  • Security: Constant-time PIN comparison to prevent timing attacks
  • Security: Authentication rate limiting with exponential backoff and lockout
  • Security: Hash table bounds checking to prevent out-of-bounds memory access
  • Security: Client UID length validation with diagnostic logging
  • Security: Buffer boundary fix for FTP response parsing
  • Server Console: Configuration import/export (JSON backup & templating)
  • Server Console: Unsaved changes warning with browser prompt
  • Server Console: Configuration comparison with visual diff before deploy
  • Server Console: Audit log tracking last 50 configuration changes
  • Server Console: Contextual tooltips for complex configuration fields
  • Architecture: Communication architecture review and documentation
  • Architecture: Data usage analysis for standard vs. proxy patterns
  • Architecture: Common header audit identifying constants to centralize
  • UI: Centralized CSS with browser caching for faster page loads
  • Stability: JavaScript null-safety hardening across dashboard pages
  • Stability: UTF-8 BOM and struct compilation fixes

v1.0.1 (January 13, 2026)

  • Centralized CSS into single cached stylesheet
  • UI header standardization (Action Bar layout)
  • JavaScript null-safety hardening
  • Compilation fixes (UTF-8 BOM, struct definitions)

v1.0.0 (December 2025)

  • Initial production release
  • Client, Server, and Viewer firmware
  • Blues Wireless fleet-based routing
  • Web dashboard with SMS/email alerts
  • LittleFS persistent storage
  • Remote client configuration

Built with โค๏ธ for industrial IoT applications

Last Updated: June 11, 2026

About

Arduino code for sending alerts of high tank sensor data

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages