Witam,
mam nietypowy problem ... potrzebuję w Domoticz by po zmianie temperatury w danych z "zadanej temperatury termostatu" ta została wysłana za pomocą url.
np. ustawiam w termostacie 22,5'C i teraz Domoticz wysyła taki link http://192.168.0.6/ustaw/set_temp=22.5
Moduł ogrzewania mojej konstrukcji wysyła dane o temperaturach i ustawionych na wyświetlaczu parametrach do Domoticz poprawnie, ale za nic nie wiem jak po zmianie w Domotcz zadanej temperatury wysłać ją do modułu.
Pomocy 🙂
@mjab moja propozycja, dość prosta w realizacji. Tworzysz sobie przełącznik wyboru gdzie każdy poziom (Level) ustawia inną temperaturę na SetPoint, można to w prosty sposób ułożyć w blokly . W akcjach tego przełącznika wstawiasz url dla każdej temperatury.
@isom : ale ja potrzebuje żeby temperatura była regulowana "termostatem" i tu jest kłopot 🙂 O przełączniku wyboru wiem.
Jak z wirtualnego termostatu wysyłać zmiany do modułu ogrzewania? 🙂
Dla jasności mówię o takim termostacie :
@mjab a co stoi na przeszkodzie żeby regulował tym termostatem przełącznik wyboru ? Ile takich zmian planujesz w ciągu doby ? Pięć , dziesięć , czy jeszcze więcej ?
Znaczy chyba się nie rozumiemy 🙂
Jak w panelu sterowania ogrzewaniem ustawię np. 22.5'C to system (na bazie ESP32) wyśle do Domoticz poprawnie dane zadane w ogrzewaniu. A teraz chcę by po zmianie tego parametru te wysłały się do ogrzewania (ESP32).
Dlaczego nie może być to przycisk wyboru? - Ponieważ regulacja temperatury jest od 15.0'C co 0.1 aż do 30.0'C Ilość opcji powalała by.
Tak więc trzeba zrobić takie coś by po zmianie zadanej temperatury w Domoticz (termostat) ta została wysłana do ESP32. I jak to zrobić?
Dodam jeszcze że moduł (samodzielny) ogrzewania wyglądał w dniu projektowania tak - https://youtu.be/tpB2OZ8GU1Q - i jest od ponad roku już zainstalowany i działa poprawnie. Pozostaje tylko kwestia sterowania nim za pomocą Domoticz.
No i robi się jaśniej , tylko nie rozumiem dlaczego jeden ESP nie może wysłać bezpośrednio do drugiego, ale to nie mój system.
Żeby cokolwiek wysłać z domoticz w takiej formie potrzeba znacznie więcej informacji np autoryzacja dostępu do tego modułu itp, ale ok powiedzmy że to nie jest problem , można użyć prostego skryptu, który każdą zmianę termostatu pokaże w logach i wyśle na wskazany url . Poniżej przykład, za wartość nastawy np 22,5 trzeba podstawić "SetTemp" czyli to co się pokaże w logach. Sam url trzeba sobie wstawić taki jaki pasuje do tego swojego tajemniczego projektu.
local TERMOSTAT = 'Normal' -- Nazwa termostatu w domoticz return { on = { devices = { TERMOSTAT, } }, execute = function(dz, device) local SetTemp = dz.devices(TERMOSTAT).setPoint dz.log('Termostat ustawiony na '.. SetTemp , dz.LOG_INFO) dz.openURL({ url = 'http://IP//data.json?heater=.. SetTemp', method = 'GET', }) end }
Jest to skrypt dz Vents i jako taki należy wklejać w zdarzeniach
Zmiany w samym skrypcie to nazwa termostatu w domoticz i url , dopasowany do tego kodu arduino. Po zmianach zmieniamy nastawę i sprawdzamy logi domoticza , jeśli wszystko jest ok to log zwróci "Termostat ustawiony na xx" , gdzie xx to wartość zadana
No i robi się jaśniej , tylko nie rozumiem dlaczego jeden ESP nie może wysłać bezpośrednio do drugiego, ale to nie mój system.
System używa do komunikacji technologii PJON SoftwareBitBang i ma w sobie kartę Ethernet. Tak więc moduł ogrzewania tłumaczy na nam znany standard LAN komunikację PJON i jest całkowicie niezależny od Domoticz. Jednak wysyła do Domoticz obecne parametry z czujników (temperatura, wingotność, ciśnienie i co2) oraz wysyła ustawienia zadane termostatu. Pilnuje tez otwarcia okien czy drzwi działowych w mieszkaniu oraz temperatury grzejników na odpływie z grzejnika.
Wszystkie dane są przez moduł aktualizowane magistralą PJON i te które się zmieniły są wysłane do Domoticz. I to działa poprawnie. Uznałem tylko że po 2 latach fajnie by było wreszcie uruchomić sterowanie tym systemem przez Domoticz bo takie tez przewidziałem. I wszystko również zadziałało, włączanie i wyłączanie ogrzewania, terowanie konkretnymi strefami itd... No tylko nie wiem jak wysłać nastawy termostatu do niego. Ręcznie działa, ale nie z Domoticz.
Tak wygląda panel HTTP:
A tak samo urządzenie:
PS. Dodam jeszcze że projekt jest tak rozbudowany że program nie mieścił się w pamięci ESP32 😛 i musiałem troszkę odpuścić. A sam projekt tworzyłem łącznie rok. Budowa urządzenia ok miesiąc, 11 miesięcy program. 🙂 Jest to tylko jeden z wielu układów który zbudowałem zupełnie sam. Od obudowy i elektroniki do oprogramowania. Wszystkie układy (w tym ten od ogrzewania) można aktualizować zdalnie. Po wydaniu odpowiedniej komendy GET urządzenie włącza swoje WiFi i pobiera zadany plik bin by się przeprogramować. W normalnej pracy WiFi jest wyłączone i system korzysta z magistrali PJON.
Żeby cokolwiek wysłać z domoticz w takiej formie potrzeba znacznie więcej informacji np autoryzacja dostępu do tego modułu itp, ale ok powiedzmy że to nie jest problem
Tak, to nie problem, moduł ogrzewania po prostu dostaje informacje w formie GET. Przyjmuje informacje z 2 adresów IP, jeden to serwer Domoticz, drugi to (w celu testów) mój PC.
np. zmiana temperatury w salonie : http://192.168.0.6/ustaw/set_salon=21.5
I teraz w salonie będzie pilnował 21.5'C Oczywiście przyjmie te dane tylko z 2 adresów IP 🙂
Ważne by symbol przecinka , zamienić na kropkę .
local TERMOSTAT = 'Normal' -- Nazwa termostatu w domoticz return { on = { devices = { TERMOSTAT, } }, execute = function(dz, device) local SetTemp = dz.devices(TERMOSTAT).setPoint dz.log('Termostat ustawiony na '.. SetTemp , dz.LOG_INFO) dz.openURL({ url = 'http://IP//data.json?heater=.. SetTemp', method = 'GET', }) end }
OK, a teraz potrzebuje by łącznie 4 termostaty tak obsługiwać. Do tej pory walczyłem z LUA, dz Vents totalnie nie znam. 🙂
No i oczywiście przecinek muszę wysłać jako kropkę 😛
OK, a teraz potrzebuje by łącznie 4 termostaty tak obsługiwać.
Najpierw sprawdź czy jeden będzie działał i napisz czy te trzy pozostałe mają wysyłać na jeden url ? Dla Ciebie wszystko jest oczywiste a jesteś tak oszczędny w pisaniu, że wszystko trzeba wyciągać
Najpierw sprawdź czy jeden będzie działał i napisz czy te trzy pozostałe mają wysyłać na jeden url ?
Ok działa taka wersja kodu :
local TERMOSTAT = 'Zadana Temp. Salon' -- Nazwa termostatu w domoticz return { on = { devices = { TERMOSTAT, } }, execute = function(dz, device) local SetTemp = dz.devices(TERMOSTAT).setPoint dz.log('Termostat w Salonie zostal ustawiony na '.. SetTemp , dz.LOG_INFO) dz.openURL({ url = 'http://192.168.0.6/ustaw/set_salon=' .. SetTemp, method = 'GET', }) end }
Każdy z termostatów ma nieco inny URL, znaczy np. w Salonie jest jak w przykładowym wyżej kodzie. Znowu sypialnia ma http://192.168.0.6/ustaw/set_sypialnia= itd ... 🙂 Tak więc można przyjąć że każdy termostat ma inny URL. 🙂
Na ten moment pomogłeś mi rozwalić problem który nigdzie nawet w angielskojęzycznym Internecie nie został rozwiązany. I tu już dziękuje 🙂 Mogę liczyć na wersję rozwiniętą na 4 termostaty i każdy z innym URL? 🙂
Yyy... a tu zamieszczam krótki film o podstawach jak to wygląda i działa 🙂 - https://youtu.be/BRDUzrwS5Go
@mjab masz tu wersję dla dwóch termostatów , rozbuduj sobie o kolejne dwa . Chyba że chcesz żeby przy aktualizacji dowolnego z czterech , wszystkie wysłały swoje ustawienia to napisz . W tej wersji wysyła ten który został aktualizowany ( zmiana nastawy)
local TERMOSTAT = 'Zadana Temp. Salon' -- Nazwa termostatu w domoticz local TERMOSTAT1 = 'Zadana Temp. Sypialnia' -- Nazwa drugiego termostatu w domoticz return { on = { devices = { TERMOSTAT, TERMOSTAT1 } }, execute = function(dz, device) local SetTemp = dz.devices(TERMOSTAT).setPoint local SetTemp1 = dz.devices(TERMOSTAT1).setPoint if (device.name == TERMOSTAT) then dz.log('Termostat ustawiony na '.. SetTemp , dz.LOG_INFO) dz.openURL({ url = 'http://192.168.0.6/ustaw/set_salon=' .. SetTemp, method = 'GET', }) end if (device.name == TERMOSTAT1) then dz.log('Termostat ustawiony na '.. SetTemp1 , dz.LOG_INFO) dz.openURL({ url = 'http://192.168.0.6/ustaw/set_sypialnia=' .. SetTemp1, method = 'GET', }) end end }
OK, wyrzeźbiłem za Twoją pomocą kod który działa, wygląda to tak :
local TERMOSTAT1 = 'Zadana Temp. Salon' local TERMOSTAT2 = 'Zadana Temp. Łazienka' local TERMOSTAT3 = 'Zadana Temp. u Filipa' local TERMOSTAT4 = 'Zadana Temp. Sypialnia' return { on = { devices = { TERMOSTAT1, TERMOSTAT2, TERMOSTAT3, TERMOSTAT4 } }, execute = function(dz, device) if (device.name == TERMOSTAT1) then local SetTemp = dz.devices(TERMOSTAT1).setPoint dz.log('Termostat w Salonie zostal ustawiony na '.. SetTemp , dz.LOG_INFO) dz.openURL({ url = 'http://192.168.0.6/ustaw/set_salon=' .. SetTemp, method = 'GET', }) end if (device.name == TERMOSTAT2) then local SetTemp = dz.devices(TERMOSTAT2).setPoint dz.log('Termostat w Łazience zostal ustawiony na '.. SetTemp , dz.LOG_INFO) dz.openURL({ url = 'http://192.168.0.6/ustaw/set_lazienka=' .. SetTemp, method = 'GET', }) end if (device.name == TERMOSTAT3) then local SetTemp = dz.devices(TERMOSTAT3).setPoint dz.log('Termostat u Filipa zostal ustawiony na '.. SetTemp , dz.LOG_INFO) dz.openURL({ url = 'http://192.168.0.6/ustaw/set_ufilipa=' .. SetTemp, method = 'GET', }) end if (device.name == TERMOSTAT4) then local SetTemp = dz.devices(TERMOSTAT4).setPoint dz.log('Termostat w Sypialni zostal ustawiony na '.. SetTemp , dz.LOG_INFO) dz.openURL({ url = 'http://192.168.0.6/ustaw/set_sypialnia=' .. SetTemp, method = 'GET', }) end end }
Bardzo dziękuję za pomoc 🙂 Sam bym tego nie rozwiązał.