Shelly Actions - Automatizace a správa zařízení
Tento repozitář obsahuje kompletní systém automatizace pro správu vašich Shelly zařízení:
- Export zařízení ze Shelly Cloud a audit IP konfigurace (s vyloučením TRV a H&T) do
Actions/devices.json. Statická IP je vyžadována (provoz i při výpadku DHCP serveru); při nálezu zařízení na DHCP odešle e-mailové varování. - Hromadná konfigurace Syslog serveru na runneru
vmhome. - Obousměrná správa a verzování skriptů (GitOps pro Shelly) – stažení (záloha) skriptů ze zařízení a nahrání změn zpět do Shelly při Git commitu.
📁 Struktura složek a souborů
Actions/:vl_logger.py: Pomocný klient pro odesílání strukturovaných logů do centrálního VictoriaLogs.get_shelly_devices.py: Stáhne zařízení ze Shelly Cloudu, detekuje statické IP vs DHCP a odesílá e-mailové varování při detekci DHCP.devices.json: Aktuální seznam nalezených zařízení, IP adres a příznakustatic_ip.dhcp_alert_report.json: Přehled zařízení s DHCP vyžadujících přepnutí na statickou IP.set_shelly_syslog.py: Hromadně nastaví Syslog na zařízeních.sync_scripts_from_devices.py: Stáhne všechny skripty ze zařízení do složkyDevices/.deploy_scripts_to_devices.py: Nahraje skripty ze složkyDevices/zpět do zařízení.check_shelly_scripts.py: Zkontroluje běh skriptů s autostartem a odešle notifikaci / restartuje.
Devices/(vytvoří se automaticky při prvním stažení):- Zařízení jsou organizována podle místností:
Devices/<Místnost>/<Zařízení>/ - Např.
Devices/Loznice/Loznice_1p_display_192.168.100.66/neboDevices/Kotelna/Regulace-vetyl_192.168.100.31/ - Uvnitř každého zařízení je
device.json(mapování IP, ID slotů, jmen astatic_ip) a samotné skripty1_topeni.js,2_el_dotapeni.jsatd.
- Zařízení jsou organizována podle místností:
.github/workflows/:shelly_fetch_devices.yml: Běží na GitHub Cloudu, stahujedevices.json, hlídá nežádoucí DHCP a odesílá e-mailové varování.shelly_set_syslog.yml: Běží navmhome, nastaví Syslog server.shelly_pull_scripts.yml: Běží navmhome, stáhne a roztřídí skripty do složek podle místností.shelly_push_scripts.yml: Běží navmhome, nasad í upravené skripty zpět do zařízení.shelly_watchdog_scripts.yml: Běží navmhome, hlídá stav skriptů a odesílá e-mailové notifikace.
🔄 Jak funguje obousměrná správa skriptů (GitOps)?
1. Stažení skriptů ze zařízení do Gitu (Pull / Backup)
- Workflow:
Pull Scripts from Shelly Devices(na runneruvmhome) - Postup:
- Skript projde každou IP adresu v
Actions/devices.json. - Zjistí místnost ze Shelly Cloud metadat nebo z názvu zařízení (Kotelna, Loznice, Kuchyne, Obyvak, Eliska, Sauna, Chodba, FVE_Solar, Venek...).
- Zjistí, zda zařízení podporuje Shelly Scripting (
Script.List). - Pokud zařízení obsahuje skripty, stáhne jejich kód po částech (
Script.GetCode) a zjistí nastavení autostartu (enable). - Vytvoří pro každé zařízení složku v příslušné místnosti, např:
Devices/├── Kotelna/│ └── Regulace-vetyl_192.168.100.31/│ ├── device.json│ ├── 1_topeni.js│ └── 2_el_dotapeni.js└── Loznice/└── Loznice_1p_display_192.168.100.66/├── device.json├── 2_luminace.js├── 3_TRV_sync_temp.js└── 4_TRV_sync.js
- Automaticky vytvoří Git commit a pushne skripty do repozitáře.
- Skript projde každou IP adresu v
2. Nahrání upraveného skriptu zpět do Shelly (Push / Deploy)
- Workflow:
Push Scripts to Shelly Devices(na runneruvmhome) - Kdy se spouští:
- Automaticky: Když uděláte commit a push jakékoliv změny do souborů ve složce
Devices/**. - Ručně: Přes záložku Actions na GitHubu (s volbou konkrétního zařízení nebo všech).
- Automaticky: Když uděláte commit a push jakékoliv změny do souborů ve složce
- Jak skript bezpečně nahrává:
- Ze souboru
device.jsonv dané složce zjistí cílovou IP adresu a ID slotu skriptu. - Zastaví starý skript na zařízení (
Script.Stop). - Nahraje nový kód po 512B chuncích (
Script.PutCodesappend: true), takže bezpečně zvládne i velké 50kB+ skripty bez přetečení paměti Shelly. - Zpětná kontrola integrity obsahu (
Script.GetCode): Skript po nahrání načte celý obsah ze zařízení a znak po znaku porovná s lokálním souborem. Pokud by se nahrála jen část nebo došlo k chybě, nahrávání automaticky zopakuje (až 3 pokusy). Pokud kontrola neprojde, nahlásí chybu a neúplný kód nespustí! - Nastaví název a autostart (
Script.SetConfig). - Pokud byl skript spuštěný, znovu ho nastartuje (
Script.Start).
- Ze souboru
3. Automatický dohled nad skripty a e-mailové notifikace (Watchdog)
- Workflow:
Shelly Script Watchdog & Notifications(na runneruvmhome) - Kdy se spouští:
- Automaticky: Každých 30 minut přes GitHub Actions cron.
- Ručně: Přes záložku Actions na GitHubu (s možností testovacího odeslání mailu či zapnutí auto-restartu).
- Jak funguje:
- Projde IP adresy ze souboru
Actions/devices.json. - Zavolá
Script.Lista vyfiltruje skripty, které majíenable: true(autostart), alerunning: false(zastaveno / pád). - Pokud je zapnutý parametr auto-restartu (
--restart), pokusí se skript ihned nahodit (Script.Start) a ověří stav. - Při detekci problému vygeneruje přehlednou tabulku do GitHub Actions Step Summary a odešle HTML e-mail.
- Projde IP adresy ze souboru
📧 Nastavení GitHub Secrets pro e-mailové notifikace:
V nastavení GitHub repozitáře (Settings -> Secrets and variables -> Actions) přidejte:
SMTP_SERVER: Adresa SMTP serveru (např.smtp.gmail.com,smtp.seznam.cz, nebo IP lokální relay).SMTP_PORT: Port (např.587pro STARTTLS nebo465pro SSL). Výchozí je587.SMTP_USERNAME: Přihlašovací jméno (váš e-mail).SMTP_PASSWORD: Heslo (u Gmailu použijte Heslo aplikace / App Password).NOTIFICATION_EMAIL: Cílová e-mailová adresa, kam mají chodit upozornění.- (Volitelné)
SMTP_FROM: Odesílatel v hlavičce (výchozí jeSMTP_USERNAME).
4. Centrální telemetrie a logování do VictoriaLogs
Všechny automatizační skripty běžící na self-hosted runneru (vmhome) automaticky odesílají strukturované logy a události do centrálního systému VictoriaLogs (http://100.81.155.15:9428).
- Knihovna:
Actions/vl_logger.py(čistý Python standardní knihovny bez dalších závislostí, tichý fail-safe timeout). - Stream fields:
app,env(např.app=action_watchdog, env=vmhome). - Přiřazení aplikací (
app):action_watchdog: Detekce zastavených autostart skriptů, výsledky automatických restartů a souhrny kontrol.action_deploy: Hlášení o nasazení skriptů, selhání nahrávání a kontrola integrity.action_sync: Záznamy o stažení (pull) skriptů ze zařízení do repozitáře.action_syslog: Výsledky hromadné konfigurace Syslog serveru na Shelly zařízeních.
- Konfigurační proměnné prostředí (volitelné):
VICTORIALOGS_URL: Vlastní URL endpointu (výchozí:http://100.81.155.15:9428/insert/jsonline?_stream_fields=app,env&_msg_field=_msg).VICTORIALOGS_ENABLED:falsepro dočasné vypnutí logování.