{"id":41706259,"url":"https://github.com/htomasz/vultron","last_synced_at":"2026-03-04T20:08:17.548Z","repository":{"id":334735824,"uuid":"1136372265","full_name":"htomasz/vultron","owner":"htomasz","description":"Eduvulcan for HA","archived":false,"fork":false,"pushed_at":"2026-03-01T21:19:23.000Z","size":1715,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-03-02T00:42:00.898Z","etag":null,"topics":["automation","bash","blueprints","eduvulcan","ha-addon","homeassistant","homeassistant-addons","javascript","lovelace","node-red","node-red-flow","python","security","selenium","yaml"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/htomasz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-17T15:19:10.000Z","updated_at":"2026-03-01T21:18:54.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/htomasz/vultron","commit_stats":null,"previous_names":["htomasz/vultron"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/htomasz/vultron","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/htomasz%2Fvultron","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/htomasz%2Fvultron/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/htomasz%2Fvultron/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/htomasz%2Fvultron/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/htomasz","download_url":"https://codeload.github.com/htomasz/vultron/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/htomasz%2Fvultron/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30091748,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T19:41:02.502Z","status":"ssl_error","status_checked_at":"2026-03-04T19:40:05.550Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","bash","blueprints","eduvulcan","ha-addon","homeassistant","homeassistant-addons","javascript","lovelace","node-red","node-red-flow","python","security","selenium","yaml"],"created_at":"2026-01-24T21:32:14.816Z","updated_at":"2026-03-04T20:08:17.536Z","avatar_url":"https://github.com/htomasz.png","language":"JavaScript","readme":"![GitHub release](https://img.shields.io/github/v/release/htomasz/vultron?style=flat-square)\n![GitHub last commit](https://img.shields.io/github/last-commit/htomasz/vultron?style=flat-square\u0026logo=git\u0026logoColor=white)\n![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg?style=flat-square)\n![GitHub license](https://img.shields.io/github/license/htomasz/vultron?style=flat-square)\n![GitHub issues](https://img.shields.io/github/issues/htomasz/vultron?style=flat-square)\n[![Add-on Repository](https://img.shields.io/badge/Home%20Assistant-Add--on%20Repository-blue?style=flat-square\u0026logo=home-assistant)](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Fhtomasz%2Fvultron)\n![Security Scan](https://img.shields.io/github/actions/workflow/status/htomasz/vultron/codeql.yml?branch=main\u0026label=CodeQL\u0026style=flat-square\u0026logo=github\u0026logoColor=white)\n![Python Security](https://img.shields.io/github/actions/workflow/status/htomasz/vultron/python-security.yml?branch=main\u0026label=Python%20Security\u0026style=flat-square\u0026logo=python\u0026logoColor=white)\n![Docker Linter](https://img.shields.io/github/actions/workflow/status/htomasz/vultron/hadolint.yml?branch=main\u0026label=Docker%20Linter\u0026style=flat-square\u0026logo=docker\u0026logoColor=white)\n![Vulnerability Scan](https://img.shields.io/github/actions/workflow/status/htomasz/vultron/trivy.yml?branch=main\u0026label=Trivy\u0026style=flat-square\u0026logo=aquasecurity\u0026logoColor=white)\n![Secret Scan](https://img.shields.io/github/actions/workflow/status/htomasz/vultron/gitleaks.yml?branch=main\u0026label=Secrets\u0026style=flat-square\u0026logo=keycdn\u0026logoColor=white)\n![Bash Scan](https://img.shields.io/github/actions/workflow/status/htomasz/vultron/bash-security.yml?branch=main\u0026label=Bash\u0026style=flat-square\u0026logo=gnu-bash\u0026logoColor=white)\n![Lint \u0026 Semgrep](https://img.shields.io/github/actions/workflow/status/htomasz/vultron/lint-semgrep.yml?branch=main\u0026label=Lint%20Semgrep\u0026style=flat-square\u0026logo=npm\u0026logoColor=white)\n![Python](https://img.shields.io/badge/Python-blue?style=flat-square\u0026logo=python\u0026logoColor=white)\n![Selenium](https://img.shields.io/badge/Selenium-43B02A?style=flat-square\u0026logo=selenium\u0026logoColor=white)\n![SQLite](https://img.shields.io/badge/SQLite-003B57?style=flat-square\u0026logo=sqlite\u0026logoColor=white)\n![Dependabot](https://img.shields.io/badge/Dependabot-enabled-blue?style=flat-square\u0026logo=dependabot\u0026logoColor=white)\n[![Open in VS Code](https://img.shields.io/badge/Open%20in-VS%20Code-007ACC?style=flat-square\u0026logo=visual-studio-code\u0026logoColor=white)](https://github.dev/htomasz/vultron)\n![Vultron](https://img.shields.io/badge/Vultron-Twój%20asystent%20w%20byciu%20zajebistym%20rodzicem-black?style=flat-square\u0026logo=darkreader\u0026logoColor=white)\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"icon.png\" alt=\"Vultron Logo\" width=\"500\"\u003e\n\u003cbr\u003e\u003cb\u003eUżywanie projektu jest jawnym łamaniem regulaminu EduVulcan.pl. \u003cbr\u003eNie rób tego.\u003c/b\u003e\n\u003c/p\u003e\n\n# Vultron (Oxgang)\n\n**Vultron** to **totalnieNIEzaawansowana** integracja Home Assistant z systemem dziennika elektronicznego **EduVulcan.pl**. Dodatek został zaprojektowany, aby dostarczać rodzicom i uczniom kluczowe informacje o edukacji w sposób przejrzysty, zautomatyzowany i bezpieczny.\n\n**Autor:** AI i Tomasz H. \\\n**Wersja:** 6.1 \\\n**Nazwa Kodowa:** Oxgang 🐂🏕️⚒️\n\n# 📖 Spis treści\n* [🚨 Achtung](#-achtung-achtung-)\n* [🧩 Changelog](#-changelog)\n* [✨ Główne Funkcje](#-główne-funkcje)\n* [🏗️ Architektura Systemu](#️-architektura-systemu)\n* [🚀 Instalacja](#-instalacja)\n* [⚙️ Konfiguracja](#️-konfiguracja)\n* [📊 Konfiguracja Kart Dashboardu](#-konfiguracja-kart-dashboardu)\n* [🔄 Automatyzacja](#-automatyzacja)\n* [🔍 Monitoring](#-monitoring)\n* [📸 Próbki/screenshoty](#-próbkiscreenshoty)\n* [🪲 Zgłaszanie błędów](#-zgłaszanie-błędów-i-bezpieczeństwo)\n* [🗑️ Odinstalowanie](#️-odinstalowanie)\n* [⚖️ Nota prawna](#️-nota-prawna)\n\n\n## 🚨🚨🚨 Achtung Achtung 🚨🚨🚨\n**Przy pierwszym uruchomieniu ZALECANE śledzenie zakładki LOGI**\nczy proces logowania przechodzi poprawnie.\n\n**W razie błędów skrypt SAMOCZYNNIE zabije kontener.**\n\n**Przed ponownym startem:**\nSprawdź ręcznie logowanie w oryginalnym dzienniku przez W W W.\n\n## 🧩 Changelog\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e6.1 - Smoot\u003c/b\u003e\u003c/summary\u003e\n\n- Nowości (New Features)\n    - Tryb testowy (test_mode): Dodano nowy przełącznik w konfiguracji dodatku (config.yaml). Jego włączenie całkowicie wyłącza nocne oraz weekendowe blokady harmonogramu. Skrypt w trybie testowym działa w trybie ciągłym, co ułatwia i przyspiesza testowanie wprowadzanych zmian.\n    - Informacja o klasie ucznia: Skrypt podczas logowania pobiera teraz z systemu Vulcan informację o oddziale/klasie ucznia (np. \"8a\", \"3c\") i zapisuje ją w wewnętrznej strukturze danych (przygotowanie bazy pod przyszłe, specyficzne dla roczników funkcje).\n    - Obsługa ocen literowych (Klasy 1-3): Karta Lovelace w Home Assistant w pełni wspiera teraz wyświetlanie ocen literowych. Dodano odpowiednie formatowanie kolorystyczne: oceny A/B (zielony), C/D (pomarańczowy), E/F (czerwony) oraz % (niebieski) i NB (szary).\n    - Frekwencja - Dodano możliwość filtrowania statystyk frekwencji według przedmiotu. Skrypt pobiera teraz listę przedmiotów z /api/Przedmioty oraz statystyki dla każdego z nich równolegle przez asyncio.gather. Zamiast pakować wszystko do jednej encji (limit 16 000 B), tworzone są osobne małe encje sensor.vultron_stats_{slug}_{przedmiot} — encja główna przechowuje tylko lekki spis przedmiotów. Przedmioty bez statystyk (podsumowanie=null) są cicho pomijane na poziomie DEBUG. Karta HA dostała dropdown do wyboru przedmiotu, który przełącza się między encjami lokalnie bez żadnych dodatkowych requestów.\n\n- Poprawki (Bug Fixes)\n    - Przeniesienie logiki obliczeniowej na Backend: Karta interfejsu (JavaScript) nie wylicza już średniej ocen samodzielnie. Od teraz pobiera ona gotową, precyzyjnie wyliczoną średnią prosto z atrybutów sensora dostarczanego przez skrypt Pythona.\n    - Inteligentne wyliczanie średniej: Naprawiono błąd, który powodował, że duże wartości liczbowe wpisane bez znaku procenta (np. punkty ze sprawdzianu: \"60\", \"68\") były błędnie wykrywane jako ocena celująca (6) i wliczane do średniej.\n    - Nowy algorytm wyliczania średniej jest wysoce rygorystyczny: szuka wyłącznie samodzielnych cyfr od 1 do 6 z opcjonalnymi znakami (+, -, lub .5).\n    - Wszystkie litery (A-F), statusy (NB, np, bz), wartości procentowe (%) oraz liczby dwu- i trzycyfrowe (np. \"60\", \"100\") są całkowicie ignorowane przy liczeniu średniej. Zignorowanie wartości przy średniej nie wpływa na jej pobieranie – każda wpisana ocena/punkty nadal wyświetla się na karcie ucznia w oryginalnej formie.\n    - Aktualizacja wszystkich kart vultron‑* po serii poprawek optymalizacyjnych i porządkowych.\n        - Zmiany techniczne:\n            - Dodano mechanizmy cache i early return ograniczające niepotrzebne rerendery (szczególnie w kartach stats, plan, numerek).\n            - Wprowadzono jednolite zarządzanie event listenerami z czyszczeniem zasobów w disconnectedCallback() – brak duplikatów i wycieków pamięci.\n            - Karta planu lekcji (vultron‑card.js) czyści teraz poprawnie aktywny timer linii czasu.\n            - Utrzymano pełną zgodność wizualną – brak zmian w wyglądzie, CSS i strukturze HTML.\n        - Efekt dla użytkownika:\n            - Szybsze działanie i mniejsze obciążenie interfejsu.\n            - Stabilne sortowanie i filtrowanie w kartach z listami.\n            - Brak znikających lub duplikujących się przycisków po aktualizacji stanu Home Assistanta.\n- Kron :D\n    - Dni Robocze: Zachowano działanie 40-60 min pomiędzy cyklami z cichą przerwą na sen od 01:00 do 05:59. Zawsze budzi się o 06:00.\n    - Soboty i Niedziele: Skrypt patrzy na to, o jakiej godzinie skończył procesowanie i \"budzi się\" dopiero punktualnie na sztywnych godzinach (z dokładnością do minuty).\n    - Przejście Dni: Jeśli skończy zadanie w niedzielę po 20:00, automatycznie uśpi się aż do poniedziałku do 06:00 rano.\n    - Odporność na Restart Skryptu: Jeśli wyłączysz i włączysz wtyczkę w Home Assistant np. w sobotę o godzinie 11:00, skrypt nie zacznie agresywnie pobierać danych od razu - rozpozna, że nie nadszedł jego czas i po cichu poczeka do 16:00 z pierwszym startem. Zależnie od godziny dostosuje się z automatu do grafiku.\n    - Poniedziałek – Piątek \\\n    | 00:00 – 05:59 | 🔴 Przerwa nocna (śpi do 06:00) \\\n    | 06:00 – 23:59 | 🟢 Aktywny — cykle co ~40–60 min (losowy interwał)\n    - Sobota \\\n    | 00:00 – 07:59 | 🔴 Czeka do 08:00 | \\\n    | 08:00 – 08:59 | 🟢 Cykl | \\\n    | 09:00 – 15:59 | 🔴 Czeka do 16:00 | \\\n    | 16:00 – 16:59 | 🟢 Cykl | \\\n    | 17:00 – 22:59 | 🔴 Czeka do 23:00 | \\\n    | 23:00 – 23:59 | 🟢 Cykl |\n    - Niedziela \\\n    | 00:00 – 07:59 | 🔴 Czeka do 08:00 | \\\n    | 08:00 – 08:59 | 🟢 Cykl | \\\n    | 09:00 – 11:59 | 🔴 Czeka do 12:00 | \\\n    | 12:00 – 12:59 | 🟢 Cykl | \\\n    | 13:00 – 19:59 | 🔴 Czeka do 20:00 | \\\n    | 20:00 – 20:59 | 🟢 Cykl | \\\n    | 21:00 – 23:59 | 🔴 Czeka do poniedziałku 06:00 | \\\n        - Skrypt sprawdza warunek godzinowy przez `now.hour not in (...)`, więc cykl może odpalić się w dowolnym momencie danej godziny, nie dokładnie o jej początku.\n        - W trybie `test_mode` wszystkie filtry czasowe są pomijane, a interwał między cyklami wynosi również ~40–60 min.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e6.0 - Oxgang 🐂🏕️⚒️\u003c/b\u003e\u003c/summary\u003e\n\n- Połączono wszystkie główne skrypty w jeden plik:\n    - `vultron/vultron.py`\n- Usunięto osobne pliki:\n    - `vul.py`, `vulf.py`, `vulm.py`, `vulo.py`, `vulos.py`, `vulp.py`, `vuls.py`\n    - `vuluw.py`, `vul-for-mess.py`, `vul-monitor.py`, `run.sh`, `setup_ui.py`\n- Asynchroniczność \"API\": Dane pobierane równolegle – synchronizacja trwa 1–2 s zamiast kilkunastu.\n    - Connection Pooling: Jedno stałe połączenie httpx.AsyncClient bez wielokrotnego handshake TLS.\n    - asyncio.Lock: Ochrona przed błędem database is locked.\n    - Timeouty: timeout=10s – koniec z zawieszaniem się skryptu.\n    - WAL dla SQLite: Bezpieczna praca bazy przy wysokiej współbieżności.\n- JSON zamiast Pickle: Eliminacja podatności RCE\n- State Mirroring: Dane odtwarzane z cache natychmiast po restarcie HA.\n- Delta-Sync: Aktualizacja tylko przy faktycznej zmianie danych.\n- Graceful Shutdown: Bezpieczne zamknięcie przez SIGTERM/SIGINT.\n- HTMLParser zamiast Regex: Precyzyjniejsze parsowanie HTML.\n- Rotacja logów: Max 5 × 1 MB.\n- Usunięcie requests: Cały HTTP ujednolicony na httpx.\n- Zunifikowanie wygladu i działania wszystkich kart.\n- Dodano poziomy debug: INFO, ERROR, DEBUG\n- Zaktualizowano automatyzacje\n- Gdzie wersja 5? No tam....\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e4.2 - 200kcal\u003c/b\u003e\u003c/summary\u003e\n\n- Skrypt Python (vulp.py) - Podział na 3 encje: Skrypt generuje teraz oddzielne sensory dla każdego dziecka:\n    - sensor.vultron_plan_[slug]_prev (Tydzień poprzedni)\n    - sensor.vultron_plan_[slug]_curr (Tydzień obecny)\n    - sensor.vultron_plan_[slug]_next (Tydzień przyszły)\n- Karta Lovelace (vultron-card.js)\n    - Dynamiczne przełączanie: Karta automatycznie wykrywa bazową nazwę encji i podmienia końcówki (_curr, _prev, _next) podczas klikania strzałek.\n    - Nawigacja: Wprowadzono blokadę nawigacji (zakres od -1 do +1 tygodnia), odpowiadający dostępnym danym.\n- Automatyzacje HA/Node-RED\n    - Multi-Trigger: Automatyzacje nasłuchują teraz jednocześnie na zmiany w tygodniu obecnym (_curr) i przyszłym (_next).\n- Blueprint\n    - Obsługa wielu encji: Nowa wersja pozwala wybrać listę sensorów (np. zaznaczenie obu tygodni naraz).\n    - Zwiększona stabilność: Dodano sprawdzanie istnienia stanów poprzednich (old_state), co eliminuje błędy po restarcie HA.\n- Karta Lovelace (vultron-grades-card.js)\n    - System Obliczania Średniej\n        - Widok **Przedmiotów**: Pod każdą nazwą przedmiotu pojawia się teraz automatycznie wyliczona średnia ocen (z dokładnością do dwóch miejsc po przecinku).\n        - Inteligentne Filtrowanie: Algorytm bierze pod uwagę wyłącznie oceny numeryczne. Wpisy typu \"np\" (nieprzygotowanie), \"bz\" (brak zadania) czy inne adnotacje tekstowe są pomijane w obliczeniach.\n        - Obsługa Ocen Złożonych:\n            - Plusy i Minusy: Średnia traktuje oceny typu 4+ czy 5- jako ich bazowe wartości (4 i 5).\n            - Wartości Dziesiętne: Pełne wsparcie dla ocen cząstkowych zapisanych zarówno z kropką, jak i przecinkiem (np. 4.5 lub 4,5 są liczone jako 4.5).\n        - Zakres Bezpieczeństwa: System uwzględnia w średniej tylko wartości w przedziale 1-6, co zapobiega błędom w przypadku nietypowych wag lub punktacji procentowej.\n    - Ulepszenia Interfejsu (UI)\n        - Sub-label Średniej: Średnia jest wyświetlana subtelnym drukiem (opacity 0.6) pod nazwą przedmiotu, aby nie zaburzać czytelności głównej listy.\n        - Poprawiona Kolorystyka: Udoskonalono metodę getGradeColor, dzięki czemu kolorowanie ocen (zielony dla 5-6, pomarańczowy dla 3-4, czerwony dla 1-2) działa teraz precyzyjniej przy ocenach z sufiksami.\n    - Stabilność i Logika\n        - Decimal Parser: Wprowadzono konwersję znaków regionalnych (zamiana , na .), co gwarantuje poprawność matematyczną w środowisku JavaScript.\n        - Dynamiczne Renderowanie: Średnia pojawia się tylko wtedy, gdy w danym przedmiocie znajduje się co najmniej jedna ocena kwalifikująca się do obliczeń.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e4.1 - 16KB\u003c/b\u003e\u003c/summary\u003e\n\n- **Oceny**\n    - Podział Ocen: Rozbito oceny na dwie niezależne encje: _p1 (Okres 1) oraz _p2 (Okres 2).\n    - vultron-grades-card (Oceny):\n        - Dodano zakładki OKRES 1 i OKRES 2 w nagłówku.\n        - Karta pozwala na płynne przełączanie widoku między semestrami.\n- **Wiadomości**\n    - Skrypt przesyła teraz do HA tylko 10 najnowszych wiadomości. Atrybut treść jest przesyłany wyłącznie dla wiadomości nieprzeczytanych. Wiadomości przeczytane zajmują teraz minimalną ilość miejsca (tylko meta-dane), a karta wyświetla informację o dostępie do pełnej treści w aplikacji EduVulcan.\n    - vultron-messages-card:\n        - Dodano licznik statystyk w nagłówku.\n        - Dodano ramkę informacyjną dla wiadomości archiwalnych (bez treści).\n- **Plan**\n    - Redukcja Planu: Skrócono zakres planu przesyłanego do HA do 21 dni (poprzedni + obecny tydzień + następny), co pozwoliło zejść z ~20KB\n    - vultron-card (Plan):\n        - Zunifikowano wygląd nagłówka (Kolor Cyan #00bcd4, ikony MDI).\n        - Reimplementowano znacznik \"TERAZ\" oraz podświetlenie aktywnej lekcji za pomocą box-shadow: inset (widoczne z każdej strony komórki).\n- **Automatyzacje**\n    - HA/Node_RED/Blueprints - zaktualizowano automatyzacje powiadamiania o ocenach\n- **Monitoring**\n    - (`vul-monitor.py`) sumuje rozmiary danych Vultron i raportuje szczegóły oraz ostrzeżenia, a alert włącza się, gdy dane encji przekroczą krytyczny limit 16 KB. Wszystkie przekroczenia progów WARNING(14000B) i CRITICAL(15500B) są logowane w konsoli [MONITOR].\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e4.0 - Furlong/fortnight\u003c/b\u003e\u003c/summary\u003e\n\n- Pełna migracja na SQLite: Dane są teraz trwałe, dostępne offline w bazie vultron.db.\n- Optymalizacja płynności UI: Ograniczono przesył danych do HA do obecnego i poprzedniego tygodnia, co wyeliminowało lagi w interfejsie.\n- Redukcja zasobów: Znacząco zmniejszono zużycie RAM przez Chromium (blokada obrazów/GPU) oraz wprowadzono bezpieczny zapis plików.\n- Najważniejsze: kolor w planie zgadza sie z resztą\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e3.4.2 - Siriustek\u003c/b\u003e\u003c/summary\u003e\n\n- Dodano 5 gotowych schematów automatyzacji dla HA (Oceny, Frekwencja, Plan, Uwagi, Wiadomości).\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e3.4.1 - Siriustek\u003c/b\u003e\u003c/summary\u003e\n\n- Implementacja zaawansowanego skanowania bezpieczeństwa (CodeQL, Bandit, Trivy, Hadolint).\n- Dodanie mechanizmu pre-commit i automatyzacji GitHub Actions.\n- Optymalizacja dokumentacji i integracja z \"My Home Assistant\"\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e3.2 - Siriustek\u003c/b\u003e\u003c/summary\u003e\n\n- Automatyczne odświeżanie kart (Cache-busting): Koniec z ręcznym czyszczeniem ciasteczek i cache'u przeglądarki po aktualizacji dodatku. System automatycznie wersjonuje pliki .js.\n- Auto-Discovery kart UI: Skrypt `setup_ui.py` sam wykrywa wszystkie pliki kart w folderze i rejestruje je w zasobach Lovelace.\n- Inteligentny start: Dodano pętlę \"retry\" przy łączeniu z API Home Assistant. Jeśli system startuje po awarii prądu, dodatek cierpliwie poczeka, aż rdzeń HA będzie gotowy.\n- Bezpieczna północ: Naprawiono błąd w skrypcie `run.sh`, który mógł powodować błędy w cyklu synchronizacji o godzinie 00:00.\n- Optymalizacja obrazu: Przebudowano `Dockerfile` (czyszczenie cache apk, instalacja przez requirements.txt), co owocuje mniejszym i stabilniejszym kontenerem.\n- Nowy system instalacji: Dodano obsługę przycisku \"My Home Assistant\" oraz uporządkowano dokumentację README.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e3.000009 - Muggeseggele\u003c/b\u003e\u003c/summary\u003e\n\n- Dodano acziwmenety :D\n    - vulos.py\n    - vultron-osiagniecia-card.js\n    - automatyzacji do niej nie będzie - nikt nie ma tak zajebistego dziecka\n- Chyba wszystko juz mamy :P\n- Wszędzie będzie Glassmorphism + ban\n- Koniec rozwoju (nieeee :D)\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e2.5 - Peninkulma\u003c/b\u003e\u003c/summary\u003e\n\n- Dodano wyświetlanie za co ocena (po najechaniu na ocenę)\n    - vulo.py - zmiany w zapisywaniu ocen\n    - Dostosowano karte vultron-grades-card.js\n    - Dostosowano automatyzacje Node-RED oraz HA do powiadomień o nowych ocenach\n    - Dodano Glassmorphism i artretyzm\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e2.4 - Iteru\u003c/b\u003e\u003c/summary\u003e\n\n- Zrefactoryzowano kod dla vulp.py oraz vulf.py\n- Zmieniono days=61 w vuls.py\n- Naprawiono \"zielonkę kreskę\" zeby nie konczyła sie na czwartku.\n- Dodano natywne automatyzacje dla HA\n- Poprawiono automatyzacje dla Node-RED\n- Zaktualizowane karte planu o ładne owalne cosie\n- Dodano awaryjne zabijanie kontenera w sytuacji ze `vul.py` logowanie do portalu nie przejdzie.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e2.3 - Sheppey\u003c/b\u003e\u003c/summary\u003e\n\n- Dodano automatyczne zabijanie kontenera w momencie gdy system wykryje ze nie moze sie zalogowac na strone.\n- Czytanie treści wiadomości.\n- Karta wiadomosci\n    - Po kliknieciu mozna zobaczyć (oraz skopiować :D) treść wiadomosci.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e2.2 - Saunakalja\u003c/b\u003e\u003c/summary\u003e\n\n- Karta terminarz. oceny\n    - Dodano limit\n- Karty *.js\n    - Próba ujednolicenia wyglądu\n- Dokumentacja\n    - Dodano zrzuty ekranów wszystkich kart.\n- Automatyzacja\n    - Dodano przykładowe automatyzacje w Node-Red (dział automatyzacja)\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e2.1 - Kenno\u003c/b\u003e\u003c/summary\u003e\n\n- Dodano do karty planu\n    - Dodano status frekwencji na danym przedmiocie w ciagu dnia (informacja pokaze sie tylko jak nauczyciel ją wprowadzi)\n    - Dodano pasek pokazujacy aktualna godzine\n    - Dodano inny kolor dla kolumny aktualnego dnia\n- Dodano funkcje pobierania frekwencji oraz karte frekwencji lovelace\n    - statystyka frekwencji od poczatku roku wraz z procentową reprezentacja\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e2.0 - Poronkusema\u003c/b\u003e\u003c/summary\u003e\n\n- Dodano chyba pełna obsługę multi-kinderpunkow\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e1.2.5 - नीलो चूहा\u003c/b\u003e\u003c/summary\u003e\n\n- Dodano sortowanie do kart\n    - karta Oceny - sortowanie (date|subject)\n    - karta Terminarz - sortowanie rosnąco, malejąco (desc,asc)\n    - karta Uwagi - sortowanie rosnąco, malejąco (desc,asc)\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e1.2.4 - Shǎbī de Tómǎsī\u003c/b\u003e\u003c/summary\u003e\n\n- Karta plan - dodano podział na 2 lekcje o tej samej godzinie. Grupy albo błąd eduvulcan\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e1.2.3 - Chokochoko Mfunguo\u003c/b\u003e\u003c/summary\u003e\n\n- Karta plan - dodano daty do aktualnego tygodnia, oraz dane nauczycieli danego przedmiotu\n- Karta oceny - dodano sortowanie\n- Karta wiadomosci - dodano sortowanie oraz limit\n- Karta uwagi - dodano sortowanie oraz limit\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e1.2.2 - EKEN 4K :P\u003c/b\u003e\u003c/summary\u003e\n\n- Dodano podswietlanie aktywnego dnia na dzienniku\n- Dodano sortowanie w zadaniach domowych/sprawdzianach\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e1.2.1 - Tin short\u003c/b\u003e\u003c/summary\u003e\n\n- Dodano informacje o \"zwolnieniu uczniów do domu\"\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e1.2 - Messenger Burger\u003c/b\u003e\u003c/summary\u003e\n\n- Dodano obsługę\n    - wiadomości i licznik nieprzeczytanych.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e1.1 - Feedback boobs\u003c/b\u003e\u003c/summary\u003e\n\n- Dodano obsługę\n    - uwag i pochwał\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e1.0 - First Contact\u003c/b\u003e\u003c/summary\u003e\n\n- Pierwsza wersja integracji z EduVulcan.\n- Dodano:\n    - plan lekcji\n    - oceny\n    - sprawdziany i zadania\n\n\u003c/details\u003e\n\n\n## ✨ Główne Funkcje\n\n- 👨‍👩‍👧‍👦 **Multi-Student Support:** Automatyczne wykrywanie wszystkich(wszystkie dzieci nasze są) dzieci przypisanych do konta rodzica. Każde dziecko otrzymuje własny zestaw sensorów (np. `adam_nowak`, `jan_kowalski`).\n- 📅 **Profesjonalny Plan Lekcji:** Klasyczny układ tabelaryczny z nieograniczoną nawigacją tygodniową (poprzedni / obecny / następny).\n- 📈 **Monitoring Ocen:** Śledzenie ocen cząstkowych z systemem powiadomień o nowych wpisach i zmianach.\n- 💬 **Uwagi i Pochwały:** Pełny wgląd w zachowanie ucznia z podziałem na wpisy pozytywne, negatywne oraz informacyjne.\n- ✉️ **Centrum Wiadomości:** Licznik wiadomości nieprzeczytanych oraz odczytanych wraz z listą ostatnich nadawców i tematów.\n- 🎒 **Terminarz Wydarzeń:** Podgląd sprawdzianów, kartkówek i zadań domowych z kolorystycznym rozróżnieniem priorytetów.\n- ✔️ **Frekwencja:** Szczegółowe informacje o frekwencji na zajęciach.\n- 🏆 **Osiągnięcia:** Szczegółowe informacje o osiągnięciach.\n- 📊 **Monitoring:** Monitoring 16KB.\n- 🛠️ **Zero-Click UI:** Dodatek automatycznie rejestruje wymagane karty JavaScript w zasobach Lovelace (Resources) przy każdym starcie.\n- 🕵️ **System Anty-Detekcyjny:**\n  - Zapytania do serwerów Vulcan wysyłane są w losowych odstępach (40-60 min).\n  - **Tryb Nocny:** Całkowite wstrzymanie aktywności między 01:00 a 05:59.\n- 📝 **Precyzyjne Logowanie:** Wszystkie zdarzenia logowane są z timestampem w formacie `[YYYY-MM-DD HH:MM:SS]`.\n\n\n## 🏗️ Architektura Systemu\n\nSystem opiera się na modularnej strukturze współpracujących funkcji:\n\n| Moduł | Role | Opis techniczny |\n| :--- | :--- | :--- |\n| `vultron.py` | 🔑 Logowanie \u003cbr\u003e📝 Oceny \u003cbr\u003e💬 Uwagi \u003cbr\u003e✉️ Wiadomości \u003cbr\u003e📅 Plan lekcji \u003cbr\u003e🎒 Zadania \u003cbr\u003e✔️ Frekwencja \u003cbr\u003e🏆 Osiągnięcia \u003cbr\u003e📊 Monitoring \u003cbr\u003e🎨 UI Setup \u003cbr\u003e⚙️ Orkiestrator | Główny silnik aplikacji. Obsługuje logowanie **Selenium Headless** (Panel Rodzica + Panel Wiadomości), ekstrakcję kluczy sesji (`app_key`), pobieranie ocen, uwag, wiadomości, planu lekcji, zadań, frekwencji i osiągnięć. Zarządza bazą **SQLite** (`vultron.db`), monitoringiem zasobów, automatyczną rejestracją kart w Home Assistant oraz pętlą czasową z mechanizmem anty-detekcji. |\n| `vultron-card.js` | 🎨 **Stylizacja** | Karta Lovelace — plan lekcji. |\n| `vultron-grades-card.js` | 🎨 **Stylizacja** | Karta Lovelace — oceny. |\n| `vultron-messages-card.js` | 🎨 **Stylizacja** | Karta Lovelace — wiadomości. |\n| `vultron-stats-card.js` | 🎨 **Stylizacja** | Karta Lovelace — frekwencja. |\n| `vultron-osiagniecia-card.js` | 🎨 **Stylizacja** | Karta Lovelace — osiągnięcia. |\n| `vultron-uwagi-card.js` | 🎨 **Stylizacja** | Karta Lovelace — uwagi i pochwały. |\n| `vultron-work-card.js` | 🎨 **Stylizacja** | Karta Lovelace — zadania domowe i sprawdziany. |\n| `automation/node-red` | 🔄 **Automatyzacje** | Przykładowe przepływy Node-RED. |\n| `automation/ha` | 🔄 **Automatyzacje** | Przykładowe natywne automatyzacje Home Assistant. |\n| `automation/blueprints` | 🔄 **Automatyzacje** | Przykładowe blueprinty automatyzacji. |\n| `lovelace/` | 🎨 **Stylizacja** | Przykładowe konfiguracje kart Lovelace. Zamiast *** wstaw osobe imie_nazwisko |\n| `vultron-szczesliwy-numerek-card.js` | 🎨 **Stylizacja** | Karta Lovelace — szczęśliwy numerek. |\n\n\n\n## 🚀 Instalacja\n\nVultron jest dostępny jako standardowe repozytorium Home Assistant.\n\n### Metoda 1: Automatyczna (Zalecana)\n\nKliknij poniższy przycisk, aby dodać repozytorium do swojego Home Assistanta jednym kliknięciem:\n\n[![Dodaj repozytorium do Home Assistant](https://my.home-assistant.io/badges/supervisor_add_addon_repository.svg)](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Fhtomasz%2Fvultron)\n\nPo dodaniu repozytorium, wejdź w **Ustawienia -\u003e Dodatki -\u003e Sklep z dodatkami**, wyszukaj **Vultron** i kliknij **Zainstaluj**.\n\n\u003cbr\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eMetoda 2: Ręczna / Deweloperska (SSH)\u003c/b\u003e\u003c/summary\u003e\n\n\u003cbr\u003e\n\nJeśli wolisz zainstalować dodatek ręcznie przez konsolę:\n\n1. Zainstaluj dodatek [SSH \u0026 Web Terminal](https://github.com/hassio-addons/addon-ssh).\n2. Po instalacji wyłącz **Protection mode** oraz włącz **Show in sidebar**.\n3. Wejdź w dodatek SSH i przejdź do folderu addons:\n```bash\ncd /addons\n```\n4. Sklonuj repozytorium:\n```bash\ngit clone https://github.com/htomasz/vultron.git\n```\n5. W interfejsie HA przejdź do **Ustawienia -\u003e Dodatki -\u003e Sklep z dodatkami**, kliknij trzy kropki (prawy górny róg) i wybierz **Odśwież**.\n\n\u003c/details\u003e\n\n---\n\n## ⚙️ Konfiguracja\n\nW zakładce **Konfiguracja** zainstalowanego dodatku wypełnij dane dostępowe:\n\n| Parametr | Opis | Przykład |\n| :--- | :--- | :--- |\n| `username` | Adres e-mail do EduVulcan | `rodzic@email.pl` |\n| `password` | Hasło do portalu | `TwojeTajneHasło` |\n| `Poziom logowania` | Określa szczegółowość logów w zakładce Logi. Domyślnie: info. | `info`,`debug`,`trace` (nie rozumiesz, nie zmieniaj)|\n| `Tryb testowy ` | Włączenie tej opcji sprawia, że skrypt całkowicie ignoruje nocne oraz weekendowe przerwy i pobiera dane w trybie ciągłym. Używaj tylko do testowania modyfikacji! | `true`,`false` (nie rozumiesz, nie zmieniaj) |\n\n1. Kliknij **Zapisz**.\n2. Kliknij **Uruchom**.\n\n**Ważne:** Przy pierwszym uruchomieniu zalecane jest śledzenie zakładki **Logi**, aby upewnić się, że proces logowania przebiega pomyślnie. Skrypt posiada zabezpieczenie, które w razie błędnego hasła automatycznie zatrzyma kontener, chroniąc Twoje konto przed blokadą.\n\n---\n\n### 💡 Ważna uwaga dotycząca kart UI i odświeżania\n\nZ powodu sposobu, w jaki Home Assistant oraz przeglądarki internetowe zarządzają plikami interfejsu (Lovelace), po instalacji dodatku lub jego aktualizacji możesz napotkać problemy z wyświetlaniem kart (np. błąd `Custom element doesn't exist` lub brak nowych funkcji).\n\nOto jak sobie z tym poradzić:\n\n#### 1. \"Zwykłe\" Odświeżanie vs \"Twarde\" Odświeżanie\nPrzeglądarki często przechowują starą wersję plików `.js`, aby przyspieszyć ładowanie strony. Jeśli karta nie wygląda tak, jak powinna:\n*   **Na komputerze:** Użyj kombinacji **`Ctrl + F5`** (Windows/Linux) lub **`Cmd + Shift + R`** (Mac). Wymusza to na przeglądarce ponowne pobranie plików z serwera Home Assistant zamiast czytania ich z dysku.\n*   **W aplikacji mobilnej:** Zamknij całkowicie aplikację Home Assistant i uruchom ją ponownie. Możesz również wejść w *Ustawienia -\u003e Aplikacja towarzysząca -\u003e Debugowanie -\u003e Wyczyść pamięć podręczną*.\n\n#### 2. Kiedy wyczyścić ciasteczka i dane strony?\nJeśli \"Twarde odświeżanie\" nie pomaga, może to oznaczać, że w pamięci podręcznej przeglądarki utknął błędny stan zasobów.\n*   W takim przypadku zalecane jest wyczyszczenie danych podręcznych dla adresu IP/domeny Twojego Home Assistanta.\n*   **Wskazówka:** Często najszybszym testem jest otwarcie panelu w **trybie Inkognito**. Jeśli tam karty działają poprawnie, oznacza to, że Twoja główna sesja przeglądarki wymaga czyszczenia cache.\n\n#### 3. Rejestracja Zasobów\nMimo że dodatek posiada moduł `setup_ui.py`, który automatycznie dodaje karty do zasobów, Home Assistant czasami potrzebuje chwili (lub restartu interfejsu), aby \"zauważyć\" nową ścieżkę `/local/vultron/vultron-*.js`. Jeśli po instalacji nie widzisz kart, przejdź do:\n`Ustawienia -\u003e Pulpity sterujące -\u003e Trzy kropki -\u003e Zasoby`\ni upewnij się, że wpisy dla Vultrona są obecne na liście.\n\n\n\n## 📊 Konfiguracja Kart Dashboardu\n\nPo uruchomieniu dodatku sensory zostaną utworzone automatycznie (np. `sensor.vultron_oceny_jan_kowalski`). Dodaj nową kartę (Manual Card) na swoim Dashboardzie, korzystając z poniższych wzorów:\n\n### 📅 Plan Lekcji (Tabelaryczny z nawigacją)\n```yaml\ntype: custom:vultron-card\nentity: sensor.vultron_plan_jan_kowalski_curr\nfreq_entity: sensor.vultron_freq_jan_kowalski\n```\n\n### 📈 Oceny Cząstkowe\n```yaml\ntype: custom:vultron-grades-card\nentity: sensor.vultron_oceny_jan_kowalski_p2 # tu sensor ma p1 okres 1 i p2 okres 2\ndefault_sort: date or subject\nlimit: 10   #0 - pokazuje wszystkie\n```\n\n### ✉️ Wiadomości (Licznik i Lista)\n```yaml\ntype: custom:vultron-messages-card\nentity: sensor.vultron_wiadomosci_jan_kowalski\nlimit: 10   #0 - pokazuje wszystkie\n```\n\n### 💬 Uwagi i Pochwały\n```yaml\ntype: custom:vultron-uwagi-card\nentity: sensor.vultron_uwagi_jan_kowalski\ndefault_sort: desc or asc\nlimit: 10   #0 - pokazuje wszystkie\n```\n\n### 🎒 Terminarz (Sprawdziany i Zadania)\n```yaml\ntype: custom:vultron-work-card\nentity: sensor.vultron_terminarz_jan_kowalski\ndefault_sort: desc or asc\nlimit: 10   #0 - pokazuje wszystkie\n```\n\n### ✔️  Frekwencja\n```yaml\ntype: custom:vultron-stats-card\nentity: sensor.vultron_stats_jan_kowalski\n```\n\n### 🍀 Szczęśliwy Numerek\n```yaml\ntype: custom:vultron-szczesliwy-numerek-card\nentity: sensor.vultron_szczesliwy_numerek_jan_kowalski\n```\n\n### 🏆 Osiągnięcia\n```yaml\ntype: custom:vultron-osiagniecia-card\nentity: sensor.vultron_osiagniecia_jan_kowalski\n```\nmozna też użyć\n```yaml\n- type: gauge\n  entity: sensor.vultron_stats_jan_kowalski\n  min: 0\n  max: 100\n  name: Frekwencja Jan Kowalski\n  needle: true\n  severity:\n    green: 80\n    yellow: 50\n    red: 0\n```\n## 🔍 Monitoring\nOblicza sumaryczny rozmiar atrybutów wszystkich encji sensor.vultron_* w Home Assistant (w bajtach). Tworzy szczegółowy raport z rozmiarem każdej encji. Generuje listę ostrzeżeń dla encji przekraczających próg ostrzegawczy (14 000 B). Cel: wczesne wykrycie dużych encji, które mogą spowolnić HA lub przekroczyć limity ~16 kB. Sensory tworzone automatycznie i automatycznie aktualizowane.\n\n```yaml\nsensor.vultron_system_monitor\nbinary_sensor.vultron_rozmiar_alert\n```\nAby zwizualizować wartosci monitoringu uzyj karty markdown dla sensor.vultron_system_monitor\n```yaml\ntype: markdown\ncontent: \u003e\n  \u003ctable\u003e {%- set szczegoly = state_attr('sensor.vultron_system_monitor',\n  'szczegoly') -%} {%- set last_update =\n  state_attr('sensor.vultron_system_monitor', 'last_update') -%} {%- if\n  szczegoly -%}\n    {%- for item in szczegoly.split(' | ') -%}\n      {%- set dane = item.split(': ') -%}\n      \u003ctr\u003e\n        \u003ctd style=\"padding: 0px 15px 0px 0px; border: none;\"\u003e{{ dane[0].replace('sensor.vultron_', '') }}\u003c/td\u003e\n        \u003ctd style=\"padding: 0px; border: none; text-align: right;\"\u003e\u003cb\u003e{{ dane[1].replace('B', ' B') }}\u003c/b\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n    {%- endfor -%}\n    \u003ctr\u003e\n      \u003ctd colspan=\"2\" style=\"padding: 4px 0px 0px 0px; border: none; font-size: 0.8em; color: gray;\"\u003e\n        🕐 {{ last_update }}\n      \u003c/td\u003e\n    \u003c/tr\u003e\n  {%- endif -%} \u003c/table\u003e\n\n  {% if is_state('binary_sensor.vultron_rozmiar_alert', 'on') -%} ### ⚠️\n  OSTRZEŻENIE! Encje przekraczające limit: {{\n  state_attr('sensor.vultron_system_monitor', 'ostrzezenia') }} {%- endif %}\n```\naby zwizualizowac alarm uzyj karty encji dla binary_sensor.vultron_rozmiar_alert\n```yaml\ntype: tile\nentity: binary_sensor.vultron_rozmiar_alert\nvertical: false\nfeatures_position: bottom\n```\n\n## 🔄 Automatyzacja\n\nIMPLEMENTUJ PO TYM JAK DODATEK WYKONA CAŁY JEDEN CYKL bo inaczej wszystko bedzie powiadomieniem.\n\n### 🔄 Automatyzacje (Blueprints)\n\nZapomnij o ręcznym kopiowaniu kodu YAML. Dzięki **Blueprints (Schematom)** możesz skonfigurować powiadomienia o ocenach, nieobecnościach czy wiadomościach w kilka sekund za pomocą prostego interfejsu graficznego.\n\n#### 🎓 Jak używać?\n1. Kliknij przycisk **Importuj** przy wybranym schemacie.\n2. Zatwierdź import w swojej instancji Home Assistant.\n3. Wybierz odpowiedni sensor Twojego dziecka (np. `sensor.vultron_oceny_jan_kowalski`).\n4. Wybierz telefon, na który mają przychodzić powiadomienia, i kliknij **Zapisz**.\n\n---\n\n#### 📦 Vultron Alert Pack\n\n| Funkcja | Opis | Import |\n| :--- | :--- | :---: |\n| **Nowe Oceny** | Zaawansowane powiadomienia o ocenach (obsługuje wiele ocen naraz). | [![Importuj Blueprint](https://my.home-assistant.io/badges/blueprint_import.svg)](https://my.home-assistant.io/redirect/blueprint_import/?blueprint_url=https%3A%2F%2Fgithub.com%2Fhtomasz%2Fvultron%2Fblob%2Fmain%2Fautomation%2Fblueprints%2Foceny.yaml) |\n| **Frekwencja** | Alert o nieobecnościach i spóźnieniach z nazwą przedmiotu z planu. | [![Importuj Blueprint](https://my.home-assistant.io/badges/blueprint_import.svg)](https://my.home-assistant.io/redirect/blueprint_import/?blueprint_url=https%3A%2F%2Fgithub.com%2Fhtomasz%2Fvultron%2Fblob%2Fmain%2Fautomation%2Fblueprints%2Ffrekwencja.yaml) |\n| **Zmiana Planu** | Powiadomienia o zastępstwach, odwołanych lekcjach i przeniesieniach. | [![Importuj Blueprint](https://my.home-assistant.io/badges/blueprint_import.svg)](https://my.home-assistant.io/redirect/blueprint_import/?blueprint_url=https%3A%2F%2Fgithub.com%2Fhtomasz%2Fvultron%2Fblob%2Fmain%2Fautomation%2Fblueprints%2Fplan.yaml) |\n| **Uwagi i Pochwały** | Informacja o zachowaniu dziecka z automatycznym doborem emoji (`🌟`/`⚠️`). | [![Importuj Blueprint](https://my.home-assistant.io/badges/blueprint_import.svg)](https://my.home-assistant.io/redirect/blueprint_import/?blueprint_url=https%3A%2F%2Fgithub.com%2Fhtomasz%2Fvultron%2Fblob%2Fmain%2Fautomation%2Fblueprints%2Fuwagi.yaml) |\n| **Wiadomości** | Powiadomienie o nowej wiadomości od nauczyciela lub dyrekcji. | [![Importuj Blueprint](https://my.home-assistant.io/badges/blueprint_import.svg)](https://my.home-assistant.io/redirect/blueprint_import/?blueprint_url=https%3A%2F%2Fgithub.com%2Fhtomasz%2Fvultron%2Fblob%2Fmain%2Fautomation%2Fblueprints%2Fwiadomosci.yaml) |\n\n---\n\n#### 💡 Personalizacja powiadomień\nW sekcji **Akcje** każdego Blueprintf-a możesz używać dynamicznych zmiennych, aby dostosować treść powiadomienia:\n\n*   **Oceny:** `{{ uczen }}`, `{{ przedmiot }}`, `{{ ocena }}`, `{{ opis }}`, `{{ data }}`\n*   **Frekwencja:** `{{ uczen }}`, `{{ wiadomosc }}`\n*   **Zmiana Planu:** `{{ uczen }}`, `{{ wiadomosc }}`\n*   **Uwagi:** `{{ uczen }}`, `{{ kategoria }}`, `{{ tresc }}`, `{{ autor }}`, `{{ wiadomosc }}`\n*   **Wiadomości:** `{{ uczen }}`, `{{ nadawca }}`, `{{ temat }}`, `{{ wiadomosc }}`\n\n*Przykład wiadomości:* `{{ uczen }} otrzymał ocenę {{ ocena }} z przedmiotu {{ przedmiot }}!`\n\n### 🛑 Node-RED\n\nDo działania wymagany jest [node-red-contrib-home-assistant-websocket](https://flows.nodered.org/node/node-red-contrib-home-assistant-websocket) dla Node-RED. (najprościej zainstalowac poprzez manage-palette)\n\nPonizsze automatyzacje instaluje się poprzez import i wklej :D\n\nW plikach\n\n- [plan.json](./automation/node-red/plan.json#L12-L16) - powiadomienia o zmianach w planie\n- [frekwencja.json](./automation/node-red/frekwencja.json#L12-L16) - powiadomienia o zmianach we frekwencji\n- [oceny.json](./automation/node-red/oceny.json#L12-L16) - powiadomienia o zmianach w ocenach\n- [terminarz.json](./automation/node-red/terminarz.json#L12-L16) - powiadomienia o zmianach w zdaniach domowych/sprawdzianach\n- [uwagi.json](./automation/node-red/uwagi.json#L12-L16) - powiadomienia o zmianach w uwagach\n- [wiadomosc.json](./automation/node-red/wiadomosci.json#L12-L16) - powiadomienia o nowych wiadomościach\n- [patusek.json](./automation/node-red/patusek.json#L12-L16) - wyjscie do \"odłącz prąd i zablokuj MAC\" :D\n\nodszukaj sekcję `entities` i zmień nazwę sensora.\n\n```json\n...\n[\n    {\n        \"id\": \"vultron_plan_trigger\",\n        \"type\": \"server-state-changed\",\n        \"z\": \"vultron_grades_flow\",\n        \"name\": \"Zmiana w Planie\",\n        \"server\": \"a8398b8a.edbcf8\",\n        \"version\": 6,\n        \"outputs\": 1,\n        \"exposeAsEntityConfig\": \"\",\n        \"entities\": {\n            \"entity\": [\n                \"sensor.vultron_plan_jan_kowalski\" \u003c-- TU WPISZ SWOJĄ ENCJE\n                moze byc tu druga encja w przypadku planu _curr,_next oraz ocen p1,p2\n            ],\n            \"substring\": [],\n            \"regex\": []\n        },\n...\n```\n\n### 🏠 HA Automations\n\nNajprosciej dodać:\n\nUstawienia -\u003e Automatyzacje oraz sceny -\u003e Utwórz automatyzację  -\u003e Utwórz nową automatyzację -\u003e ⋮ -\u003e Edycja w YAML -\u003e Wklej i zmien \"entity\"\n\n- [plan.yaml](./automation/ha/plan.yaml#L12-L16) - powiadomienia o zmianach w planie\n- [frekwencja.yaml](./automation/ha/frekwencja.yaml#L12-L16) - powiadomienia o zmianach we frekwencji\n- [oceny.yaml](./automation/ha/oceny.yaml#L12-L16) - powiadomienia o zmianach w ocenach\n- [uwagi.yaml](./automation/ha/uwagi.yaml#L12-L16) - powiadomienia o zmianach w uwagach\n- [wiadomosc.yaml](./automation/ha/wiadomosci.yaml#L12-L16) - powiadomienia o nowych wiadomościach\n\n\n\n```yaml\n...\nalias: \"Vultron: Alert Frekwencji\"\ndescription: \"\"\ntriggers:\n  - entity_id:\n      - sensor.vultron_freq_jan_kowalski \u003c-- TU WPISZ SWOJĄ ENCJE\n    attribute: wpisy\n    trigger: state\nactions:\n...\n```\n\n\n## 📸 Próbki/screenshoty\n\n#### 📚 Plan lekcji\n![Plan lekcji](samples/planlekcji.jpg)\n\n#### 📅 Terminarz\n![Terminarz](samples/terminarz.jpg)\n\n#### 📊 Frekwencja\n![Frekwencja](samples/frekwencja.jpg)\n\n#### 📝 Oceny\n![Oceny1](samples/oceny1.jpg) ![Oceny3](samples/oceny3.jpg)\n\n#### 💬 Wiadomości\n![Wiadomości](samples/wiadomosci.jpg)\n\n#### ⚠️ Uwagi\n![Uwagi](samples/uwagi.jpg)\n\n#### 📊 Monitoring\n![Monitoring](samples/alert.jpg)\n\n### 🍀 Szczęśliwy Numerek\n![Numerek](samples/sznumerek.png)\n\n## ⚠️ Debugowanie\nJeśli napotkasz problemy z logowaniem:\n1. Sprawdź zakładkę **Logi** dodatku. Wszystkie błędy są tam opisywane w czasie rzeczywistym.\n\n## 🪲 Zgłaszanie błędów i Bezpieczeństwo\n\nZnalazłeś błąd lub masz pomysł na nową funkcję? Postępuj zgodnie z poniższymi krokami:\n\n1. **Błędy bezpieczeństwa (Security):** Jeśli znalazłeś lukę dotyczącą haseł, sesji, wycieku danych lub prywatności, **NIE OTWIERAJ** publicznego zgłoszenia w Issues. Przeczytaj naszą politykę [🛡️ SECURITY.md](https://github.com/htomasz/vultron/blob/main/SECURITY.md) i postępuj zgodnie z zawartą tam instrukcją prywatnego zgłoszenia.\n\n2. **Błędy techniczne (Bugs):** Jeśli błąd nie dotyczy bezpieczeństwa (np. błąd w planie lekcji, błąd w karcie UI):\n   - Sprawdź, czy problem nie został już zgłoszony w [GitHub Issues](https://github.com/htomasz/vultron/issues).\n   - Jeśli nie, otwórz nowe zgłoszenie [tutaj](https://github.com/htomasz/vultron/issues).\n\n3. **Sugestie (Features):** Masz pomysł na nową funkcję? Otwórz zgłoszenie typu \"Feature Request\" w zakładce Issues.\n\n## 🗑️ Odinstalowanie\nJeśli zdecydujesz się usunąć dodatek:\n1. Odinstaluj Vultron w zakładce Dodatki.\n2. Ręcznie usuń folder `/config/www/vultron`.\n3. Usuń wpisy kart (filtr po vultron_) w `Ustawienia -\u003e Pulpity sterujące -\u003e Zasoby`\n\n## ⚖️ Nota prawna\n\u003e [!IMPORTANT]\n\u003e Projekt **Vultron** jest narzędziem edukacyjnym i służy TYLKO wyłącznie do użytku prywatnego. Autor nie bierze odpowiedzialności za ewentualne blokady kont, błędy w synchronizacji danych czy inne konsekwencje wynikające z automatyzacji dostępu do portalu EduVulcan.pl. Korzystasz z dodatku na własną odpowiedzialność.\n\n## 🏚️️ Łamanie prawa\n\u003e [!IMPORTANT]\n\u003e Używanie projektu jest jawnym łamaniem regulaminu EduVulcan.pl. Nie rób tego.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhtomasz%2Fvultron","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhtomasz%2Fvultron","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhtomasz%2Fvultron/lists"}