Skip to content

Releases: CervezaStallone/ClimateMonitor

v2.0.2

Choose a tag to compare

@CervezaStallone CervezaStallone released this 14 Oct 14:36
13edfc3

Fixed

  • Installing on Python 3.14 (e.g. a fresh Windows install from python.org) no longer fails with Unknown compiler(s) while building numpy. numpy is now 2.3.5 on Python 3.11+ (ready-made wheels up to 3.14) and stays 2.2.6 on Python 3.10.
  • pyproject.toml now pins the same Dash version as requirements.txt (3.3.0).

Changed

  • CI now also tests on Python 3.14.

Upgrading: pull the new version and run pip install -r requirements.txt again.

v2.0.1 - Climate Monitor

Choose a tag to compare

@CervezaStallone CervezaStallone released this 14 Oct 12:09
bc3d4a7

What's new

  • New name: Climate Monitor. The project and repository are now called Climate Monitor (github.com/CervezaStallone/ClimateMonitor). Old links redirect automatically.
  • Footer "Made by BRDC" with a link to brdc.nl on the dashboard, Settings and login pages.

Existing installations keep working: the service name (xy-md02) and the Windows scheduled task (XY-MD02 WebApp) are unchanged.

See v2.0.0 for the full list of new features in version 2.

v2.0.0 - Browser configuration, multiple sensors and redesigned dashboard

Choose a tag to compare

@CervezaStallone CervezaStallone released this 14 Oct 11:32
25b96de

Version 2.0.0 is a large update: everything is now configured in the browser, multiple RS-485 buses with multiple sensors are supported, and the dashboard has been redesigned.

Highlights

Redesigned dashboard

  • Board view: every sensor as one row with temperature, humidity, dew point, absolute humidity, comfort, a 24-hour trend and its status: all sensors at a glance.
  • Meters view: one panel per sensor with large values.
  • Dark and light theme, chosen in Settings; mobile layout for phones and tablets.
  • Status per sensor: OK, warning, alarm or offline, with the out-of-limits value highlighted.
  • One chart with a tab per quantity; every sensor keeps its own colour everywhere.

