Termostaty w z2m, nie działa automatyzacja

Witam. Dopiero zaczynam przygodę z HA wiec prosze o odpowiedzi bardziej dla amatora.

Posiadam RPI4 i na nim HA. Do portu USB po przedluzaczu 2 metrowym jest wpiete urzadzenie Koordynator Bramka Zigbee 3.0 USB CC2652P. Bede poslugiwal sie screenami bo niewiem co zalaczyc i skad. To jest widok dashboardu


W pokoju jest czujnik tmp i glowica termostatyczna polaczone przez z2m.

Tak wyglada funkcje w glowicy

Temperatura w funkcji auto wynosi 19 stopni. Gdy zachodzi potrzeba przelanczac sie powinna na tryb heat i tam chyba jest ustawione 30 stopni.

No i teraz jak jest ustawiona automatyzacja

Jezeli tmp z czujnika (czujnik tmp a nie czujnik tmp przy glowicy) jest ponizej 19 stopni to ma sie wlaczyc i grzac az osiagnie 21 stopni.


I tyle. O ile wylaczanie grzanie dziala tak wlaczanie nie dziala z automatu. Jezeli wywolam automatyzacje recznie to grzejnik sie wlaczy. Czyli wnioskuje jakby tracilo sie polaczenie miedzy koordynatorem a urzadzeniem. Zauwazyłem ze jesli tez zresetuje HA calkowicie i spelnione sa warunki to automat tez zadziala ale np tylko dla jednego grzejnika. Niewiem jak to ogarnac wiec prosze o pomoc. Moze ten koordynator jest do bani i trzeba go wymienic na inny. Dodam ze wszystko jest nowe.

Witam,

Masz dwa sposoby na rozwiązanie tego.

Sposób 1: Better Thermostat (Najwygodniejszy)

To rozwiązanie tworzy Wirtualny Termostat który łączy oba urządzenia w jedno.

Krok 1: Instalacja HACS i Better Thermostat

Jeśli nie masz jeszcze HACS (Home Assistant Community Store) musisz go zainstalować (to podstawa). Jeśli go masz:

  1. W HACS wejdź w Integracje → kliknij “+” → wyszukaj Better Thermostat.
  2. Pobierz i zrestartuj Home Assistant.
  3. Wejdź w UstawieniaUrządzenia oraz usługiDodaj integrację → wyszukaj Better Thermostat.

Krok 2: Konfiguracja

W oknie konfiguracji BT wybierz:

  • Model: Twoja głowica Sonoff.
  • Temperature Sensor: Twój czujnik zewnętrzny.
  • Outdoor Sensor: (opcjonalnie) jeśli masz czujnik pogody by HA wiedział czy jest zima.

Masz jedną ładną ikonkę termostatu która sama dba o kalibrację i tryby pracy.


Sposób 2: Generic Thermostat (Najbardziej stabilny)

Jeśli nie chcesz instalować dodatków możesz użyć wbudowanej funkcji.

Krok 1: Edycja pliku configuration.yaml

  1. Zainstaluj z Add-on Store dodatek File Editor lub VS Code Server(polecam File Editor).
  2. Otwórz plik configuration.yaml i dopisz na dole:
climate:
  - platform: generic_thermostat
    name: "Termostat Salon Final"
    heater: climate.grzejnik_salon
    target_sensor: sensor.czujnik_salon_temperatura
    min_temp: 16
    max_temp: 26
    ac_mode: false
    target_temp: 21
    cold_tolerance: 0.2
    hot_tolerance: 0.2
    initial_hvac_mode: "heat"
    precision: 0.1
  1. Zapisz plik i wejdź w Narzędzia deweloperskieSprawdź konfigurację. Jeśli jest OK → uruchom ponowniej HA.

Automatyzacja

Niezależnie od wybranego sposobu potrzebujesz jednej prostej automatyzacji.

Wklej to do edytora YAML nowej automatyzacji(3 kropki → edycja YAML):

