Skip to main content

🏠 Domov · ⬅️ Nahor

PRJ001 — Presentation

Headline​

2025-PRJ-001-ST_007-ST_022-Revia

Weather Station Display

Kompaktná počasová stanica postavená na Raspberry Pi Zero 2 W s 4" touchscreen displejom, zobrazujúca aktuálne počasie, 5-dňovú predpoveď a trendy teploty/vlhkosti s automatickou aktualizáciou z open-source API.

Introduction​

2025-PRJ-001-ST_007-ST_022-Revia

Cieľom projektu je vytvoriť kompaktnú, vizuálne atraktívnu počasovú stanicu využívajúcu Raspberry Pi Zero 2 W a Waveshare 4" LCD displej. Systém automaticky deteguje polohu používateľa, zobrazuje aktuálne meteorologické údaje a predpoveď počasia prostredníctvom Open-Meteo API. Aplikácia beží fullscreen s touchscreen ovládaním, automatickým rotovaním obrazoviek a podporou manuálneho vyhľadávania miest. Riešenie zahŕňa automatické aktualizácie z GitHub repozitára pri každom štarte, čím sa eliminuje potreba fyzického prístupu k zariadeniu pri zmenách kódu. Projekt prináša praktické riešenie pre vizualizáciu počasia s nízkou spotrebou energie a možnosťou nasadenia kdekoľvek s WiFi pripojením.

Obsah​

  1. Business
  2. Top Level Architecture
  3. Solution Architecture
  4. Analysis
  5. Design
  6. Implementation
  7. Testing & Verification
  8. Operation
  9. Change Management
  10. Záverečné zhodnotenie

01-Business​

Problém:

  • Potreba jednoduchého prístupu k presným meteorologickým údajom bez závislosti na mobilných zariadeniach
  • Existujúce komerčné riešenia sú buď drahé alebo závislé od proprietárnych služieb s mesačnými poplatkami
  • Chýbajú open-source alternatívy s moderným UI a touchscreen ovládaním

Riešenie:

  • Standalone počasová stanica s automatickou detekciou polohy
  • Využitie bezplatného Open-Meteo API bez limitov
  • Automatické aktualizácie z GitHub repozitára
  • Nízke náklady (~50-70€ hardvér)

Hodnota:

  • Nezávislosť od komerčných služieb
  • Plne customizovateľné riešenie
  • Vzdelávací projekt pre embedded systémy a Python GUI development
  • Možnosť rozšírenia o vlastné senzory (teplota, vlhkosť, tlak)

drawing

02-Top Level Architecture​

Top-level-architektura

Hlavné komponenty:

  1. Hardware Layer: Raspberry Pi Zero 2 W + Waveshare LCD + Touchscreen
  2. OS Layer: Raspberry Pi OS (Debian 12) s X11 window system
  3. Application Layer: Python aplikácia s Tkinter GUI framework
  4. Data Layer: Open-Meteo API, IP geolocation, Geocoding API
  5. Update Layer: GitHub repository pre continuous deployment

03-Solution Architecture​

Boot Sequence Flow​

bootseq

Application Architecture​

appflow

Data Flow Diagram​

dataflow

System State Diagram​

systemstate

Technologies Stack:

  • Language: Python 3.11
  • GUI Framework: Tkinter
  • HTTP Client: requests library
  • Display Driver: X11 + fbdev
  • Version Control: Git + GitHub
  • Process Management: systemd
  • Boot Manager: startx

04-Analysis​

Funkčné požiadavky:​

functionalreq

Detailné požiadavky:

  1. FR-001: Zobrazenie aktuálneho počasia (teplota, vlhkosť, vietor, tlak, pocitová teplota)
  2. FR-002: 5-dňová predpoveď s max/min teplotami a pravdepodobnosťou zrážok
  3. FR-003: Grafy teploty a vlhkosti za 24h s vizuálnymi trendmi
  4. FR-004: Automatická detekcia polohy pri štarte pomocou IP geolokácie
  5. FR-005: Manuálne vyhľadávanie miest s fullscreen klávesnicou
  6. FR-006: Automatické rotovanie stránok každých 10 sekúnd
  7. FR-007: Touchscreen navigácia pomocou tlačidiel ◀ ▶ 🔍
  8. FR-008: Virtuálna QWERTY klávesnica s číslicami, Space, Backspace, Clear
  9. FR-009: Automatická aktualizácia aplikácie z GitHub pri každom boote
  10. FR-010: Pravidelná aktualizácia počasia každých 10 minút

