Raspberry Pi WiFi voucher display system with weather integration and PiJuice battery management
Loading README and project media…
⚠️ This project is archived. Last active development was in 2018. The code is preserved here for reference purposes only and is no longer maintained.
PiSpot Show is a headless Raspberry Pi appliance that drives hotel lobby TVs and public-area monitors. Every hour it generates a fresh time-limited Wi-Fi voucher from the Spotipo captive-portal API, pulls a live weather forecast, and composites everything into a branded Full-HD image rendered directly to the Linux framebuffer -- no desktop environment required.
A PiJuice HAT provides battery-backed power management with RTC wake/sleep scheduling, a hardware watchdog, and graceful low-voltage shutdown, making the device suitable for unattended 24/7 operation.
Originally developed and deployed in 2018 for the company GPConnect. Part of the PiSpot ecosystem:
| Project | Description |
|---|---|
| PiSpot Watch | Wrist-wearable e-ink voucher device |
| PiSpot Show (this repo) | HDMI kiosk display for lobby TVs |
| PiSpot Deployment | Fleet provisioning and Vault configuration |
/dev/fb0 via fbi, bypassing X11/Wayland entirely for a minimal, kiosk-grade display pipeline.See all photos in docs/photos/.
+------------------+
| HDMI Display |
| (1920x1080) |
+--------+---------+
|
+--------+---------+
| Raspberry Pi |
| + PiJuice HAT |
+--+-----+------+--+
| | |
+---------+ +--+--+ ++----------+
| | | | |
+-------v---+ +-----v-+ +-v--v------+ +---v--------+
| Spotipo | | Dark | | Pillow | | fbi |
| WiFi API | | Sky | | (image | | (framebuf |
| (voucher) | | (wx) | | render) | | display) |
+-----------+ +-------+ +-----------+ +------------+
fbi pushes the image to the Linux framebuffer.| Component | Purpose |
|---|---|
| Raspberry Pi 3 (or later) | Main compute board |
| PiJuice HAT (1680 mAh) | Battery UPS, RTC alarms, watchdog, wake-on-charge |
| HDMI display (TV or monitor) | Guest-facing 1920x1080 voucher screen |
| MicroSD card (8 GB+) | Raspbian OS + application |
| Power supply (5 V / 2.5 A) | Board + HAT power |
git clone https://github.com/GeiserX/PiSpot-Show.git
cd PiSpot-Show
Edit main.py and set your credentials:
Spotipo_Key = "YOUR-SPOTIPO-TOKEN"
Darksky_Key = "YOUR-DARKSKY-KEY"
Also update the Spotipo endpoint URL, SSID name, and weather coordinates.
ansible-playbook -i inventory deployment-files/main.yml
The playbook handles: system packages (fbi, pijuice-base, imagemagick), Python dependencies, dedicated user with scoped sudo, SSH key generation, service registration, WiFi, timezone, and GPU/USB power optimization.
Set the RTC wake alarm via pijuice_cli (e.g. 09:00 weekdays) and add the shutdown cron:
crontab -e
# 0 17 * * * /usr/bin/python3 /opt/PiSpot_HDMI/piJuice_stop.py
Set in the API request body inside main.py:
| Parameter | Default | Description |
|---|---|---|
duration_val | 4 | Voucher validity period |
duration_type | 2 | Duration unit (1=min, 2=hour, 3=day) |
num_devices | 10 | Max concurrent devices per voucher |
speed_dl | 1024 | Download speed limit (Kbps) |
speed_ul | 256 | Upload speed limit (Kbps) |
bytes_t | 0 | Data cap (0 = unlimited) |
Defined in pijuice_config.JSON:
The Case/ directory contains a complete enclosure designed in FreeCAD:
| File | Description |
|---|---|
Caja.stl | Main housing body |
Tapa.stl | Top lid / cover |
Botonera.stl | Button panel insert |
*.fcstd | FreeCAD parametric source files |
*.gx | Goxel voxel models |
PiSpot-Show/
main.py # Main loop: voucher + weather + render + display
piJuice_stop.py # Scheduled shutdown script
pijuice_config.JSON # PiJuice HAT event/watchdog configuration
fonts/ # Raleway Light + Black typeface
images/ # Backgrounds, logos, weather icons, generated output
servicefiles/
pispot_hdmi.service # Main application systemd unit
splashscreen.service # Boot splash systemd unit
deployment-files/
main.yml # Ansible provisioning playbook
wpa_supplicant.conf # WiFi network configuration
GitLabANDHostname.py # SSH key + hostname setup for fleet devices
Case/ # 3D enclosure (FreeCAD + Goxel + STL)
LICENSE # GPL-3.0
GNU General Public License v3.0
Contributions are welcome. Open an issue or submit a pull request.
This project follows the Contributor Covenant v2.1 Code of Conduct.