-
v2.1.1 Stable
released this
2026-04-01 04:27:19 +02:00 | 6 commits to main since this release📅 Originally published on GitHub: Wed, 01 Apr 2026 02:27:27 GMT
🏷️ Git tag created: Wed, 01 Apr 2026 02:27:19 GMTFull Changelog: https://github.com/niels-emmer/wall-cast/compare/v2.1.0...v2.1.1
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
v2.1.0 Stable
released this
2026-03-29 17:54:26 +02:00 | 12 commits to main since this release📅 Originally published on GitHub: Sun, 29 Mar 2026 15:54:32 GMT
🏷️ Git tag created: Sun, 29 Mar 2026 15:54:26 GMTFull Changelog: https://github.com/niels-emmer/wall-cast/compare/v2.0.0...v2.1.0
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
v2.0.0 Stable
released this
2026-03-28 18:55:09 +01:00 | 26 commits to main since this release📅 Originally published on GitHub: Sat, 28 Mar 2026 17:55:38 GMT
🏷️ Git tag created: Sat, 28 Mar 2026 17:55:09 GMTNew widgets
- Air quality — European AQI, PM2.5/PM10/NO₂/O₃, 4-day pollen forecast (birch, grass, alder, mugwort, ragweed) via open-meteo CAMS — no API key
- Market — crypto Fear & Greed gauge, four stock indices (S&P 500, Dow Jones, AEX, FTSE 100), five stock tickers, top 10 crypto coins — no API key
- P2000 emergency alerts — Dutch emergency services paging feed, filtered by region and discipline; auto-skips in rotator when quiet; optional news ticker injection
Notifications: ntfy + Matrix
- Matrix channel — assistant notifications dispatched in parallel to ntfy and Matrix; bot setup via
create-account, room invite, and one-time join;MATRIX_TOKENin.envonly - Config restructured —
notify.ntfy.{enabled,url}andnotify.matrix.{enabled,homeserver,room_id}; auto-migrated from oldntfy_url/ntfy_topicformat on startup - Per-person Matrix room — each person can configure
matrix_room_idalongsidentfy_topic - ntfy/Matrix reachability probes — landing page STATUS section shows live ok/offline/not-configured for both notification servers
Assistant improvements
- 10 new rule variables — weather (temperature, wind speed), rain (mm_now, minutes_until_rain), polestar (battery_pct, range_km, is_plugged_in), air quality (AQI, pollen_birch, pollen_grass)
- Rules system rewrite — structured
Rulelist replaces flat dict; condition builder modal in admin panel; per-family and per-person rules; auto-migrated from old format - Per-person ntfy topics — each person has their own topic; global rules fan out to all personal topics
- Personalised RSS feeds — per-person feeds appear only on screens they're assigned to
Casting & device management
- Apple TV pairing — full AirPlay pairing flow from the admin panel
- Android TV Remote — wake and standby screens from the landing page power button
- Auto-recover from IP changes — caster finds devices by name after a DHCP change
- Post-cast verification — silently failed casts (e.g. rejected by Google Home after a voice command) are detected and retried
- Per-screen power toggle — landing page has a power button per screen
- Screen diagnostics — per-screen status, last log entries, and manual re-cast button in admin panel
Landing page & admin panel
- System STATUS section — services (backend/caster/scanner/assistant/ntfy/matrix) + all 13 API data sources with last-fetched age; replaces the old two binary pills
- Cache health registry — all 13 API routers report per-fetch health; status endpoint aggregates
- Rotator fade speed — configurable via admin panel (Slow → Fast); applies globally
- Info widget editor — admin panel can configure
infowidget slots in the rotator
Fixes
- Caster recast loop — cooldown guard + reachability-based trust
- Warnings expiry — cleared immediately on cache hits
- Bus 500 errors —
asyncio.CancelledErrorhandling + 20s timeout - Rain source — switched from buienalarm.nl (blocked) to open-meteo minutely_15
- Market quotes — switched from Yahoo Finance (blocked) to Stooq CSV
- Weather icons — Meteocons SVGs replace broken emoji on Chromecast
- On-route traffic filter — corridor proximity instead of road name only
- Calendar — finished events hidden; colours resolved; 403 warnings suppressed
- nginx —
index.htmlnever cached
Upgrading
git pull && docker compose up --build -dConfig auto-migrates on startup — no manual changes needed. If you had
notify.ntfy_url/notify.ntfy_topicin your YAML, the migration converts them tonotify.ntfy.{enabled,url}automatically.If you're adding Matrix: set
MATRIX_TOKEN=syt_...in.env, see docs/assistant.md for the full bot setup walkthrough.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
released this
2026-03-28 14:44:44 +01:00 | 43 commits to main since this release📅 Originally published on GitHub: Sat, 28 Mar 2026 13:45:15 GMT
🏷️ Git tag created: Sat, 28 Mar 2026 13:44:44 GMTWhat's new
Market widget (
type: market)A new large widget giving a live snapshot of financial markets:
- Fear & Greed gauge — gradient bar (red → yellow → green) with needle showing current crypto sentiment score (0–100) and classification label
- Indices — S&P 500, NASDAQ, AEX, FTSE with price + % change
- Stocks — AAPL, MSFT, NVDA, TSLA, AMZN with price + % change
- Top 10 crypto — ranked by market cap, with price and 24h % change
All data sources are free with no API key required: alternative.me/fng (Fear & Greed), Yahoo Finance (stocks/indices), CoinGecko (crypto). Cache TTL: 5 minutes. Graceful degradation if any source is unavailable.
Admin panel
Selectable from the rotator slot picker: Add slot → Market. No per-widget config needed.
Deploy
git pull && docker compose up --build -dDownloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
released this
2026-03-28 08:06:30 +01:00 | 45 commits to main since this release📅 Originally published on GitHub: Sat, 28 Mar 2026 07:07:08 GMT
🏷️ Git tag created: Sat, 28 Mar 2026 07:06:30 GMTWhat's new in v1.7.0
Bug fixes
Caster — stop rapid recast loop on Cast OS devices
Google Nest Hub and regular Chromecast never reportDashCast/PLAYINGincatt statusoutput — they only returnVolume: X.is_casting()now returns(confirmed, reachable). Within the cooldown window, a reachable device is trusted as still casting; the cooldown is only reset (triggering a recast) if the device is completely unreachable. This eliminates thecast_failedloop that previously appeared every 10 s on both screens.Warnings widget — clear expired warnings immediately
The backend now calls_filter_expired()on every cache hit, so a warning that expires mid-cycle is dropped right away — not at the next 15-minute fetch. TheRotatorWidgetalso gained a bidirectionalonUnskipmechanism so theWarningsWidgetcan re-enter the rotation automatically when new warnings arrive, not just skip when there are none.Assistant —
polestar.battery_pctrule and cache-key crash- Added the missing
polestar.battery_pcthandler (assistant/rules/polestar.py). Sends a notification when battery drops to a configured threshold. - Fixed
ValueError: too many values to unpackinengine.py— the dedup cache key was converting(key, value)tuples to strings before sorting, making the subsequent unpack fail.
ntfy — Unicode characters in notification titles
Percent-encode theTitleHTTP header before sending so characters outside Latin-1 (e.g. em-dash) no longer crash the notifier withUnicodeEncodeError.Features
Landing page — power on/off button per screen
Each screen card now has a power button. Amber = casting active, blue = paused. CallsPATCH /api/admin/configto togglecasting_activefor that screen.Landing page — layout and style polish
- Status pills (BACKEND OK, CASTER) moved from the Status card into the System card.
- "Status" card renamed to "Live server logs".
- Casting and power buttons are now equal width within each card.
- Screen grid uses CSS grid (
auto-fill, 190px) for consistent alignment.
Admin panel —
infowidget editor in rotator slots
Adding aninfoslot in a rotator now shows a full editor: title input and a key/value pair list with add/remove controls.Docs
docs/config-reference.md: added Screen casting fields table documentingcasting_active,chromecast_ip,chromecast_name,chromecast_mac, andenabled.docs/memory/records/decision-log.md: entries for all v1.7.0 architectural decisions.
Generated with Claude Code
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Added the missing
-
v1.6.0 Stable
released this
2026-03-26 19:16:18 +01:00 | 62 commits to main since this release📅 Originally published on GitHub: Thu, 26 Mar 2026 18:16:41 GMT
🏷️ Git tag created: Thu, 26 Mar 2026 18:16:18 GMTWhat's new
Features
- Per-person ntfy topics — each person can have their own notification topic; global rules fan out to all personal topics
- 10 new assistant rule variables — weather, rain, Polestar, air quality, and bus data now accessible in rules
- Traffic jam total length — total km of jams shown right-aligned in the traffic widget header
- Post-cast verification — caster detects silent cast failures (e.g. Google Home Hub after a voice command) and retries automatically
- Landing page casting status — casting status line visible on the overview page
Fixes
- Rain data source — switched from buienalarm to open-meteo minutely_15 (more reliable, better coverage)
- i18n — "piek" (rain peak) and calendar day/month abbreviations now respect the configured language; no more hardcoded Dutch in English mode
- Calendar — hides already-finished timed events from today's list; suppresses spurious 403 log noise
- Traffic — on-route jam filtering by route corridor; total km counts correctly; zero-length jams hidden
- Admin panel — Chromecast IP pre-fills immediately after scan pick; test notification result shown inline; assistant descriptions clarified
- nginx —
index.htmlnever cached; correct cache headers on SVG assets
Developer experience
- Claude Code hooks — five quality-guard hooks ship with the repo in
.claude/settings.json:- Tailwind layout class guard (catches the silent prod-build breakage)
- Translation parity check (
nl/enkeys must match) - TypeScript type check (async, wakes model on errors)
- Docker Compose validation
- Widget registry check
- Docs overhaul —
adding-a-widget.mdnow includes translations step and pre-commit checklist;multi-user.mdclarified (phases 1–3 complete);future-ideas.mdupdated; newdocs/claude-hooks.mdexplains the hooks system for forkers - Icons — replaced hand-drawn SVGs with Meteocons + Phosphor icons
Updating
git pull && docker compose up --build -dYour
config/wall-cast.yamlis untouched — new config keys are added automatically with defaults on first run.If you use Claude Code on a fork: open
/hooksonce to load the new.claude/settings.jsonquality guards.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v1.5.0 Stable
released this
2026-03-23 13:01:50 +01:00 | 103 commits to main since this release📅 Originally published on GitHub: Mon, 23 Mar 2026 12:01:57 GMT
🏷️ Git tag created: Mon, 23 Mar 2026 12:01:50 GMTWhat's Changed
- feat(airquality): air quality widget — European AQI + pollen forecast by @niels-emmer in https://github.com/niels-emmer/wall-cast/pull/6
Full Changelog: https://github.com/niels-emmer/wall-cast/compare/v1.4.0...v1.5.0
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v1.4.0 Stable
released this
2026-03-23 07:02:02 +01:00 | 114 commits to main since this release📅 Originally published on GitHub: Mon, 23 Mar 2026 06:02:18 GMT
🏷️ Git tag created: Mon, 23 Mar 2026 06:02:02 GMTWhat's new
Features
- Admin → Screens: diagnostics box per screen — live status, caster & backend logs, and a "Re-cast now" button
- Admin → Screens:
chromecast_namefield; auto-filled when selecting a device from the scanner - Caster: auto-recovery from dynamic IPs — when casting fails, the scanner sidecar searches the full /24 subnet for the device's new IP and updates the config automatically
- Landing page: credit line added ("Prompts: 100% human · Writing & coding: 100% Claude"); version badge links to releases
Fixes
- Calendar: service account now auto-subscribes to configured calendars, resolving color lookup errors in the console
- Weather: replaced emoji with SVG icons to fix rendering on Chromecast (Chromium)
- Network widget: LAN host count font size matched to other values in the widget
- Polestar widget: added spacing between the battery bar and the charging status row
- Scanner: probes the full /24 subnet instead of only ARP cache entries, so rebooted devices with new IPs are found reliably
Docs & admin
- Admin panel General tab sections reordered
- Added prompt-a-feature guide (
docs/prompt-a-feature.md), linked from README
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v1.3.0 Stable
released this
2026-03-23 04:50:24 +01:00 | 127 commits to main since this release📅 Originally published on GitHub: Mon, 23 Mar 2026 03:50:33 GMT
🏷️ Git tag created: Mon, 23 Mar 2026 03:50:24 GMTWhat's Changed
- feat(rotator): configurable fade speed by @niels-emmer in https://github.com/niels-emmer/wall-cast/pull/5
Full Changelog: https://github.com/niels-emmer/wall-cast/compare/v1.2.0...v1.3.0
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v1.2.0 — Assistant sidecar Stable
released this
2026-03-22 22:09:25 +01:00 | 129 commits to main since this release📅 Originally published on GitHub: Mon, 23 Mar 2026 03:16:28 GMT
🏷️ Git tag created: Sun, 22 Mar 2026 21:09:25 GMTWhat's new
Assistant sidecar
A new standalone Docker service that watches your data and pushes proactive notifications to your phone via ntfy.
Rules:
- Garbage — reminder when collection is within 18 h (configurable)
- Calendar — reminder N minutes before timed events (configurable)
- Bus — delay / cancellation alert, but only when you have an upcoming calendar event — avoids spam on days you're not travelling
- Traffic — commute delay alert when travel time exceeds a configurable threshold above normal
- Weather — orange and red KNMI warnings via MeteoAlarm
Features:
- Per-person ntfy topics — alerts go to the right phone
- Optional AI formatting via Ollama (self-hosted) or OpenAI — rewrites template messages into natural language and cross-correlates related facts
- Deduplication state persisted to
/config/assistant-state.json— each notification fires once per event, not once per polling cycle - Fully opt-in — remove
shared.assistantfrom the YAML to disable without restarting
Assistant tab in admin panel
New Assistant tab in
/#admincovers all assistant settings: enable toggle, check interval, ntfy server/topic, AI provider and model, and all four rule thresholds. No manual YAML editing required.Upgrade
git pull docker compose up --build -dThen open
/#admin→ Assistant to enable notifications.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
mirror of
https://github.com/niels-emmer/wall-cast.git
synced 2026-09-13 23:53:36 +02:00