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
11 KiB
Publishing to GitHub - Step by Step Guide
This file contains instructions for publishing this project to GitHub.
Prerequisites
- GitHub account - Sign up at https://github.com if you don't have one
- Git installed - Check with
git --versionin terminal - GitHub CLI (optional) - Makes repository creation easier: https://cli.github.com/
Option 1: Using GitHub Web Interface (Easiest)
Step 1: Create Repository on GitHub
- Go to https://github.com/new
- Fill in:
- Repository name:
esp8266-weather-clock-opensource - Description:
Secure open-source firmware for ESP8266 weather clock - reverse engineered from AliExpress DIY kit - Visibility: Public ✅
- Initialize: ❌ Do NOT check "Add README" (we have one)
- Repository name:
- Click: Create repository
Step 2: Initialize Local Git Repository
Open terminal and navigate to project directory:
cd "/Users/apetrochenko/Library/Mobile Documents/com~apple~CloudDocs/src/arduino/clock/esp8266-weather-clock-opensource"
Initialize git and add files:
# Initialize git
git init
# Add all files
git add .
# Create first commit
git commit -m "Initial commit: v1.9.1 production firmware
- Complete reverse engineering of TJ-56-654 weather clock
- Fixes security issues (WiFi password leak)
- Fully async architecture (zero blocking)
- OTA updates, web interface, REST API
- Open-Meteo weather (free, no API key)
- Comprehensive documentation"
Step 3: Connect to GitHub
Replace YOUR_USERNAME with your actual GitHub username:
# Add remote
git remote add origin https://github.com/YOUR_USERNAME/esp8266-weather-clock-opensource.git
# Set main branch
git branch -M main
# Push to GitHub
git push -u origin main
If prompted for credentials:
- Username: Your GitHub username
- Password: Use Personal Access Token (not your password!)
- Create token at: https://github.com/settings/tokens
- Select scopes:
repo(full control of private repositories)
Step 4: Verify Upload
- Browse to:
https://github.com/YOUR_USERNAME/esp8266-weather-clock-opensource - You should see:
- README.md rendered nicely
- All directories and files
- First commit visible
Option 2: Using GitHub CLI (Faster)
If you have GitHub CLI installed:
# Navigate to project
cd "/Users/apetrochenko/Library/Mobile Documents/com~apple~CloudDocs/src/arduino/clock/esp8266-weather-clock-opensource"
# Authenticate (one-time)
gh auth login
# Create repo and push in one command
gh repo create esp8266-weather-clock-opensource \
--public \
--source=. \
--description="Secure open-source firmware for ESP8266 weather clock" \
--push
Done! Repository is created and pushed.
Step 5: Configure Repository Settings
Add Topics (Tags)
- Go to your repo on GitHub
- Click: ⚙️ Settings (top right near About)
- Under "Topics", add:
esp8266arduinoiotweather-stationreverse-engineeringsecurityoled-displayntpota-updatesopen-meteo
Update About Section
- Go to repo main page
- Click: ⚙️ (gear icon) next to "About"
- Set:
- Description:
Secure open-source firmware for ESP8266 weather clock - reverse engineered from AliExpress DIY kit to fix security flaws - Website:
https://open-meteo.com(or your personal site if you blog about it) - Topics: Should already be set from above
- Description:
Enable Features
In Settings → General:
Features:
- ✅ Issues (for bug reports)
- ✅ Discussions (for questions)
- ❌ Wiki (not needed, we have docs/)
- ❌ Projects (not needed yet)
Pull Requests:
- ✅ Allow squash merging
- ✅ Automatically delete head branches
Set Up GitHub Actions
The CI workflow should activate automatically on first push. Check:
- Go to: Actions tab
- You should see: "Build Firmware" workflow
- It should run and ✅ pass (compiles firmware)
If it fails:
- Check library names in
.github/workflows/build.yml - Some libraries may need exact version pinning
Step 6: Create First Release
Tag the Release Locally
# Create annotated tag
git tag -a v1.9.1 -m "Release v1.9.1: Production-ready firmware
Features:
- Hybrid WiFi model (sync on boot, async in loop)
- Daylight duration display
- Fully async NTP, weather, WiFi reconnect
- OTA updates, web interface, REST API
- Open-Meteo weather (free API)
- Security fixes (no WiFi password leak)
Fixes:
- Startup display blank for 10+ seconds
- DNS resolution failed errors
- Sunrise/sunset label cutoff"
# Push tag to GitHub
git push origin v1.9.1
Create Release on GitHub
-
Go to: Releases (right sidebar)
-
Click: Draft a new release
-
Fill in:
- Tag:
v1.9.1(should appear in dropdown) - Release title:
v1.9.1 - Production Ready - Description:
## 🎉 First Public Release Secure, open-source replacement firmware for ESP8266 weather clocks. ### ✨ Highlights - **Security**: Fixes WiFi password leak in original firmware - **Performance**: Fully async architecture, <1ms loop time - **Features**: OTA updates, web UI, REST API, NTP time, weather - **Free API**: Uses Open-Meteo (no registration required) ### 📦 Downloads - `esp8266-weather-clock-v1.9.1.bin` - Flash this via OTA or FTDI ### 📖 Documentation - [Installation Guide](docs/INSTALLATION.md) - [Hardware Specs](docs/HARDWARE.md) - [Full Changelog](CHANGELOG.md) ### 🚀 Quick Start 1. Download `.bin` file 2. Flash via FTDI (first time) or OTA (updates) 3. Connect to `TJ56654-Setup` WiFi 4. Configure your network 5. Access web UI at `http://tj56654-clock.local` See [README](README.md) for complete instructions. ### 🐛 Known Issues None! This release is production-ready and tested 24/7.
- Tag:
-
Attach binary (if you have it locally):
- Compile firmware first: Arduino IDE → Sketch → Export Compiled Binary
- Or use GitHub Actions artifact
- Drag
build/clock_ntp_ota_v1.9.ino.binto release assets - Rename to:
esp8266-weather-clock-v1.9.1.bin
-
Click: Publish release
Step 7: Add Shields/Badges to README
Edit README.md and add at the top (after title):
<p align="center">
<a href="https://github.com/YOUR_USERNAME/esp8266-weather-clock-opensource/releases">
<img src="https://img.shields.io/github/v/release/YOUR_USERNAME/esp8266-weather-clock-opensource?style=flat-square" alt="Release">
</a>
<a href="https://github.com/YOUR_USERNAME/esp8266-weather-clock-opensource/blob/main/LICENSE">
<img src="https://img.shields.io/github/license/YOUR_USERNAME/esp8266-weather-clock-opensource?style=flat-square" alt="License">
</a>
<a href="https://github.com/YOUR_USERNAME/esp8266-weather-clock-opensource/actions">
<img src="https://img.shields.io/github/actions/workflow/status/YOUR_USERNAME/esp8266-weather-clock-opensource/build.yml?style=flat-square" alt="Build">
</a>
<a href="https://github.com/YOUR_USERNAME/esp8266-weather-clock-opensource/issues">
<img src="https://img.shields.io/github/issues/YOUR_USERNAME/esp8266-weather-clock-opensource?style=flat-square" alt="Issues">
</a>
</p>
Replace YOUR_USERNAME with actual username.
Commit and push:
git add README.md
git commit -m "Add badges to README"
git push
Step 8: Share Your Project
Post on Social Media
Reddit:
- r/esp8266
- r/arduino
- r/selfhosted
- r/homeassistant (when you add HA integration)
Hackaday:
- Submit project tip: https://hackaday.com/submit-a-tip/
Hackster.io:
- Create project page: https://www.hackster.io/
Twitter/X:
Just reverse-engineered a $12 AliExpress weather clock and found it was leaking WiFi passwords!
Replaced the firmware with secure open-source version:
- ✅ No password leak
- ✅ OTA updates
- ✅ Free weather API
- ✅ Full async arch
Check it out: [your-repo-link]
#ESP8266 #IoTSecurity #Arduino
Add to Awesome Lists
Search for "awesome ESP8266" and submit PR to add your project.
Maintenance Tips
Keep README Updated
When you add features:
- Update README.md
- Update CHANGELOG.md
- Create new git tag
- Create GitHub release
Respond to Issues
Enable email notifications:
- Go to: repo → Watch → Custom
- Check: ✅ Issues, ✅ Pull requests, ✅ Discussions
Version Numbering
Use semantic versioning (semver.org):
v2.0.0: Breaking changes (incompatible config)v1.10.0: New features (backward-compatible)v1.9.2: Bug fixes only
Automated Releases
GitHub Actions can auto-build on new tags. Check .github/workflows/build.yml.
Troubleshooting
"Permission denied" when pushing
Solution: Use Personal Access Token instead of password
- Generate: https://github.com/settings/tokens
- Scopes:
repo(full control) - Use token as password when prompted
Or configure SSH keys:
# Generate SSH key
ssh-keygen -t ed25519 -C "your_email@example.com"
# Add to GitHub: Settings → SSH Keys → New SSH key
# Paste contents of ~/.ssh/id_ed25519.pub
# Change remote to SSH
git remote set-url origin git@github.com:YOUR_USERNAME/esp8266-weather-clock-opensource.git
"This repository is empty"
You forgot to push:
git push -u origin main
Files too large
GitHub has 100MB file size limit. If you accidentally added build artifacts:
# Remove from staging
git reset HEAD build/
# Add to .gitignore
echo "build/" >> .gitignore
# Commit
git commit -m "Ignore build artifacts"
CI build fails
Check:
- Library names are correct in
build.yml - All libraries are available via Arduino Library Manager
- Firmware compiles locally first
Next Steps After Publishing
- Star your own repo (to make it discoverable)
- Watch releases (be notified of activity)
- Enable Discussions (for community Q&A)
- Create SECURITY.md (if you want responsible disclosure process)
- Add funding links (GitHub Sponsors, Buy Me a Coffee, etc.)
GitHub Repository Best Practices
Essential Files (✅ You have these!)
- ✅ README.md
- ✅ LICENSE
- ✅ CONTRIBUTING.md
- ✅ CHANGELOG.md
- ✅ .gitignore
- ✅ Issue templates
Nice-to-Have
- CODE_OF_CONDUCT.md (for community standards)
- SECURITY.md (vulnerability disclosure policy)
- FUNDING.yml (donation links)
Pin Important Files
On your repo page, pin:
- README.md (auto-pinned)
- INSTALLATION.md (pin in About section)
- Latest release (pin in sidebar)
Success Checklist
After publishing, verify:
- Repository is public and accessible
- README renders correctly (images, links work)
- All documentation files are present
- CI/CD pipeline passes (green checkmark)
- First release is tagged and published
- Binary is attached to release
- Topics/tags are set
- License is visible
- Issues and Discussions are enabled
Congratulations! Your project is now public and ready to help the world build secure IoT devices. 🚀
Repository URL: https://github.com/YOUR_USERNAME/esp8266-weather-clock-opensource
Don't forget to replace YOUR_USERNAME with your actual GitHub username!