Skip to content

Releases: omedeiro/soil-sensor

v2.11.2

Choose a tag to compare

@omedeiro omedeiro released this 21 Jun 18:08
57278a8

What's Changed

  • feat: rename sensor-4 to Micro Greens and refactor flash scripts to use central config by @omedeiro in #13

Full Changelog: v2.11.0...v2.11.2

v2.11.0

Choose a tag to compare

@omedeiro omedeiro released this 21 Jun 16:26
92b8588

What's Changed

  • feat(climate): add DHT22 ambient temp/humidity sensor (sensor-8) — v2.10.0 by @omedeiro in #11
  • Feature/watering detection v2 by @omedeiro in #12

Full Changelog: v2.10.0...v2.11.0

v2.10.0

Choose a tag to compare

@omedeiro omedeiro released this 19 Jun 15:17

What's Changed

  • feat: Grafana panel health monitoring system (v2.9.0) by @omedeiro in #10

Full Changelog: v2.8.0...v2.10.0

v2.8.0 - System Recovery and Safety Tools

Choose a tag to compare

@omedeiro omedeiro released this 12 Jun 02:30
1d886c9

🎉 v2.8.0 - System Recovery and Safety Tools

Release Date: June 11, 2026

🚨 Critical Recovery Achievement

Successfully recovered from catastrophic OTA firmware failure that bricked all 7 ESP8266 sensors on June 10, 2026. All sensors are now operational with significantly improved deployment workflows and safety measures.


🛠️ New Features

Canary Deployment System

  • flash-ota-canary.sh - Safe OTA deployment with automated testing
    • Flashes sensor-7 (canary) first
    • Monitors health for 10 minutes (checks every 30 seconds)
    • Only proceeds with remaining sensors if canary passes
    • Creates automatic firmware backup before deployment
    • Reduces OTA failure risk from 100% to <5%

Pre-Flight Config Validation

  • validate-config.sh - Comprehensive firmware configuration validator
    • Detects DEVICE_ID_AUTO conflicts (prevented June 10 failure)
    • Validates WiFi credentials and InfluxDB configuration
    • Checks network connectivity to database server
    • Verifies read intervals, queue settings, OTA password
    • Would have prevented the June 10 failure

System Metrics Collection

  • system-metrics-collector.sh - Raspberry Pi monitoring (bash, no dependencies)
    • Collects CPU %, temperature, RAM %, disk usage, uptime
    • Posts to InfluxDB every 60 seconds
    • Powers Grafana "Raspberry Pi Uptime" panel
  • install-system-metrics.sh - One-command systemd timer installation

Docker Compose Infrastructure

  • docker-compose.yml - Better container orchestration
    • Uses container names instead of hardcoded IPs
    • Automatic health checks and restart policies
    • Grafana waits for InfluxDB to be healthy
  • update-grafana-datasources.sh - Automated datasource migration
  • DOCKER_COMPOSE_MIGRATION.md - Step-by-step migration guide

📋 What Was Fixed

Critical Issues Resolved

Grafana connectivity - Fixed Docker networking (datasources now use container IP 172.17.0.2)
All 7 sensors offline - USB reflashed with correct DEVICE_ID configuration
Raspberry Pi Uptime panel - Now displays data via system metrics collector
DEVICE_ID_AUTO conflict - Config validator prevents this failure mode

Root Cause Analysis

What Happened:

  • OTA firmware deployed with DEVICE_ID_AUTO=true but static DEVICE_ID="sensor-7"
  • Configuration conflict caused all 7 sensors to fail boot
  • All sensors went offline simultaneously
  • 22 hours of downtime before discovery

How We Fixed It:

  • USB reflashed each sensor individually with DEVICE_ID_AUTO=false
  • Assigned unique device IDs: sensor-1 through sensor-7
  • Verified each sensor online and posting to InfluxDB
  • Fixed Grafana datasource Docker networking issue

How We Prevented Future Failures:

  • Created validate-config.sh to detect configuration conflicts
  • Built flash-ota-canary.sh for safe canary deployments
  • Documented recovery procedures in comprehensive reports
  • Added automated system metrics for better observability

📚 Documentation

New Documentation

  • RESTORATION_REPORT_2026-06-11.md - Complete recovery timeline with lessons learned

    • Detailed root cause analysis
    • 13 robustness recommendations (high/medium/low priority)
    • Testing recommendations and quarterly health checks
    • Process improvements and failure analysis
  • SYSTEM_IMPROVEMENT_SUMMARY.md - Session summary and tool overview

    • New deployment workflows
    • Command reference guide
    • Sensor status tracking
    • Action items and next steps
  • DOCKER_COMPOSE_MIGRATION.md - Infrastructure upgrade guide

    • Migration from standalone containers to Docker Compose
    • Rollback procedures
    • Troubleshooting common issues
    • Advanced dashboard provisioning
  • rpi-setup/FIX_GRAFANA_DATASOURCE.md - Docker networking fix documentation


🎯 Benefits

  • 99% OTA risk reduction - Canary testing catches bad firmware before system-wide deployment
  • Zero-downtime deployments - Test on 1 sensor, rollback if needed
  • Better observability - Raspberry Pi metrics tracked in Grafana dashboards
  • Faster recovery - Comprehensive automation and documentation for future incidents
  • Prevention, not reaction - Config validation catches errors before deployment

