Cześć
Potrzebuje cyklicznie odpytywać integre która podaje stan wejścia na zasadzie 1 - brak naruszenia, 3 naruszone i przepisywac ten stan do wirtualnych włączników on/off
zacząłem robić coś takiego jak poniżej ale wiem że jest to źle zrobione więc nawet nie odpalam (nie znam dzvents - kombinowałem z przerabianiem innego skryptu).
Najlepiej byłoby żeby sprawdzał jeszcze stan uzbrojenia systemu czyli jak jest 1 na wyjściu satela to system rozbrojony i sprawdza stan tych wejśc jak jest 3 - uzbrojony to niczego nie robi
return {
on = { timer = { 'every 2 minutes' }},
execute = function(dz, item)
local kont1 = dz.devices('Kontaktron górny - balkon Wiktor').nValue
local kont2 = dz.devices('Kontaktron górny - balkon Michalina').nValue
local kont3 = dz.devices('Kontaktron górny - okno garderoba').nValue
local kont4 = dz.devices('Kontaktron górny - balkon sypialnia').nValue
dz.devices('Okno Wiktor k').updateSwitch(kont1)
dz.devices('Okno Michalina k').updateSwitch(kont2)
dz.devices('Okno garderoba k').updateSwitch(kont3)
dz.devices('Okno sypialnia k').updateSwitch(kont4)
end
}
I jeszcze jeden temat przy okazji - mam głowice i termostaty w których ustawia się czas - czy jest możliwość (i jak) odczytywania czasu z domoticza i ustawianiu go automatycznie raz na dobę na tych urządzeniach (coś jak serwer czasu) ?
A jak odpytujesz satela? Ma on moduł eth?
Do satela z tego co kojarzę jest dedykowana wtyczka pod Domoticz tyle że musi być moduł ETH
Jak masz już taką wtyczkę to życie staje się prostsze
Mam moduł eth i wtyczkę - generalnie wszystko działa - steruje sobie nim różne rzeczy - wykorzystuje czujniki kontaktronowe i piry.
Potrzebuje pytać o stan wejścia do sterowania głowicami.
Mam napisany harmonogram ze zmianami temperatur w zależności od pory dnia i teraz jezeli mam otwarte okno np o 10:00 to stan tego wejścia zrealizował warunek o tej godzinie i temp. ustawiana jest na głowicy na np 10 stopni tak żeby nie grzał kaloryfer w danym pomieszczeniu. Jeżeli to okno jest długo otwarte a w tym czasie przyjdzie info o zmianie nastawy temp. z harmonogramu to temperatura ustawi się na np 22 stopnie i włączy się grzanie mimo że okno nadal jest otwarte (kontaktron zmienił swój stan tylko raz o 10 i wywołał realizacje obniżenia temp i dopóki jego stan się nie zmieni ponownie to zdarzenie zapisane w blokach nie zostanie powtórnie wykonane)
@piotras78 uważam, że tworzenie dodatkowych wirtualnych przełączników żeby widziały je klocki w blockly nie jest przyszłościowym pomysłem , ale skoro nie chcesz próbować przepisać blockly na dzVents to możesz próbować tego
Wstępnie wydaje mi się że pierwszy skrypt działa prawidłowo (dokładnie sprawdze po powrocie do domu) - drugiego nie sprawdzałem.
Teraz jak się tak zastanowiłem to optymalnie byłoby żeby robił to w ten sposób:
Jeżeli okno jest otwarte powyżej 5 min (stan 3) i temperatura na termostacie jest wyższa niż 8 stopni to ustaw termostat na 8 stopni.
Uwzględniłoby to otwarcie chwilowe balkonu/tarasu (np żeby po coś wyjść) i wysyłałoby tylko informacje do termostatu do momentu ustawienia 8 stopni - w obecnej wersji wysyła to info co 2 min (wraz ze stanem okna).
Dzięki za pomoc
@piotras78 zmiany nastaw termostatu jak nie wiadomo jak masz poukładane klocki w tym swoim blockly , czarno trochę widzę . Wstaw fotkę tej układanki to może będzie łatwiej. Na tą chwilę mogę pomóc tak, że po otwarciu okna skrypt poczeka ponad 4 minuty zanim zmieni stan wirtualnego przełącznika "Stan okna".
Pierwsze odpalenie skryptu następuje po zmianie stanu faktycznego czujnika , załóżmy, że będzie to o godz 10:00:34 , o 10:01:00 skrypt zostanie uruchomiony przez wyzwalacz czasowy i zmieni stan wewnętrznej zmiennej z 0 na 1 , za dwie minuty kolejne wyzwolenie sprawdzi warunki czy zmienna się zgadza i kiedy aktualizował się czujnik , trzecie wyzwolenie o 10:05:00 zmieni stan wirtualnego przełącznika "Stan okna". W tym przypadku od otwarcia okna do zmiany stanu wirtualnego przełącznika minie 4 min , 26 sek.
Zmiana czasu wyzwalania będzie regulowała długość tej pauzy .
Cześć
Postanowiłem się pozbyć zdarzeń blokach - duża część zajmuje mi konwersja stanów z satela integry (1/3) na on/off
Napisałem taki oto skrypt który niby działa ale tylko na trzech czujnikach (wejście 6,7,8)- dla czego reszta nie zmienia stanu ? Zmieniłem już nawet nazwy wejść na nr idx żeby pominąć błędy w pisowni. Dodatkowo przy naruszeniu jednego wejścia skryp odrazu odpytuje stany wszystkich czujników które się w nim znajdują - można to jakoś zrobić żeby wykonywał pętlę sprawdzająca tylko do danego naruszonego czujnika ?
return {
on = {
devices = {235, 332, 333, 334, 335, 336, 337, 338, 339, 340}
},
logging =
{
level = domoticz.LOG_DEBUG,
marker = 'Stan PIR satel',
},
execute = function(dz, device)
local wejscie1 = dz.devices (235)
local stan1 = dz.devices (648)
local wejscie2 = dz.devices (332)
local stan2 = dz.devices (642)
local wejscie3 = dz.devices (333)
local stan3 = dz.devices (643)
local wejscie4 = dz.devices (334)
local stan4 = dz.devices (641)
local wejscie5 = dz.devices (335)
local stan5 = dz.devices (645)
local wejscie6 = dz.devices (336)
local stan6 = dz.devices (644)
local wejscie7 = dz.devices (337)
local stan7 = dz.devices (639)
local wejscie8 = dz.devices (338)
local stan8 = dz.devices (640)
local wejscie9 = dz.devices (339)
local stan9 = dz.devices (647)
local wejscie10 = dz.devices (340)
local stan10 = dz.devices (646)
if wejscie1.state == '1' then
stan1.switchOff ()
elseif wejscie1.state == '3' then
stan1.switchOn ()
end
if wejscie2.state == '1' then
stan2.switchOff ()
elseif wejscie2.state == '3' then
stan2.switchOn ()
end
if wejscie3.state == '1' then
stan3.switchOff ()
elseif wejscie3.state == '3' then
stan3.switchOn ()
end
if wejscie4.state == '1' then
stan4.switchOff ()
elseif wejscie4.state == '3' then
stan4.switchOn ()
end
if wejscie5.state == '1' then
stan5.switchOff ()
elseif wejscie5.state == '3' then
stan5.switchOn ()
end
if wejscie6.state == '1' then
stan6.switchOff ()
elseif wejscie6.state == '3' then
stan6.switchOn ()
end
if wejscie7.state == '1' then
stan7.switchOff ()
elseif wejscie7.state == '3' then
stan7.switchOn ()
end
if wejscie8.state == '1' then
stan8.switchOff ()
elseif wejscie8.state == '3' then
stan8.switchOn ()
end
end
}