wf-panel-pi won't auto-hide while it has notifications up, and at boot it always does (Wi-Fi connected, updates available), so it stayed on screen. kiosk.sh now stops the panel and its respawner as they start; the auto-hide edit is undone on existing installs.
5.3 KiB
Kids weather dashboard
A Raspberry Pi kiosk that shows today's weather and a cartoon kid dressed for it: coat, rain boots, sun hat, whatever the day needs. It's built for the official 800×480 touchscreen and works on any screen.
- Weather: Open-Meteo (free, no API key), refreshed every 10 minutes. If the internet drops, it keeps showing the last forecast.
- Outfit: based on the "feels like" temperature for the hours ahead (7am–6pm), plus rain, snow, UV and wind. After 7pm it switches to tomorrow, so clothes can be picked the night before.
- Calendars: shows the kids' events for the same day from Nextcloud public calendar links (optional).
- Night mode: the screen dims to 50% after dark (30 min after sunset, and before sunrise), and turns off overnight (default 21:00–06:30). Tapping it at night wakes it, dimmed further, for a minute.
Install on a Pi
You need Raspberry Pi OS with desktop (Bookworm or Trixie). Clone the repo on the Pi and run the installer as the desktop user (not root):
git clone https://git.rickelobe.com/rich/kids-dashboard.git ~/kids-dashboard-src
~/kids-dashboard-src/install.sh && sudo reboot
The installer:
- Installs
chromium,wlopm,python3,cronandcurlif they're missing. - Switches the desktop to labwc (Wayland) and turns on desktop autologin, using
raspi-config. - Copies the dashboard to
~/kids-dashboard/. Writesconfig.js(location) andscreen.conf(night schedule). - Adds the kiosk to
~/.config/labwc/autostart. If Chromium crashes,lwrespawnrestarts it. - Sets up the night-off cron jobs and the
tap-wakesystemd user service. - Makes the desktop plain black with no icons, since it shows for ~30s at boot before Chromium starts,
and the kiosk stops the taskbar.
--uninstallputs the original desktop back (after a reboot).
It's safe to re-run, and settings you don't pass are kept from the last run.
Updates: when the repo is a git clone, the installer also adds an hourly cron job (bin/update.sh) that pulls
from the remote and re-runs install.sh only if something changed, so a git push reaches the Pi within the hour.
The dashboard reloads by itself. ~/kids-dashboard/update.log records each update.
Options
| Option | Default | |
|---|---|---|
--lat N --lon N |
detected from public IP | Location for the forecast |
--off HHMM / --on HHMM |
2100 / 0630 |
When the screen goes off and comes back |
--awake SECONDS |
60 |
How long a tap keeps the screen on at night |
--evening-brightness PERCENT |
50 |
Backlight level from 30 min after sunset until sunrise, while the screen is on (100 turns this off) |
--night-brightness PERCENT |
20 |
Backlight level when tapped awake at night; the official 7" screen looks black below about 15 (full brightness returns in the morning) |
--no-night-off / --night-off |
night-off on | Keep the screen on 24/7, or turn night-off back on |
--school-start MM-DD / --school-end MM-DD |
09-01 / 06-15 |
School year. On school days (Mon–Fri in the school year, unless a calendar event says "no school" or "school closed") the kids get backpacks |
--calendar "Name=URL" |
none | A kid's calendar; repeat once per kid. URL is a Nextcloud public share link (…/apps/calendar/p/…) |
--no-calendars |
Stop showing calendars | |
--uninstall |
Remove everything (packages and autologin are left alone) |
Layout
dashboard/index.html the whole dashboard: one file, inline SVG art, no dependencies
bin/kiosk.sh launches Chromium full-screen with its own profile
bin/screen.sh screen on|off|auto (auto = whatever the schedule says right now)
bin/sun.py today's sunrise/sunset for the evening dimming (offline)
bin/tap-wake.py watches the touchscreen; wakes the screen when it's off at night
bin/update.sh cron job: pulls from git and re-installs when there's something new
bin/fetch-calendars.py cron job: fetches the kids' calendars into events.js (the page can't, from file://)
systemd/tap-wake.service user service for tap-wake.py
install.sh installer / updater / uninstaller
Handy commands (on the Pi)
~/kids-dashboard/screen.sh on # turn the screen on by hand
systemctl --user status tap-wake # is tap-to-wake running?
XDG_RUNTIME_DIR=/run/user/$(id -u) WAYLAND_DISPLAY=wayland-0 \
grim /tmp/shot.png # screenshot of what's on screen
Trying out the art
Open dashboard/index.html?demo=LOW,HIGH,CODE[,RAIN%][,UV] in any browser to fake a day's weather.
CODE is a WMO weather code.
?demo=22,30,73,60: snow day (coat, snow pants, hat, gloves, scarf, snow boots)?demo=50,64,61,80: rain (raincoat, rain boots, umbrella)?demo=72,88,0,0,8: hot and sunny (t-shirt, shorts, sun hat, sunglasses)
Add &wind=MPH (15+ is windy), &season=spring|summer|autumn|winter or &school=0|1 to try the wind, season and backpack looks,
e.g. ?demo=45,58,2&season=autumn&wind=22. CODE 45 is fog.
Demo mode also shows three sample calendar events; add ,noevents (e.g. ?demo=45,58,0,0,3,noevents) to hide them.
The clothing thresholds live in outfit() in index.html. Temperatures are in °F.