Sterowanie ogrzewan...
 
Powiadomienia
Wyczyść wszystko

Pomoc Sterowanie ogrzewaniem domu - tutorial od zielonego do działającego

63 Wpisów
4 Użytkownicy
4 Reactions
3,423 Wyświetleń
(@mig41)
Wpisów: 621
Ekspert
 

Krótko ,musisz w funkcji "Praca pompy" ustawić global ( global.set) , a w funkcji Podłogówka ją pobierać ( global.get a na razie masz flow.get...). 

Coś jak tu: https://stevesnoderedguide.com/node-red-variables

Próbuj 🙂

 
Dodane : 30/04/2023 6:39 pm
isom
 isom
(@isom)
Wpisów: 5166
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Dodane przez: @marekmazurek

Podłogówka hula aż  miło jednak trzeba zrobić krok dalej

Chyba nie tak do końca hula aż miło, możesz napisać co chcesz uzyskać sprawdzając gotowość pompy do pracy w funkcji odpowiedzialnej za załączenie zaworu? Przecież załączenie tej pompy uzależniasz od stanu tych zaworów. Pompa się raczej nigdy nie włączy jak temp bufora nie będzie wyższa od zadanej, więc po co to jeszcze sprawdzać w drugim przepływie? 

Druga ciekawa rzecz to sprawdzanie temperatur, o ile wyłączenie zaworu w salonie uzależniasz od 5 czujników, gdzie wszystkie muszą mieć niższą wartość od zadanej, to już załączenie tego zaworu pod warunkiem, że wszystkie 5 muszą wskazywać niższą temp od zadanej jest średnio fajne ( moim zdaniem), np czujnik przy kominku może długo wskazywać wyższą temp niż pozostałe i ogrzewanie się nie włączy. Może lepiej obliczać średnią z tych 5 szt i na jej podstawie włączać ten zawór.

To tak poza konkursem, co do Twojego pytania, dlaczego błędy? Użycie zmiennej flow powoduje, że jest ona brana pod uwagę tylko w tym konkretnym przepływie, więc nawet gdybyś gdzieś w przepływie pompy ustawił taką zmienną, to i tak w innym przepływie ta zmienna nie będzie brana pod uwagę. Ty tej zmiennej nie ustawiłeś nigdzie, a jak jednak się upierasz przy tym dublowaniu sprawdzania gotowości pompy, to masz dwa wyjścia, albo połączyć wszystko i używać jednego noda inject ( po co dwa takie same), albo tak jak wspomniał  @mig41 użyć zmiennej globalnej, pamiętając, że będzie ona miała wpływ na wszystkie przepływy.

 
Dodane : 30/04/2023 9:08 pm
(@marekmazurek)
Wpisów: 47
Kontrybutor Donator 2K23
Autor tematu
 

Dodane przez: @isom

Chyba nie tak do końca hula aż miło, możesz napisać co chcesz uzyskać sprawdzając gotowość pompy do pracy w funkcji odpowiedzialnej za załączenie zaworu? Przecież załączenie tej pompy uzależniasz od stanu tych zaworów. Pompa się raczej nigdy nie włączy jak temp bufora nie będzie wyższa od zadanej, więc po co to jeszcze sprawdzać w drugim przepływie? 

No to tak jak widzisz pojawiają się  różnice między założeniami programistów a fizyczną instalacją. Teoretycznie dobrze przemyślany soft powinien działać a kiedy podepniesz go do instalacji to dupa. W tym przypadku buduję soft na istniejącej instalacji i krok po kroku eliminuje niedoróbki. W mojej instalacji zainstalowane są elektro głowice zaworów NC Oznacza to bez napięciowo zamknięte. Jak łatwo przewidzieć otwarte pobierają prąd. Wprawdzie to tylko 1W ale po co mają być otwarte jeśli pompa nie działa?

1W x10 głowic to 10W 

Co chcę osiągnąć?

W tej chwili działanie pompy uzależnione jest od stanu zaworów ale stan zaworów nie jest uzależniony od stanu pompy.

1. Pompa ma działać przy spełnieniu dwóch warunków. TEMP zadana < od Temp Bufora i stan grupy zaworów ON i tak działa.

2. Stan poszczególnych zaworów ustawiany jest temperaturą zadaną pomieszczenia i taki zawór otworzy się nawet kiedy stan pompy jest OFF. Zużywa wtedy bez sensu prąd więc Stan pompy ON powinien być warunkiem otwarcia zaworu.

Dodane przez: @isom

Druga ciekawa rzecz to sprawdzanie temperatur, o ile wyłączenie zaworu w salonie uzależniasz od 5 czujników, gdzie wszystkie muszą mieć niższą wartość od zadanej, to już załączenie tego zaworu pod warunkiem, że wszystkie 5 muszą wskazywać niższą temp od zadanej jest średnio fajne ( moim zdaniem), np czujnik przy kominku może długo wskazywać wyższą temp niż pozostałe i ogrzewanie się nie włączy. Może lepiej obliczać średnią z tych 5 szt i na jej podstawie włączać ten zawór.

To jest podłogówka. Mimo że jest anhydrytowa a nie betonowa to i tak jej bezwładność  powoduje wyrównanie mniej więcej temperatur. Te pięć czujek zamontowałem w celu obserwacji rozkładania się temperatur w pętli. W założeniu miała być wybrana jedna w najbardziej optymalnym miejscu ale średnia z pięciu też jest warta przetestowania. W pętli temperatura czynnika potrafi się mocno różnić w zależności od tego który to metr rurki 😀 Wskażesz jak zmienić kod funkcji by zbierał średnią z czujek?

 
Dodane : 01/05/2023 7:22 am
isom
 isom
(@isom)
Wpisów: 5166
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Dodane przez: @marekmazurek

1W x10 głowic to 10W 

Ciekawe podejście do oszczędności, ale zakładajac, że to bezsensowne zużycie będzie max 1 godzinę na 24h, w skali roku daje to 4 zł.

Znacznie więcej zużyje maszyna z HA obciążona bezsensownym odpytywaniem co 10 sek o stan bufora. Nie widziałem bufora, w którym w ciągu 10 sek temperatura spada o 0,5 stopnia, chyba że to pojemność czajnika do herbaty.

