- Python 98.8%
- Dockerfile 0.7%
- Shell 0.5%
| config | ||
| deploy/platform | ||
| docs | ||
| prompts | ||
| scripts | ||
| src/pogodowa_babcia | ||
| tests | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yaml | ||
| Dockerfile | ||
| pyproject.toml | ||
| README.md | ||
| uv.lock | ||
Pogodowa Babcia
Mała lokalna usługa pogodowa dla Iskry/OpenClaw. Nie próbuje być własnym IMGW.
Pobiera dane, normalizuje je, liczy proste ryzyko i wysyła gotowy komunikat do
istniejącego kanału ntfy albo webhooka.
MVP
Pierwszy etap robi tylko warstwę pogodową:
- IMGW SYNOP dla Warszawy (
12375) - IMGW ostrzeżenia meteo filtrowane po TERYT Warszawy i okolic
- Open-Meteo jako prognoza godzinowa
- proste decyzje: deszcz w najbliższych 2h, porywy wiatru, oficjalne ostrzeżenia
- pamięć decyzji: wykrywanie pogorszenia/poprawy score'u opadowego między przebiegami
- REST API dla Iskry/OpenClaw
- opcjonalne
ntfyi webhook, domyślnie wyłączone - lokalny cytat dnia do porannego briefingu
- lokalny kontekst dnia: wschód/zachód słońca, imieniny i święta z YAML
RainViewer uczestniczy w decyzjach jako lekki sampling radarowy: Warszawa plus kilka punktów na zachód od miasta, liczony na kilku ostatnich klatkach. To nadal nie jest pełny nowcasting, ale daje sygnał "pada teraz", "opad stoi przed miastem" i prosty trend ruchu.
Lokalny start
cp .env.example .env
uv sync --extra dev
WEATHER_BABCIA_SCHEDULER=0 uv run pogodowa-babcia
Endpointy:
GET /healthzGET /snapshotGET /briefing/todayGET /alerts/activePOST /run/fastPOST /run/hourlyPOST /run/morningPOST /notify/test
Kanały wyjściowe
ntfy:
WEATHER_BABCIA_NTFY_URL=https://ntfy.pdurlej.com/<topic>
WEATHER_BABCIA_NTFY_TOKEN=
Webhook JSON:
WEATHER_BABCIA_WEBHOOK_URL=http://127.0.0.1:8787/example
WEATHER_BABCIA_WEBHOOK_TOKEN=
Payload webhooka jest stabilny i ma schematy:
pogodowa_babcia.alert.v1pogodowa_babcia.briefing.v1
To jest celowo bezpieczniejsze niż dawanie OpenClaw dostępu do katalogu usługi albo do shell commands. Iskra dostaje gotowy tekst i JSON, nie uprawnienia do wnętrzności.
Cytat dnia
Kolejność źródeł:
config/daily_quotes.yamldla konkretnej daty (2026-05-17) albo dnia roku (05-17).- Wikicytaty
Wikicytaty:Cytat_dnia, cache'owane w SQLite raz dziennie. - Lokalny fallback z
daily_quotes.yaml.
Plik lokalny jest przygotowany pod prywatne użycie kupionej zrywki Loesje 2026/2027, ale projekt nie scrapuje i nie bundluje treści kalendarza.
Babciowy kontekst dnia
config/namedays.yaml i config/holidays.yaml działają tak samo: najpierw
dokładna data (2026-05-17), potem dzień roku (05-17). Wschód i zachód
słońca liczone są lokalnie przez astral, bez zewnętrznego API.
To celowo jest nudne i lokalne. Dla domowego asystenta stabilniejsze jest mieć małą tabelę, którą można poprawić ręcznie, niż poranny briefing zależny od kolejnego losowego endpointu.
Docker
cp .env.example .env
docker compose up -d --build
curl http://127.0.0.1:8787/healthz
Kontener jest spięty konserwatywnie: lokalny port, read_only, tmpfs /tmp,
brak capabilities.
Następne kroki
- Babciowe dodatki: uzupełnić pełną tabelę imienin i dodać ruchome święta.
- Integracja docelowa z Iskrą: istniejący ntfy/webhook jako wejście, bez bezpośredniego grzebania w Signal/OpenClaw runtime.
RS2000 / platform handoff
Kontrakt wdrożeniowy dla pdurlej/platform jest w
docs/rs2000-platform-contract.md. Gotowe szkice dla platformowego Codexa są w
deploy/platform/, a prompt przekazania w
prompts/codex-platform-integrate-pogodowa-babcia-2026-05-19.md.