Może ktoś ma jakiś pomysł, jak ustawić scenę lub napisać kod LUA tak aby po wykryciu przez czujnik zamknięcia drzwi, i będzie się to odbywać pomiędzy wschodem i 1h po zachodzie słońca, HC3 uruchomi zadany profil.
top of page
Ostatnie dyskusje...
Polub
0
19
bottom of page
Ja bym powiedział, że raczej go skomplikowali. Jak uczyłem się Pascala w drugiej połowie lat 80. to myślałem że to już maximum programowania. Potem przyszły inne języki i zobaczyłem co jeszcze można zrobić...
Ale to język pseudo-obiektowy więc szybko się go uczy. Taki Pascal lub Basic - w sumie definiuje się go jako język skryptowy.
Tak szczerze LUA dla mnie to jakaś zabawka i równie dobrze mogli zaimplementować LOGO 🤣. Przez to kolejny język, który muszę opanować bo ani rusz do przodu z prawdziwą inteligencją budynku.
Poprawiłem też sprawdzanie profili:
function getActiveProfileName() local profiles = api.get("/profiles") for _, profile in ipairs(profiles.profiles) do if (profile.id == profiles.activeProfile) then return profile.name end end end local test = getActiveProfileName() print("Wybrano profil: ", test)
A ustawienie poziomu rolety na ten sam co inna rozwiązałem jak poniżej:
fibaro.call(47, 'setValue', fibaro.getValue(42, "value"))
Dobre.
To zatrzyma lub zezwoli na trigerowanie sceny.
Pytanie pozostaje, aby trigger sceny był odpowiedni.
Ale wykorzystanie wewnętrznego API daje duże możliwości - brawo!
Można prościej:
function fibaro.setSceneEnabled(sceneID,enabled) api.put("/scenes/"..sceneID,{enabled=enabled}) end fibaro.setSceneEnabled(7,true) fibaro.setSceneEnabled(13,true) fibaro.setSceneEnabled(21,true) fibaro.setSceneEnabled(37,true) fibaro.setSceneEnabled(38,true)
Nie ma sensu... scenę można wywołać ręcznie, ale nie jest to najlepsze rozwiązanie. Scena powinna być wywoływana na jakieś zdarzenie: naciśnięcie przycisku, wyłączenie światła, zmiana temp etc. lub na własne zdarzenie, które sam pan może zdefiniować - zalecane podejście.
Na upartego można scenę uruchomić lub ja zabić, ale to już bardziej zaawansowana technologia:
fibaro.scene("execute", {1, 2, 3}) - pomija warunek conditon/trigger i wywyluje funkcje
fibaro.scene("kill", {1, 2, 3}) - zabija wykonywanie sceny np. gdy ta uzywa: pentle (setTimeout(.., function()…end)
Prawidłowe podejście to jest takie jeśli chce pan użyć scen, aby ja triggerowac na specjalny własny "event".
{
type = "custom-event",
property = "MyEvent_1",
operator = "==",
isTrigger = true
}
a dowolne swoje zdarzenie pan wymusza komendą:
fibaro.emitCustomEvent("MyEvent_1")
UWAGA: zdarzenie "MyEvent_1" musi pan najpierw zdefiniować w systemie przez zakładkę "General".
Za 2 punkt bardzo dziękuję ale co do pierwszego to co napisales wyzej to znalazlem w dokumentacji (dotyczy deaktywacji profilu). Tylko ja nie chce aktywowac lub deaktywowac profili tylko chce aktywowac lub deaktywowac scene.
To mam dwa wyzwania dla programistów LUA:
Jak aktywować/deaktywować scenę z poziomu LUA (z interface można to zrobić w sekcji profile)
Czy można ustawić zmienną globalną, która będzie przechowywać aktualny ID profilu w momencie uruchomienia sceny związanej wykryciem otwarcia drzwi przed door sensor. Przy uruchomieniu sceny wywołanej zamknięciem drzwi (door sensor) ma powrócić do profilu, który przechowuje ta zmienna.
Witam Panie Marcinie,
A co ma wywołać funkcję: function UstawPoziomRoleta7 () Musi pan jakoś w tej scenie lub jeśli to jest QuickApp to może pan z innej sceny, lub innego QuickApp wywołać zdefiniowaną funkcję UstawPoziomRoleta7 ().
Co do aktywowania profilu to jest to prawidłowa formuła. Proszę odpowiedzieć obszernie co pan chciał zrobić to pomogę :-)
Siadłem na chwilkę ale LUA chyba nie stworzył programista tylko jakiś dzieciak.
1. Dlaczego z poniższego kodu dla Akcji nie wywołuje się funkcja tylko 2 pierwsze linie?
2. Jak z poziomu LUA deaktywować/aktywować sceny?
local Roleta6Poziom = fibaro.getValue(42, "value") fibaro.debug("Scene89", Roleta6Poziom) function UstawPoziomRoleta7 () if Roleta6Poziom > 80 then fibaro.profile(7, 'activateProfile') else fibaro.profile(7, 'activateProfile') fibaro.call(47, "setValue", 80) end end
Mam je już zgrane. Kiedyś je obejrzę albo kogoś zatrudnię do napisania scen.
Proszę zacząć od zamiany scen blokowych na sceny Lua i oglądania wszystkich filmów, w których poruszam kwestię programowania :-)
Powoli coś tam sobie produkuję. Na razie wszystko działa na scenach i jakoś nie mogę się zabrać do przepisania ich w LUA. Za dużo projektów mam na głowie w pracy.
Czyli rozumiem, że już wszystko pan zaimplementował?
Przesunięcie o kilka minut nie stanowi problemu. Zawsze można dodać lub odjąć tą wartość od czasu. U mnie rolety są sterowane termostatami od ogrzewania i w zależności od temperatury i pory w ciągu doby podnoszą się lub opuszczają tak aby utrzymać stałą temperaturę w domu. A door sensor w tym momencie ingeruje w ten tryb bo po otwarciu HS chcę aby roleta podniosła się na zadaną wysokość a po zamknięciu opuszczała zgodnie z obecną temperaturą w pomieszczeniu.
Już sobie poradziłem :)
Ja wiem ... :-)