alias: "Ogrzewanie Harmonogram"
description: "Zarządza temperaturą"
trigger:
  - platform: time
    at: "14:00:00"
    id: "start"
  - platform: time
    at: "20:00:00"
    id: "koniec"
condition:
  - condition: time
    weekday:
      - mon
      - tue
      - wed
      - thu
      - fri
action:
  - choose:
      - conditions:
          - condition: trigger
            id: "start"
        sequence:
          - service: climate.set_temperature
            target:
              entity_id: climate.termostat_salon_final # lub nazwa z BT
            data:
              temperature: 21
      - conditions:
          - condition: trigger
            id: "koniec"
        sequence:
          - service: climate.set_temperature
            target:
              entity_id: climate.termostat_salon_final
            data:
              temperature: 18
mode: restart

Moja sugestia: Zacznij od Sposobu 2 (GT). Jest mniej “efektowny” wizualnie ale w HA to najpewniejsza metoda która nigdy się nie zawiesza.

Wiec robie drugi sposob jak piszesz. Dopisalem i wyglada to tak


# Loads default set of integrations. Do not remove.
default_config:

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 127.0.0.1
    
climate:
  - platform: generic_thermostat
    name: "Termostat Salon Final"
    heater: climate.grzejnik_salon
    target_sensor: sensor.czujnik_salon_temperatura
    min_temp: 16
    max_temp: 26
    ac_mode: false
    target_temp: 21
    cold_tolerance: 0.2
    hot_tolerance: 0.2
    initial_hvac_mode: "heat"
    precision: 0.1

i dostaje blad

Błędy konfiguracji
Error loading /config/configuration.yaml: while parsing a block collection
in “/config/configuration.yaml”, line 15, column 5
expected , but found ‘?’
in “/config/configuration.yaml”, line 16, column 5

jakąś spację dodałeś albo usunełeś przed zapisaniem upewnij się jeśli używasz File Editor że ten zancznik jest na zielono a nie czerwono przed zapisaniem:

Jak wkleiłem twój kod do edytoea pokazuje że jest dobry upewnij się że od sekcji http w dół plik wygląda dokładnie tak:

http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 127.0.0.1

climate:
  - platform: generic_thermostat
    name: "Termostat Salon Final"
    heater: climate.grzejnik_salon
    target_sensor: sensor.czujnik_salon_temperatura
    min_temp: 16
    max_temp: 26
    ac_mode: false
    target_temp: 21
    cold_tolerance: 0.2
    hot_tolerance: 0.2
    initial_hvac_mode: "heat"
    precision: 0.1

Faktycznie jakas spacja sie wdarla czy cos. Zrobilem cala reszte jak napisales i termostat wlaczyl sie od razu po zapisaniu automatyzacji w biurze. Czy ta automatyzacja steruje wszystkimi termostatami na raz? I pytanie dwa czy on bierze biezaca temperature z czujnika z salony jak w pliku configuration.yaml

target_sensor: sensor.czujnik_salon_temperatura

bo nie bardzo rozumiem jak zadzialal termostat w biurze po napisaniu tego kodu.

OFF TOPIC
Jak Wam to proxy działa bez ufania sieci Dockera?

Tak. Better termostat tak działa. Bierze sobie z jednego i na tej podstawie steruje zbiorczo zaworami na kaloryferach/grzejnikach.

no tylko ja robilem sposob 2 Generic Thermostat. No i przeciez nie w kazdym pokoju bedzie ta sama tmp. Gdy w salonie osiagnie 21 to wylaczy mi wszystkie termostaty?

Tak bo tak to działa.

  1. Czy ta automatyzacja (termostat) steruje wszystkim na raz?

Nie. Ten konkretny kod który masz w configuration.yaml tworzy jeden konkretny wirtualny termostat który jest “przypięty” tylko do tych dwóch urządzen które tam są wpisane:

  • Wykonawca (heater): climate.grzejnik_salon
  • Czujnik (target_sensor): sensor.czujnik_salon_temperatura

