Automatyczny asystent domowych płatności: pobiera kwoty i terminy z kilku serwisów, aktualizuje skoroszyt Excel w Dropbox, przypomina o zbliżających się terminach (Pushover), wysyła podsumowanie e‑mailem i opcjonalnie generuje prostą analitykę.
- Zapis/odczyt skoroszytu Excel (
Oplaty.xlsm) z/do Dropbox. - Integracje: eKartoteka (czynsz), Enea (prąd), iPrzedszkole, nju (faktury tel.).
- Przypomnienia Pushover o zaległych i pilnych płatnościach (≤2 dni).
- E‑mail (Gmail) z dziennym podsumowaniem i listą najbliższych płatności.
- Prosty moduł Analytics generujący wykres PNG bieżącego miesiąca.
- Uruchamianie etapów w łańcuchu „Handlerów” (Chain of Responsibility).
- Skonfiguruj plik
config/config.yaml(możesz skopiować zconfig/config-example.yaml). - Utwórz pliki z sekretami w katalogu
secrets/(patrz lista niżej). - Uruchom usługę:
docker compose up --buildDomyślna komenda startowa to: python main.py --enable-all.
Pliki w katalogu secrets/ mapowane jako Docker secrets:
dropbox_apikeypushover_apikeypushover_userekartoteka_passwordenea_passwordprzedszkole_passwordgmail_passwordnju_<NUMER_TELEFONU>_password(dla każdego konta Nju zdefiniowanego w konfiguracji)
Compose już zawiera przykładowe wpisy w sekcji secrets: oraz ich podpięcie w services.findog.secrets.
Konfiguracja odbywa się przez YAML (plik) + sekrety Dockera + zmienne środowiskowe.
- Ścieżka do pliku konfiguracyjnego: zmienna
CONFIG_PATH(domyślnie/config/config.yaml). - Dane oraz logi:
DATA_DIR(domyślnie/data). - Dla deweloperki można nadpisać klucz Dropbox przez ENV: ustaw
ALLOW_ENV_DROPBOX=1orazDROPBOX_API_KEY=....
Przykład (fragment) config/config.yaml:
excel_local_path: "/data/Oplaty.xlsm"
excel_dropbox_path: "/Oplaty.xlsm"
monitored_sheets:
"Ania & Mario": ["C","I","O","R","U","X","AD","AG","AJ","AM","AP"]
"Mama": ["C","I"]
# loginy (hasła dostarczane przez Docker secrets)
ekartoteka: { username: "user@server.com" }
enea: { username: "user@server.com" }
przedszkole: { kindergarten: "p_city", username: "rodzic_123456" }
# mapowanie, gdzie w Excelu aktualizować wartości
ekartoteka_sheet: ["Ania & Mario", "Mieszkanie czynsz"]
przedszkole_sheet: ["Ania & Mario", "Przedszkole Geroge"]
enea_sheet: ["Ania & Mario", "Prąd Enea"]
# powiadomienia mailowe
gmail_user: "noreply@server.com"
recipients: ["u1@server.com","u2@server.com"]
# wiele kont Nju
nju_credentials:
- { phone: "601200300", sheet: "Greg", cat: "Telefon a" }
- { phone: "602200300", sheet: "Joanna", cat: "Telefon b" }Wartości z YAML można nadpisywać per‑klucz przez zmienne środowiskowe Pydantic, np.:
E_KARTOTEKA__USERNAME=inna_nazwa.
Aplikacja korzysta z Click i pozwala włączać poszczególne etapy/integacje.
Najczęstsze tryby:
--enable-all— pełny przebieg: Dropbox + API + powiadomienia + analytics.--enable-dropbox— praca na pliku Excel (pobierz → przetwórz → zapisz → wyślij do Dropbox).--enable-notification— Pushover + e‑mail.--enable-analytics— wygeneruj wykresy/HTML podsumowania.--enable-api-alllub--enable-api <nazwa>— włącz wszystkie lub wybrane integracje (ekartoteka,iprzedszkole,enea,nju).--disable-commit— nie odsyłaj pliku z powrotem do Dropbox (zapis tylko lokalny).
Przykłady:
# Pełny przebieg (również domyślne w docker-compose)
python main.py --enable-all
# Tylko integracje + logi, bez dotykania Excela
python main.py --enable-api-all --enable-notification
# Debug/deweloperka: działaj lokalnie na pliku i nie commituj do Dropbox
python main.py --enable-dropbox --disable-commit- Wzorzec „Chain of Responsibility” — moduły jako Handlery:
FileDownloadHandler→FileProcessHandler→ integracje (eKartoteka,Enea,iPrzedszkole,nju) →NotifyOngoingHandler→MailingHandler→AnalyticsHandler→SaveFileLocallyHandler→FileCommitHandler.
- Centralny kontekst (
HandlerContext) trzyma klienów (Dropbox, Pushover), skonfigurowane ścieżki iPaymentBook. PaymentBookmapuje skoroszyt na kategorie i płatności w bieżącym miesiącu, aktualizuje wartości w odpowiednich kolumnach.
Logi znajdziesz w DATA_DIR/logs/findog.log. Dodatkowe artefakty:
/data/output.png(Analytics),/data/output_mail.html(podgląd e‑maila, gdy wysyłka jest wyłączona).
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
export CONFIG_PATH="$PWD/config/config.yaml"
export DATA_DIR="$PWD/data"
# (opcjonalnie podczas dev)
export ALLOW_ENV_DROPBOX=1
export DROPBOX_API_KEY="..."
python main.py --enable-allUwaga: loginy/hasła najlepiej wstrzykiwać jako sekrety Dockera. W trybie lokalnym niektóre hasła trzeba wpisać w plikach w secrets/ lub dodać własną obsługę ENV.
- Podgląd wiadomości e‑mail: plik HTML generowany przez moduł poczty (jeśli włączony i w trybie podglądu) zapisywany jest jako
/data/output_mail.html. - Wykres bieżącego miesiąca:
/data/output.pngpo uruchomieniu z flagą--enable-analytics.
Wskazówka: do wygenerowania artefaktów lokalnie bez odsyłania pliku do Dropbox możesz użyć np.:
python main.py --enable-dropbox --enable-api-all --enable-analytics --disable-commitLogo projektu:
- „eKartoteka” — moduł i usługa do obsługi czynszu/HOA (w kodzie:
EkartotekaHandler). - „iPrzedszkole” — integracja z systemem iPrzedszkole.
- „nju” — integracja z nju (rachunki za telefon).
- „Analytics” — prosty moduł generowania wykresów PNG.
- Nie commituj żadnych danych w katalogu
secrets/(repo zawiera.gitignore). - Przechowuj hasła jako Docker secrets. Nigdy nie zapisuj ich w YAML/README.
- Uruchamiaj z minimalnym zakresem uprawnień klucza Dropbox.
- Dbaj o wersjonowanie pliku Excel (kopie w Dropbox).
- Styl/logowanie:
loguru. - Format/analiza: w repo jest workflow Pylint (GitHub Actions).
- Testy: dostępne proste testy jednostkowe dla handlerów (
tests/). Do uruchomienia lokalnie wymaganypytest(nie jest wrequirements.txt).
pip install pytest
pytest -qMasz pytania lub chcesz rozbudować README (np. o zrzuty ekranu, przykład skoroszytu)? Otwórz issue lub PR.