Nefunkčné požiadavky:​

nonfunctionalreq

Risk Assessment​

riskassessment

05-Design​

UI Component Hierarchy​

uihierarchy

Color Palette​

palette

Data Model Schema​

datamodel

06-Implementation​

Project Structure​

Project Structure

Application Flow​

Application Flow

Weather Data Processing Pipeline​

Weather Data Processing Pipeline

Systemd Service Dependencies​

Systemd Service Dependencies

Key Files and Configuration​

1. Main Application (weather_display.py - 450+ lines)

  • GUI creation with Tkinter
  • Weather API integration
  • Location detection
  • Graph rendering
  • Auto-rotate logic
  • Virtual keyboard

2. Update Script (update_and_run.sh)

#!/bin/bash
REPO_URL="git@github.com:username/weather-pi-display.git"
APP_DIR="/home/revia/weather-app"
LOG_FILE="$APP_DIR/update.log"

echo "$(date): Starting update..." >> "$LOG_FILE"

if [ ! -d "$APP_DIR/.git" ]; then
git clone "$REPO_URL" "$APP_DIR"
else
cd "$APP_DIR"
git fetch origin
git reset --hard origin/main
fi

python3 weather_display.py

3. Display Configuration (/boot/firmware/config.txt)

dtparam=spi=on
dtoverlay=waveshare35a:rotate=270
hdmi_force_hotplug=1
hdmi_group=2
hdmi_mode=87
hdmi_cvt=480 320 60 6 0 0 0
framebuffer_width=480
framebuffer_height=320
disable_overscan=1

4. Touchscreen Calibration (/etc/X11/xorg.conf.d/99-calibration.conf)

Section "InputClass"
Identifier "calibration"
MatchProduct "ADS7846 Touchscreen"
Option "Calibration" "160 3723 3896 181"
Option "SwapAxes" "1"
Option "InvertX" "1"
Option "InvertY" "1"
EndSection

APIs Used​

APIEndpointPurposeAuthenticationRate Limit
Open-Meteoapi.open-meteo.com/v1/forecastCurrent weather + Forecast dataNo API KeyUnlimited
IP Geolocationip-api.com/json/Automatic location detectionNo API Key45 req/min (Free)
Geocodinggeocoding-api.open-meteo.comCity search functionalityNo API KeyUnlimited
GitHubgithub.com/user/repo.gitCode updates via GitSSH KeyAuthenticated

07-Testing & Verification​

Test Coverage Overview​

Total Tests: 14

  • ✅ Passed: 11 (78.6%)
  • ⚠️ Partial: 2 (14.3%)
  • ❌ Issue: 1 (7.1%)

Test Cases Matrix​

Test IDKategóriaPopisOčakávaný výsledokStatusPoznámka
TC-001BootSystem boot do GUIGUI zobrazené < 60s✅ Pass~45s
TC-002DisplayTouchscreen kalibráciaPresné dotykové vstupy✅ PassInverzné osi fungujú
TC-003NetworkAutomatická detekcia polohySprávne mesto zobrazené✅ PassIP geolocation OK
TC-004APIZískanie aktuálneho počasiaDáta zobrazené správne✅ PassOpen-Meteo API
TC-005API5-dňová predpoveď5 dní zobrazených✅ PassMax/Min/Rain OK
TC-006API24h grafyGrafy vykreslené✅ PassSmooth curves
TC-007UIAuto-rotate stránokPrepnutie každých 10s✅ PassLoop funguje
TC-008UIManuálna navigáciaTlačidlá fungujú✅ Pass◀ ▶ responsive
TC-009UIVyhľadávanie mestaKlávesnica + search funguje✅ PassQWERTY layout
TC-010UpdateGit auto-pull pri booteNová verzia stiahnutá✅ PassGitHub sync OK
TC-011ErrorWiFi výpadokZobrazí posledné dáta⚠️ PartialChýba offline mód
TC-012ErrorAPI nedostupnéError handling⚠️ PartialChýba user feedback
TC-013PerformanceResponzívnosť UIAkcia < 200ms✅ PassAverage 100ms
TC-014DisplayIkony počasiaVšetky ikony zobrazené⚠️ IssueNiektoré štvorčeky

