# Home Assistant Configuration
# Lovelace dashboards - mode: storage pozwala na UI dashboardy
# Lovelace dashboards - mode: storage pozwala na UI dashboardy
lovelace:
mode: storage
resources:
- url: /hacsfiles/sunsynk-power-flow-card/sunsynk-power-flow-card.js
type: module
dashboards:
lovelace-heating:
mode: yaml
title: Ogrzewanie
icon: mdi:fire
show_in_sidebar: true
filename: dashboards/heating_dashboard.yaml
lovelace-ibsystem:
mode: yaml
title: IBSystem
icon: mdi:heat-pump
show_in_sidebar: true
filename: dashboards/ibsystem_dashboard.yaml
lovelace-salon:
mode: yaml
title: Salon
icon: mdi:sofa
show_in_sidebar: true
filename: dashboards/salon_dashboard.yaml
lovelace-id35:
mode: yaml
title: ID35
icon: mdi:thermometer
show_in_sidebar: true
filename: dashboards/id35_dashboard.yaml
homeassistant:
name: Home
latitude: 50.0
longitude: 19.0
elevation: 200
unit_system: metric
time_zone: Europe/Warsaw
# Configure a default setup
default_config:
# Text to speech
tts:
- platform: google_translate
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
# Shell commands
shell_command:
set_heating_t1s: >
sshpass -p 'QWer1234' ssh -o StrictHostKeyChecking=no wk@192.168.50.243
"/ibsystem/ibls -a 127.0.0.1 --pretty -p 2001 -c 'set(rs.0.id.1.setting.t1s={{ value }};);'"
# Template sensors
template:
- sensor:
# Temperatura w salonie
- name: "Temperatura w salonie"
unique_id: temperatura_salonu_ibsystem
state: >
{% set raw = states('sensor.ibsystem_rs0_id4_rs0_id4_input_t_0_value') %}
{% if raw not in ['unknown', 'unavailable', ''] %}
{{ (raw | float(0) / 10) | round(1) }}
{% else %}
{{ states('sensor.temperatura_w_salonie') | float(23.3) }}
{% endif %}
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
# Różnica temperatury (docelowa - aktualna)
- name: "Różnica temperatury 2"
unique_id: roznica_temperatury_2
state: >
{% set current = states('sensor.temperatura_w_salonie') | float(22) %}
{% set target = states('input_number.heating_target_temp') | float(22) %}
{{ (target - current) | round(1) }}
unit_of_measurement: "°C"
state_class: measurement
# Moc aktualna pompy (instantaneous)
- name: "Moc pompy aktualna"
unique_id: moc_pompy_aktualna
state: >
{% set current = states('sensor.ibsystem_rs0_id1_rs0_id1_outdoor_unit_current') | float(0) %}
{% set voltage = states('sensor.ibsystem_rs0_id1_rs0_id1_outdoor_unit_voltage') | float(230) %}
{{ ((current * voltage) / 1000) | round(2) }}
unit_of_measurement: "kW"
device_class: power
state_class: measurement
# COP kalorymetryczny (pomiar rzeczywisty z TW_in/TW_out i przepływu)
# Sevra Split 8kW: nominalny przepływ 1370 L/h, rejestr water_flow ~62 → 1 unit ≈ 22.1 L/h
# Formuła: Q_ciepło = flow_lh × 1.163 × (TW_out - TW_in) COP = Q / P_el
- name: "COP aktualny"
unique_id: cop_aktualny_pompy
state: >
{% set tw_out = states('sensor.ibsystem_rs0_id1_rs0_id1_tw_out') | float(0) %}
{% set tw_in = states('sensor.ibsystem_rs0_id1_rs0_id1_tw_in') | float(0) %}
{% set flow = states('sensor.ibsystem_rs0_id1_rs0_id1_water_flow') | float(0) %}
{% set cur = states('sensor.ibsystem_rs0_id1_rs0_id1_outdoor_unit_current') | float(0) %}
{% set volt = states('sensor.ibsystem_rs0_id1_rs0_id1_outdoor_unit_voltage') | float(230) %}
{% set freq = states('sensor.ibsystem_rs0_id1_rs0_id1_operating_frequency') | int(0) %}
{% set p_el = cur * volt %}
{% set delta_t = tw_out - tw_in %}
{% set flow_lh = flow * 22.1 %}
{% if p_el > 50 and freq > 5 and delta_t > 0.3 %}
{% set q_heat = flow_lh * 1.163 * delta_t %}
{{ (q_heat / p_el) | round(2) }}
{% else %}
0
{% endif %}
unit_of_measurement: ""
state_class: measurement
icon: mdi:heat-pump
# Moc cieplna aktualna [W] - z kalorymetrii
- name: "Moc cieplna pompy"
unique_id: moc_cieplna_pompy
state: >
{% set tw_out = states('sensor.ibsystem_rs0_id1_rs0_id1_tw_out') | float(0) %}
{% set tw_in = states('sensor.ibsystem_rs0_id1_rs0_id1_tw_in') | float(0) %}
{% set flow = states('sensor.ibsystem_rs0_id1_rs0_id1_water_flow') | float(0) %}
{% set freq = states('sensor.ibsystem_rs0_id1_rs0_id1_operating_frequency') | int(0) %}
{% set delta_t = tw_out - tw_in %}
{% set flow_lh = flow * 22.1 %}
{% if freq > 5 and delta_t > 0.3 %}
{{ (flow_lh * 1.163 * delta_t) | round(0) | int }}
{% else %}
0
{% endif %}
unit_of_measurement: "W"
device_class: power
state_class: measurement
icon: mdi:heat-wave
# SCOP dzienny i miesięczny - z utility_meter (kalorymetryczny)
- name: "SCOP dzienny"
unique_id: scop_pompy_dzienny
state: >
{% set el = states('sensor.energia_elektryczna_pompy_dzienna') | float(0) %}
{% set heat = states('sensor.energia_cieplna_dzienna') | float(0) %}
{% if el > 0.1 %}
{{ (heat / el) | round(2) }}
{% else %}
0
{% endif %}
state_class: measurement
icon: mdi:heat-pump
- name: "SCOP miesięczny"
unique_id: scop_pompy_miesieczny
state: >
{% set el = states('sensor.energia_elektryczna_pompy_miesieczna') | float(0) %}
{% set heat = states('sensor.energia_cieplna_miesieczna') | float(0) %}
{% if el > 0.1 %}
{{ (heat / el) | round(2) }}
{% else %}
0
{% endif %}
state_class: measurement
icon: mdi:heat-pump
# Licznik defrostów
- name: "Defrost aktywny"
unique_id: defrost_status
state: >
{% set load = states('sensor.ibsystem_rs0_id1_rs0_id1_load_output') | int(0) %}
{% set defrost_bit = (load // 32768) % 2 %}
{{ 'ON' if defrost_bit == 1 else 'OFF' }}
# Eksport do sieci - aktualna moc PV oddawana do sieci
- name: "Eksport do sieci"
unique_id: eksport_do_sieci_moc
state: >
{% set grid = states('sensor.inverter_deye_grid_power') | float(0) %}
{{ [(-grid) | round(0) | int, 0] | max }}
unit_of_measurement: "W"
device_class: power
state_class: measurement
icon: mdi:transmission-tower-export
# Grid power z odwróconym znakiem dla karty sunsynk (Deye: + = eksport, - = import)
- name: "Grid Power Sunsynk"
unique_id: grid_power_sunsynk
state: >
{% set grid = states("sensor.inverter_deye_grid_power") | float(0) %}
{{ (-grid) | round(0) | int }}
unit_of_measurement: "W"
device_class: power
state_class: measurement
# Pobór z sieci - aktualna moc pobierana z sieci
- name: "Pobór z sieci"
unique_id: pobor_z_sieci_moc
state: >
{% set grid = states('sensor.inverter_deye_grid_power') | float(0) %}
{{ [grid | round(0) | int, 0] | max }}
unit_of_measurement: "W"
device_class: power
state_class: measurement
icon: mdi:transmission-tower-import
- binary_sensor:
# Binary sensor defrost
- name: "Pompa defrost"
unique_id: pompa_defrost_binary
state: >
{{ states('sensor.defrost_aktywny') == 'ON' }}
device_class: running
# Input number dla celu temperatury
input_number:
heating_target_temp:
name: Docelowa temperatura
initial: 22
min: 18
max: 25
step: 0.5
unit_of_measurement: "°C"
icon: mdi:thermometer
# Counter dla liczenia defrostów
counter:
defrost_count:
name: Liczba defrostów
icon: mdi:snowflake-melt
initial: 0
step: 1
# Integration sensors - konwertuje moc [W/kW] na energię [kWh]
sensor:
- platform: integration
source: sensor.moc_cieplna_pompy
name: Energia cieplna pompy total
unique_id: energia_cieplna_pompy_total
unit_prefix: k
unit_time: h
method: trapezoidal
round: 3
- platform: integration
source: sensor.moc_pompy_aktualna
name: Energia elektryczna pompy total
unique_id: energia_elektryczna_pompy_total
unit_time: h
method: trapezoidal
round: 3
utility_meter:
energia_pobrana_dzienna:
source: sensor.energia_elektryczna_pompy_total
name: Energia elektryczna pompy (dzienna)
cycle: daily
energia_pobrana_tygodniowa:
source: sensor.energia_elektryczna_pompy_total
name: Energia elektryczna pompy (tygodniowa)
cycle: weekly
energia_pobrana_miesieczna:
source: sensor.energia_elektryczna_pompy_total
name: Energia elektryczna pompy (miesięczna)
cycle: monthly
energia_oddana_dzienna:
source: sensor.energia_cieplna_pompy_total
name: Energia cieplna (dzienna)
cycle: daily
energia_oddana_tygodniowa:
source: sensor.energia_cieplna_pompy_total
name: Energia cieplna (tygodniowa)
cycle: weekly
energia_oddana_miesieczna:
source: sensor.energia_cieplna_pompy_total
name: Energia cieplna (miesięczna)
cycle: monthly
http:
use_x_forwarded_for: true
trusted_proxies:
- 127.0.0.1
- ::1
- 192.168.50.244
- 172.16.0.0/12
- 10.0.0.0/8
- 192.168.0.0/16