Robiac tak częste odczyty zmuszamy procesor do bardziej wydajnej pracy co powoduje zwiększenie poboru prądu przez serwer, żeby było ciekawiej to zwiększone zużycie utrzymuje się przez całą dobę, a nie godzinę czy nawet dwie.

To tyle w temacie oszczędności.

Średnią może za Ciebie wyliczyć HA, przy użyciu pomocnika, albo masz tu przykład dla dwóch czujników, ze sprawdzaniem czy oba czujniki są ok, tzn czy wysyłają poprawne wskazania.

let vt1 = flow.get('t1');
let vt2 = flow.get('t2');

if ((vt1 != -280) && (vt2 != -280)){
    let wynik = (vt1 + vt2) / 2;
    msg.payload = wynik.toFixed(1);
    return [msg,null, null, null];
}

if ((vt1 != -280)) {
    msg.payload = vt1;
    return [null, msg, null, null];
}

if ((vt2 != -280)) {
    msg.payload = vt2;
    return [null, null, msg, null];
}
return [null, null, null, msg];
 
Dodane : 01/05/2023 8:37 am
(@marekmazurek)
Wpisów: 47
Kontrybutor Donator 2K23
Autor tematu
 

Dodane przez: @isom

Ciekawe podejście do oszczędności, ale zakładajac, że to bezsensowne zużycie będzie max 1 godzinę na 24h, w skali roku daje to 4 zł.

Znacznie więcej zużyje maszyna z HA obciążona bezsensownym odpytywaniem co 10 sek o stan bufora. Nie widziałem bufora, w którym w ciągu 10 sek temperatura spada o 0,5 stopnia, chyba że to pojemność czajnika do herbaty.

Robiac tak częste odczyty zmuszamy procesor do bardziej wydajnej pracy co powoduje zwiększenie poboru prądu przez serwer, żeby było ciekawiej to zwiększone zużycie utrzymuje się przez całą dobę, a nie godzinę czy nawet dwie.