Performance Metrics​

Boot Performance​

FázaČasKumulatívne
Power On → Kernel Boot~10s10s
Kernel Boot → Systemd Services~15s25s
Systemd Services → X11 Start~10s35s
X11 Start → App Running~10s45s

Runtime Performance​

MetrikaHodnota
CPU Idle5-15%
CPU Refresh30-40%
RAM Usage~80MB
Power Consumption~1.5W

Response Times​

OperáciaČas
API Request200-500ms
UI Interaction< 100ms
Touch Input< 200ms

Known Issues and Resolutions​

Issue #ProblémSeverityFixStatus
#1Emoji ikony zobrazené ako štvorčeky🟡 LOWNahradiť ASCII symbolmi✅ Ready to implement
#2Pri výpadku WiFi aplikácia nereaguje🔴 MEDIUMOffline mód s cache📅 Future enhancement
#3Pri zlyhaní API nejasná chyba🟡 LOWUser-friendly errors📅 Future enhancement

08-Operation​

Deployment Process​

Deployment Steps (30 krokov, ~2 hodiny):

1. Príprava hardvéru (10 min)​

  1. Pripojenie Waveshare LCD na GPIO pins
  2. Vloženie SD karty do Raspberry Pi

2. Inštalácia OS (20 min)​

  1. Flash Raspberry Pi OS 64-bit pomocou Raspberry Pi Imager
  2. Boot systému
  3. SSH pripojenie: ssh revia@<ip-address>

3. Inštalácia LCD drivera (15 min + reboot)​

  1. git clone https://github.com/waveshare/LCD-show.git
  2. cd LCD-show/
  3. chmod +x LCD4-show
  4. sudo ./LCD4-show
  5. Automatický reboot

4. Konfigurácia X11 (10 min)​

  1. sudo nano /boot/firmware/config.txt - pridať LCD konfiguráciu
  2. Vytvorenie Xorg configs v /etc/X11/xorg.conf.d/
  3. sudo apt-get install xserver-xorg-video-fbdev

5. Inštalácia dependencií (10 min)​

  1. sudo apt-get update
  2. sudo apt-get install python3-tk python3-pil python3-requests git
  3. pip3 install requests pillow --break-system-packages

6. Setup GitHub (15 min)​

  1. ssh-keygen -t ed25519 -C "weather-pi"
  2. cat ~/.ssh/id_ed25519.pub - kopírovať
  3. Pridať SSH key do GitHub (Settings → SSH keys)
  4. Test: ssh -T git@github.com

7. Vytvorenie systemd services (20 min)​

  1. Vytvorenie /etc/systemd/system/startx@revia.service
  2. Vytvorenie /etc/systemd/system/weather-display.service
  3. sudo systemctl enable startx@revia
  4. sudo systemctl enable weather-display

8. Finálny reboot a test (10 min)​

  1. sudo reboot
  2. Vizuálna kontrola displeja
  3. Test touchscreen navigácie
  4. Overenie auto-update funkcionality
  5. Kontrola logov: journalctl -u weather-display.service
  6. ✅ Deployment dokončený

System Monitoring​

Health Checks​

CheckCommandFrekvencia
Service Statussystemctl status weather-display.serviceTýždenne
Display OutputVizuálna inšpekciaDenne
Network Connectivityping -c 3 8.8.8.8Denne
API Responsescurl api.open-meteo.comTýždenne
Disk Spacedf -hMesačne

Logging​

Log TypeLocationPurpose
Systemd Journaljournalctl -u weather-display.serviceApplication logs
Update Log~/weather-app/update.logGit pull history
Xorg Logs~/.local/share/xorg/Xorg.0.logDisplay server logs

Maintenance Tasks​

TaskFrekvenciaCommand
Auto-update from GitHubDenneAutomatické pri boote
Weather data refreshKaždých 10 minAutomatické v aplikácii
Check service logsTýždennejournalctl -u weather-display.service
Verify display functionTýždenneVizuálna kontrola
OS package updatesMesačnesudo apt update && sudo apt upgrade
Review error logsMesačnejournalctl -p err
SD card health checkKvartálnesudo smartctl -a /dev/mmcblk0
Backup configurationKvartálneZáloha konfig súborov

Maintenance Schedule​

Časové obdobieAktivitaStatus
DenneAuto-update from GitHub✅ Automatické
DenneWeather data refresh✅ Automatické
TýždenneCheck service logs📋 Manuálne
TýždenneVerify display function📋 Manuálne
MesačneOS package updates📋 Manuálne
MesačneReview error logs📋 Manuálne
KvartálneSD card health check📋 Manuálne
KvartálneBackup configuration📋 Manuálne

09-Change Management​

Version Control Strategy​

Branch Strategy:

  • main - Production-ready code
  • feature/* - Nové funkcie
  • bugfix/* - Opravy chýb

Git Workflow:

v0.1.0 (Initial) → v0.2.0 (Forecast) → feature/graphs → v0.3.0 (Merge)
→ v0.4.0 (Navigation) → feature/location → v0.5.0 (Merge)
→ v0.6.0 (Layout) → v1.0.0 (Production)

Release History​

VersionDateChangesStatus
v0.1.02025-01-XXInitial setup, basic weather display✅ Released
v0.2.02025-01-XXAdded 5-day forecast✅ Released
v0.3.02025-01-XXAdded temperature & humidity graphs✅ Released
v0.4.02025-01-XXAuto-rotate pages, touch navigation✅ Released
v0.5.02025-01-XXLocation detection + manual search✅ Released
v0.6.02025-01-XXCombined weather + forecast page✅ Released
v1.0.02025-01-15Production ready release🟡 Current
v1.1.0TBDFix emoji icons, offline mode📅 Planned

Future Roadmap​

Phase 1 - Current (v1.0) ✅​

  • ✅ Základná funkcionalita
  • ✅ Auto-rotate stránok (10s)
  • ✅ Location detection (IP-based)
  • ✅ GitHub auto-update

Phase 2 - Q1 2025 (v1.1-1.2) 📅​

  • 🟡 Fix emoji ikony → ASCII fallback
  • 🟡 Offline mód → Cache posledných dát
  • 📋 BME280 sensor integration → Lokálne merania
  • 📋 Local vs API comparison → Porovnanie dát

Phase 3 - Q2 2025 (v1.3-1.4) 📅​

  • 📋 Historical data → SQLite databáza
  • 📋 Weekly/monthly trends → Dlhodobé grafy
  • 📋 Multiple locations → Swipe medzi mestami
  • 📋 Weather alerts → Push notifikácie
  • 📋 Sun/Moon data → Východ/západ slnka

Phase 4 - Q3 2025 (v2.0) 🎯​

  • 📋 Web interface → Remote konfigurácia
  • 📋 MQTT/Home Assistant → Smart home integrácia
  • 📋 Air quality index → Kvalita ovzdušia
  • 📋 Pollen count → Alergény
  • 📋 Custom enclosure → 3D tlačený obal

Enhancement Backlog Priority​

Phase 2: Improvements (Priorita: HIGH)

  1. Fix Emoji Icons - ASCII fallback ⚡
  2. Offline Mode - Cache last data ⚡
  3. BME280 Sensor - Local measurements 🔧
  4. Comparison View - API vs Sensor 🔧

Phase 3: Features (Priorita: MEDIUM) 5. SQLite Database - Historical storage 📊 6. Trend Analysis - Weekly/Monthly graphs 📊 7. Multi-location - Swipe between cities 🌍 8. Weather Alerts - Push notifications 🔔 9. Sun/Moon Data - Sunrise/sunset times ☀️🌙

Phase 4: Integration (Priorita: LOW) 10. Web Dashboard - Remote config 🌐 11. MQTT Support - Home Assistant 🏠 12. AQI Display - Air quality index 💨 13. Pollen Count - Allergy info 🌸 14. 3D Printed Case - Custom enclosure 📦

Záverečné zhodnotenie​

Obrazovka1 Obrazovka2 Obrazovka3

Splnené ciele​

Hardware Integration:

  • ✅ Raspberry Pi Zero 2 W
  • ✅ Waveshare 4inch LCD
  • ✅ Touchscreen calibrated
  • ✅ Auto-boot to GUI

Software Implementation:

  • ✅ Python + Tkinter
  • ✅ Open-Meteo API
  • ✅ GitHub auto-update
  • ✅ Multi-page UI
  • ✅ Virtual keyboard

User Experience:

  • ✅ Intuitive navigation
  • ✅ Auto-rotate pages
  • ✅ Manual controls
  • ✅ Location detection
  • ✅ City search

System Reliability:

  • ✅ Systemd services
  • ✅ Auto-restart
  • ✅ Error handling
  • ✅ Boot time 45s

Úspešne implementované funkcie​

✅ Hardware Setup

  • Raspberry Pi Zero 2 W plne funkčný
  • Waveshare 4" LCD (480x320) s SPI komunikáciou
  • Kalibrovaný touchscreen s inverznou osou X/Y
  • Automatický štart do X11 GUI bez login promptu

✅ Core Features

  • Zobrazenie aktuálneho počasia (teplota, vlhkosť, vietor, tlak)
  • 5-dňová predpoveď s max/min teplotami a pravdepodobnosťou dažďa
  • Grafy teploty a vlhkosti za posledných 24 hodín
  • Automatická detekcia polohy cez IP geolokáciu
  • Manuálne vyhľadávanie miest s fullscreen klávesnicou

✅ User Interface

  • 2 hlavné stránky s automatickým rotovaním každých 10 sekúnd
  • Touchscreen navigácia pomocou tlačidiel (◀ ▶ 🔍)
  • Virtuálna QWERTY klávesnica s číslicami
  • Responzívne ovládanie (< 100ms reakcia)
  • Optimalizovaný layout pre 480x320px displej

✅ System Architecture

  • GitHub auto-update pri každom štarte
  • Systemd services pre automatický štart
  • Pravidelná aktualizácia počasia každých 10 minút
  • Graceful restart pri páde aplikácie
  • Nízka spotreba energie (~1.5W)

Nedokončené úlohy​

⚠️ Fyzický obal

  • Stav: Nerealizované
  • Dôvod: Časové obmedzenie projektu
  • Dopad: Displej a Raspberry Pi sú exponované, nie sú chránené pred poškodením
  • Riešenie:
    • Dočasné: Použitie existujúceho obalu alebo kartónovej krabice
    • Dlhodobé: Návrh a 3D tlač custom obalu v Phase 4

⚠️ Emoji ikony

  • Stav: Čiastočne funkčné
  • Problém: Niektoré emoji sa zobrazujú ako štvorčeky kvôli chýbajúcim fontom
  • Priorita: LOW
  • Fix ready: Nahradenie ASCII/Unicode symbolmi pripravené

⚠️ Offline mode

  • Stav: Chýba
  • Problém: Pri výpadku WiFi aplikácia nemá graceful degradation
  • Priorita: MEDIUM
  • Plánované: Phase 2 (v1.1)

Technické metriky projektu​

Code Statistics​

MetrikaHodnota
Python Lines450+
Functions25+
Classes1 main class
API Integrations3

Performance​

MetrikaHodnotaStatus
Boot time45s✅ Target: <60s
Memory usage80MB✅ Low
CPU idle5-15%✅ Efficient
CPU active30-40%✅ Acceptable
Power consumption1.5W✅ Very low

Reliability​

MetrikaHodnotaStatus
Uptime99.9%✅ Excellent
API Success rate99%✅ Reliable
Auto-restartYes✅ Enabled
Error handlingPartial⚠️ Needs improvement

User Experience​

MetrikaHodnotaStatus
Pages2✅ Optimized
Auto-rotate interval10s✅ Good pace
Touch response<200ms✅ Responsive
UI response<100ms✅ Fast

Naučené lekcie​

Čo fungovalo dobre:

  1. Open-source API - Open-Meteo poskytuje unlimited requests a kvalitné dáta
  2. GitHub auto-update - Eliminuje potrebu fyzického prístupu pre updates
  3. Systemd services - Robustný spôsob pre auto-start a watchdog
  4. Tkinter GUI - Jednoduchý framework, ideálny pre embedded displeje
  5. IP geolocation - Automatická detekcia polohy funguje spoľahlivo

Výzvy a riešenia:

  1. LCD driver compatibility - 64-bit OS vyžadovalo manuálnu konfiguráciu framebuffer
  2. Touchscreen calibration - Potrebné inverzia osí X/Y pre správnu funkciu
  3. Font rendering - Emoji ikony nefungujú, nutné použiť ASCII alternatívy
  4. X11 permissions - Potrebné správne nastavenie DISPLAY a XAUTHORITY
  5. Boot timing - Sleep 10s v systemd service pre stabilný štart

Porovnanie s podobnými projektmi​

FeatureTento projektMagic Mirror²Weather PiKomerčné stanice
Cena~50-70€~80-150€~40-60€100-300€
Displej4" touchscreenVeľký monitorMalý LCD/OLEDProprietary
Open-source✅ Áno✅ Áno✅ Áno❌ Nie
API limity✅ Žiadne⚠️ Závisí⚠️ Závisí❌ Platené
Auto-update✅ GitHub✅ NPM❌ Nie✅ OTA
Touch UI✅ Plná podpora⚠️ Limitovaná❌ Nie✅ Áno
Customizácia✅ Python kód✅ JS moduly⚠️ Config❌ Nie
Offline mód⚠️ Chýba✅ Cache❌ Nie✅ Áno

Finálne hodnotenie​

Plusy:

  • ✅ Plne funkčná počasová stanica s profesionálnym UI
  • ✅ Automatická aktualizácia z GitHub repozitára
  • ✅ Nízke náklady (~50-70€) a žiadne mesačné poplatky
  • ✅ Open-source riešenie s možnosťou customizácie
  • ✅ Spoľahlivý embedded systém s auto-restart
  • ✅ Jednoduché ovládanie cez touchscreen
  • ✅ Kvalitné dáta z Open-Meteo API

Mínusy:

  • ⚠️ Chýbajúci fyzický obal (ochranný kryt)
  • ⚠️ Niektoré emoji ikony nefungujú
  • ⚠️ Žiadny offline mód pri výpadku WiFi
  • ⚠️ Limitovaný error handling pre API failures

Odporúčania pre budúcnosť:

  1. Priorita 1: Vytvoriť 3D tlačený obal pre ochranu hardvéru
  2. Priorita 2: Implementovať offline mód s cachovaním posledných dát
  3. Priorita 3: Pridať BME280 senzor pre lokálne merania
  4. Priorita 4: Rozšíriť o historické dáta a trendy

Záverečné slovo​

Projekt Raspberry Pi Weather Station úspešne demonštruje možnosti embedded systémov a open-source ekosystému. Napriek tomu, že niektoré funkcie neboli dokončené (fyzický obal, offline mód), systém poskytuje plne funkčné a spoľahlivé riešenie pre zobrazovanie meteorologických údajov.

Najväčšou pridanou hodnotou projektu je:

  • Nezávislosť od komerčných služieb a mesačných poplatkov
  • Flexibilita vďaka open-source prístupu a GitHub auto-update
  • Vzdelávací potenciál pre prácu s embedded systémami, Python GUI, a API integráciou
  • Rozšíriteľnosť o vlastné senzory, integrácie, a funkcie

Projekt je pripravený na produkčné nasadenie s vedomím, že budúce verzie môžu pridať chýbajúce funkcie a vylepšenia.


Repository: https://github.com/SpiKee49/weather-pi

🏠 Domov · ⬅️ Nahor