Powiadomienia
Wyczyść wszystko

Domoticz - wysyłanie danych z zadanej temp termostatu do modułu ...

15 Wpisów
2 Użytkownicy
0 Reactions
1,002 Wyświetleń
 mjab
(@mjab)
Wpisów: 21
Praktykant
Autor tematu
 

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 🙂

 
Dodane : 28/08/2022 9:15 pm
Tagi tematu
isom
 isom
(@isom)
Wpisów: 5170
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@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.

 

 
Dodane : 29/08/2022 3:57 pm
 mjab
(@mjab)
Wpisów: 21
Praktykant
Autor tematu
 

@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 :

 
Dodane : 29/08/2022 6:41 pm
isom
 isom
(@isom)
Wpisów: 5170
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@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 ? 

 
Dodane : 30/08/2022 7:07 am
 mjab
(@mjab)
Wpisów: 21
Praktykant
Autor tematu
 

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ć?

 
Dodane : 30/08/2022 5:31 pm
 mjab
(@mjab)
Wpisów: 21
Praktykant
Autor tematu
 

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.

 
Dodane : 30/08/2022 5:43 pm
isom
 isom
(@isom)
Wpisów: 5170
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

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

 
Dodane : 30/08/2022 6:31 pm
 mjab
(@mjab)
Wpisów: 21
Praktykant
Autor tematu
 
Dodane przez: @isom

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:

jOgrzewanie1

A tak samo urządzenie:

20220831 094716

 

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.

 
Dodane : 31/08/2022 8:46 am
 mjab
(@mjab)
Wpisów: 21
Praktykant
Autor tematu
 
Dodane przez: @isom

Ż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ę .

 
Dodane : 31/08/2022 8:53 am
 mjab
(@mjab)
Wpisów: 21
Praktykant
Autor tematu
 
Dodane przez: @isom

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ę 😛

 
Dodane : 31/08/2022 9:00 am
isom
 isom
(@isom)
Wpisów: 5170
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 
Dodane przez: @mjab

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ć 

 
Dodane : 31/08/2022 6:05 pm
 mjab
(@mjab)
Wpisów: 21
Praktykant
Autor tematu
 
Dodane przez: @mjab
Dodane przez: @isom

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? 🙂

 
Dodane : 31/08/2022 7:18 pm
 mjab
(@mjab)
Wpisów: 21
Praktykant
Autor tematu
 

Yyy... a tu zamieszczam krótki film o podstawach jak to wygląda i działa 🙂 - https://youtu.be/BRDUzrwS5Go

 
Dodane : 31/08/2022 7:42 pm
isom
 isom
(@isom)
Wpisów: 5170
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@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	
}
 
Dodane : 31/08/2022 9:05 pm
 mjab
(@mjab)
Wpisów: 21
Praktykant
Autor tematu
 

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ł.

 
Dodane : 01/09/2022 6:31 pm
Udostępnij: