Witajcie w pierwszym moim poście:)
Taki plan jest - Domoticz zbiera informacje z czujek satela. Na bazie naruszenia trzech strategicznych czujek domoticz włącza pompę cyrkulacyjną na dwie minuty (oczywiście pompa jest podłączona pod przełącznik z zainstalowaną Tasmotą:).
Chciałbym jednak aby uruchomiona raz pompa na dwie minuty, nie reagowała na kolejne naruszenia z czujek przez n-czas, no bo przecież nie ma potrzeby ciągłego uruchamiania pompy jeśli już przetoczyła wodę a my znajdujemy się ciągle w obszarze naruszania czujek. Macie jakiś pomysł
Może w skrypcie który uruchamia pompę użyj zmiennej zapisywaną w Domoticzu. I teraz jak już pompa się uruchomi zwiększ czas w tej zmiennej o ile cię interesuje. Potem dopiero po spełnieniu tego warunku pozwól czujką uruchomić pompę.
Możesz też tu dać skrypt który używasz do uruchomienia pompy to może go zmodyfikuje.
Oj chyba moja wiedza nie jest jeszcze tak duża:) W następnym poście wrzucę skrypt. Sam skrypt uruchamia tylko pompe, tasmota ma PulsTime 160 który wyłącza pompę.
Dobrze by to było przepisać na dzvents. Jak będę miał chwilę to spróbuję
Podaj jeszcze idx tych czujek i pompy w Domoticzu.
@steel_rat Extra, dziękuję. Muszę zerknąć w inne możliwości poza blocky. Jeszcze chodzi za mną program do grzałki CWU, który uwzględni naszą rutynę oraz produkcję PV.
@karciu a czemu nie dołożysz czujnika temp na rurę od tej cyrkulacji ? Całe sterowanie można przenieść do tasmoty a w domoticz zrobić załączenie cyrkulacji na podstawie tych czujników , obecności telefonów domowników lub to co podpowie fantazja , pilot, przycisk na ścianie .
Zobacz sobie ten film może coś z niego zaadoptujesz https://youtu.be/o4GCdNIxGTk
@karciu Ja zrobisz tak będzie.
Tu masz skrypt
return { on = { devices = { 1,2,3,4 }, --timer = { 'every 5 minutes'}, system = { 'start', }, }, -- logging = { level = domoticz.LOG_DEBUG, marker = 'post data' }, execute = function(dz, devices) local Time = require('Time') local now = Time(dz.variables('czas_zalaczenia').value) if (devices.active and dz.time.compare(now).compare == -1) then dz.devices(10).switchOn().checkFirst().forMin(2) now = dz.time.addMinutes(15) dz.variables('czas_zalaczenia').set(now.rawDateTime) end end }
za 1,2,3,4 wstaw IDX czujek z Domoticza
za 10 IDX Włącznika od pompy z Domoticza.
forMin(2) - tu możesz zwiększyć czas pracy pompy
addMinutes(15) - czas do odblokowania pompy
utwórz zmienną typu ciąg znaków w domoticzu o nazwie "czas_zalaczenia" i ustaw jej wartość na np:. "2022-04-10 22:27:43"
@steel_rat dziękuję, nie załącza IDX 382
Zobacz czy już nie był załączony. Wartość zmiennej "czas_zalaczenia" może być ustawiona już powyżej czasu aktualnego. Testowałem ten skrypt i u mnie załączał przekaźnik. Rozumiem że masz w domoticzu przełącznik on/off na tym idx? A ta czujka ma jakie wartości jak jest alarm?
@steel_rat Co masz na myśli "Zobacz czy już nie był załaczony" ? Tak IDX 382 to pzekaźnik po MQTT
@karciu Myślę że tu chodzi o wartości czujek PIR. Niestety ja nie mam jak tego sprawdzić. A coś takiego?
return { on = { devices = { 1,2,3,4 }, --timer = { 'every 5 minutes'}, system = { 'start', }, }, -- logging = { level = domoticz.LOG_DEBUG, marker = 'post data' }, execute = function(dz, devices) local Time = require('Time') local now = Time(dz.variables('czas_zalaczenia').value) if (devices.text != "1" and dz.time.compare(now).compare == -1) then dz.devices(10).switchOn().checkFirst().forMin(2) now = dz.time.addMinutes(15) dz.variables('czas_zalaczenia').set(now.rawDateTime) end end }
No i teraz powinna być blokada na 15 minut
@steel_rat wygląda na to że jest:) a gdyby jeszcze do tego wprowadzić zmienną w postaci - włącz tylko między godziną a godziną ? Przecież nie ma potrzeby włączać cyrkulacji podczas nocnego sikania 🙂
Pewnie i nie ma sensu ale czy zawsze? I tu jest diabeł pochowany. Wszystko zależy od tego co jednak potrzebujemy. Bo np.: może jednak będzie potrzeba się wykąpać np. o 12 w nocy? Mogę np dodać warunek o wschodzie i zachodzie słońca ale wtedy jest za wcześnie na blokadę.
Może np blokować od północy do np 5 rano?
@steel_rat Mam pomysł - jeśli alarm jest zakodowany wtedy nie uruchamiaj
To zmień to
if (devices.text != "1" and dz.time.compare(now).compare == -1)
na
if (devices.text != "1" and dz.time.compare(now).compare == -1 and devices(<IDX_gdzie_jest_status_alarmu).text == "normal")
Patrzę w logi tasmoty i widzę, że po implementacji Twojego skryptu, Power2 zamiast na 3 minuty (tak zmieniłem), włącza się wyłącznie na krótki pik, a często jednak pracuje tak jak powinien (3 minuty). Jakiś pomysł ?
dz.devices(10).switchOn().checkFirst().forMin(3)
To włącza pompę na 3 minuty, wcześniej sprawdzając jej stan. Może zmień na
dz.devices(10).switchOn().forMin(2)