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…
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ść . Chwytam się wszystkiego aby wypowiedzi osób na forum były bardziej szczegółowe.
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
@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…
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.