Tutorial 4: Automatyzacje i dashboardy#
Hook: 5 linijek Lua i Twój dom reaguje sam — światło włącza się z czujnikiem ruchu, pogoda z internetu ląduje na dashboardzie, a przekaźnik odpala scenę wieczorną. Bez YAML-i, bez node-redów — czysty, czytelny kod.
Co zbudujemy#
Na koniec tego tutoriala:
- automatyzacja reagująca na zdarzenia
- scena wieczorna
- dashboard z przełącznikami
- pogoda z internetu na dashboardzie
Czas: ~10 minut.
1. Pierwsza automatyzacja#
Reaguj na zmianę stanu — gdy lampa w salonie się włączy, włącz też lampę w kuchni:
-- modules/automatyzacje.lua
local salon = _:get("lampa_salon")
local kuchnia = _:get("lampa_kuchnia")
salon:onChange(function()
if salon:getValue() == 1 then
kuchnia:switchOn()
log.info("Salon ON → kuchnia ON")
end
end)2. Scena#
Scena to grupa akcji pod jedną nazwą:
-- modules/sceny.lua
scene("wieczor", function()
_:get("lampa_salon"):switchOn()
_:get("lampa_kuchnia"):switchOff()
log.info("Scena: wieczór")
end)
scene("wyjscie", function()
_:each("switch", function(dev)
dev:switchOff()
end)
log.info("Scena: wszystko wyłączone")
end)Scenę można wywołać z dashboardu, HomeKit, HA, kodu Lua albo przez agenta AI.
3. Dashboard#
-- modules/dashboard.lua
dashboard("Dom")
:toggle("Salon", "lampa_salon")
:toggle("Kuchnia", "lampa_kuchnia")
:button("Wieczór", function() runScene("wieczor") end)
:button("Wyjście", function() runScene("wyjscie") end)
:status("Temperatura", function()
return _:get("temp_salon"):getValue() .. "°C"
end)4. Pogoda z internetu#
Pobierz dane pogodowe i wyświetl na dashboardzie:
-- modules/pogoda.lua
local function fetchWeather()
local http = HTTP:new()
http:asyncGET("https://wttr.in/Warsaw?format=j1", function(resp)
if resp and resp.status == 200 then
local data = json.decode(resp.body)
local current = data.current_condition[1]
kv:set("weather_temp", current.temp_C .. "°C")
kv:set("weather_desc", current.weatherDesc[1].value)
end
end)
end
setInterval(fetchWeather, 600000) -- co 10 minut
fetchWeather()
dashboard("Pogoda")
:status("Temperatura", function()
return kv:get("weather_temp") or "..."
end)
:status("Warunki", function()
return kv:get("weather_desc") or "..."
end)Dane przetrwają restart — kv:set() zapisuje na dysku.
5. Reakcja na przekaźnik#
Praktyczny przykład — czujnik ruchu włącza światło na 5 minut:
-- modules/czujnik_ruchu.lua
local czujnik = _:get("czujnik_ruch_salon")
local lampa = _:get("lampa_salon")
local timer_id = nil
czujnik:onChange(function()
if czujnik:getValue() == 1 then
lampa:switchOn()
if timer_id then cancel(timer_id) end
timer_id = setTimeout(function()
lampa:switchOff()
log.info("Brak ruchu — lampa OFF")
end, 300000) -- 5 minut
end
end)Co dalej?#
- Tutorial 5: AI pisze kod za mnie — agent AI tworzy automatyzacje, dashboardy i instaluje pluginy