Procesy z życia wzięte - Ogrzewanie

Zdefiniowałeś tempON tempOFF - wielkość liter ma znaczenie.

Dziękuję! To faktycznie było to… Poprawiłem trochę i dorobiłem jeszcze kilka warunków i testuję tę automatyzację wzdłuż i wszerz zanim skopiuje ją jeszcze 9 razy na pozostałe strefy…
Działa jak powinna, ale za każdym razem przy zmianie temperatury wyzwala mi node call service. Przykładowo jeśli swich jest on, to i tak wysyła do home assistanta rządanie jego ponownego uruchomienia (w fazie testowej wyzwala to też zbędną notyfikację). Jak najprościej to ubić? Próbowałem “current state node” użyć, ale to mi psuje poprawne działanie…

W domoticzu było proste :upside_down_face: :

    -- switch the device on but only if the current state isn't already on:
    device.switchOn().checkFirst()
    -- this is a short for:
    if (device.state == 'Off') then
        devices.switchOn()

Kod tych wypocin:

[{"id":"7d7eedb88ba64fe3","type":"server-state-changed","z":"061055714bb08075","name":"Łazienka górna - zmiana temp","server":"3d4cd457.4ac1ac","version":3,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"input_number.sztuczna_temp","entityidfiltertype":"exact","outputinitially":false,"state_type":"num","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":140,"y":1060,"wires":[["499049a3305a4a9d"]]},{"id":"e1d2469336291899","type":"server-state-changed","z":"061055714bb08075","name":"Łazienka górna - zmiana ust.","server":"3d4cd457.4ac1ac","version":3,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"input_number.lazienka_gorna","entityidfiltertype":"exact","outputinitially":false,"state_type":"num","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":140,"y":1120,"wires":[["499049a3305a4a9d"]]},{"id":"499049a3305a4a9d","type":"api-current-state","z":"061055714bb08075","name":"Czy nie off?","server":"3d4cd457.4ac1ac","version":3,"outputs":2,"halt_if":"Off","halt_if_type":"str","halt_if_compare":"is_not","entity_id":"input_select.tryb_sterowania","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":370,"y":1100,"wires":[["b543ab9d236cabd3"],[]]},{"id":"b543ab9d236cabd3","type":"stoptimer","z":"061055714bb08075","duration":"1","units":"Second","payloadtype":"num","payloadval":"0","name":"","x":540,"y":1080,"wires":[["9813cc1f9f7ccb2b"],[]]},{"id":"9813cc1f9f7ccb2b","type":"api-current-state","z":"061055714bb08075","name":"Zadana","server":"bf1cdba.1929828","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_number.lazienka_gorna","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"zadana","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":700,"y":1080,"wires":[["54ec9b9d937ee615"]]},{"id":"54ec9b9d937ee615","type":"api-current-state","z":"061055714bb08075","name":"Aktualna","server":"bf1cdba.1929828","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_number.sztuczna_temp","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"aktualna","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":860,"y":1080,"wires":[["ad8a44432a84681b"]]},{"id":"ad8a44432a84681b","type":"api-current-state","z":"061055714bb08075","name":"Wartość histerezy","server":"bf1cdba.1929828","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_number.histereza","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"hister","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":1070,"y":1080,"wires":[["9d39327bbf7eac98"]]},{"id":"9d39327bbf7eac98","type":"function","z":"061055714bb08075","name":"histereza","func":"// przykładowo zadaję temperaturę 22stopnie\n//ale pozwalam jej zejśc do zadana -0.3 = 21,7 = tempON\n//nie chcę natomiast przegrzewać, więc tempOFF=22+0,1=tempOFF\n\n\nvar tempON=msg.zadana + msg.hister //+ (- 0.3) //np. =21.7\nvar tempOFF=msg.zadana //+ 0.1 //np. =22.1\nvar aktualna=msg.aktualna\n\n/*\n//wariant 1 aktualna = 21.8\n//21.8>21.7 && 21.8<22.1 - nic nie rób\n\nif (aktualna>tempON && aktualna<tempOFF) {\n    msg.ustawstan={ payload:\"idle\" };\n    //return msg;\n}\n\n//wariant2 aktualna = 20\n//20<21.7 -zimno - włącz grzanie\nelse if (aktualna<=tempON){\n    msg.ustawstan={ payload:\"on\" };\n}\n\n//wariant3 aktualna=25\n//25>=22.1\nelse if (aktualna>=tempOFF){\n    msg.ustawstan={ payload:\"off\" };\n}\n\n*/\n\nif (aktualna>tempON && aktualna<tempOFF){  \n   msg.ustawstan={ payload:\"idle\" }  //nic nie robić\n}else if(aktualna<=tempON){  \n      msg.ustawstan={ payload:\"on\" }  //włączyć\n}  \nelse if(aktualna>=tempOFF){  \n      msg.ustawstan={ payload:\"off\" }  //wyłączyć\n}  \nelse{  \n      msg.ustawstan={ payload:\"error?\" } //trzymać czy usunąć?\n} \n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1300,"y":1080,"wires":[["17bd85dd26fb657f"]]},{"id":"17bd85dd26fb657f","type":"switch","z":"061055714bb08075","name":"on / off / idle / error","property":"ustawstan.payload","propertyType":"msg","rules":[{"t":"eq","v":"on","vt":"str"},{"t":"eq","v":"off","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":1510,"y":1080,"wires":[["c675017b607cea27","86833e16d1548da1"],["c675017b607cea27","5a88ac72b6f70be4"]]},{"id":"7c1231dde88cb885","type":"api-current-state","z":"061055714bb08075","name":"Działa teraz?","server":"3d4cd457.4ac1ac","version":3,"outputs":2,"halt_if":"On","halt_if_type":"str","halt_if_compare":"is","entity_id":"switch.lazienka_2","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1730,"y":1000,"wires":[[],[]]},{"id":"4759fb1bd4485dcb","type":"api-current-state","z":"061055714bb08075","name":"Działa teraz?","server":"3d4cd457.4ac1ac","version":3,"outputs":2,"halt_if":"On","halt_if_type":"str","halt_if_compare":"is","entity_id":"switch.lazienka_2","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1750,"y":1140,"wires":[[],[]]},{"id":"c675017b607cea27","type":"debug","z":"061055714bb08075","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1710,"y":1320,"wires":[]},{"id":"86833e16d1548da1","type":"api-call-service","z":"061055714bb08075","name":"ON","server":"bf1cdba.1929828","version":3,"debugenabled":false,"service_domain":"switch","service":"turn_on","entityId":"switch.lazienka_2","data":"","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1890,"y":1020,"wires":[["c83cd9e7f5a8f0ca"]]},{"id":"5a88ac72b6f70be4","type":"api-call-service","z":"061055714bb08075","name":"OFF","server":"bf1cdba.1929828","version":3,"debugenabled":false,"service_domain":"switch","service":"turn_off","entityId":"switch.lazienka_2","data":"","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1890,"y":1080,"wires":[["01d35d6388e9b405"]]},{"id":"c83cd9e7f5a8f0ca","type":"function","z":"061055714bb08075","name":"Właczenie ogrzewania","func":"msg.wiadomosc =\n{\n    \"temat\":\"Ogrzewanie\",\n    \"tresc\":\"Temperatura spadła poniżej \"+msg.zadana+\" stopni celcjusza. Włączam ogrzewanie\",\n    \"typ\":\"info\"\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":2080,"y":1020,"wires":[["90e9c4e57f90d527"]]},{"id":"01d35d6388e9b405","type":"function","z":"061055714bb08075","name":"Wyłaczenie ogrzewania","func":"msg.wiadomosc =\n{\n    \"temat\":\"Ogrzewanie\",\n    \"tresc\":\"Temperatura zgodna z ustawioną. Wyłączam ogrzewanie.\",\n    \"typ\":\"info\"\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":2090,"y":1080,"wires":[["90e9c4e57f90d527"]]},{"id":"90e9c4e57f90d527","type":"function","z":"061055714bb08075","name":"Wiadomość","func":"msg.payload =\n{\n    \"data\":\n    {\n        \"message\": msg.wiadomosc.tresc,\n    }\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":2330,"y":1060,"wires":[["f48dfc46c5852ea5"]]},{"id":"f48dfc46c5852ea5","type":"api-call-service","z":"061055714bb08075","name":"Na telefon","server":"bf1cdba.1929828","version":3,"debugenabled":false,"service_domain":"notify","service":"mobile_app_redmi_note_8_pro","entityId":"","data":"","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":2510,"y":1040,"wires":[[]]},{"id":"3d4cd457.4ac1ac","type":"server","name":"Home Assistant","version":2,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30},{"id":"bf1cdba.1929828","type":"server","name":"Home Assistant","version":2,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30}]

Artur u siebie miał przyciski + - do zmiany temperatury. Zrobiłem tak u siebie i to działało. Teraz przechodzę z całym wyglądem na custom:button-card (bo ładniej) i po dodaniu takiego kodu:

type: custom:button-card
tap_action:
  action: call-service
  service: input_number.increment
  service_data: {}
  target:
    entity_id: input_number.temperatura_duzy
icon: mdi:thermometer-plus
aspect_ratio: 1/1
styles:
  card:
    - border-radius: 10%

mam błąd: “Nie udało się wywołać usługi input_number/increment. must contain at least one of entity_id, device_id, area_id.”. Gdzie robię błąd?

Dodm, że wyklinkany i działajacy przycisk wygląda tak:

type: button
tap_action:
  action: call-service
  service: input_number.increment
  service_data: {}
  target:
    entity_id: input_number.temperatura_duzy
entity: input_number.temperatura_duzy
icon: mdi:thermometer-plus
show_name: false

Jedyna różnica to “entity: input_number.temperatura_duzy” ale dodanie nic nie zmienia.

Zamień:

      service_data: {}
      target:
      entity_id: input_number .temperatura_duzy

na :

    service_data:
      entity_id: input_number.temperatura_duzy
1 polubienie

Panowie, nie umiem znaleźć rozwiązania. Posiadam ogrzewanie w domu od salusa na zigbee - system zamknięty. Wyciagnąłem Stany sensorów działania ze wszystkich 5 termostatów od ogrzewania ze wszystkich pomieszczeń. Dają one Stany heating oraz idle. Chciałem je dodać do licznika czasu pracy kotła jednakże nie umiem ich zgrupować tak jak w edytorze to robimy tak aby w przypadku gdy chociaż jeden regulator ma stan heating to nod dawał heating, a w przypadku wszystkich stanów idle nod wypluł idle. Dodam że zgrupowanie w editor wszystkich sensorów daje uniknown. W systemie salus niestety nie da się odczytać stanu stycznika załączającego kocioł. Macie może jakiś pomysł?
Z góry dziękuję za odpowiedź

Witam serdecznie,

Zaczynam przenosić sterowanie ogrzewaniem z domoticza-svt do home assistanta.
I tak przeglądam temat-swoją drogą dość ciekawy :slight_smile:
Chciałbym zapytać czy po wdrożeniu tej automatyzacji w ogrzewanie podłogowe piecem gazowym są jakieś propozycję do zmiany?
Osobiście brakuje mi takiej opcji jak wymuszenie włączenia ogrzewania, chyba że jest a nie doczytałem :slight_smile: Wracamy do domu z ferii, i aby wrócić do ciepłego domu to 3h wcześniej ręcznie uruchamiamy ogrzewanie.

Podpowie ktoś jak ma rozwiązane sterowanie strefami przy pomocy tej automatyzacji ?

gdzie to wpisać bo chyba coś robie nie tak

Poczytaj ostatnie wpisy z poniższego wątku:

dołożyłem sensor w template

template:
  sensors:
    czas_w_h:
      friendly_name: "Czas w godzinach"
      value_template: >-
        {% set list = states('sensor.ogrzewanie_dzisiaj').split('.') %}
        {{ list[0] }}h {{ (60 * ('0.'~list[1]) | float (0)) | round(0) }}m

i zmieniłem na:


  ### Ogrzewanie działało przez: {{ states('sensor.czas_w_h') }}

1

może ktoś bardziej obeznany w Mushroom dopisze kod i poprawi kartę na wersję z fajerwerkami z w/w procesu:

mushroom

type: vertical-stack
cards:
  - type: horizontal-stack
    cards:
      - type: markdown
        content: |-
          # <center>  Ogrzewanie sklep
          #### <center>  czas pracy: {{ states('sensor.czas_w_h_farelka') }}
  - type: horizontal-stack
    cards:
      - type: markdown
        content: |-
          ###  Stan pracy: {{ states('switch.farelka_przekaznik_01') }}
          ###  Tryb pracy: {{ states('input_text.ogrzewanie_tryb') }}
      - type: custom:mushroom-fan-card
        entity: sensor.farelka_temp_01
        icon_type: icon
        double_tap_action:
          action: none
        icon_animation: false
        fill_container: false
        layout: vertical
        primary_info: state
        secondary_info: none
        show_percentage_control: false
        show_oscillate_control: false
        collapsible_controls: false
        hold_action:
          action: none
        tap_action:
          action: more-info
  - type: horizontal-stack
    cards:
      - type: custom:mushroom-template-card
        tap_action:
          action: call-service
          service: input_number.decrement
          service_data:
            entity_id: input_number.ogrzewanie_temperatura
        icon: hass:minus
        layout: vertical
        primary: zmniejsz
        secondary: ''
        badge_icon: ''
        fill_container: false
        multiline_secondary: false
        icon_color: green
      - type: custom:mushroom-fan-card
        entity: input_number.ogrzewanie_temperatura
        icon_type: icon
        double_tap_action:
          action: none
        icon_animation: false
        fill_container: false
        layout: vertical
        primary_info: state
        secondary_info: none
        show_percentage_control: false
        show_oscillate_control: false
        collapsible_controls: false
        hold_action:
          action: none
        tap_action:
          action: none
      - type: custom:mushroom-template-card
        tap_action:
          action: call-service
          service: input_number.increment
          service_data:
            entity_id: input_number.ogrzewanie_temperatura
        icon: hass:plus
        layout: vertical
        primary: zwiększ
        secondary: ''
        badge_icon: ''
        fill_container: true
        multiline_secondary: false
        icon_color: green

naprawdę nikt nie ruszy tego :frowning: ?
może uda się to rozgryźć jako generic_termostat
w configuration.yaml:

climate:
  - platform: generic_thermostat
    name: Study
    heater: switch.study_heater
    target_sensor: sensor.study_temperature

i co dopisać by call-service sterował termostatem

        tap_action:
          action: call-service
          service: input_number.decrement
          service_data:
            entity_id: input_number.ogrzewanie_temperatura
        tap_action:
          action: call-service
          service: input_number.increment
          service_data:
            entity_id: input_number.ogrzewanie_temperatura

Hej :slight_smile:

Ma ktoś może jakiś sposób na wychładzanie się podłogi przy ogrzewaniu podłogowym?
Mam temperaturę w pomieszczeniach, ale często jest tak że podłoga się wychładza i długo trwa jej nagrzanie. Ktoś walczył z czymś takim ?

Najprościej to nie wyłączać ogrzewania :wink:

I płacić za gaz :smiley:
Ogrzewanie mam sterowane przez generic_thermostat i jak jest temperatura ok to się wyłączy ogrzewania bo po co ma grzać :slight_smile:
I jest tak że przez cały dzień jest te 21 stopni a wieczorem się wychładza. Podłoga jest zimna i nagrzanie trwa te 2h

Czyli powtórne nagrzewanie świadomie wychłodzonej podłogi, Twoim zdaniem daje oszczędności? Problem w takim razie masz nie z ogrzewaniem ale z izolacją tej podłogi. Może lepiej sterować przepływem i temperaturą zamiast zero jedynkowo.

Wydaje mi się że podgrzewanie podłogi spowolni wychładzanie pomieszczenia.

Wydaje mi się że gdyby był problem z izolacją to pomieszczenie by się wychłodziło znacznie szybciej.
np dziś ogrzewanie nie chodzi od godz. 9 rano do teraz, temperatura w pomieszczeniu jest ok, ale po prostu podłoga jest zimna co wpływa na komfort chodzenia domowników :smiley:

Tak się po prostu zastanawiam jakby można było to rozwiązać aby podłoga była podgrzewana np przez 20min co 3h


Obniż tylko temperaturę w jakiś okresach a nie całkiem wyłączaj ogrzewanie, jak napisał @angler ponowne rozgrzewanie całej podłogi zwiększa zużycie a nie je obniża.
To zbadaj w jakim tempie schładza się podłoga i wtedy zrób automatyzacje grzania nie pozwalając na tak drastyczne wychłodzenie.

1 polubienie

Właśnie ten generic_thermostat ma tak, że jak temp. przekroczy jakąś wartość to zamyka zawór na rozdzielaczu, czyli w sumie tak jakby wył ogrzewanie na dany pokój.

No właśnie tak chce zrobić, tylko szukam jakiejś inspiracji jak inni mają :slight_smile:

Moje doświadczenie:

1 polubienie

@paku2020 … fizyki nie przeskoczysz, musiałbyś nauczyć się przepowiadać przyszłość :slight_smile: i sterować wczoraj.
Jestem tego samego zdania co @angler, a może i bardziej bo uważam, że ze względów oszczędności w ogóle żadne zmiany temperatury nie przynoszą oszczędności. Temperaturę pomieszczeń reguluje tylko ze względu na komfort cieplny dzień/noc.
Na poparcie mam długofalowe statystyki zużycia gazu przez kocioł. To co niby zaoszczędziłem w nocy muszę pobrać z rana.
Co do samej podłogówki - to na powrocie mam zawór RTX który mierzy temp podłogi i stabilizuje ją na ok 30C.
Miałoby to sens gdybyś wyłączał ogrzewanie na czas dużo dłuższy niż stała czasowa budynku.

2 polubienia

Pomoże ktoś z Node-Red, zrobiłem taką prostą automatyzację, ktora ma sprawdzić temperature o danej porze dnia i włączyć albo wyłączy dodatkową pompkę CO. Piecem steruje sterownik Salus, pompa działa oddzielnie.

Wszystko działa, ale chciałbym żeby wartościm które są w “switch” można było zmieniać z GUI HA a nie z Node-Reda i tutaj braku mi wiedzy jak to można zrobić


flows-2.json (8,6 KB)

1 polubienie

cześć wszystkim
Mam może dziwne pytanie ale jestem początkujący;-)
Pytanie dotyczy części 3 filmu o ogrzewaniu, konkretnie minuty 8:17
w kodzie jest wiadomość msg.ustawiona_temperatura → gdzie jest “tworzona” ta wiadomość?

mam nadzieję, że wiem o co pytam;-)
pozdrawiam

harryON