rich df43905d0d Backpacks on school days
A school day is Mon-Fri within the school year (default 09-01 to 06-15,
set with install.sh --school-start/--school-end), unless a calendar event
that day says "no school" or "school closed". Each kid gets a backpack
by their feet in their own colors, and a Backpack chip is added.
2026-10-22 21:59:02 -04:00
2026-10-22 21:59:02 -04:00
2026-10-22 21:59:02 -04:00
2026-10-22 21:59:02 -04:00

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:

  1. Installs chromium, wlopm, python3, cron and curl if they're missing.
  2. Switches the desktop to labwc (Wayland) and turns on desktop autologin, using raspi-config.
  3. Copies the dashboard to ~/kids-dashboard/. Writes config.js (location) and screen.conf (night schedule).
  4. Adds the kiosk to ~/.config/labwc/autostart. If Chromium crashes, lwrespawn restarts it.
  5. Sets up the night-off cron jobs and the tap-wake systemd user service.

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.

S
Description
No description provided
Readme
254 KiB
0 Stars 1 Watchers 0 Forks
Languages
HTML 62.6%
Shell 24.3%
Python 13.1%