Multiple buses and sensors (#18)

  • Several USB/RS-485 interfaces, each with several Modbus slaves.
  • Per sensor: name, slave ID, function code, registers and scale (XY-MD02, XY-MD04 and similar).
  • A failing sensor or unplugged interface no longer affects the others and is retried automatically.

Settings in the browser

  • New Settings tab for buses and sensors, display, region, data retention, server and security.
  • Admin password for Settings, optionally for the whole app.

Notifications

  • Telegram and e-mail (SMTP) alerts when limits are exceeded (for all sensors or per sensor), when values are back to normal and when a sensor goes offline.

MQTT

  • Publishes the values of every sensor to an MQTT broker (Home Assistant, Node-RED, SCADA).

Run as a service

  • Install scripts for Linux/Raspberry Pi (systemd) and Windows: the app starts at boot, also without anyone logged in.

Translations

  • All texts available in Dutch, English, German, French and Spanish.

Fixes

  • Negative temperatures are now read correctly (signed registers).
  • A missing serial port at startup no longer stops data collection permanently.
  • Security hardening of login sessions, redirects and stored passwords.

Upgrading from 1.x

  • Existing data is kept. The Modbus settings from .env become Bus 1 / Sensor 1 automatically; all existing measurements belong to that sensor.
  • DATA_RETENTION_DAYS, DEBUG_LOGGING, TIMEZONE and DEFAULT_LANGUAGE from .env are taken over once; after that the Settings tab is leading.
  • Listen address and port are set in the Settings tab (default 0.0.0.0:8050).
  • On first visit of the Settings tab you create an admin password.
  • New dependency: paho-mqtt — run pip install -r requirements.txt (or re-run the service install script).
  • Requires Python 3.10 or newer.

See the README for screenshots and full instructions.

v1.6.3

Choose a tag to compare

@CervezaStallone CervezaStallone released this 09 Dec 09:27

New Features

12 Hour Time Range Option

  • Added new 12 hour time period selection between 6h and 24h options
  • Fully supported across all 5 languages (Dutch, English, German, French, Spanish)
  • Integrates seamlessly with adaptive downsampling system (5 minute intervals)

Comfort Score Visualization

  • New 5th graph showing comfort score over time
  • Uses Humidex calculation from Environment Canada standards
  • Color-coded orange visualization with score range 0-6
  • Positioned at bottom of dashboard for optimal layout
  • Helps identify comfortable vs uncomfortable periods at a glance

Enhanced Graph Layout

  • Increased vertical spacing between graphs for better readability
  • Expanded total height to 1100px to accommodate 5 subplots
  • Improved visual hierarchy with comfort score at bottom

Debug Tools

  • Added conditional debug logging for comfort score calculations
  • Controlled via DEBUG_LOGGING environment variable
  • Shows temperature, humidity, Humidex, and score for verification
  • Useful for troubleshooting and validating calculations

Documentation Updates

  • Updated README.md with all environment variables
  • Added documentation for TIMEZONE, DEFAULT_LANGUAGE, and DEBUG_LOGGING
  • Fixed typo (Server poort Server port)
  • Comprehensive wiki updates reflecting current architecture

Technical Details

  • Comfort scores based on Humidex formula: T + 0.5555 × (e - 10)
  • Score ranges: 0 (extreme), 1-3 (dangerous), 4 (comfortable), 5-6 (uncomfortable)
  • Debug output limited to first 5 datapoints when enabled
  • Wiki folder excluded from version control

Files Changed

  • callbacks.py: +70 lines (comfort calculation, 5th graph, 12h option)
  • translations.py: +5 lines (12h translations for all languages)
  • README.md: Updated configuration section with missing env vars
  • .gitignore: Added .wiki/ exclusion

v1.6.2

Choose a tag to compare

@CervezaStallone CervezaStallone released this 08 Dec 14:34

Production Server & Performance Optimization

This release adds a production-ready server and dramatically improves performance for long time ranges.

New Features

Adaptive Downsampling

  • Problem solved: Loading long time ranges (6+ hours) was extremely slow
  • Solution: Intelligent downsampling based on time range:
    • 1-6 hours: 1 minute intervals (~360 points, 98% reduction)
    • 6-24 hours: 5 minute intervals
    • 1-7 days: 15 minute intervals
    • 1 month: 1 hour intervals (~720 points)
    • 3 months: 3 hour intervals
    • 6 months: 6 hour intervals
    • 6 months / years: 1 day intervals

  • Result: Maximum 1000-2000 points for instant rendering
  • Uses pandas
    esample()\ for efficient aggregation
  • Backward compatible - ranges <1 hour remain unchanged

Waitress Production Server

  • Cross-platform WSGI server (Windows/Linux/macOS)
  • Optimized with 8 threads for multi-user support
  • Logging filtered to ERROR level for cleaner output

Improvements

  • Graph Spacing: Increased from 0.06 to 0.10 for better readability
  • Debug Logging: Configurable logging via .env\ (\DEBUG_LOGGING=True)
    • Database query details
    • Downsampling statistics (reduction percentages)

Dependency Updates

  • pandas: 2.2.3 2.3.3
  • numpy: 2.1.3 2.2.6
  • Flask: 3.0.3 3.1.2
  • python-dotenv: 1.0.1 1.2.1
  • waitress: 3.0.1 3.0.2

Security

  • Security updates for urllib3 dependency (via pandas/numpy updates)

Technical Details

Performance Impact Example:

  • 6 hour data: ~18,720 360 points (98.1% reduction)
  • 1 year data: ~27 million 365 points (99.999% reduction)
  • Visual quality preserved - trends fully visible

Breaking Changes: None

Requires:

  • Python 3.10-3.13
  • See
    equirements.txt\ for all dependencies

Installation

git clone https://github.com/CervezaStallone/XY-MD02_WebApp.git
cd XY-MD02_WebApp
python -m venv .venv
.venv\\Scripts\\activate  # Windows
pip install -r requirements.txt
python app.py

Contributors: @dependabot

v1.6.0 - CI/CD & Python 3.10+ Support

Choose a tag to compare

@CervezaStallone CervezaStallone released this 05 Dec 14:47

What's Changed

Breaking Changes

  • Dropped Python 3.9 support - Minimum version is now Python 3.10 due to dependency requirements (click 8.3.1)

Added

  • GitHub Actions CI/CD workflows:
    • Automated testing on Python 3.10-3.13
    • Code quality checks (Black, flake8)
    • Translation validation
  • Dependabot configuration for automated dependency updates
  • Community files: CODE_OF_CONDUCT.md, CONTRIBUTING.md, SECURITY.md
  • Issue & PR templates for better collaboration

Fixed

  • Lazy serial port initialization - Prevents hardware access during module import (fixes CI testing)
  • Tooltip formatting - All language tooltips now show scores on separate lines
  • README path corrections - Updated from 'Modbus Graph' to 'XY-MD02_WebApp'
  • Workflow permissions - Added proper read permissions to all GitHub Actions workflows

Changed

  • Complete requirements.txt - All 36 dependencies now properly frozen
  • Updated dependencies: pandas 2.2.3→2.3.3, python-dotenv 1.0.1→1.2.1
  • Renamed env.example to .env.example for consistency

Dependencies

  • Python >=3.10
  • All dependencies updated and frozen in requirements.txt

Full Changelog: v1.5.3...v1.6.0

v1.5.3

Choose a tag to compare

@CervezaStallone CervezaStallone released this 05 Dec 12:56
fix: Tooltip formatting with proper line breaks for all languages