Newer
Older
homeassistant-infra / ha-configs / 151 / configuration.yaml
# 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-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.sterownik_4_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.sterownik_1_rs0_id1_outdoor_unit_current') | float(0) %}
          {% set voltage = states('sensor.sterownik_1_rs0_id1_outdoor_unit_voltage') | float(230) %}
          {{ ((current * voltage) / 1000) | round(2) }}
        unit_of_measurement: "kW"
        device_class: power
        state_class: measurement
        
      # COP chwilowy (instantaneous COP)
      - name: "COP aktualny"
        unique_id: cop_aktualny_pompy
        state: >
          {% set power_in = states('sensor.moc_pompy_aktualna') | float(0) %}
          {% set freq = states('sensor.sterownik_1_rs0_id1_operating_frequency') | int(0) %}
          {% set t1 = states('sensor.sterownik_1_rs0_id1_t1') | float(0) %}
          {% set t4 = states('sensor.sterownik_1_rs0_id1_t4') | float(0) %}
          {% if power_in > 0.1 and freq > 0 %}
            {# Przybliżona moc cieplna: power_in * estymowany COP #}
            {# COP zależy od różnicy temp: im większa różnica, tym niższy COP #}
            {% set delta_t = t1 - t4 %}
            {% set estimated_cop = 5.0 - (delta_t * 0.05) %}
            {% set estimated_cop = [estimated_cop, 2.0] | max %}
            {% set estimated_cop = [estimated_cop, 6.0] | min %}
            {{ estimated_cop | round(2) }}
          {% else %}
            0
          {% endif %}
        state_class: measurement
        
      # SCOP (seasonal COP - z liczników)
      - name: "SCOP pompy"
        unique_id: scop_pompy_sezonowy
        state: >
          {% set consumed = states('sensor.sterownik_1_rs0_id1_electricity_consumption_lo') | float(1) %}
          {% set produced = states('sensor.sterownik_1_rs0_id1_power_output_lo') | float(0) %}
          {% if consumed > 0 %}
            {{ (produced / consumed) | round(2) }}
          {% else %}
            0
          {% endif %}
        state_class: measurement
        
      # Licznik defrostów
      - name: "Defrost aktywny"
        unique_id: defrost_status
        state: >
          {% set load = states('sensor.sterownik_1_rs0_id1_load_output') | int(0) %}
          {% set defrost_bit = (load // 32768) % 2 %}
          {{ 'ON' if defrost_bit == 1 else 'OFF' }}
        
  - 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


utility_meter:
  energia_pobrana_dzienna:
    source: sensor.sterownik_1_rs0_id1_electricity_consumption_lo
    name: Energia pobrana (dzienna)
    cycle: daily
    
  energia_pobrana_tygodniowa:
    source: sensor.sterownik_1_rs0_id1_electricity_consumption_lo
    name: Energia pobrana (tygodniowa)
    cycle: weekly
    
  energia_pobrana_miesieczna:
    source: sensor.sterownik_1_rs0_id1_electricity_consumption_lo
    name: Energia pobrana (miesięczna)
    cycle: monthly
    
  energia_oddana_dzienna:
    source: sensor.sterownik_1_rs0_id1_power_output_lo
    name: Energia oddana (dzienna)
    cycle: daily
    
  energia_oddana_tygodniowa:
    source: sensor.sterownik_1_rs0_id1_power_output_lo
    name: Energia oddana (tygodniowa)
    cycle: weekly
    
  energia_oddana_miesieczna:
    source: sensor.sterownik_1_rs0_id1_power_output_lo
    name: Energia oddana (miesięczna)
    cycle: monthly

  set_heating_curve: >
    sshpass -p 'QWer1234' ssh -o StrictHostKeyChecking=no wk@192.168.50.243 
    "/ibsystem/ibls -a 127.0.0.1 -p 2001 -c 'set(rs.0.id.1.curve.selection={{ curve }};);' 2>/dev/null"