HA i Viessmann 050 b0ka

Witam społeczność.
Zaczynam przygodę z HA. Serwer postawiony, urządzenia dodane, parę gotowców ściągniętych.
Chcę zrobić termostat modulowany do tego kociołka.
Tryb pracy krzywa grzewcza, ogrzewanie grzejnikowe. Niestety brak komfortu i mimo zmian ustawień krzywej nie jestem w stanie utrzymać zadanego parametru grzania.
Wykombinowałem w ten sposób że zadana temperatura na panelu HA jest porównywana ze wskazaniem termometru, jeśli różni się o histerezę to zmienia o różnice temperaturę zadana do krzywej kotła, ponowny pomiar po określonym czasie np. godziny.
Do tego harmonogram do temperatury zadanej.
Takie rozwiązanie wykorzysta automatykę kotła co do krzywej a zaadoptuje ja na bieżąco.
Dodatkowo harmonogram dla zadanej CWU
Encje temperatur mam wyciągnięte.
Próbuje na razie ogarnąć HA.
Będę wdzięczny za sugestie.

Viessmanny obsługują opentherm. Nie wiem czy akurat ten model. Istnieje niestandardowy komponent do HA, który jest termostatem modulacyjnym opentherm. W moim przypadku stabilność temperatury utrzymuje na poziomie +/- 0.05 C. Wiem, wiem. HA nie powinno sterować ogrzewaniem, ale w przypadku śmierci HA kontrole przejmie fizyczny termostat

Wykminiłem sobie żeby co godzinę sprawdzać temperature w pomieszczeniu i poprawkę wrzucać jako wynik arytmetyczny do przesunięcia krzywej w kotle. Te encje są dostępne, z “palca” są wykonywane. W wypadku padnieca HA kocioł pracuje nadal w/krzywej ostatnio zmodyfikowanej.
Dopiero zaczynam przygodę z HA, przegrzebuje poradniki…

:thinking: ja nie wiem o jego istnieniu i nie moge tego znaleźć. Może warto podzielić się linkiem chyba, że nie chcesz dzielić się wiedzą - trochę uszczypliwie ale może zapamiętasz na przyszłość :grin:. Chwytam się wszystkiego aby wypowiedzi osób na forum były bardziej szczegółowe.

2 polubienia

Jako, że zgarnąłem “ochrzan” to się poprawiam. Link do github:
GitHub - Alexwijn/SAT: The Smart Autotune Thermostat (SAT) is a custom component for Home Assistant that works with an OpenTherm Gateway (OTGW)..
Komponent oblicza temperaturę zasilania kotła gazowego / pompy ciepła, na podstawie krzywej grzewczej oraz PID. W sytuacji gdy minimalna moc kotła jest za wysoka dla aktualnych potrzeb to przechodzi w tryb PWM.

Przykładowe działanie gdy nikogo nie ma w domu:


Zadana temperatura 21.4. Instalacja grzejnikowa

3 polubienia

@kapryk tylko to rozwiązanie wymaga bramki ot.

A z innej beczki zmienił się nod call service na action, jak go ustawić?

Proszę o pomoc w zrozumieniu i znalezieniu błędów.
Schemat zaadoptowałem z githuba kalibracja termostatu.
Wpis w automations.yaml

  alias: Korektor k_g
  description: ''
  use_blueprint:
    path: korektor k_g/korektor k_gr.yaml
    input:
      zadana: climate.e3_vitodens_050_0822_heating
      temperatura: sensor.salon_parter_temperatura
      korekta: number.e3_vitodens_050_0822_heating_curve_shift
      czas: 1

wpis w plik automatyzacji

  name: Korektor krzywej grzewczej
  description: Koryguje krzywą do temperatury rzeczywistej.
  domain: automation
  input:
    zadana:
      name: zadana
      selector:
        entity:
          domain: climate
    temperatura:
      name: temperatura
      description: Czujnik temperatury rzeczywistej.
      selector:
        entity:
          domain: sensor
          device_class: temperature
    korekta:
      name: korekta
      description: Korekta przesuniecia krzywej
      selector:
        entity:
          domain: number
          device_class: temperature
    delay_in_minutes:
      name: Delay in minutes
      description: Czestotliwosc korekty.
      default: 1
      selector:
        number:
          min: 1
          max: 60
          step: 1
mode: restart
variables:
  zadana: !input zadana
  korekta: !input korekta
  temperatura: !input temperatura
trigger:
  - platform: state
    entity_id: !input zadana
    for:
      hours: 0
      minutes: 0
      seconds: 0
  - platform: state
    entity_id: !input korekta
    for:
      hours: 0
      minutes: 0
      seconds: 0
  - platform: state
    entity_id: !input temperatura
    for:
      hours: 0
      minutes: 0
      seconds: 0
condition:
  - condition: template
    value_template: '{{ state_attr(zadana, "current_temperature") != None }}'
  - condition: template
    value_template: '{{ states(korekta) != "unavailable" and states(korekta) != "unknown" }}'
  - condition: template
    value_template: '{{ states(temperatura) != "unavailable" and states(temperatura) != "unknown" }}'
action:
  - delay:
      hours: 0
      minutes: !input delay_in_minutes
      seconds: 0
      milliseconds: 0
  - service: number.set_value
    target:
      entity_id: !input korekta
    data:
      value: >- 
            {% set room_temperature = states(temperatura) | float %}
            {% set zadana_temperature = state_attr(zadana, "current_temperature") | float(0) %}
            {% set zadana_calibration = states(korekta) | float %}
            {% set zadana_calibration_min = state_attr(korekta, "min") | float(-5) %}
            {% set zadana_calibration_max = state_attr(korekta, "max") | float(5) %}
            {% set zadana_calibration_step = state_attr(korekta, "step") | float(1) %}
            {% set step = zadana_calibration_step | string %}
            {% if step.split(".") | length > 1 -%}
            {% set zadana_calibration_step_decimals = step.split(".")[1] | length %}
            {%- else -%}
            {% set zadana_calibration_step_decimals = 0 %}
            {%- endif %}
            {% set new_zadana_calibration = room_temperature - zadana_temperature + zadana_calibration %}
            {% set new_zadana_calibration_bounded = [ [ (new_zadana_calibration) | round(zadana_calibration_step_decimals), zadana_calibration_min ] | max, zadana_calibration_max ] | min %}
            {% if new_zadana_calibration_bounded < zadana_calibration - zadana_calibration_step or zadana_calibration + zadana_calibration_step < new_zadana_calibration_bounded -%}
            {{ new_zadana_calibration }}
            {%- else -%}
            {{ zadana }}
            {%- endif %}

zachowuje sie tak jak by nie pobierało zmiennych…

A może jakiś link?

Chcę robić korektę przesunięcia krzywej grzewczej względem temperatury rzeczywistej osiąganej przy zadanej temperaturze kotła.
Wygląda na to że coś popieprzone z zaciąganiem zmiennych, jak wstawię stałą bez obliczeń to wysyła prawidłowo korektę.
przydało by się dorzucić jakąś kontrolkę z obliczeń na daschboardzie ale to może jak już trochę ogarnę.

Ogarnięte częściowo, nie zczytuje mi do zmiennej zadana encji zamiast climate.e3_vitodens_050_0822_heating number.e3_vitodens_050_0822_normalna_temperatura. Poradziłem sobie wpisując stałą do zadana.