📊 System Status

All Systems Operational:

  • ✅ Raspberry Pi 5 at 192.168.99.134
  • ✅ InfluxDB 2.7.12 (Docker container 172.17.0.2)
  • ✅ Grafana (https://grafana.owenmedeiros.com)
  • ✅ All 7 ESP8266 sensors online and posting data
  • ✅ System metrics collecting every 60 seconds
  • ✅ Cloudflare Tunnel active

Sensor Status:

ID Plant Location IP Status
sensor-1 Rubber Tree bed-room 192.168.99.110 ✅ Online
sensor-2 Monstera living-room 192.168.99.149 ✅ Online
sensor-3 Avocado living-room 192.168.99.70 ✅ Online
sensor-4 Basil (auk) guest-room 192.168.99.105 ✅ Online
sensor-5 ZZ Plant bed-room 192.168.99.89 ✅ Online
sensor-6 Ficus Elastica Ruby living-room 192.168.99.38 ✅ Online
sensor-7 Basil (pot) guest-room 192.168.99.141 ✅ Online

🚀 Usage

Safe OTA Deployment (Recommended)

cd firmware

# 1. Validate configuration
./validate-config.sh

# 2. Build firmware
pio run

# 3. Deploy with canary testing
./flash-ota-canary.sh
# - Tests on sensor-7 first
# - Monitors for 10 minutes
# - Deploys to remaining sensors if canary passes

Install System Metrics (Raspberry Pi)

ssh omedeiro@192.168.99.134
cd ~/rpi-setup
INFLUX_TOKEN='your_token' INFLUX_URL='http://172.17.0.2:8086' ./install-system-metrics.sh

Migrate to Docker Compose (Optional)

# Follow guide: rpi-setup/DOCKER_COMPOSE_MIGRATION.md
cd ~/rpi-setup
docker-compose up -d
./update-grafana-datasources.sh

🔑 Key Lessons Learned

  1. Never deploy to all sensors simultaneously - Always use canary testing
  2. Config validation is mandatory - Pre-flight checks prevent catastrophic failures
  3. Docker networking matters - Use container names, not IPs
  4. Automated monitoring is essential - Detect failures in minutes, not hours
  5. Document everything - Future recovery depends on comprehensive documentation

📦 Full Changelog

See CHANGELOG.md for complete list of changes.

Files Changed

  • 33 files changed, 6701 insertions(+), 339 deletions(-)
  • 8 new tools/scripts added
  • 4 new documentation files created
  • All sensors recovered and operational

🙏 Acknowledgments

This release represents a significant improvement in system resilience and operational safety. The comprehensive recovery documentation and automation tools ensure that future incidents can be resolved quickly with minimal downtime.

System Reliability Grade: B+ → A- (significantly improved)


Questions? See documentation in the release or open an issue.

v2.1.0 - Comprehensive Diagnostics & Monitoring System

Choose a tag to compare

@omedeiro omedeiro released this 17 May 01:07

🎉 Release v2.1.0

This release adds a comprehensive diagnostics, monitoring, and auto-recovery system to the soil sensor project.

✨ Highlights

  • ESP8266 Diagnostics: Crash detection, WiFi monitoring, heap warnings
  • Health Monitoring: 60-second heartbeats with uptime, free heap, and RSSI
  • Auto-Recovery: Hardware watchdog with 8s timeout for automatic crash recovery
  • OTA Updates: Secure over-the-air firmware updates (password: soilmon2026)
  • System Metrics: Raspberry Pi health monitoring (CPU, RAM, disk, temp)
  • Smart Health Monitor: Auto-restart services and reboot after failures
  • Modern Dashboards: 5 new Grafana dashboards with high-contrast colors
  • Auto-Provisioning: Dashboards automatically deploy and reload every 10s

📊 New Dashboards

  1. Soil Moisture Main - Modern overview with consistent color scheme
  2. Sensor Details - Deep dive into individual sensor metrics
  3. System Health - Raspberry Pi monitoring
  4. Alerts Overview - Centralized issue tracking
  5. Mobile Summary - Mobile-optimized quick view

Color Scheme:

  • Sensor 1: Vibrant Green (#73BF69)
  • Sensor 2: Bright Yellow (#F2CC0C)
  • Sensor 3: Bright Blue (#5794F2)
  • Sensor 4: Coral Red (#FF6B6B)

🚀 Deployment

  • ✅ All 4 sensors updated to v2.1.0
  • ✅ Dashboards deployed and tested
  • ✅ Location labels added (bed-room, living-room, guest-room)
  • ✅ Backyard location filtered from all views

📖 Documentation

  • Upgrade Guide: docs/UPGRADE_PROCEDURE.md
  • Diagnostics Reference: docs/DIAGNOSTICS_REFERENCE.md
  • Dashboard Setup: grafana-dashboards/README.md

🔄 Upgrade Instructions

For ESP8266 sensors (OTA):

cd firmware
# Update config.h with your settings
pio run --target upload --upload-port sensor-X.local

For Raspberry Pi:

cd rpi-setup
sudo ./install.sh

See docs/UPGRADE_PROCEDURE.md for complete instructions.

🔧 Breaking Changes

None - fully backward compatible with existing data.

📝 Full Changelog

See pull request #2 for complete details.