[/quote

Na razie potrzebuję częstych odczytów bo ułatwiają obserwację. Kiedy będzie to gotowe zmienię i to

 

 
Dodane : 01/05/2023 8:47 am
isom
 isom
(@isom)
Wpisów: 5166
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@marekmazurek ok tylko nie testuj zbyt długo, bo takie testy z większym obciążeniem mogą zniweczyć oszczędności kilku lat 🙂 Mam na myśli tą kontrolę zawory -  pompa. Dodatkowo pamiętaj, że przy każdym restarcie NR , zmienne zapisane w pamięci są kasowane, więc jak coś pójdzie nie tak i pompa pochodzi 20 min na sucho, to zniweczy oszczędności kilku miesięcy.

Przepraszam za ten ton, ale śmieszy mnie takie podejście do oszczędzania. Gdzieś pownien być margines 🙂

 
Dodane : 01/05/2023 10:01 am
(@marekmazurek)
Wpisów: 47
Kontrybutor Donator 2K23
Autor tematu
 

Dodane przez: @isom

@marekmazurek ok tylko nie testuj zbyt długo, bo takie testy z większym obciążeniem mogą zniweczyć oszczędności kilku lat 🙂 Mam na myśli tą kontrolę zawory -  pompa. Dodatkowo pamiętaj, że przy każdym restarcie NR , zmienne zapisane w pamięci są kasowane, więc jak coś pójdzie nie tak i pompa pochodzi 20 min na sucho, to zniweczy oszczędności kilku miesięcy.

Przepraszam za ten ton, ale śmieszy mnie takie podejście do oszczędzania. Gdzieś pownien być margines 🙂

To nie jest podejście do oszczędzania tylko do precyzji. Wiem jak to ma działać lecz nie wiem jak napisać kod który wymusi takie działanie. Oczywiście mogę iść na kompromis ale w takim wypadku równie dobrze mogę zastosować zdalne sterowanie mechaniczne z sterowaniem zdalnym---- żoną przez komórkę :D:D:D

 

 
Dodane : 01/05/2023 10:12 am
isom
 isom
(@isom)
Wpisów: 5166
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Dodane przez: @marekmazurek

nie wiem jak napisać kod który wymusi takie działanie

Przecież dostałeś podpowiedzi, trzeba albo połączyć wszystko w jeden przepływ i funkcji od pompy dodać sobie 

 flow.set('Praca_pompy', 'true');

albo przy dwóch oddzielnych przepływach ustawić global.set ....... , lub wstawić na wyjściu funkcji od pompy pomocnika input boolean  którego włączenie będzie sygnalizowało gotowość pompy do włączenia, sprawdzasz stan tego pomocnika przy każdym zaworze i masz swoje "oszczędności"

 
Dodane : 01/05/2023 6:25 pm
(@marekmazurek)
Wpisów: 47
Kontrybutor Donator 2K23
Autor tematu
 

No dobra .Global.set i global.get nie ogarnąłem więc zrobiłem po swojemu. Tak to teraz wygląda:

[{"id":"1c7b99b3333d6276","type":"tab","label":"Ogrzewanie","disabled":false,"info":"","env":[]},{"id":"1a9033b6.071e8c","type":"server","name":"Home Assistant","addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"","connectionDelay":false,"cacheJson":false,"heartbeat":false,"heartbeatInterval":"","statusSeparator":"","enableGlobalContextStore":false},{"id":"b7797abfd87bc6e2","type":"server","name":"Home Assistant","addon":true},{"id":"5df05b5b9f5fbe93","type":"api-call-service","z":"1c7b99b3333d6276","name":"Pompa podłogówki OFF","server":"b7797abfd87bc6e2","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.czujniki_temperatury_pompa_podlogowki"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":950,"y":100,"wires":[[]]},{"id":"fb0c8e51fa38a367","type":"function","z":"1c7b99b3333d6276","name":"Praca_pompy","func":"let vt1 = flow.get('Bufor_2/4');\nlet vt2 = flow.get('>Bufor_2/4');\nlet vt3 = flow.get('Temp.Panorama');\nlet vt4 = flow.get('>Panorama')\nlet vt5 = flow.get('Temp.poddasze');\nlet vt6 = flow.get('>Poddasze')\nlet vt7 = flow.get('Sypialnia');\nlet vt8 = flow.get('>Sypialnia')\nlet vt9 = flow.get('Łazienka_góra');\nlet vt10 = flow.get('>Łazienka_góra')\nlet vt11 = flow.get('Północny_taras');\nlet vt12 = flow.get('>Północny_taras')\nlet vt13 = flow.get('Jadalnia');\nlet vt14 = flow.get('Wykusz');\nlet vt15 = flow.get('>Wykusz_i_jadalnia')\nlet vt16 = flow.get('Łazienka_dolna');\nlet vt17 = flow.get('Łazienka_dolna_prysznic');\nlet vt18 = flow.get('>Łazienka_dół')\nlet vt19 = flow.get('Przedpokój');\nlet vt20 = flow.get('Wejście');\nlet vt21 = flow.get('>Przedpokój')\nlet vt22 = flow.get('Przybudówka');\nlet vt23 = flow.get('>Przybudówka')\nlet vt24 = flow.get('Salon_kominek');\nlet vt25 = flow.get('Salon_telewizor');\nlet vt26 = flow.get('Salon_okno');\nlet vt27 = flow.get('Salon_kanapa');\nlet vt28 = flow.get('Salon_środek');\nlet vt29 = flow.get('>Salon')\n\nif ((vt1 > vt2 && vt3 < vt4) || (vt1 > vt2 && vt5 < vt6) \n    || (vt1 > vt2 && vt7 < vt8) || (vt1 > vt2 && vt9 < vt10)\n    || (vt1 > vt2 && vt11 < vt12) \n    || (vt1 > vt2) && (vt13 && vt14 < vt15)\n    || (vt1 > vt2) && (vt16 && vt17 < vt18)\n    || (vt1 > vt2) && (vt19 && vt20 < vt21)\n    || (vt1 > vt2 && vt22 < vt23) \n    || (vt1 > vt2) && (vt24 && vt25 && vt26 && vt27 && vt28 < vt29)) {\n    msg.payload = \"1\";\n    return [msg, null];\n}else{\n     return [null, msg];\n}","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":480,"y":100,"wires":[["03f4a73ff6143785"],["5df05b5b9f5fbe93"]]},{"id":"5e4d4e2262200d71","type":"inject","z":"1c7b99b3333d6276","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"10","crontab":"","once":true,"onceDelay":"10","topic":"","payload":"","payloadType":"date","x":70,"y":560,"wires":[["4ffd36eafc2b8b13","4c5addfa6928ed1f","315b5addc3104d14","052f1b1c0adf49fc","b9cfeef1559bdd09","dcd146abe57d03a0","e7fca0a08e55c0d2","bc72815c335a8811","779b5ec2527cd781","c95ad912952fea98"]]},{"id":"4ffd36eafc2b8b13","type":"api-current-state","z":"1c7b99b3333d6276","name":">Bufor_2/4","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"input_number.zadana_temperatura_bufora_2_4","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":">Bufor_2/4","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":90,"y":100,"wires":[["a5295427ac0a15ae"]]},{"id":"a5295427ac0a15ae","type":"api-current-state","z":"1c7b99b3333d6276","name":"Bufor_2/4","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"sensor.czujniki_temperatury_bufor_2_4","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"Bufor_2/4","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":240,"y":100,"wires":[["fb0c8e51fa38a367"]]},{"id":"03f4a73ff6143785","type":"api-call-service","z":"1c7b99b3333d6276","name":"Pompa podłogówki ON","server":"b7797abfd87bc6e2","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.czujniki_temperatury_pompa_podlogowki"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":960,"y":20,"wires":[[]]},{"id":"2cc309b08be55599","type":"api-call-service","z":"1c7b99b3333d6276","name":"Panorama ON","server":"1a9033b6.071e8c","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.czujniki_temperatury_panorama"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":800,"y":160,"wires":[[]]},{"id":"68c083ed695014a4","type":"api-call-service","z":"1c7b99b3333d6276","name":"Panorama OFF","server":"1a9033b6.071e8c","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.czujniki_temperatury_panorama"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":800,"y":220,"wires":[[]]},{"id":"4c5addfa6928ed1f","type":"api-current-state","z":"1c7b99b3333d6276","name":">Panorama","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"input_number.panorama","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":">Panorama","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":90,"y":180,"wires":[["1b6418fd818f385d"]]},{"id":"1b6418fd818f385d","type":"api-current-state","z":"1c7b99b3333d6276","name":"Temp.Panorama","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"sensor.czujniki_temperatury_panorama","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"Temp.Panorama","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":260,"y":180,"wires":[["1bd1d3d5422481b5","fb0c8e51fa38a367"]]},{"id":"ffaecbeaa63ca11a","type":"api-call-service","z":"1c7b99b3333d6276","name":"Biurko ON","server":"1a9033b6.071e8c","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.czujniki_temperatury_poddasze_biurko"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":770,"y":280,"wires":[[]]},{"id":"9b529c734ca933d9","type":"api-call-service","z":"1c7b99b3333d6276","name":"Biurko OFF","server":"1a9033b6.071e8c","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.czujniki_temperatury_poddasze_biurko"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":770,"y":320,"wires":[[]]},{"id":"315b5addc3104d14","type":"api-current-state","z":"1c7b99b3333d6276","name":">Poddasze","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"input_number.poddasze_biurko","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":">Poddasze","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":90,"y":260,"wires":[["f40477d708cca2b4"]]},{"id":"f40477d708cca2b4","type":"api-current-state","z":"1c7b99b3333d6276","name":"Temp.poddasze","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"sensor.czujniki_temperatury_poddasze_biurko","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"Temp.poddasze","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":240,"y":260,"wires":[["76fe1bdbea6b4138","fb0c8e51fa38a367"]]},{"id":"76fe1bdbea6b4138","type":"function","z":"1c7b99b3333d6276","name":"Biurko","func":"let vt1 = flow.get('Temp.poddasze');\nlet vt2 = flow.get('>Poddasze')\nlet vt3 = flow.get('Bufor_2/4');\nlet vt4 = flow.get('>Bufor_2/4');\nif ((vt1 > vt2) || (vt3 < vt4)) {\n    msg.payload = \"1\";\n    return [null, msg];\n}\nelse {\n    return [msg, null];\n} ","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":590,"y":280,"wires":[["ffaecbeaa63ca11a"],["9b529c734ca933d9"]]},{"id":"59f5f44b0069ac8e","type":"api-call-service","z":"1c7b99b3333d6276","name":"Sypialnia ON","server":"1a9033b6.071e8c","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.czujniki_temperatury_sypialnia"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":790,"y":380,"wires":[[]]},{"id":"d448e8914c0de324","type":"api-call-service","z":"1c7b99b3333d6276","name":"Sypialnia OFF","server":"1a9033b6.071e8c","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.czujniki_temperatury_sypialnia"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":800,"y":420,"wires":[[]]},{"id":"052f1b1c0adf49fc","type":"api-current-state","z":"1c7b99b3333d6276","name":">Sypialnia","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"input_number.sypialnia","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":">Sypialnia","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":90,"y":360,"wires":[["ad1694897c836c86"]]},{"id":"ad1694897c836c86","type":"api-current-state","z":"1c7b99b3333d6276","name":"Sypialnia","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"sensor.czujniki_temperatury_sypialnia","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"Sypialnia","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":220,"y":360,"wires":[["a83c22b71bdc3e2e","fb0c8e51fa38a367"]]},{"id":"a83c22b71bdc3e2e","type":"function","z":"1c7b99b3333d6276","name":"Sypialnia","func":"let vt1 = flow.get('Sypialnia');\nlet vt2 = flow.get('>Sypialnia')\nlet vt3 = flow.get('Bufor_2/4');\nlet vt4 = flow.get('>Bufor_2/4');\nif ((vt1 > vt2) || (vt3 < vt4)) {\n    msg.payload = \"1\";\n    return [null, msg];\n}\nelse {\n    return [msg, null];\n} ","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":600,"y":360,"wires":[["59f5f44b0069ac8e"],["d448e8914c0de324"]]},{"id":"acaec81dd006f95a","type":"api-call-service","z":"1c7b99b3333d6276","name":"Północny_taras ON","server":"1a9033b6.071e8c","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.czujniki_temperatury_taras_polnoc"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":810,"y":600,"wires":[[]]},{"id":"db0316c9ca5dcf0b","type":"api-current-state","z":"1c7b99b3333d6276","name":">Północny_taras","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"input_number.taras_polnocny","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":">Północny_taras","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":110,"y":620,"wires":[["c5618e5a5fc74b63"]]},{"id":"c5618e5a5fc74b63","type":"api-current-state","z":"1c7b99b3333d6276","name":"Północny_taras","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"Północny_taras","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":280,"y":620,"wires":[["a3baf5d612ac91c8","fb0c8e51fa38a367"]]},{"id":"a3baf5d612ac91c8","type":"function","z":"1c7b99b3333d6276","name":"Północny_taras","func":"let vt1 = flow.get('Północny_taras');\nlet vt2 = flow.get('>Północny_taras')\nlet vt3 = flow.get('Bufor_2/4');\nlet vt4 = flow.get('>Bufor_2/4');\nif ((vt1 > vt2) || (vt3 < vt4)) {\n    msg.payload = \"1\";\n    return [null, msg];\n}\nelse {\n    return [msg, null];\n} ","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":560,"y":620,"wires":[["acaec81dd006f95a"],["f96d57d5a9b7f8f0"]]},{"id":"f96d57d5a9b7f8f0","type":"api-call-service","z":"1c7b99b3333d6276","name":"Północny_taras OFF","server":"1a9033b6.071e8c","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.czujniki_temperatury_taras_polnoc"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":820,"y":660,"wires":[[]]},{"id":"78bea38917903d64","type":"api-call-service","z":"1c7b99b3333d6276","name":"Łazienka_góra ON","server":"1a9033b6.071e8c","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.czujniki_temperatury_lazienka_gora"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":810,"y":480,"wires":[[]]},{"id":"ecbff465d14a5969","type":"api-call-service","z":"1c7b99b3333d6276","name":">Łazienka_góraOFF","server":"1a9033b6.071e8c","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.czujniki_temperatury_lazienka_gora"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":820,"y":520,"wires":[[]]},{"id":"b9cfeef1559bdd09","type":"api-current-state","z":"1c7b99b3333d6276","name":">Łazienka_góra","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"input_number.lazienka_gora","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":">Łazienka_góra","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":100,"y":440,"wires":[["2a8fc9b4eb364f84"]]},{"id":"2a8fc9b4eb364f84","type":"api-current-state","z":"1c7b99b3333d6276","name":"Łazienka_góra","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"sensor.czujniki_temperatury_sypialnia","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"Łazienka_góra","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":260,"y":440,"wires":[["373274e1d3294fe2","fb0c8e51fa38a367"]]},{"id":"e4653eb1c30aed87","type":"api-call-service","z":"1c7b99b3333d6276","name":"Łazienka dolna ON","server":"1a9033b6.071e8c","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.czujniki_temperatury_lazienka_dol"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":810,"y":860,"wires":[[]]},{"id":"e7fca0a08e55c0d2","type":"api-current-state","z":"1c7b99b3333d6276","name":">Łazienka_dół","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"input_number.lazienka_dol","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":">Łazienka_dół","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":80,"y":760,"wires":[["b087e821b880a50d"]]},{"id":"64300c3c93e0cf1e","type":"api-current-state","z":"1c7b99b3333d6276","name":"Łazienka_dolna_prysznic","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"sensor.czujniki_temperatury_lazienka_dolna_prysznic","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"Łazienka_dolna_prysznic","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":210,"y":820,"wires":[["3d6b86f75f3bcf9e","fb0c8e51fa38a367"]]},{"id":"3d6b86f75f3bcf9e","type":"function","z":"1c7b99b3333d6276","name":"Łazienka_dół","func":"let vt1 = flow.get('Łazienka_dolna');\nlet vt2 = flow.get('Łazienka_dolna_prysznic');\nlet vt3 = flow.get('>Łazienka_dół')\nlet vt4 = flow.get('Bufor_2/4');\nlet vt5 = flow.get('>Bufor_2/4');\nif ((vt1 && vt2 > vt3) || (vt4 < vt5)) {\n    msg.payload = \"1\";\n    return [null, msg];\n}\nelse {\n    return [msg, null];\n} ","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":550,"y":820,"wires":[["e4653eb1c30aed87"],["65e09dac2d85c7b3"]]},{"id":"b087e821b880a50d","type":"api-current-state","z":"1c7b99b3333d6276","name":"Łazienka_dolna","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"sensor.czujniki_temperatury_lazienka_dolna","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"Łazienka_dolna","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":240,"y":760,"wires":[["64300c3c93e0cf1e"]]},{"id":"65e09dac2d85c7b3","type":"api-call-service","z":"1c7b99b3333d6276","name":"Łazienka dolna OFF","server":"1a9033b6.071e8c","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.czujniki_temperatury_lazienka_dol"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":820,"y":920,"wires":[[]]},{"id":"38e04e5bc5edfcac","type":"api-call-service","z":"1c7b99b3333d6276","name":"Wykusz i jadalnia ON","server":"1a9033b6.071e8c","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.czujniki_temperatury_jadalnia_i_wykusz"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":820,"y":720,"wires":[[]]},{"id":"dcd146abe57d03a0","type":"api-current-state","z":"1c7b99b3333d6276","name":">Wykusz_i_jadalnia","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"input_number.wykusz_i_jadalnia","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":">Wykusz_i_jadalnia","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":100,"y":680,"wires":[["a49f508dfc1181a8"]]},{"id":"d0a6488abc99a70f","type":"api-current-state","z":"1c7b99b3333d6276","name":"Wykusz","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"sensor.czujniki_temperatury_wykusz","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"Wykusz","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":380,"y":680,"wires":[["f10ba56ad8a14952","fb0c8e51fa38a367"]]},{"id":"f10ba56ad8a14952","type":"function","z":"1c7b99b3333d6276","name":"Wykusz i jadalnia","func":"let vt1 = flow.get('Jadalnia');\nlet vt2 = flow.get('Wykusz');\nlet vt3 = flow.get('>Wykusz_i_jadalnia')\nlet vt4 = flow.get('Bufor_2/4');\nlet vt5 = flow.get('>Bufor_2/4');\nif ((vt1 && vt2 > vt3) || (vt4 < vt5)) {\n    msg.payload = \"1\";\n    return [null, msg];\n}\nelse {\n    return [msg, null];\n} ","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":570,"y":680,"wires":[["38e04e5bc5edfcac"],["9a4a88b4c6b234ad"]]},{"id":"a49f508dfc1181a8","type":"api-current-state","z":"1c7b99b3333d6276","name":"Jadalnia","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"sensor.czujniki_temperatury_jadalnia","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"Jadalnia","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":260,"y":680,"wires":[["d0a6488abc99a70f"]]},{"id":"9a4a88b4c6b234ad","type":"api-call-service","z":"1c7b99b3333d6276","name":"Wykusz i jadalnia OFF","server":"1a9033b6.071e8c","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.czujniki_temperatury_jadalnia_i_wykusz"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":820,"y":780,"wires":[[]]},{"id":"08c99597830bdfe1","type":"api-call-service","z":"1c7b99b3333d6276","name":"Przedpokój ON","server":"1a9033b6.071e8c","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.czujniki_temperatury_przedpokoj"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":800,"y":980,"wires":[[]]},{"id":"bc72815c335a8811","type":"api-current-state","z":"1c7b99b3333d6276","name":">Przedpokój","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"input_number.przedpokoj","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":">Przedpokój","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":70,"y":880,"wires":[["6d684962463d4a7c"]]},{"id":"b0e3ece824b40448","type":"api-current-state","z":"1c7b99b3333d6276","name":"Przedpokój","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"sensor.czujniki_temperatury_przedpokoj","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"Przedpokój","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":330,"y":880,"wires":[["ead470b26d5ab52e","fb0c8e51fa38a367"]]},{"id":"ead470b26d5ab52e","type":"function","z":"1c7b99b3333d6276","name":"Przedpokój","func":"let vt1 = flow.get('Przedpokój');\nlet vt2 = flow.get('Wejście');\nlet vt3 = flow.get('>Przedpokój')\nlet vt4 = flow.get('Bufor_2/4');\nlet vt5 = flow.get('>Bufor_2/4');\nif ((vt1 && vt2 > vt3) || (vt4 < vt5)) {\n    msg.payload = \"1\";\n    return [null, msg];\n}\nelse {\n    return [msg, null];\n} ","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":550,"y":880,"wires":[["08c99597830bdfe1"],["d2750deb5285933f"]]},{"id":"6d684962463d4a7c","type":"api-current-state","z":"1c7b99b3333d6276","name":"Wejście","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"sensor.czujniki_temperatury_wejscie","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"Wejście","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":200,"y":880,"wires":[["b0e3ece824b40448"]]},{"id":"d2750deb5285933f","type":"api-call-service","z":"1c7b99b3333d6276","name":"Przedpokój OFF","server":"1a9033b6.071e8c","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.czujniki_temperatury_przedpokoj"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":800,"y":1020,"wires":[[]]},{"id":"779b5ec2527cd781","type":"api-current-state","z":"1c7b99b3333d6276","name":">Przybudówka","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"input_number.przybudowka","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":">Przybudówka","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":80,"y":980,"wires":[["3b0ff375ea3d0f87"]]},{"id":"3b0ff375ea3d0f87","type":"api-current-state","z":"1c7b99b3333d6276","name":"Przybudówka","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"sensor.czujniki_temperatury_przybudowka","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"Przybudówka","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":240,"y":980,"wires":[["31a30ed843da8d26","fb0c8e51fa38a367"]]},{"id":"31a30ed843da8d26","type":"function","z":"1c7b99b3333d6276","name":"Przybudówka","func":"let vt1 = flow.get('Przybudówka');\nlet vt2 = flow.get('>Przybudówka')\nlet vt3 = flow.get('Bufor_2/4');\nlet vt4 = flow.get('>Bufor_2/4');\nif ((vt1 > vt2) || (vt4 < vt4)) {\n    msg.payload = \"1\";\n    return [null, msg];\n}\nelse {\n    return [msg, null];\n} ","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":560,"y":980,"wires":[["79f16217d8180e7e"],["0afc2098beead37b"]]},{"id":"79f16217d8180e7e","type":"api-call-service","z":"1c7b99b3333d6276","name":"Przybudówka ON","server":"1a9033b6.071e8c","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.czujniki_temperatury_przybudowka"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":810,"y":1080,"wires":[[]]},{"id":"0afc2098beead37b","type":"api-call-service","z":"1c7b99b3333d6276","name":"Przybudówka OFF","server":"1a9033b6.071e8c","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.czujniki_temperatury_przybudowka"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":810,"y":1120,"wires":[[]]},{"id":"d956f36afadd3ff4","type":"api-call-service","z":"1c7b99b3333d6276","name":"Salon ON","server":"1a9033b6.071e8c","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.czujniki_temperatury_salon"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":780,"y":1180,"wires":[[]]},{"id":"c95ad912952fea98","type":"api-current-state","z":"1c7b99b3333d6276","name":">Salon","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"input_number.salon","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":">Salon","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":60,"y":1060,"wires":[["5a1abf0902287371"]]},{"id":"9af2f0f1901b2ee2","type":"api-current-state","z":"1c7b99b3333d6276","name":"Salon_telewizor","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"sensor.czujniki_temperatury_salon_przed_telewizorem","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"Salon_telewizor","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":80,"y":1120,"wires":[["7fb2c053ce02de10"]]},{"id":"9d12aaa9cf8ead0e","type":"function","z":"1c7b99b3333d6276","name":"Salon","func":"let vt1 = flow.get('Salon_kominek');\nlet vt2 = flow.get('Salon_telewizor');\nlet vt3 = flow.get('Salon_okno');\nlet vt4 = flow.get('Salon_kanapa');\nlet vt5 = flow.get('Salon_środek');\nlet vt6 = flow.get('>Salon')\nlet vt7 = flow.get('Bufor_2/4');\nlet vt8 = flow.get('>Bufor_2/4');\nif ((vt1 && vt2 && vt3 && vt4 && vt5 > vt6) \n|| (vt7 < vt8)) { \n    msg.payload = \"1\";\n    return [null, msg];\n}\nelse {\n    return [msg, null];\n} ","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":530,"y":1180,"wires":[["d956f36afadd3ff4"],["362a5e3bd1944346"]]},{"id":"5a1abf0902287371","type":"api-current-state","z":"1c7b99b3333d6276","name":"Salon_kominek","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"sensor.czujniki_temperatury_salon_kominek","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"Salon_kominek","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":240,"y":1060,"wires":[["9af2f0f1901b2ee2"]]},{"id":"7fb2c053ce02de10","type":"api-current-state","z":"1c7b99b3333d6276","name":"Salon_okno","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"sensor.czujniki_temperatury_salon_pod_oknem","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"Salon_okno","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":250,"y":1120,"wires":[["0c3a4e9161a05e6c"]]},{"id":"0c3a4e9161a05e6c","type":"api-current-state","z":"1c7b99b3333d6276","name":"Salon_kanapa","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"sensor.czujniki_temperatury_salon_przed_kanapa","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"Salon_kanapa","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":80,"y":1180,"wires":[["13a0b43cb2a05b32"]]},{"id":"13a0b43cb2a05b32","type":"api-current-state","z":"1c7b99b3333d6276","name":"Salon_środek","server":"1a9033b6.071e8c","version":3,"outputs":1,"halt_if":"","halt_if_type":"num","halt_if_compare":"is","entity_id":"sensor.czujniki_temperatury_salon_srodek","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"Salon_środek","propertyType":"flow","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":260,"y":1180,"wires":[["9d12aaa9cf8ead0e","fb0c8e51fa38a367"]]},{"id":"362a5e3bd1944346","type":"api-call-service","z":"1c7b99b3333d6276","name":"Salon OFF","server":"1a9033b6.071e8c","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.czujniki_temperatury_salon"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":790,"y":1240,"wires":[[]]},{"id":"1bd1d3d5422481b5","type":"function","z":"1c7b99b3333d6276","name":"Panorama","func":"let vt1 = flow.get('Temp.Panorama');\nlet vt2 = flow.get('>Panorama')\nlet vt3 = flow.get('Bufor_2/4');\nlet vt4 = flow.get('>Bufor_2/4');\nif ((vt1 > vt2)|| (vt3 < vt4)) {\n    msg.payload = \"1\";\n    return [null, msg];\n}\nelse{\n    return [msg, null]; \n} ","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":590,"y":180,"wires":[["2cc309b08be55599"],["68c083ed695014a4"]]},{"id":"373274e1d3294fe2","type":"function","z":"1c7b99b3333d6276","name":"Łazienka_góra","func":"let vt1 = flow.get('Łazienka_góra');\nlet vt2 = flow.get('>Łazienka_góra')\nlet vt3 = flow.get('Bufor_2/4');\nlet vt4 = flow.get('>Bufor_2/4');\nif ((vt1 > vt2) || (vt3 < vt4)) {\n    msg.payload = \"1\";\n    return [null, msg];\n}\nelse {\n    return [msg, null];\n} ","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":580,"y":440,"wires":[["78bea38917903d64"],["ecbff465d14a5969"]]}]
 
Dodane : 02/05/2023 4:41 pm
isom
 isom
(@isom)
Wpisów: 5166
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@marekmazurek nie chce mi się analizować całości, ale uruchamianie zaworów na pętlach zawsze gdy temp bufora będzie większa od zadanej ? po co ? To raczej "oszczędnosci" nie przyniesie i nie ma sensu.

let vt1 = flow.get('Sypialnia');
let vt2 = flow.get('>Sypialnia')
let vt3 = flow.get('Bufor_2/4');
let vt4 = flow.get('>Bufor_2/4');
if ((vt1 > vt2) || (vt3 < vt4)) {
    msg.payload = "1";
    return [null, msg];
}
else {
    return [msg, null];
} 

taki zapis funkcji to nic innego jak, puść proces na pierwsze wyjscie noda  gdy w sypialni trzeba grzać, albo gdy bufor jest ciepły.

Czyli gdy w sypialni nie trzeba grzać, ale bufor ma wyższą temp od zadanej otwórz zawór.

Tak naprawdę to interpretacja tej funkcji jest jeszcze inna, ja ją mocno uprościłem. Gdyby rozpatrywać to dosłownie to puść proces na wyjście dwa gdy bufor jest zimny lub nie potrzeba grzać w sypialni, a każdym innym przypadku puść proces na wyjście 1.

 

 
Dodane : 02/05/2023 5:57 pm
(@marekmazurek)
Wpisów: 47
Kontrybutor Donator 2K23
Autor tematu
 

Dodane przez: @isom

@marekmazurek nie chce mi się analizować całości, ale uruchamianie zaworów na pętlach zawsze gdy temp bufora będzie większa od zadanej ? po co ? To raczej "oszczędnosci" nie przyniesie i nie ma sensu.

let vt1 = flow.get('Sypialnia');
let vt2 = flow.get('>Sypialnia')
let vt3 = flow.get('Bufor_2/4');
let vt4 = flow.get('>Bufor_2/4');
if ((vt1 > vt2) || (vt3 < vt4)) {
    msg.payload = "1";
    return [null, msg];
}
else {
    return [msg, null];
} 

taki zapis funkcji to nic innego jak, puść proces na pierwsze wyjście noda  gdy w sypialni trzeba grzać, albo gdy bufor jest ciepły.

Czyli gdy w sypialni nie trzeba grzać, ale bufor ma wyższą temp od zadanej otwórz zawór.

Tak naprawdę to interpretacja tej funkcji jest jeszcze inna, ja ją mocno uprościłem. Gdyby rozpatrywać to dosłownie to puść proces na wyjście dwa gdy bufor jest zimny lub nie potrzeba grzać w sypialni, a każdym innym przypadku puść proces na wyjście 1.

 

Dokładnie tak. Wyjście dwa to wyłączony zawór a jeśli bufor jest zimny to pompa stoi więc po co zawór ma być otwarty kiedy nic przez niego nie popłynie?? Pompa uruchomi się wtedy kiedy zostanie zainicjowane otwieranie zaworu a mimo że termostat sypialni daje komendę grzać! To jeśli temperatura bufora jest niższa od zadanej pompa stoi. Po co więc zawór miałby się otwierać? Każdy inny możliwy przypadek kiedy proces pójdzie na wyjście 1 to tak naprawdę 1 możliwy. Kiedy termostat daje komendę grzać i zadana temperatura bufora została osiągnięta czyli pompa może się uruchomić. Nie wiem czy przejrzałeś

let vt1 = flow.get('Bufor_2/4');
let vt2 = flow.get('>Bufor_2/4');
let vt3 = flow.get('Temp.Panorama');
let vt4 = flow.get('>Panorama')
let vt5 = flow.get('Temp.poddasze');
let vt6 = flow.get('>Poddasze')
let vt7 = flow.get('Sypialnia');
let vt8 = flow.get('>Sypialnia')
let vt9 = flow.get('Łazienka_góra');
let vt10 = flow.get('>Łazienka_góra')
let vt11 = flow.get('Północny_taras');
let vt12 = flow.get('>Północny_taras')
let vt13 = flow.get('Jadalnia');
let vt14 = flow.get('Wykusz');
let vt15 = flow.get('>Wykusz_i_jadalnia')
let vt16 = flow.get('Łazienka_dolna');
let vt17 = flow.get('Łazienka_dolna_prysznic');
let vt18 = flow.get('>Łazienka_dół')
let vt19 = flow.get('Przedpokój');
let vt20 = flow.get('Wejście');
let vt21 = flow.get('>Przedpokój')
let vt22 = flow.get('Przybudówka');
let vt23 = flow.get('>Przybudówka')
let vt24 = flow.get('Salon_kominek');
let vt25 = flow.get('Salon_telewizor');
let vt26 = flow.get('Salon_okno');
let vt27 = flow.get('Salon_kanapa');
let vt28 = flow.get('Salon_środek');
let vt29 = flow.get('>Salon')

if ((vt1 > vt2 && vt3 < vt4) || (vt1 > vt2 && vt5 < vt6) 
    || (vt1 > vt2 && vt7 < vt8) || (vt1 > vt2 && vt9 < vt10)
    || (vt1 > vt2 && vt11 < vt12) 
    || (vt1 > vt2) && (vt13 && vt14 < vt15)
    || (vt1 > vt2) && (vt16 && vt17 < vt18)
    || (vt1 > vt2) && (vt19 && vt20 < vt21)
    || (vt1 > vt2 && vt22 < vt23) 
    || (vt1 > vt2) && (vt24 && vt25 && vt26 && vt27 && vt28 < vt29)) {
    msg.payload = "1";
    return [msg, null];
}else{
     return [null, msg];

funkcję praca pompy bo dopiero ta funkcja uzupełnia się wzajemnie z każdym termostatem.

 

 
Dodane : 02/05/2023 6:36 pm
isom
 isom
(@isom)
Wpisów: 5166
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Dodane przez: @isom

if ((vt1 > vt2) || (vt3 > vt4))

To jest jeden z możliwych przypadków , o innych  możliwych nie ma sensu pisać.

Uruchomienia pompy nie analizowałem bo nie widziałem sensu, skoro zawór się otwiera a pompa nie rusza to nic złego się nie dzieje, ale otwarty zawór cały czas gdy bufor jest ciepły kłóci się z Twoją wcześniejszą ideą 

Inne możliwe to np 

if ((vt1 = vt2) || (vt3 > vt4))

if ((vt1 > vt2) || (vt3 = vt4))

itd.

 
Dodane : 02/05/2023 7:02 pm
(@marekmazurek)
Wpisów: 47
Kontrybutor Donator 2K23
Autor tematu
 

Dodane przez: @isom

Dodane przez: @isom

if ((vt1 > vt2) || (vt3 > vt4))

To jest jeden z możliwych przypadków , o innych  możliwych nie ma sensu pisać.

Uruchomienia pompy nie analizowałem bo nie widziałem sensu, skoro zawór się otwiera a pompa nie rusza to nic złego się nie dzieje, ale otwarty zawór cały czas gdy bufor jest ciepły kłóci się z Twoją wcześniejszą ideą 

Inne możliwe to np 

if ((vt1 = vt2) || (vt3 > vt4))

if ((vt1 > vt2) || (vt3 = vt4))

itd.

Dobrze to przeanalizujmy  co się w tych przypadkach stanie:

  1. ((vt1 > vt2) || (vt3 > vt4))

temperatura pomieszczenia większa niż temperatura zadana pomieszczenia (zawór  zamknięty) lub temperatura bufora większa niż temperatura zadana bufora (pompa może działać) tyle że…

ten fragment kodu funkcji praca pompy if ((vt1 > vt2 && vt3 < vt4) warunkuje uruchomienie pompy czyli w zaistniałej sytuacji pompa nie wystartuje mimo osiągniętej zadanej temperatury bufora.

  1. if ((vt1 = vt2) || (vt3 > vt4)) Brak spełniania warunku startu pompy if ((vt1 > vt2 && vt3 < vt4) pompa nie wystartuje zawór pozostanie zamknięty
  2. if ((vt1 > vt2) || (vt3 = vt4)) Brak spełniania warunku startu pompy if ((vt1 > vt2 && vt3 < vt4) pompa nie wystartuje zawór pozostanie zamknięty

Gdzie zatem widzisz problem?

Żaden zawór nie jest sterowany temperaturą bufora tylko temperaturą zadaną danego pomieszczenia. Zbyt niska temperatura bufora może tylko zablokować otwarcie zaworu bo i tak pompa nie będzie działać póki bufor nie osiągnie zadanej temperatury. Po osiągnięciu tej temperatury blokada zostanie zwolniona.

 

Narazie nie widzę żadnej luki. Testuję to na żywo na prawdziwej instalacji. Absolutnie nie chodzi mi o żadną sprzeczkę i jeśli znajdziesz dziurę, Ty lub ktokolwiek inny, to będę starał się ją poprawić. Do tej chwili instalacja działa jak należy. Dalsze kroki to wprowadzenie ewentualnej histerezy oraz zachowań alarmowych.

 

 
Dodane : 02/05/2023 8:31 pm
isom
 isom
(@isom)
Wpisów: 5166
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Dodane przez: @marekmazurek

Narazie nie widzę żadnej luki.

Okroiłem ten przepływ żeby było wyraźnie widać właczony zawór przy wyłączonej pompie. Widać też wszystkie temperarury

1

 Wszystkie warunki w funkcjach są takie jak je utworzyłeś.

Zresztą sprawdz to sobie, nie mam zamiaru udowadniać, a tym bardziej się sprzeczać, bo to nie moje ogrzewanie

 
Dodane : 02/05/2023 9:56 pm
(@marekmazurek)
Wpisów: 47
Kontrybutor Donator 2K23
Autor tematu
 

Dodane przez: @isom

Dodane przez: @marekmazurek

Narazie nie widzę żadnej luki.

Okroiłem ten przepływ żeby było wyraźnie widać właczony zawór przy wyłączonej pompie. Widać też wszystkie temperarury

-- załącznik nie jest dostępny --

 Wszystkie warunki w funkcjach są takie jak je utworzyłeś.

Zresztą sprawdz to sobie, nie mam zamiaru udowadniać, a tym bardziej się sprzeczać, bo to nie moje ogrzewanie

Widzisz i to jest kwestia precyzyjnego dopracowania tematu. Wyzwalacz ustawiony jest na 10 sekund. Widzisz jeden obraz z danego cyklu. W następnym cyklu zaznaczone przez Ciebie czasy będą się już różnić. Ale masz rację. Zawór zużywa 1W prądu przez 9 sekund w tym konkretnym cyklu. Masz pomysł jak tego uniknąć lub to zredukować? A dodam też że czas pełnego otwarcia zaworu to 120 sekund

 

 

 

 
Dodane : 02/05/2023 10:11 pm
isom
 isom
(@isom)
Wpisów: 5166
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

 

Dodane przez: @marekmazurek

Ciebie czasy będą się już różnić

2

Różnią się ?

Cykl może trwać 10 sek lub 2 min nie ma znaczenia 

3
 
Dodane : 02/05/2023 10:18 pm
(@marekmazurek)
Wpisów: 47
Kontrybutor Donator 2K23
Autor tematu
 

Dodane przez: @isom

Dodane przez: @marekmazurek

Ciebie czasy będą się już różnić

-- załącznik nie jest dostępny --

Różnią się ?

Cykl może trwać 10 sek lub 2 min nie ma znaczenia 

Ano się różnią. Takie pytanie... Skąd masz te temperatury na zrzutach? To symulacja? są inne niż u mnie.

 

 

 
Dodane : 02/05/2023 10:22 pm
isom
 isom
(@isom)
Wpisów: 5166
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Dodane przez: @marekmazurek

Skąd masz te temperatury na zrzutach?

Twoich raczej mieć nie mogę 🙂 Mam swoje 

 
Dodane : 02/05/2023 10:25 pm
isom
 isom
(@isom)
Wpisów: 5166
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Dodane przez: @marekmazurek

Zawór zużywa 1W prądu przez 9 sekund w tym konkretnym cyklu.

Zawór jest On przez cały czas gdy np zadana sypialnia = temp sypialnia, a nie 9 sek 

widać to przecież

4

 Porównaj te czasy z poprzednimi 

 
Dodane : 02/05/2023 10:28 pm
(@marekmazurek)
Wpisów: 47
Kontrybutor Donator 2K23
Autor tematu
 

Dodane przez: @isom

Dodane przez: @marekmazurek

Skąd masz te temperatury na zrzutach?

Twoich raczej mieć nie mogę 🙂 Mam swoje 

Widzisz a u mnie to działa na fizycznej instalacji. Cały czas testuję i narazie nie widzę błędów. Może nasze instalacje sie różnią? Weź pod uwagę bezwładność bufora i podłogówek

 

 

 
Dodane : 02/05/2023 10:30 pm
Strona 3 / 4
Udostępnij: