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