Web-App für Landwirt:Innen: aktuelle Wetterdaten, 3-Tage-Prognose, Niederschlagsradar, Wind & Böen, Mais-Gesundheitsindikator
- Dashboard mit Widgets: Aktuelles Wetter, 3-Tage-Proggnose, Wind & Böen, Niederschlagsradar, Mais-Gesundheit
- Drag & Drop: (react-grid-layout) + Layout-Speicherung pro User
- Live-Updates via PocketBase Realtime
- Dark/Light/System - Theme + Lokalisierung Deutsch/Englisch umschaltbar
- Mais-Indikator: Wasserbilanz über Fenster 'window_days' (ET nach Hargreaves, Kc-Kurve für Mais)
Pocketbase Login: https://141.5.106.126.sslip.io/pb/_/#/login
Website: https://141.5.106.126.sslip.io/login
Username: testUser@example.com PW: testPassword
PB-API Healthcheck: https://141.5.106.126.sslip.io/pb/api/health
To check if active: PocketBase:
systemctl is-enabled pocketbase
systemctl is-active pocketbase
Cron:
systemctl is-active cron
landwetter-dev:
systemctl status landwetter-dev --no-pager
- Frontend: Next.js(React+TypeScript)
- Backend/DB: PocketBase (Auth, REST, Realtime, SQLite)
- Importer/Cron: Python-Skript 'scripts/dwd_sync.py' (holt DWD-Daten)
landwetter/
|-- app/# Next.js App
| |--src/
| | |--app/..(pages)
| | | |--legal/..(Impressum, Datenschutz, Barrierefreiheit)
| | |--components/..(Widgets,I18n,Theme)
| | |--lib/..(pb client, dashboardStore)
| |--.env.local # NEXT_PUBLIC_PB_URL=..
|-- pb/ # Pocketbase Daten(pb_data/)
|-- scripts/ Python Importer (DWD)
| |--dwd_sync.py
| |--run_dwd_sync.sh
| |--.venv/(virtualenv)
|--README.md
|--Bericht.md
Für Impressum, Datenschutz, Barrierefreiheit Hinweise bitte F11 drücken.
- Node 18+/20+
- Python 3.10+
- PocketBase Binary (oder Docker)
- Internetzugang für DWD-API
# Beispiel: lokaler Start (Binary)
./pocketbase serve --http 127.0.0.1:8090 --dir pb_data
# Admin UI: http://localhost:8090/_/
- In der Admin-UI -> users -> neuen Benutzer (E-Mail/Passwort) erstellen.
- (Für MVP ohne E-Mail-Verifikation.)
maize_indicator (Base)
- location_name(text, required=
- lat (number), lon(number
- window_days(number)
- water_balance__mm(number
- stress_level (select: ok|warnung|kritisch)
- plant_state(select: vital|gestresst|vertrocknet)
weather_snapshots (Base)
- station_id(text)
- lat (number), lon(number)
- ts (date, required)
- t2m_K(number), rr_mm(number), eto_mm(number)
- wind_ms(number), gust_kmh(number)
dashboards (Base)
- user (relation -> users, required, unique per user)
- layout_json (json), widgets_json(json, optional)
API Rules
- List/Viwe: @request.auth.id != ""
- Create/Update/delete:
- dashboards: user.id = @request.auth.id
- maize_indicator/wheather_snapshots: nur Import-User/Script
cd app
npm i
printf "NEXT_PUBLIC_PB_URL=http://localhost:8090\n" > .env.local
npm run dev
# http://localhost:3000
Login unter/login .
cd scripts
python3 -m venv .venv && source .venv/bin/activvate
pip install requests
Umgebung setzen:
export PB_URL=http://localhost:8090
export PB_USER_EMAIL='testUser@example.com'
export PB_USER_PASSWORD='testPassword'
export DWD_API=https://dwd.api.proxy.bund.dev
export DWD_STATION=10444
export SOWING_DATE=2025-05-01
export WINDOW_DAYS=7
export LAT=51.54
export LON=9.93
export LOCATION='Göttingen'
Dann:
python3 dwd_sync.py
crontab -e
# Beispielzeile:
0 */8 * * * /PFAD/landwetter/scripts/run_dwd_sync.sh >> /PFAD/landwetter/scripts/dwd.log 2>&1
Anmerkung: Es gibt keine Gewährleistung für die Richtigkeit der Aussagen, die der Mais-Indikator trifft. Ich bin ein Laie auf dem Gebiet und habe mich versucht bestmöglich einzulesen. Formeln hier entnommen: https://www.fao.org/4/x0490e/x0490e00.htm#Contents
-
ET₀ (Hargreaves–Samani, FAO-56)
$ET_0 = 0{,}0023 \cdot (T_{\text{mean}} + 17{,}8) \cdot \sqrt{,T_{\text{max}} - T_{\text{min}},} \cdot R_a$ -
Kulturkoeffizient
$K_c$ (Mais, grob):
0–30 Tage: 0,3 -> 30–60 Tage: linear bis 1,2 -> 60–110: 1,2 -> 110–140: 0,7 -> danach 0,5 -
$ET_c = K_c \cdot ET_0$ -
Wasserbilanz (Fenster
window_days
):
$\sum (Regen_{\text{Tag}} - ETc_{\text{Tag}})$ -
Schwellen:
ok (≥ 0 mm), warnung (≥ −30 mm), kritisch (< −30 mm)
-> Visualisierung als Pflanze (vital/gesund -> gestresst/vertrocknet).
- PB gesund?
curl http://localhost:8090/api/health
- DWD API: dwd.api.proxy.bund.dev
- Radar: RainViewer (eingebetteter Player, Link/Button "Get RainViewer" bleibt sichtbar). Bitte Nutzungsbedinungen beachten, für educational purpuses frei nutzbar