UWAGA: Strona oraz Forum Smart'ny Dom nie będzie dostępne 23 Grudnia 2024 ze względu na przenoszenie serwisu na mocniejszą maszynę.
W tym czasie polecam poświęcenie swojego czasu na pomoc partnerowi w przygotowaniu udanych Świąt 😉
Za niedogodności z góry przepraszam, admin
Witam
Potrzebuję pomocy w zrobieniu blockly w zadanym czasie :
Jeżeli w dniach od poniedziałku do piątku w zakresie czasowym od 08:05 do 15:55 pojawi się jakiś telefon domownika w sieci i domoticz po dodatku alive go wyszuka to zadziała blockly, sprawdzi sobie żeby załączyć w tym czasie pompę obiegową do ciepłej wody jeżeli natomiast w tym czasie któryś z telefonów zniknie wyłączy pompę .
Już kiedyś coś takiego robiłem ale nie mogę sobie przypomnieć bo chyba rozwiązałem temat jakimś innym sposobem .
Stworzyłem coś takiego ale nie działa .
ja bym to rozdzielił
- telefony osobno, tel1 lub tel2 = var1 (zmienna użytkownika)
- warunek czasowy i var1 = pompa (wł / wył)
np.
zamiast "roboczy" użyj funkcji on / off
teraz tak myślę czy zamiast takiego blockly odnośnie dnia tyg i godzin (Roboczego) to nie lepiej to zrobić tak żeby stworzyć przełącznik, zrobić w nim harmonogram godzinno dniowy i Powiązać z nim blockly ?
To zrobiłem tak jak napisałem na przełączniku i śmiga załącza i rozłącza tylko jak dodać większą ilość telefonów bo chcę doklepać wszystkich użytkowników w domu, czy pod każdego użytkownika oddzielny blockly - kurde dawno nic nie dłubałem i wszystko zapomniałem a teraz kwarantanna i omicron i trzeba trochę popoprawiać 😉
Niby wczoraj na wymuszeniu funkcji zadziałało a jednak dziś rano byłem w domu, telefon połączony, czasówka się załączyła a pompa nie działała. Po wyłączeniu na 3 minuty wifi i włączeniu w telefonie pompa ruszyła.
@wojtek_gtx może lepiej tak
return { on = { timer = { 'between 8:05 and 15:55 on mon,tue,wed,thu,fri'}, devices = {'Tel 1','Tel 2', 'Tel 3'} -- nazwy przelacznikow telefony }, logging = { level = domoticz.LOG_DEBUG, -- zmien na domoticz.LOG_ERROR, gdy skrypt bedzie Ok marker = "Pompa Cyrkulacja" }, execute = function(dz, item) local t1 = dz.devices('Tel 1') local t2 = dz.devices('Tel 2') local t3 = dz.devices('Tel 3') local p = dz.devices('Pompa') if dz.time.matchesRule('between 8:05 and 15:55 on mon,tue,wed,thu,fri') and (t1.state == 'On' or t2.state == 'On' or t3.state == 'On') then p.switchOn().checkFirst() else p.switchOff() end end }
Telefonów możesz dodać więcej , tylko wpisz poprawne nazwy przełączników , pompy i telefonów . Skrypt to dzvents oczywiście
Bardzo dziękuję .
Skrypt wklejony, nazwy pozmieniane, błędami nie sadzi więc poczekam do jutra i sprawdzę czy zadziała .
Co trzeba by zmienić w tym skrypcie żeby załączał jakieś przełączniki po wykryciu telefonu ale z wykluczeniem opcji godzinowej i dni po prostu zawsze gdy widzi telefon ?
@wojtek_gtx usuwasz wszystko co dotyczy timera czyli będzie jeszcze prościej
return { on = { devices = {'Tel 1','Tel 2', 'Tel 3'} -- nazwy przelacznikow telefony }, logging = { level = domoticz.LOG_DEBUG, -- zmien na domoticz.LOG_ERROR, gdy skrypt bedzie Ok marker = "Pompa Cyrkulacja" }, execute = function(dz, item) local t1 = dz.devices('Tel 1') local t2 = dz.devices('Tel 2') local t3 = dz.devices('Tel 3') local p = dz.devices('Pompa') if t1.state == 'On' or t2.state == 'On' or t3.state == 'On' then p.switchOn().checkFirst() else p.switchOff() end end }
Przy tym drugim skrypcie jak ktoś wyłączy pompę , przy obecnych telefonach w domu to dopiero zmiana statusu dowolnego telefonu zmieni stan pompy, żeby temu zapobiec można sprawdzać stan co minutę i aktualizować , czyli nawet jak wyłączysz pompę to po max minucie włączy się znowu gdy nawet jeden telefon będzie On
return { on = { timer = {'every minute'}, devices = {'Tel 1','Tel 2', 'Tel 3'} -- nazwy przelacznikow telefony }, logging = { level = domoticz.LOG_DEBUG, -- zmien na domoticz.LOG_ERROR, gdy skrypt bedzie Ok marker = "Pompa Cyrkulacja" }, execute = function(dz, item) local t1 = dz.devices('Tel 1') local t2 = dz.devices('Tel 2') local t3 = dz.devices('Tel 3') local p = dz.devices('Pompa') if item.isTimer or item.isDevice then if t1.state == 'On' or t2.state == 'On' or t3.state == 'On' then p.switchOn().checkFirst() else p.switchOff() end end end }
Taka sytuacja że skrypt pięknie się załączył w zakresie czasowym ustawionym w skrypcie.
Pompa cały czas załączona aż do 21 gdy rozłączyłem tel od wifi pompa się wyłączyła i po podłączeniu ponownym nie załączyła a mam ustawiony timer już nie zależny od telefnów na przełączniku od 16 do 23:30 cały czas załączona w tygodniu a w weekend od 08:00 do 23:30
@wojtek_gtx ok skoro masz timery w samym przełączniku pompy to zmień to na tak jak poniżej , wtedy skrypt będzie reagował na przełącznik pompy tylko w zakresie czasowym
return { on = { timer = { 'between 8:05 and 15:55 on mon,tue,wed,thu,fri'}, devices = {'Tel 1','Tel 2', 'Tel 3'} -- nazwy przelacznikow telefony }, logging = { level = domoticz.LOG_DEBUG, -- zmien na domoticz.LOG_ERROR, gdy skrypt bedzie Ok marker = "Pompa Cyrkulacja" }, execute = function(dz, item) local t1 = dz.devices('Tel 1') local t2 = dz.devices('Tel 2') local t3 = dz.devices('Tel 3') local p = dz.devices('Pompa') if dz.time.matchesRule('between 8:05 and 15:55 on mon,tue,wed,thu,fri') and (t1.state == 'On' or t2.state == 'On' or t3.state == 'On') then p.switchOn().checkFirst() elseif dz.time.matchesRule('between 8:05 and 15:55 on mon,tue,wed,thu,fri') and (t1.state == 'Off' and t2.state == 'Off' and t3.state == 'Off') then p.switchOff() end end }