If something else turned the screen off during the wake minute (the
9pm cron, a kiosk restart from an update), taps only extended the timer
and never turned it back on, so it stayed dark until nobody touched it
for a full minute. Now every tap (at most every 2s) checks the real
screen state.
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.
The desktop shows for ~30s at boot before Chromium covers it. install.sh
now sets pcmanfm's desktop to plain black with no icons (one file per
screen) and auto-hides wf-panel-pi; originals are kept and --uninstall
restores them.
Open-Meteo's daily weather code reflects the worst hour, even after
school (tomorrow: clear 7am-5pm, cloudy at 6pm -> daily code 3), so the
scene and tomorrow's description said Cloudy. The sky now comes from the
average cloudiness of the same 7am-6pm hours the outfit uses, and
rain/snow/storm still take priority. Backpacks are drawn about a third
of the kid's height, upright by their feet.
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.
Fog: blurred mist bands behind the kids plus a low band over their feet,
when the day's forecast is foggy. Wind (15+ mph): swirls and blowing
leaves, and rain falls at a slant. Season by date (flipped south of the
equator): ground color, a small tree that blossoms, fills out, turns
orange and goes bare, spring flowers and fallen autumn leaves. Kids
shift right a little so the tree shows. Demo mode takes &wind and &season.
Clothing colors come from per-kid CSS variables (Nate's are the SVG
defaults), so both still dress for the same weather from one outfit()
but look different: Vi wears pinks and purples, leggings instead of
jeans, a heart T-shirt, a pink scarf, and a skirt on shorts days (chip
now reads "Shorts or skirt"). Nate's umbrella is blue so the two differ.
The kid drawing becomes a template drawn twice with <use>: Nate (8) on
the left and Vi (6) about 10% shorter on the right, so one outfit drives
both. Girl-only hair and a bow (hidden under hats) toggle through a CSS
variable that inherits into the <use> copy. The umbrella now sits over
the kid's head, and the small cloud and lightning bolt move up out of
Vi's way.
sun.py computes today's sunrise/sunset offline (NOAA equations) from the
location install.sh now saves in screen.conf. screen.sh 'on' picks the
evening level when it's dark out, and a new 'tick' state (cron, every 5
min) follows sunset/sunrise while leaving the night-off hours alone so it
can't cut short a tap-to-wake. install.sh gains --evening-brightness.
After a reboot the backlight comes back at its saved level (possibly the
dim night level) with the output on, and nothing corrected it until the
@reboot cron 90s later; tap-wake ignored taps since the screen wasn't
'off'. kiosk.sh now runs screen.sh auto a few seconds after start.
screen.sh auto also honors NIGHT_OFF=0 so this can't blank a 24/7 screen.
screen.sh gains a 'dim' state that sets the backlight to NIGHT_BRIGHTNESS
(percent, default 5) before turning the output on; 'on' restores full
brightness, so the morning schedule brings it back. tap-wake uses 'dim'.
install.sh gains --night-brightness.
update.sh fetches, fast-forwards and re-runs install.sh only when the
remote has something new. install.sh adds the cron job whenever the repo
is a git clone with an upstream. README now installs by git clone.
The page runs from file:// and Nextcloud sends no CORS headers, so a cron
job (fetch-calendars.py) pulls each public calendar via CalDAV REPORT with
server-side recurrence expansion and writes events.js for the page to load.
Events shared by both kids show once. On busy days the hourly icons and
then extra event rows give way so everything fits on the 800x480 screen.
install.sh gains --calendar "Name=URL" (repeatable) and --no-calendars;
share links live in calendars.conf on the Pi, not in the repo.
Feels-like temperature alone ran harsh on breezy mornings (45F felt like
38F), triggering a jacket and warm hat. Blend it with the real temperature,
credit sunny mornings, use the real afternoon high, and loosen the jacket
and hat cutoffs.