A custom, highly intelligent weather dashboard built specifically for the TRMNL e-ink display. It features dynamic forecasting summaries, intelligent array slicing for future time-blocks, and WMO weather-code text mapping.
This project relies on the free tier of the Open-Meteo API. Open-Meteo tracks and rate-limits based on IP addresses. Running dynamic Javascript or a Liquid Webhook directly from TRMNL's shared German servers results in an immediate IP ban because Open-Meteo flags the datacenter IP as spam. This previously caused the TRMNL device to get permanently stuck or crash into a "Degraded State".
To bypass the IP ban without paying for an Open-Meteo Developer API key, this dashboard uses a local Synology NAS as a hardware bridge:
index.html file locally.index.html file to GitHub Pages via SSH.git commit --amend and git push --force. This rewrites the exact same commit in perpetuity. The repository history will permanently remain at 1 commit.All files are stored on the Synology NAS at the following absolute path:
/var/services/homes/alex/scripts/weathernow/
build.py: The Python generator. Uses standard libraries (urllib, json) to ensure it runs natively on Synology without requiring pip package installations.update.sh: The bash script triggered by the Synology Task Scheduler. Handles the Git force-pushing.index.html: The compiled, static webpage. (Auto-generated, do not edit manually).README.md: This documentation file.--amend push, the NAS acts as the absolute master record. If you edit this README or the HTML code on GitHub.com, your changes will be permanently overwritten and destroyed the next time the NAS updates the weather (every 15 minutes). All code and documentation edits MUST be made locally on the Synology NAS.
This system is designed for extreme long-term stability. The theoretical maintenance points are:
v1. If Open-Meteo eventually deprecates v1 for v2, the URL string inside build.py will need to be manually updated.build.py is programmed to "fail silently." It leaves the previous index.html intact so your screen doesn't show a broken error, but the time will freeze. Visit https://api.open-meteo.com in a browser to check their status.Permission denied (publickey)): The Task Scheduler is likely running under a different user profile than the one that owns the SSH keys. Ensure the "User" in Task Scheduler exactly matches alex.https://alexroddie.github.io/weathernow/index.html) on your smartphone.
If this system ever needs to be rebuilt from scratch, follow these exact steps to recreate the architecture.
The NAS must be configured to allow developer tools and SSH connections.
~/.ssh directory needed for security keys).weathernow.Using the Synology File Station ensures file encoding remains pure.
home folder.scripts. Inside scripts, create a folder named weathernow./var/services/homes/alex/scripts/weathernow/build.py) and paste the generator code. (Ensure the save path at the bottom of the python script strictly points to the absolute path above).update.sh) and paste the following:#!/bin/bash
cd /var/services/homes/alex/scripts/weathernow/
python3 build.py
git add index.html README.md Readme.html
git commit --amend --no-edit --allow-empty
git push origin main --force
Your NAS must generate a secure key to push to GitHub without passwords.
ssh alex@[your_nas_ip]
ssh-keygen -t ed25519 -C "synology_weather"
(Press Enter three times to accept defaults and skip passphrases).
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
cat ~/.ssh/id_ed25519.pub
weathernow repository on GitHub > Settings > Deploy keys > Add deploy key. Title it Synology NAS, paste the key, check Allow write access, and click Add.You must manually establish the Git connection for the first time. In your Mac Terminal, run these commands line by line:
cd /var/services/homes/alex/scripts/weathernow/
# Generate the initial index.html
python3 build.py
# Configure local Git identity
git config --global user.name "Synology Updater"
git config --global user.email "bot@local"
# Initialize repository
git init
git remote add origin git@github.com:alexroddie/weathernow.git
# Track files
git add index.html README.md Readme.html
# Create the master commit
git commit -m "Initial commit with docs"
git branch -M main
# Push to GitHub
git push -u origin main
⚠️ The Fingerprint Prompt: During the push, SSH will ask: Are you sure you want to continue connecting? You must type out the full word yes and hit Enter. Do not just hit Enter or type 'y', or the connection will abort.
weathernow repository on GitHub > Settings > Pages. Set Source to Deploy from a branch, select main, leave folder as / (root), and click Save.https://alexroddie.github.io/weathernow/index.html)WeatherNow Updater. Set User to alex.bash /var/services/homes/alex/scripts/weathernow/update.sh