Automation ist ab da wo der Curser sitzt aktiv.
Also 15:47 Uhr.
Bringt ein bisschen was. Aber das Problem scheint zu sein, dass das Innengerät die Temperatur eigentlich in 0,5°C-Schritten misst. Aber nur 1°C-Schritte an die App und Panasonic-Cloud übermittelt. So ists natürlich schwer den Soll-Wert so aktiv zu tracken, dass wirklich bis zur untersten Modulation geregelt wird. Gelingt mir nicht. Entweder es regelt nicht komplett runter oder schaltet ab.
Aber ein bisschen besser im Sinne von passenderen Taktpausen ist es auf jeden Fall durch etwas tracking und aktive Hysterese. Also wer das Ding in der Panasonic-Cloud hat und nen externen Temperatursensor kann darüber sicher was verbessern.
Aber die Berichte, dass die Cloud etwas buggy/laggy ist kann ich jetzt auch unterstreichen.
Nicht jeder an Panasonic gesendete Befehl kommt wirklich an. Also immer schön regelmäßig im 5-10sec-Intervall die Daten nachdrücken 
Wenn mal wer weiter und besser probieren will.
Das war jetzt wirklich nur ganz quick and dirty.
Es wird sicher deutlich Feintuning bei den Soll-Ist-Werten und auch den Temperaturabweichungen benötigen. Hängt von Anlage aber auch Heizbedarf im Raum ab.
Und ob man sicherheitshalber auf FAN umschaltet wird davon abhängen welche Soll-Temperatur man im Raum hat. Wenn die Temperatur am Innengerät nicht so weit absinkt, dass trotz gewollter Heizpause wieder geheizt wird ist das selbstverständlich nicht notwendig.
Ist schonmal besser als out of the box. Kann man sicher weiter optimieren.
Aber da der Raum nur 10 Tage im Jahr benutzt wird hab ich da wenig Muße.
Was man ausgehend hiervon sehr einfach machen könnte ist Heizphasen und Taktpausen durch größere Hysterse verlängern. Das wären nur 2-3 Zahlen anpassen.
Meine Hysterese ist jetzt ingesamt nur 0,45°C groß.
alias: Dachboden Klimaanlage Sollwert-Tracking (mit Hysterese >1°C)
description: >
Setzt den Sollwert der Klimaanlage Dachboden relativ zur aktuellen
Klimaanlagen-Temperatur (current_temperature), abhängig von der Abweichung
zwischen realer Dachboden-Temperatur und Zieltemperatur. Nur der Schritt
>1,0°C über Ziel hat eine Hysterese (Ein bei >1,0°C, Aus erst bei <=0,55°C).
Wenn diese Hysterese aktiv ist, wird wegen min_temp=16°C auf fan_only + Low
geschaltet. Rückkehr auf heat + High erst bei <=0,55°C. Wenn die Anlage auf
off steht, greift die Automation nicht ein.
triggers:
- entity_id:
- sensor.hobbyraum_000a_temperature
- input_number.zieltemperatur_dachboden
- climate.dachboden_klimaanlage
trigger: state
- seconds: /8
trigger: time_pattern
conditions:
- condition: template
value_template: >
{{ states('sensor.hobbyraum_000a_temperature') not in
['unknown','unavailable','none']
and states('input_number.zieltemperatur_dachboden') not in ['unknown','unavailable','none']
and state_attr('climate.dachboden_klimaanlage','current_temperature') is not none
and state_attr('climate.dachboden_klimaanlage','temperature') is not none }}
actions:
- variables:
room_temp: "{{ states('sensor.hobbyraum_000a_temperature') | float }}"
ziel_temp: "{{ states('input_number.zieltemperatur_dachboden') | float }}"
ac_current: >-
{{ state_attr('climate.dachboden_klimaanlage', 'current_temperature') |
float }}
ac_set_now: "{{ state_attr('climate.dachboden_klimaanlage', 'temperature') | float }}"
climate_mode_now: "{{ states('climate.dachboden_klimaanlage') }}"
fan_mode_now: "{{ state_attr('climate.dachboden_klimaanlage', 'fan_mode') }}"
delta: "{{ (room_temp - ziel_temp) | float }}"
high_cool_step_active: >-
{% set d = delta | float %} {% set mode = climate_mode_now %} {% if mode
== 'fan_only' %}
{{ d > 0.55 }}
{% else %}
{{ d > 1.0 }}
{% endif %}
offset: >-
{% set d = delta | float %}
{% set high_active = (high_cool_step_active | string | lower) == 'true'
%}
{# Zu kalt: mehr heizen #}
{% if d < -1.0 %}
1.0
{% elif d < 0 %}
0.0
{# Zu warm: weniger heizen / stärker absenken #}
{% else %}
{% if high_active %}
-4
{% elif d > 0.5 %}
-1.0
{% elif d > 0.0 %}
-0.5
{% else %}
0.0
{% endif %}
{% endif %}
raw_target: "{{ (ac_current + (offset | float)) | float }}"
target_temp: >-
{% set v = raw_target | float %} {% set v = ((v * 2) | round(0)) / 2 %}
{% if v < 16 %} 16 {% elif v > 30 %} 30 {% else %} {{ v }} {% endif %}
- condition: template
value_template: "{{ climate_mode_now != 'off' }}"
- choose:
- conditions:
- condition: template
value_template: "{{ (high_cool_step_active | string | lower) == 'true' }}"
sequence:
- choose:
- conditions:
- condition: template
value_template: "{{ climate_mode_now != 'fan_only' }}"
sequence:
- target:
entity_id: climate.dachboden_klimaanlage
data:
hvac_mode: fan_only
action: climate.set_hvac_mode
- choose:
- conditions:
- condition: template
value_template: "{{ fan_mode_now != 'Low' }}"
sequence:
- target:
entity_id: climate.dachboden_klimaanlage
data:
fan_mode: Low
action: climate.set_fan_mode
default:
- choose:
- conditions:
- condition: template
value_template: "{{ climate_mode_now != 'heat' }}"
sequence:
- target:
entity_id: climate.dachboden_klimaanlage
data:
hvac_mode: heat
action: climate.set_hvac_mode
- choose:
- conditions:
- condition: template
value_template: "{{ fan_mode_now != 'High' }}"
sequence:
- target:
entity_id: climate.dachboden_klimaanlage
data:
fan_mode: High
action: climate.set_fan_mode
- condition: template
value_template: "{{ (high_cool_step_active | string | lower) != 'true' }}"
- condition: template
value_template: >
{{ (state_attr('climate.dachboden_klimaanlage', 'temperature') | float) !=
(target_temp | float) }}
- target:
entity_id: climate.dachboden_klimaanlage
data:
temperature: "{{ target_temp | float }}"
action: climate.set_temperature
mode: single