Panowie coś mam źle bo oświetlenie nadal włączane jest w dzień przez czujkę.
return { on = { devices = { 'Garaż', -- nazwa wlacznik w domoticz 'Czujka Pir' -- nazwa czujnika w domoticz }, timer = { 'at nighttime'} }, data = { warunek = { initial = false }, }, logging = { level = domoticz.LOG_DEBUG, marker = 'PIR Lampa', }, execute = function(dz, item) local maxSeconds = 120 local motion = dz.devices('Czujka Pir') -- nazwa czujnika local switch = dz.devices('Garaż') -- nazwa włacznika if item == motion and dz.time.matchesRule('at nighttime') then -- detekcja aktywna if motion.active and not switch.active then -- detekcja wyzwala skrypt dz.data.warunek = true switch.cancelQueuedCommands() switch.switchOn().checkFirst() elseif motion.active and switch.active and dz.data.warunek == true then switch.cancelQueuedCommands() elseif not motion.active and dz.data.warunek == true then switch.switchOff().afterSec(maxSeconds).checkFirst() end elseif item == switch and item.active and not motion.active then dz.data.warunek = false end end }
Może przed
if item == motion and dz.time.matchesRule('at nighttime') then -- detekcja aktywna
zamień na
if item == motion and (domoticz.time > '30 minutes before sunset' and domoticz.time < '15 minutes after sunrise') then -- detekcja aktywna
timer ustaw na
timer = { 'every 1 minutes'}
To powinno działać ale była wersja dzVents która nie reagowała na "at nigttime" , zmień te dwie linie gdzie masz at nighttime na
timer = {'between sunset and sunrise'} if item == motion and dz.time.matchesRule('between sunset and sunrise') then -- detekcja aktywna
@steel_rat warto jak to możliwe unikać niepotrzebnego wykonywania się skryptów , zaproponowałeś żeby skrypt wykonywał się co minutę nawet wtedy gdy nie ma ruchu , to zły pomysł szczególnie gdy tych skryptów przybywa. Domoticz jest jednowątkowy czyli nie wykona 20 skryptów na raz, a im więcej skryptów co minutę tym większe lagi się zrobią
@isom No to właściwie ten timer jest nie potrzebny. Powinno zostać tylko czujniki na które ma reagować. Myślałem że coś jest tam jeszcze sprawdzane co minute.
@steel_rat timer ustawiony w taki sposób ( tylko w nocy) powoduje ,że skrypt w dzień się nie uruchamia , przy ustawieniu co minutę będzie się wykonywał 24/7 . Skoro ma to działać w połączeniu z ruchem z PIR nie unikniesz timera ale możesz go ograniczyć
Panowie dalej nie robi skrypt jak powinien w dzień normalnie odpala oświetlenie ja coś zle wstawiłem ?
return { on = { devices = { 'Garaż', -- nazwa wlacznik w domoticz 'Czujka Pir' -- nazwa czujnika w domoticz }, timer = {'between sunset and sunrise'} }, data = { warunek = { initial = false }, }, logging = { level = domoticz.LOG_DEBUG, marker = 'PIR Lampa', }, execute = function(dz, item) local maxSeconds = 120 local motion = dz.devices('Czujka Pir') -- nazwa czujnika local switch = dz.devices('Garaż') -- nazwa włacznika if item == motion and dz.time.matchesRule('between sunset and sunrise') then -- detekcja aktywna if motion.active and not switch.active then -- detekcja wyzwala skrypt dz.data.warunek = true switch.cancelQueuedCommands() switch.switchOn().checkFirst() elseif motion.active and switch.active and dz.data.warunek == true then switch.cancelQueuedCommands() elseif not motion.active and dz.data.warunek == true then switch.switchOff().afterSec(maxSeconds).checkFirst() end elseif item == switch and item.active and not motion.active then dz.data.warunek = false end end }
Logi z tego skryptu z wieczora i z dnia trzeba tu wstawić , ten skrypt działa u mnie, sprawdziłem . Nie masz w systemie innego skryptu np blockly który włącza to oświetlenie ?
Żeby sprawdzić nawet teraz wystarczy zamienić miejscami suset z sunrise czyli
timer = {'between sunrise and sunset'}
i to samo w wierszu
if item == motion and dz.time.matches
No właśnie mam taki bloczek:
Może to wprowadzać zamęt ? Ten bloczek służy do tego co chciałem zrobić aby po włączeniu łącznikiem oś było aktywne przez ustalony czas a czujka ten czas resetowała. Zrobiłem sobie to na integrze.
Logi z dnia wrzucę jutro ponieważ teraz mam logi tylko od godziny 19:00
Te logi już nie potrzebne , to blockly włącza oświetlenie , przecież tam nie ma że ma włączać tylko w nocy . Czujnik satela aktywuje ten wirtualny PIR a to ma właczyć Garaż ot cała zagwostka . Usuń połowę tego blockly odpowiedzialną za włączenie Garażu i zobaczysz że będzie ok
Wyłączę bloczek na próbę.
Ale jak wyłączę skrypt to bloczek mi nie zapali światła z czujki tylko zgasi po zapaleniu z klawisza po ustalonym czasie w integrze.
Całego nie możesz wyłączyć bo satel wysyła 1 albo 3 i to nie zadziała ze skryptem dzVents , konwersja musi zostać trzeba tylko wywalić załączenie Garaż
Do samej konwersji dla tego skryptu mam inny block. Ten block jest do tego aby czujka resetowala czas po włączeniu przez łącznik na ścianie więc mogę go wyłączyć na próbę śmiało pozbędę się tylko gaszenia światła jeśli ktoś zapali łącznikiem.
@daro1003 jak dublujesz sobie logikę w kilku skryptach to nie jest najlepiej. Ten bloczek który wstawiłeś robi tylko tyle że konwertuje 1 satela na OFF wirtualki a 3 satela na ON , w drugiej części na podstawie stanu wirtualnego PIR włącza lub wyłącza Garaż , jak masz drugi skrypt który robi to samo co pierwsza część tego bloczku to zapytam się po co ?
Skrypt dzVents pewnie działa tylko co z tego, jak równolegle działa bloczek który cały dzień włącza to samo oświetlenie . To tak jak byś na jednej linii satela podłączył dwa czujniki jeden w pokoju a drugi na zewnątrz i był zdziwiony że nikogo nie ma w pokoju a system wali alarmy.
Hej @isom wyłączyłem ten bloczek i działa skrypt jak należy.
Mam pytanko odnoście tego skryptu co mi wcześniej podesłałeś:
local THRESHOLD = 60 -- czas w minutach przez jaki oświetlenie może być ON local devicesToCheck = { 'Lampa1', -- Tabela przełączników zmień nazwy na swoje 'Lampa2', 'Lampa3', 'Spiżarnia' 'Garaż' } return { on = { devices = devicesToCheck, timer = {'every 5 minutes between 21:30 and 23:30'},
Rozumiem że dodaje ten skrypt i nazwy przełączników zmieniam na własne i te przełączniki są kontrolowane i wyłączane w czasie pomiędzy podanymi godzinami.
I mogę dodać również garaż i nie będzie kolidowało z obecnym skryptem na garaż ?
Co przypadku gdy się zasiedzę się w danym pomieszczaniu w godzinach wieczornych ? Światło zgaśnie mimo że czujka ma ruch ? Nie powinno chyba ?
Na obecną chwile czyli czas budowy warto dodać wszystkie przełączniki ponieważ jak zapomnimy gdzieś zgasić oś to i tak system to zrobi za mnie.
@daro1003 wszystko masz opisane wcześniej , wszystko co dodasz do tego skryptu będzie sprawdzane co 5 min w wyznaczonym czasie i jak coś jest włączone dłużej niż godzinę zostanie wyłączone . Jak się zasiedzisz a będziesz aktywował PIR to światło co najwyżej zgaśnie na chwilę . Te skrypty ze sobą nie kolidują
Mam jeszcze dwa pytania:
1. Jak robię konwersje z satela na domoticza kolejnych czujek to dla każdej czujki robię nowy bloczek czy wszystkie w jednym ?
2. W skrypcie v3 jeśli chcę zapalać żarówkę z dwóch różnych czujek wystarczy że dodam tak czujniki:
return { on = { devices = { 'Garaż', -- nazwa wlacznik w domoticz 'Czujka Pir 1' -- nazwa czujnika w domoticz 2 'Czujka Pir 2' -- nazwa czujnika w domoticz 2 } }, data = { warunek = { initial = false }, }, logging = { level = domoticz.LOG_DEBUG, marker = 'PIR Lampa', }, execute = function(dz, item) local maxSeconds = 200 local motion = dz.devices('Czujka Pir 1') -- nazwa czujnika local motion = dz.devices('Czujka Pir 2') -- nazwa czujnika local switch = dz.devices('Garaż') -- nazwa włacznika if item == motion then -- detekcja aktywna if motion.active and not switch.active then -- detekcja wyzwala skrypt dz.data.warunek = true switch.cancelQueuedCommands() switch.switchOn().checkFirst() elseif motion.active and switch.active and dz.data.warunek == true then switch.cancelQueuedCommands() elseif not motion.active and dz.data.warunek == true then switch.switchOff().afterSec(maxSeconds).checkFirst() end elseif item == switch and item.active and not motion.active then dz.data.warunek = false end end }
AD 1 To Ty decydujesz jak to sobie zrobić można w jednym dużym bloku lub dla każdego odzielnie
AD 2 Nie wystarczy tak zmienić skrypt , mając dwa czujniki i oba identyfikowane jako "motion" nie ma możliwości stwierdzenia na podstawie którego ma się włączać oświetlenie. Albo tworzysz tabelę z listą czujników i potem odnosisz się do tej tabeli a nie konkretnego czujnika , albo każdy czujnik musi być widziany jako np motion1 , motion2 itd.
@isom taki skrypt przydałby się do również do włączania pompki obiegu ciepłej wody do łazienek i kuchni. Czujka w danym pomieszczeniu odpala pompkę obiegu wody.
Spróbowałem coś sklecić zerknij:
return { on = { 'Sonoff 1', -- nazwa wlacznik w domoticz } local devicesToCheck = { 'Pir 1', -- Tabela czujek pir 'Pir 2', 'Pir 3', 'Pir 4', 'Pir 5' } }, data = { warunek = { initial = false }, }, logging = { level = domoticz.LOG_DEBUG, marker = devicesToCheck, }, execute = function(dz, item) local maxSeconds = 200 local motion = evicesToCheck -- odniesienie do tabeli local switch = dz.devices('Sonoff 1') -- nazwa włacznika if item == motion then -- detekcja aktywna if motion.active and not switch.active then -- detekcja wyzwala skrypt dz.data.warunek = true switch.cancelQueuedCommands() switch.switchOn().checkFirst() elseif motion.active and switch.active and dz.data.warunek == true then switch.cancelQueuedCommands() elseif not motion.active and dz.data.warunek == true then switch.switchOff().afterSec(maxSeconds).checkFirst() end elseif item == switch and item.active and not motion.active then dz.data.warunek = false end end }
Będzie to działać ?