Jeśli masz drugi grzejnik w biurze (climate.grzejnik_biuro), to ten kod nie ma prawa nim sterować.

Możliwe są trzy scenariusze:

  • W biurze masz ustawioną jakąś inną automatyzację (może tę starą, którą pokazywałeś na screenach?), która zareagowała na restart systemu.
  • Głowica w biurze ma własny harmonogram wbudowany przez producenta (w Z2M).
  • Po prostu zbieg okoliczności – głowica w biurze akurat postanowiła zaktualizować swój stan w momencie restartu HA.
  1. Skąd on bierze temperaturę?

Tak dokładnie tak jak napisałeś: target_sensor: sensor.czujnik_salon_temperatura To oznacza, że ten nowy wirtualny termostat całkowicie ignoruje to co mierzy głowica. Interesuje go tylko i wyłącznie odczyt z czujnika który masz na ścianie/półce w salonie.
@pietryk jeśli chcesz drugi tai wirtualny termostat to możesz dac taki kod, tylko zastąp sensor i termostat swoimi bo nie wiem jaki mają identyfikator:

climate:
  - platform: generic_thermostat
    name: "Termostat Salon Final"
    heater: climate.grzejnik_salon #zastąp swoim termostatem
    target_sensor: sensor.czujnik_salon_temperatura #zastąp swoim czujnikiem
    min_temp: 16
    max_temp: 26
    ac_mode: false
    target_temp: 21
    cold_tolerance: 0.2
    hot_tolerance: 0.2
    initial_hvac_mode: "heat"
    precision: 0.1

  - platform: generic_thermostat
    name: "Termostat Biuro Final"
    heater: climate.grzejnik_biuro #zastą swoim termostatem
    target_sensor: sensor.czujnik_biuro_temperatura #zastąp swoim sensorem
    min_temp: 16
    max_temp: 26
    ac_mode: false
    target_temp: 21
    cold_tolerance: 0.2
    hot_tolerance: 0.2
    initial_hvac_mode: "heat"
    precision: 0.1

@szopen ten kawałek kodu:

http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 127.0.0.1
#dodałem tylko  
# - 192.168.0.0/24
#Nawt nie pamiętam dlaczego.

Miałem odrazu w HAOS

Faktycznie masz racje Automatyzacja Grzejnik_biuro_on zostala uruchomiona 28 minut temu. Tylko jak patrze to ta nautomatyzacja co napisales nie byla nigdy uruchomiona.

A druga sprawa w mktorym miejscu widzisz moj identyfikator w salonie

Zarówno Better Thermostat jak i Termostat Ogólny można skonfigurować w UI, czemu koledze każecie edytować plik konfiguracyjny i wpisywać wszystko ręcznie?

1 polubienie

A i jeszcze czy oprocz wpisu w configuration co napisales musze tez dodawac nowa automatyzacje?

aaa i czy tu

target_sensor: sensor.czujnik_salon_temperatura

nie powinno byc

target_sensor: sensor.czujnik_salon temperatura

Jest jeszcze kolejne rozwiązanie:

Jezeli bylaby mozliwosc w UI to ogarnac to jak najbardziej, im mniej kodu do pisania tym lepiej.

Ja mówię o samym termostacie, nie o automatyzacjach, których masz całkiem pokaźną listę…

Bo o ile rozumiem ingerencję w pracę termostatu głowicy przez automatyzacje, to nie rozumiem tworzenia termostatu ogólnego (i to jeszcze ręcznie w configuration.yaml), skoro TRVZB go eksponuje

Climate
This climate device supports the following features: occupied_heating_setpoint, local_temperature, local_temperature_calibration, system_mode, running_state.

i jeszcze bardzo fajna głowica - pozwala na skorzystanie z czujnika zewnętrznego"

