Files
esp8266-weather-clock-opens…/CHANGELOG.md
T
Alex Petrochenko 8f0df02e77 Initial commit: v1.9.1 production firmware
Complete reverse engineering of TJ-56-654 weather clock from AliExpress.

Security fixes:
- Eliminated WiFi password leak vulnerability
- Removed dependency on Chinese cloud services (QWeather)
- Secure WiFiManager captive portal setup
- No hardcoded credentials

Features:
- Fully async architecture (zero blocking operations)
- OTA firmware updates (web + ArduinoOTA)
- NTP time sync with timezone + DST support
- Open-Meteo weather API (free, no registration)
- 3 display modes: time, weather, sunrise/sunset
- REST API + web interface
- EEPROM config persistence

Performance:
- Loop time: <1ms (was 10ms+)
- Memory: 409KB flash (38%), 38KB RAM (46%), 62KB IRAM (94%)
- Zero blocking delays

Hardware:
- ESP-01S (ESP8266EX, 1MB flash)
- GM009605v4.3 OLED display (128x64, I2C)
- Custom I2C mapping: SDA=GPIO0, SCL=GPIO2

Documentation:
- Complete installation guide
- Hardware specifications
- API documentation
- Troubleshooting guide
- Version history v1.5 → v1.9.1

Built with Claude Code (Opus 4.5)
Author: Andrey Petrochenko
Date: 2026-01-03
2026-01-03 14:01:31 +00:00

4.2 KiB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[1.9.1] - 2026-01-03

Fixed

  • CRITICAL: WiFi startup sequence - synchronous connection in setup() to ensure proper initialization order
  • Display blank screen for 10+ seconds on boot (now shows time after ~15 seconds)
  • "DNS resolution failed" errors during startup
  • Sunrise/sunset labels cut off on 128px screen (removed labels, arrows are self-explanatory)

Changed

  • Hybrid WiFi model: synchronous in setup(), async reconnect in loop()
  • Display formatting: superscript degree symbol and lowercase 'c' for temperature
  • Sunrise/sunset screen now shows daylight duration (e.g., "Day 9h 41m") instead of static "Sun Times" text

Documentation

  • Added detailed v1.9.1_HYBRID_FIX.md explaining startup sequence problem and solution

[1.9.0] - 2026-01-02

Added

  • Fully async architecture (zero blocking operations in loop)
  • Custom async NTP implementation (manual UDP packet handling)
  • Async HTTP weather fetch (AsyncHTTPRequest library)
  • Exponential backoff retry logic for network failures
  • Independent epoch tracking for accurate time between NTP syncs

Changed

  • Replaced blocking NTPClient with custom async UDP implementation
  • Replaced blocking HTTP weather with AsyncHTTPRequest
  • Removed all delay() calls from loop()
  • WiFi connection now async (later fixed in v1.9.1)

Performance

  • Loop time: 10ms → <1ms (10x improvement)
  • Weather fetch: 1-10s blocking → 0ms
  • NTP sync: 5-20s blocking → 0ms
  • WiFi reconnect: 15s blocking → 0ms
  • OTA updates now work during active weather fetching

Technical

  • RAM usage: +536 bytes (36,980 → 37,516)
  • Flash usage: +1040 bytes (407,500 → 408,540)
  • IRAM: 61,987 bytes (94% - stable)

[1.8.0] - 2026-01-01

Security

  • CRITICAL: Removed hardcoded WiFi credentials
  • Integrated WiFiManager for secure captive portal setup
  • Added config validation (magic number check)
  • Input sanitization to prevent buffer overflows

Fixed

  • IRAM overflow crisis (94% → 70% via ICACHE_FLASH_ATTR)
  • NTP interval bug (config value was ignored, always used hardcoded 1 hour)
  • Boolean parsing errors in JSON config import/export
  • Infinite loop protection in display mode rotation
  • Memory leaks from String concatenation in web handlers

Changed

  • Web responses now use chunked transfer (eliminated 140+ String concatenations)
  • Applied ICACHE_FLASH_ATTR to 26 functions (moved code from IRAM to Flash)
  • Improved error handling throughout codebase

Performance

  • Peak heap usage reduced by ~8KB
  • EEPROM validation prevents loading corrupted config

[1.7.0] - 2025-12-31

Added

  • Initial working firmware with correct display support
  • NTP time synchronization
  • Weather data from Open-Meteo API (free, no API key required)
  • OTA update support (web-based and ArduinoOTA)
  • Web interface (/, /config, /debug, /update)
  • REST API (time, status, weather, config export/import)
  • Display rotation (time, weather, sunrise/sunset modes)
  • Timezone support with manual DST configuration
  • EEPROM configuration persistence

Hardware Discovery

  • Identified display as GM009605v4.3 (not TM1637 or TM1650)
  • Discovered swapped I2C pins: SDA=GPIO0, SCL=GPIO2
  • Switched to Adafruit_SSD1306 library

Replaced

  • QWeather API → Open-Meteo (no registration required)
  • Proprietary firmware → Open source custom firmware
  • Insecure WiFi handling → WiFiManager with timeout

[1.6.0] - 2025-12-30 (unreleased)

Attempted

  • TM1650 LED driver support (incorrect - device has OLED)

[1.5.0] - 2025-12-29 (unreleased)

Attempted

  • TM1637 7-segment display support (incorrect - device has OLED)

Version Numbering

  • Major version (X.0.0): Breaking changes, incompatible config format
  • Minor version (1.X.0): New features, backward-compatible
  • Patch version (1.9.X): Bug fixes, no new features

Status: v1.9.1 is production-ready and actively used 24/7.