Hi, ich habe es "etwas" erweitert da mir noch ein paar Dinge fehlten um die Automatisierungen sauber laufen zu lassen:
Hier die Änderungen:
1. watchdog für
WLAN, API und reboot, falls er hängen bleibt, ist mir leider mehrfach beim OTA update passiert.
2. Alle gesetzten Werte (die Schieberegler) werden im flash gespeichert und dann die Geisha gesendet, falls der ESP neu startet, das führt dazu das die Werte in der Geisha und in HA auch immer die gleichen sind, die Initialwerte müssen dann leider an zwei stellen angepasst werden, wenn erforderlich.
3. ich habe die Cool Funktionen entfernt, kann aber sicher jeder selbst wieder dazu nehmen.
4. Wifi und Update etwas lesbarer für Menschen.
5. Power mode, Heat mode und Tank mode hinzugefügt, hilft mir sehr bei meinen Automationen. Heat ist ein wenn er auf on tank oder on tank heat steht ... usw.
Danke sollte selbsterklärend sein:
6. ich geben noch den aktullen Arbeitsmodus aus, Heizen, Speicher, Umwälzen, Standby, Enteisen, aus.
ich hoffe ich habe nichts vergessen...
Kann es auch keine bei GIT hochladen...
external_components:
- source:
type: local
path: components
sensor:
- platform: wifi_signal
name: "WiFi Signal (dB)"
id: wifi_signal_db
update_interval: 60s
entity_category: "diagnostic"
internal: true
- platform: copy
source_id: wifi_signal_db
name: "WiFi Signal (%)"
filters:
- lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
unit_of_measurement: "%"
entity_category: "diagnostic"
- platform: aquarea
outside_temperature:
name: "Outside temperature"
outlet_temperature:
name: "Outlet temperature"
inlet_temperature:
name: "Inlet temperature"
tank_temperature:
name: "Tank temperature"
compressor_value:
name: "Heatpump compressor value"
id: "heatpump_compressor_value"
heat_power:
name: "Heat power"
id: "heat_power"
#cool_power:
# name: "Cool power"
tank_power:
name: "Tank power"
id: "tank_power"
pump_speed:
name: "Water pump speed"
text_sensor:
- platform: wifi_info
ip_address:
name: IP Address
- platform: template
name: Uptime
update_interval: 63s
lambda: |-
auto s = millis() / 1000;
return str_sprintf("%dd %02d:%02d:%02d", s / 86400, (s / 3600) % 24, (s / 60) % 60, s % 60);
entity_category: "diagnostic"
- platform: aquarea
error_code:
name: "Error code"
last_error_code:
name: "Last error code"
current_mode:
name: "Current operation mode"
id: current_mode
- platform: template
name: "Heatpump state"
id: heatpump_state
update_interval: 10s
lambda: |-
// Werte lesen (auto statt float, das verhindert Typkonflikte)
auto compressor = id(heatpump_compressor_value).state;
auto heat_pwr = id(heat_power).state;
auto tank_pwr = id(tank_power).state;
auto defrost_on = id(defrost).state;
auto mode = id(current_mode).state;
if (mode == "off heat") {
return std::string("off");
}
if (defrost_on) {
return std::string("defrost");
}
if (compressor == 0 && !defrost_on) {
if (heat_pwr > 0 && heat_pwr < 20) {
return std::string("standby");
} else if (heat_pwr >= 20) {
return std::string("circulate");
} else if (tank_pwr > 0) {
return std::string("wait for Tank");
}
}
if (compressor > 0 && !defrost_on) {
if (heat_pwr > 0) {
return std::string("heat");
} else if (tank_pwr > 0) {
return std::string("tank");
}
}
return std::string("unknown");
binary_sensor:
- platform: aquarea
booster:
name: "Booster heater active"
defrost:
name: "Defrost active"
id: "defrost"
- platform: template
name: "Power mode"
lambda: |-
if (id(current_mode).state == "off heat") return false;
else return true;
- platform: template
name: "Heat mode"
lambda: |-
if (id(current_mode).state == "on heat" || id(current_mode).state == "on heat tank") return true;
else return false;
- platform: template
name: "Tank mode"
lambda: |-
if (id(current_mode).state == "on tank" || id(current_mode).state == "on heat tank") return true;
else return false;
button:
- platform: restart
name: "Restart"
entity_category: "diagnostic"
icon: "mdi:restart"
device_class: "restart"
- platform: aquarea
reset_error:
name: "Reset errors"
switch:
- platform: aquarea
force:
name: "Force operation"
# === Globals für persistente Speicherung ===
globals:
- id: boot_ok
type: bool
restore_value: no
initial_value: "false"
- id: heat_out_temp_low
type: float
restore_value: true
initial_value: "-15"
- id: heat_out_temp_high
type: float
restore_value: true
initial_value: "14"
- id: heat_water_temp_low
type: float
restore_value: true
initial_value: "35"
- id: heat_water_temp_high
type: float
restore_value: true
initial_value: "26"
- id: heat_off_out_temp
type: float
restore_value: true
initial_value: "16"
- id: heater_on_out_temp
type: float
restore_value: true
initial_value: "-15"
#- id: cool_setpoint_temp
# type: float
# restore_value: true
# initial_value: "18"
- id: tank_setpoint_temp
type: float
restore_value: true
initial_value: "58"
- id: shift_setpoint_temp
type: float
restore_value: true
initial_value: "0"
interval:
- interval: 60s
then:
- if:
condition:
lambda: 'return !id(boot_ok);'
then:
- logger.log: "Boot watchdog: system not initialized, restarting..."
- delay: 2s
- lambda: 'ESP.restart();'
number:
- platform: aquarea
heat_out_temp_low:
name: "Low heat outside temperature"
initial_value: -15
id: number_heat_out_temp_low
on_value:
then:
- globals.set:
id: heat_out_temp_low
value: !lambda 'return x;'
heat_out_temp_high:
name: "High heat outside temperature"
initial_value: 14
id: number_heat_out_temp_high
on_value:
then:
- globals.set:
id: heat_out_temp_high
value: !lambda 'return x;'
heat_water_temp_low:
name: "Low heat water temperature"
initial_value: 35
id: number_heat_water_temp_low
on_value:
then:
- globals.set:
id: heat_water_temp_low
value: !lambda 'return x;'
heat_water_temp_high:
name: "High heat water temperature"
initial_value: 26
id: number_heat_water_temp_high
on_value:
then:
- globals.set:
id: heat_water_temp_high
value: !lambda 'return x;'
heat_off_out_temp:
name: "Heat off outside temperature"
initial_value: 16
id: number_heat_off_out_temp
on_value:
then:
- globals.set:
id: heat_off_out_temp
value: !lambda 'return x;'
heater_on_out_temp:
name: "Heater On outside temperature"
initial_value: -15
id: number_heater_on_out_temp
on_value:
then:
- globals.set:
id: heater_on_out_temp
value: !lambda 'return x;'
#cool_setpoint_temp:
# name: "Cool setpoint temperature"
# initial_value: 18
# id: number_cool_setpoint_temp
# on_value:
# then:
# - globals.set:
# id: cool_setpoint_temp
# value: !lambda 'return x;'
tank_setpoint_temp:
name: "Tank setpoint temperature"
initial_value: 58
id: number_tank_setpoint_temp
on_value:
then:
- globals.set:
id: tank_setpoint_temp
value: !lambda 'return x;'
shift_setpoint_temp:
name: "Shift setpoint temperature"
initial_value: 0
id: number_shift_setpoint_temp
on_value:
then:
- globals.set:
id: shift_setpoint_temp
value: !lambda 'return x;'
# === Script: Number-
Regler beim Boot mit gespeicherten Globals wiederherstellen ===
script:
- id: send_saved_values
then:
- delay: 2s
- number.set:
id: number_heat_out_temp_low
value: !lambda 'return id(heat_out_temp_low);'
- number.set:
id: number_heat_out_temp_high
value: !lambda 'return id(heat_out_temp_high);'
- number.set:
id: number_heat_water_temp_low
value: !lambda 'return id(heat_water_temp_low);'
- number.set:
id: number_heat_water_temp_high
value: !lambda 'return id(heat_water_temp_high);'
- number.set:
id: number_heat_off_out_temp
value: !lambda 'return id(heat_off_out_temp);'
- number.set:
id: number_heater_on_out_temp
value: !lambda 'return id(heater_on_out_temp);'
#- number.set:
# id: number_cool_setpoint_temp
# value: !lambda 'return id(cool_setpoint_temp);'
- number.set:
id: number_tank_setpoint_temp
value: !lambda 'return id(tank_setpoint_temp);'
- number.set:
id: number_shift_setpoint_temp
value: !lambda 'return id(shift_setpoint_temp);'
# === Select für Betriebsmodus ===
select:
- platform: aquarea
request_mode:
name: "Request mode"
options:
- "off heat"
- "on heat"
- "on tank"
- "on heat tank"
uart:
tx_pin: GPIO15
rx_pin: GPIO13
baud_rate: 960
data_bits: 8
stop_bits: 1
parity: "EVEN"
aquarea:
rts_pin: GPIO5