External temperature (numeric)
The value of an external temperature sensor. Note: synchronisation of this value with the external temperature sensor needs to happen outside of Zigbee2MQTT… Value can be found in the published state on the external_temperature_input property. To read (/get) the value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {“external_temperature_input”: “”}. To write (/set) a value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {“external_temperature_input”: NEW_VALUE}. The minimal value is 0 and the maximum value is 99.9. The unit of this value is °C.

Czyli powinno zadziałać zrobienie automatyzacji:

alias: "Synchronizacja temperatury: Sonoff TRVZB"
description: "Wysyła temperaturę z czujnika zewnętrznego bezpośrednio do głowicy Sonoff"
trigger:
  - platform: state
    entity_id: sensor.twoj_czujnik_temperatury # Tu podaj encję swojego termometru
    not_to:
      - unknown
      - unavailable
action:
  - service: mqtt.publish
    data:
      topic: zigbee2mqtt/NAZWA_TWOJEJ_GLOWICY/set # Tu nazwa z Z2M
      payload: >
        {"external_temperature_input": {{ trigger.to_state.state | float }}}

Może nie rozumiem czegoś i gadam bez sensu, ale po co to tworzenie termostatu ogólnego… ?

np dlatego :


Bo Better zarządza oboma kaloryferami a temperaturę pobiera z 3 różnych termometrów które tworzą średnią temperaturę z całego mieszkania.

no ok, ale ja pytałem o tworzenie termostatu ogólnego (i to jeszcze ręcznie w configuration.yaml)

Co nie zmienia faktu, że dla każdego kaloryfera masz osobny “better termostat”, on oczywiście jest sprytniejszy znacznie niż generic.

Chyba tak zrobilem jak napisales


ale chyba nie przepisalo

zastanawia mnie czy w samym grzejniku nie trzeba zmienic tej opcji na external.

@Marcin4 masz trochę racji że technicznie rozwiązanie z synchronizacją temperatury przez MQTT jest „czystsze” i w pełni wykorzystuje potencjał Sonoff TRVZB. To świetna uwaga dla bardziej zaawansowanych użytkowników.

Dlaczego jednak zaproponowałem Generic Thermostat w YAML?

  1. Dla początkującego to pewniejszy start: Kolega @pietryk dopiero co zaczyna przygodę z HA. Metoda z mqtt.publish i payloadem w JSON jest super ale dla nowicjusza to kolejny poziom abstrakcji gdzie łatwo o błąd w składni którego HA mu nie podpowie tak prosto jak w przypadku configuration.yaml.
  2. Pełna kontrola: GT tworzy nową encję klimatyzacji która jest odporna na ewentualne kaprysy samego firmwareu głowicy. To HA decyduje grzejemy a nie algorytm wbudowany w urządzenie co na początku ułatwia debugowanie.
  3. Edukacja: Przejście przez edycję pliku i zrozumienie jak sensor łączy się z wykonawcą to świetna lekcja podstaw.

Zgadzam się natomiast że docelowo – twoja metoda z synchronizacją jest najlepszą drogą żeby nie mnożyć bytów w systemie.

Co do twojego pytania o spację: w nazwach encji (ID) nigdy nie używamy spacji. Musi być sensor.czujnik_salon_temperatura (z podkreślnikiem). Spacja tam to gwarantowany błąd konfiguracji!

Automatyzację ustawiłeś wzorowo temat (topic) i payload na Twoich screenach wyglądają poprawnie. Jednak masz rację w swoich przypuszczeniach – musisz teraz „powiedzieć” głowicy, żeby przestała słuchać swojego wewnętrznego czujnika.

Zrób dokładnie to co pokazałeś na swoim ostatnim screenie z Z2M

  1. W sekcji Temperature sensor zmień zaznaczenie z internal na external.
  2. Po tej zmianie głowica odblokuje funkcję przyjmowania danych zewnętrznych i powinna zacząć wyświetlać temperaturę, którą wysyłasz jej z czujnika w Biurze (te 20,7°C).