title: OpenQuatt
views:
  - title: Overzicht
    path: overzicht
    icon: mdi:view-dashboard
    type: sections
    max_columns: 3
    sections:
      - type: grid
        column_span: 1
        cards:
          - type: heading
            icon: mdi:speedometer
            heading: Live prestaties
            heading_style: title
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg</strong></summary>


              Deze waarden geven live de belangrijkste systeemprestatie:

              - `Power E`: totaal elektrisch ingangsvermogen van de
              warmtepomp(en).

              - `Power H`: totaal thermisch afgegeven vermogen.

              - `COP`: verhouding `Power H / Power E` (momentane efficientie).

              - `Flow`: actuele volumestroom die als basis dient voor
              flowbewaking.

              - `Buitentemp`: geselecteerde bron voor buitentemperatuur in de
              regeling.

              - `Aanvoertemperatuur`: geselecteerde bron voor actuele
              watersupply.


              </details>
            text_only: true
          - type: tile
            entity: sensor.openquatt_total_power_input
            name: Power E
            vertical: false
            features:
              - type: trend-graph
            features_position: bottom
          - type: tile
            entity: sensor.openquatt_total_heat_power
            name: Power H
            vertical: false
            features:
              - type: trend-graph
            features_position: bottom
          - type: tile
            entity: sensor.openquatt_total_cop
            name: COP
            vertical: false
            features:
              - type: trend-graph
            features_position: bottom
          - type: tile
            entity: sensor.openquatt_flow_average_selected
            name: Flow
            vertical: false
            features:
              - type: trend-graph
            features_position: bottom
          - type: tile
            entity: sensor.openquatt_outside_temperature_selected
            name: Buitentemp
            vertical: false
            features:
              - type: trend-graph
            features_position: bottom
          - type: tile
            entity: sensor.openquatt_water_supply_temp_selected
            name: Aanvoertemperatuur
            vertical: false
            features:
              - type: trend-graph
            features_position: bottom
      - type: grid
        cards:
          - type: heading
            heading_style: title
            heading: Systeemstatus
            icon: mdi:state-machine
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg</strong></summary>


              Dit blok toont de actieve regeltoestand:

              - `ControlMode`: huidige bedrijfsmodus/stap van de state machine.

              - `Flow mode`: manier waarop de pomp/flowregeling momenteel werkt.

              - `Verwarmingsstrategie`: bron van de warmtevraag (bijv. Power
              House/curve).

              - `Ketel actief`: geeft aan of ketel-assist actief is.

              - `Stille modus actief`: toont of het stil-venster nu van kracht
              is.


              </details>
            text_only: true
          - type: tile
            entity: sensor.openquatt_control_mode_label
            name: ControlMode
            vertical: false
            features_position: bottom
          - type: tile
            entity: sensor.openquatt_flow_mode
            name: Flow mode
            vertical: false
            features_position: bottom
          - type: tile
            entity: sensor.openquatt_heating_strategy
            name: Verwarmingsstrategie
            vertical: false
            features_position: bottom
          - type: tile
            entity: binary_sensor.openquatt_boiler_active
            name: Ketel actief
            vertical: false
            features_position: bottom
          - type: tile
            entity: binary_sensor.openquatt_silent_active
            name:
              type: entity
            vertical: false
            features_position: bottom
          - type: heading
            icon: mdi:stethoscope
            heading: Debug
            heading_style: title
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg</strong></summary><ha-alert
              alert-type="warning">Pas op, dit overruled de ControlMode van
              OpenQuatt!</ha-alert>


              `CM override`: handmatige mode-override; normaal op `Auto` laten.


              </details>
            text_only: true
          - type: tile
            entity: select.openquatt_cm_override
            name:
              type: entity
            hide_state: true
            vertical: false
            features:
              - type: select-options
            features_position: inline
      - type: grid
        cards:
          - type: heading
            heading: Thermostaat
            heading_style: title
            icon: mdi:home-thermometer
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg</strong></summary>


              Geselecteerde kamerregelwaarden:

              - `Doeltemperatuur`: gevraagde ruimtetemperatuur.

              - `Huidige temperatuur`: gemeten ruimtetemperatuur.

              Het verschil tussen deze twee bepaalt hoe sterk de warmtevraag
              oploopt.


              </details>
            text_only: true
          - type: custom:mini-graph-card
            name: Huidige kamertemperatuur
            entities:
              - entity: sensor.openquatt_room_temperature_selected
                name: Kamertemperatuur
                show_legend_state: true
              - entity: sensor.openquatt_room_setpoint_selected
                name: Doeltemperatuur
                show_fill: false
                show_legend_state: true
            show:
              icon: true
              name: true
              state: true
              legend: true
              labels: false
            points_per_hour: 30
            hours_to_show: 12
            line_width: 2
            hour24: true
            height: 80
            decimals: 1
          - type: heading
            heading_style: title
            heading: Instellingen stille modus
            icon: mdi:volume-off
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg</strong></summary>


              Dagelijkse instellingen die direct gedrag begrenzen:

              - `Silent end/start time`: tijdvenster voor stille modus.

              - `Day max level`: bovengrens compressorlevel buiten silent-uren.

              - `Silent max level`: bovengrens compressorlevel tijdens
              silent-uren.


              </details>
            text_only: true
          - type: tile
            entity: time.openquatt_silent_end_time
            name:
              type: entity
            vertical: false
          - type: tile
            entity: time.openquatt_silent_start_time
            name:
              type: entity
            vertical: false
          - type: tile
            entity: number.openquatt_day_max_level
            name:
              type: entity
            hide_state: false
            vertical: false
            features:
              - style: slider
                type: numeric-input
            features_position: inline
          - type: tile
            entity: number.openquatt_silent_max_level
            name:
              type: entity
            hide_state: false
            vertical: false
            features:
              - style: slider
                type: numeric-input
            features_position: inline
      - type: grid
        column_span: 2
        cards:
          - type: heading
            icon: mdi:chart-line
            heading: Performance (12h)
            heading_style: title
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg</strong></summary>


              Deze grafiek combineert 12-uurs trends voor:


              - `Power E`: totaal elektrisch ingangsvermogen.

              - `Power H`: totaal thermisch afgegeven vermogen.

              - `COP`: efficientieverhouding (`Power H / Power E`).


              Gebruik dit om te controleren of warmteafgifte het opgenomen
              vermogen volgt en of COP realistisch blijft.

              </details>
            text_only: true
          - type: custom:apexcharts-card
            header:
              show: true
              title: Power E, Power H en COP
              show_states: true
              colorize_states: true
            graph_span: 12h
            update_interval: 30s
            apex_config:
              chart:
                height: 320
                animations:
                  enabled: false
              legend:
                show: true
                position: bottom
                clusterGroupedSeries: false
              yaxis:
                - id: watts
                  min: 0
                  decimalsInFloat: 0
                  title:
                    text: Vermogen (W)
                - id: cop
                  opposite: true
                  min: 0
                  decimalsInFloat: 1
                  title:
                    text: COP
              stroke:
                width: 2
                curve: smooth
              tooltip:
                shared: true
            series:
              - entity: sensor.openquatt_total_power_input
                name: Power E
                color: '#3B82F6'
                yaxis_id: watts
                type: line
                extend_to: end
                show:
                  legend_value: false
                group_by:
                  func: avg
                  duration: 5min
                  fill: last
              - entity: sensor.openquatt_total_heat_power
                name: Power H
                color: '#F59E0B'
                yaxis_id: watts
                type: line
                extend_to: end
                show:
                  legend_value: false
                group_by:
                  func: avg
                  duration: 5min
                  fill: last
              - entity: sensor.openquatt_total_cop
                name: COP
                color: '#10B981'
                yaxis_id: cop
                type: line
                extend_to: end
                show:
                  legend_value: false
                group_by:
                  func: avg
                  duration: 5min
                  fill: last
            grid_options:
              columns: full
    cards: []
    header:
      card:
        type: markdown
        content: >-
          <img
          src="https://raw.githubusercontent.com/jeroen85/OpenQuatt/main/docs/assets/openquatt_logo.png"
          width="300" />


          ## <ha-icon icon="mdi:view-dashboard"></ha-icon> Overzicht

          Snel en praktisch zicht op prestaties, status en bediening.
        text_only: true
      layout: center
      badges_position: top
      badges_wrap: wrap
    badges:
      - type: entity
        show_name: false
        show_state: true
        show_icon: false
        entity: sensor.openquatt_openquatt_version
        name:
          - type: device
          - type: entity
        state_content:
          - name
          - state
  - title: Energie
    path: energy
    icon: mdi:lightning-bolt-circle
    type: sections
    max_columns: 3
    sections:
      - type: grid
        cards:
          - type: heading
            icon: mdi:gauge
            heading: Huidig
            heading_style: title
          - type: heading
            icon: mdi:heat-pump
            heading: Warmtepomp
            heading_style: subtitle
          - type: entities
            show_header_toggle: false
            entities:
              - entity: sensor.openquatt_total_power_input
                name: Elektrisch ingangsvermogen
              - entity: sensor.openquatt_total_heat_power
                name: Warmteafgifte
              - entity: sensor.openquatt_total_cop
                name: Huidige COP
          - type: heading
            icon: mdi:water-boiler
            heading: CV-ketel
            heading_style: subtitle
          - type: entities
            show_header_toggle: false
            entities:
              - entity: sensor.openquatt_boiler_heat_power
                name: Warmteafgifte
          - type: heading
            icon: mdi:sigma
            heading: Systeem
            heading_style: subtitle
          - type: entities
            show_header_toggle: false
            entities:
              - entity: sensor.openquatt_system_heat_power
                name: Warmteafgifte
      - type: grid
        cards:
          - type: heading
            icon: mdi:calendar-today
            heading_style: title
            heading: Vandaag
          - type: heading
            icon: mdi:heat-pump
            heading: Warmtepomp
            heading_style: subtitle
          - type: entities
            show_header_toggle: false
            entities:
              - entity: sensor.openquatt_electrical_energy_daily
                name: Elektriciteit vandaag
              - entity: sensor.openquatt_heatpump_thermal_energy_daily
                name: Warmte vandaag
              - entity: sensor.openquatt_heatpump_cop_daily
                name: COP vandaag
          - type: heading
            icon: mdi:water-boiler
            heading: CV-ketel
            heading_style: subtitle
          - type: entities
            show_header_toggle: false
            entities:
              - entity: sensor.openquatt_boiler_thermal_energy_daily
                name: Warmte vandaag
          - type: heading
            icon: mdi:sigma
            heading: Systeem
            heading_style: subtitle
          - type: entities
            show_header_toggle: false
            entities:
              - entity: sensor.openquatt_system_thermal_energy_daily
                name: Warmte vandaag
      - type: grid
        cards:
          - type: heading
            icon: mdi:sigma
            heading: Cumulatief
            heading_style: title
          - type: heading
            icon: mdi:heat-pump
            heading: Warmtepomp
            heading_style: subtitle
          - type: entities
            show_header_toggle: false
            entities:
              - entity: sensor.openquatt_electrical_energy_cumulative
                name: Elektriciteit cumulatief
              - entity: sensor.openquatt_heatpump_thermal_energy_cumulative
                name: Warmte cumulatief
              - entity: sensor.openquatt_heatpump_cop_cumulative
                name: COP cumulatief
          - type: heading
            icon: mdi:water-boiler
            heading: CV-ketel
            heading_style: subtitle
          - type: entities
            show_header_toggle: false
            entities:
              - entity: sensor.openquatt_boiler_thermal_energy_cumulative
                name: Warmte cumulatief
          - type: heading
            icon: mdi:sigma
            heading: Systeem
            heading_style: subtitle
          - type: entities
            show_header_toggle: false
            entities:
              - entity: sensor.openquatt_system_thermal_energy_cumulative
                name: Warmte cumulatief
      - type: grid
        cards:
          - type: heading
            heading: Trends (24 uur)
            heading_style: title
            icon: mdi:trending-up
          - type: history-graph
            title: Warmtepomptrends (24 uur)
            hours_to_show: 24
            refresh_interval: 60
            entities:
              - entity: sensor.openquatt_total_heat_power
                name: Warmteafgifte
              - entity: sensor.openquatt_heatpump_cop_daily
                name: COP vandaag
              - entity: sensor.openquatt_heatpump_thermal_energy_daily
                name: Warmte vandaag
          - type: history-graph
            title: Keteltrends (24 uur)
            hours_to_show: 24
            refresh_interval: 60
            entities:
              - entity: sensor.openquatt_boiler_heat_power
                name: Warmteafgifte
              - entity: sensor.openquatt_boiler_thermal_energy_daily
                name: Warmte vandaag
          - type: history-graph
            title: Systeemtrends (24 uur)
            hours_to_show: 24
            refresh_interval: 60
            entities:
              - entity: sensor.openquatt_total_power_input
                name: Elektrisch ingangsvermogen
              - entity: sensor.openquatt_system_heat_power
                name: Warmteafgifte
              - entity: sensor.openquatt_system_thermal_energy_daily
                name: Warmte vandaag
        column_span: 3
      - type: grid
        column_span: 3
        cards:
          - type: heading
            icon: mdi:chart-bar
            heading: Energietrends (7d/30d)
            heading_style: title
          - type: markdown
            content: >-
              <details>


              <summary><strong>Uitleg</strong></summary>


              Dagaggregatie voor energie:

              - Elektriciteit en warmte als dagelijkse kWh (afgeleid uit
              cumulatieve sensoren)

              - `COP vandaag` als daggemiddelde


              </details>
            text_only: true
          - type: custom:apexcharts-card
            header:
              show: true
              title: Energietrends (7 dagen)
              show_states: false
            graph_span: 7d
            update_interval: 120s
            yaxis:
              - id: energy
                min: 0
                decimals: 1
                apex_config:
                  title:
                    text: kWh/dag
              - id: cop
                opposite: true
                min: 0
                max: 8
                decimals: 2
                apex_config:
                  tickAmount: 4
                  title:
                    text: COP vandaag
            apex_config:
              chart:
                height: 320
              legend:
                show: true
                position: top
                clusterGroupedSeries: false
              stroke:
                width: 2
                curve: smooth
              tooltip:
                shared: true
            series:
              - entity: sensor.openquatt_electrical_energy_cumulative
                name: Elektriciteit/dag
                color: '#3B82F6'
                yaxis_id: energy
                type: column
                group_by:
                  func: delta
                  duration: 1d
              - entity: sensor.openquatt_heatpump_thermal_energy_cumulative
                name: Warmtepomp warmte/dag
                color: '#F59E0B'
                yaxis_id: energy
                type: column
                group_by:
                  func: delta
                  duration: 1d
              - entity: sensor.openquatt_boiler_thermal_energy_cumulative
                name: Ketelwarmte/dag
                color: '#EF4444'
                yaxis_id: energy
                type: column
                group_by:
                  func: delta
                  duration: 1d
              - entity: sensor.openquatt_system_thermal_energy_cumulative
                name: Systeemwarmte/dag
                color: '#10B981'
                yaxis_id: energy
                type: line
                group_by:
                  func: delta
                  duration: 1d
              - entity: sensor.openquatt_heatpump_cop_daily
                name: COP vandaag
                color: '#A855F7'
                yaxis_id: cop
                type: line
                group_by:
                  func: avg
                  duration: 1d
            grid_options:
              columns: full
          - type: custom:apexcharts-card
            header:
              show: true
              title: Energietrends (30 dagen)
              show_states: false
            graph_span: 30d
            update_interval: 300s
            yaxis:
              - id: energy
                min: 0
                decimals: 1
                apex_config:
                  title:
                    text: kWh/dag
              - id: cop
                opposite: true
                min: 0
                max: 8
                decimals: 2
                apex_config:
                  tickAmount: 4
                  title:
                    text: COP vandaag
            apex_config:
              chart:
                height: 320
              legend:
                show: true
                position: top
                clusterGroupedSeries: false
              stroke:
                width: 2
                curve: smooth
              tooltip:
                shared: true
            series:
              - entity: sensor.openquatt_electrical_energy_cumulative
                name: Elektriciteit/dag
                color: '#3B82F6'
                yaxis_id: energy
                type: column
                group_by:
                  func: delta
                  duration: 1d
              - entity: sensor.openquatt_heatpump_thermal_energy_cumulative
                name: Warmtepomp warmte/dag
                color: '#F59E0B'
                yaxis_id: energy
                type: column
                group_by:
                  func: delta
                  duration: 1d
              - entity: sensor.openquatt_boiler_thermal_energy_cumulative
                name: Ketelwarmte/dag
                color: '#EF4444'
                yaxis_id: energy
                type: column
                group_by:
                  func: delta
                  duration: 1d
              - entity: sensor.openquatt_system_thermal_energy_cumulative
                name: Systeemwarmte/dag
                color: '#10B981'
                yaxis_id: energy
                type: line
                group_by:
                  func: delta
                  duration: 1d
              - entity: sensor.openquatt_heatpump_cop_daily
                name: COP vandaag
                color: '#A855F7'
                yaxis_id: cop
                type: line
                group_by:
                  func: avg
                  duration: 1d
            grid_options:
              columns: full
    cards: []
    header:
      card:
        type: markdown
        content: >-
          # <ha-icon icon="mdi:lightning-bolt-circle"></ha-icon> Energie

          Energie-overzicht van Warmtepomp, boiler en totaal systeem (dag +
          cumulatief).
  - title: Flow
    path: flow
    icon: mdi:waves
    type: sections
    max_columns: 3
    sections:
      - type: grid
        cards:
          - type: heading
            icon: mdi:waves-arrow-right
            heading: Flowstatus en regeling
            heading_style: title
          - type: heading
            icon: ''
            heading: Status
            heading_style: subtitle
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg</strong></summary>


              Flowstatus in een oogopslag:


              - `Flow mode`: actieve werking van de flowregeling.

              - `ControlMode`: actieve supervisory control state.

              - `Low flow alarm`: beveiligingsalarm bij te lage flow.

              - `Flow (gemiddeld)`: geselecteerde gemiddelde flow voor
              regeling/beveiliging.

              - `Flow mismatch`: signaleert hydraulische onbalans tussen HP1 en
              HP2.

              </details>
            text_only: true
          - type: tile
            entity: sensor.openquatt_flow_mode
            name:
              type: entity
            show_entity_picture: false
            hide_state: false
            vertical: false
            features_position: bottom
          - type: tile
            entity: sensor.openquatt_control_mode_label
            name: ControlMode
            vertical: false
            features_position: bottom
          - type: tile
            entity: binary_sensor.openquatt_lowflow_fault_active
            name: Low flow alarm
            vertical: false
            features_position: bottom
          - type: tile
            entity: sensor.openquatt_flow_average_selected
            name: Flow (gemiddeld)
            vertical: false
            features_position: bottom
          - type: tile
            entity: binary_sensor.openquatt_flow_mismatch_hp1_vs_hp2
            name: Flow mismatch
            vertical: false
            features_position: bottom
          - type: heading
            icon: ''
            heading: Regeling
            heading_style: subtitle
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg</strong></summary>


              Belangrijkste flowinstellingen:


              - `Flow control mode`: kies automatische flowregeling of
              handmatige werking.

              - `Flow setpoint`: doel-flow in L/h voor automatische regeling.

              - `Handmatige iPWM`: stel iPWM waarde in voor handbediening.

              </details>
            text_only: true
          - type: tile
            entity: select.openquatt_flow_control_mode
            name:
              type: entity
            hide_state: true
            vertical: false
            features:
              - type: select-options
            features_position: inline
          - type: tile
            entity: number.openquatt_flow_setpoint
            name:
              type: entity
            hide_state: false
            vertical: false
            features:
              - style: slider
                type: numeric-input
            features_position: inline
          - type: tile
            entity: number.openquatt_manual_ipwm
            name:
              type: entity
            hide_state: false
            vertical: false
            features:
              - style: slider
                type: numeric-input
            features_position: inline
      - type: grid
        cards:
          - type: heading
            icon: mdi:chart-line
            heading: Flowtrends
            heading_style: title
          - type: markdown
            content: |-
              <details>

              <summary><strong>Uitleg</strong></summary>

              - `Flowmetingen` vergelijkt actuele flow met setpoint over tijd.

              - `Pompsturing` toont iPWM-uitsturing van HP1 en HP2.

              </details>
            text_only: true
            grid_options:
              columns: full
          - type: history-graph
            title: Flowmetingen (4 uur)
            hours_to_show: 4
            refresh_interval: 30
            entities:
              - entity: sensor.openquatt_flow_average_selected
                name: Flow
              - entity: number.openquatt_flow_setpoint
                name: Flow setpoint
            grid_options:
              columns: full
          - type: history-graph
            title: Pompsturing (4 uur)
            hours_to_show: 4
            refresh_interval: 30
            entities:
              - entity: number.openquatt_hp1_set_pump_speed
                name: HP1 iPWM
              - entity: number.openquatt_hp2_set_pump_speed
                name: HP2 iPWM
            grid_options:
              columns: full
        column_span: 2
    cards: []
    header:
      card:
        type: markdown
        content: |-
          # <ha-icon icon="mdi:waves"></ha-icon> Flow
          Bediening, status en trends van flowregeling en pompsturing.
      layout: center
      badges_position: bottom
      badges_wrap: wrap
    badges: []
  - title: Warmteregeling
    path: warmtecontrol
    icon: mdi:radiator
    type: sections
    max_columns: 3
    sections:
      - type: grid
        cards:
          - type: heading
            icon: mdi:radiator
            heading: Warmteregeling
            heading_style: title
          - type: heading
            icon: mdi:tune-variant
            heading: Regelinstellingen
            heading_style: subtitle
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg</strong></summary>


              - `ControlMode`: kiest welke strategie de warmtevraag opbouwt
              (bijv. Stooklijn of PH).

              - Bij stooklijnregeling verschijnt ook `Heating Curve Control
              Profile` voor de ingebouwde regelkarakteristiek.

              - Controleer daarna bij `Kern KPI` hoe dit doorwerkt in `P_req`,
              `P_house` en `Tekort`.

              </details>
            text_only: true
          - type: tile
            entity: select.openquatt_heating_control_mode
            name: ControlMode
            hide_state: true
            vertical: false
            features:
              - type: select-options
            features_position: inline
          - type: tile
            visibility:
              - condition: state
                entity: select.openquatt_heating_control_mode
                state: Water Temperature Control (heating curve)
            entity: select.openquatt_heating_curve_control_profile
            name:
              type: entity
            show_entity_picture: false
            hide_state: true
            vertical: false
            features:
              - type: select-options
            features_position: inline
          - type: heading
            icon: mdi:view-dashboard-outline
            heading: Kern KPI
            heading_style: subtitle
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg</strong></summary>


              Kernindicatoren voor warmtebalans:


              - Vergelijk `P_req` (gevraagd vermogen) met `P_house`
              (modelschatting).

              - `P_req`: gevraagde verwarmingspower na filtering/ramp-limiet.

              - `P_house`: gemodelleerde warmtevraag van de woning.

              - `Max HP capaciteit`: geschatte beschikbare warmtepompcapaciteit.

              - `Tekort`: positieve waarde betekent dat vraag boven
              beschikbare/geleverde warmte ligt.

              - Richtlijn: bij `Tekort > 0 W` vraagt het systeem meer dan nu
              geleverd wordt.

              - Gebruik `Trends` voor het gedrag over tijd.

              </details>
            text_only: true
          - square: false
            type: grid
            cards:
              - type: gauge
                entity: sensor.openquatt_total_power_input
                min: 0
                max: 3600
                needle: false
                name:
                  type: entity
                severity:
                  green: 0
                  yellow: 1200
                  red: 2400
              - type: gauge
                entity: sensor.openquatt_total_heat_power
                min: 0
                max: 12000
                needle: false
                name:
                  type: entity
                severity:
                  green: 0
                  yellow: 4000
                  red: 8000
              - type: gauge
                entity: sensor.openquatt_power_house_p_house
                min: 0
                max: 12000
                needle: false
                name:
                  type: entity
                severity:
                  green: 0
                  yellow: 4000
                  red: 8000
              - type: gauge
                entity: sensor.openquatt_power_house_p_req
                min: 0
                max: 12000
                needle: false
                name:
                  type: entity
                severity:
                  green: 0
                  yellow: 4000
                  red: 8000
              - type: gauge
                entity: sensor.openquatt_hp_capacity_w
                name: Max HP capaciteit
                min: 0
                max: 12000
                needle: false
              - type: gauge
                entity: sensor.openquatt_hp_deficit_w
                name: Tekort
                min: 0
                max: 8000
                needle: false
                severity:
                  green: 0
                  yellow: 800
                  red: 2000
            columns: 2
      - type: grid
        cards:
          - type: heading
            icon: mdi:chart-timeline-variant
            heading: Trends
            heading_style: title
          - type: markdown
            content: >-
              <details>


              <summary><strong>Uitleg</strong></summary>


              - `Warmtevraag` vergelijkt gevraagde (`P_req`) met geleverde
              warmte.

              - `HP powerinput` en `HP heat output` tonen elektrisch in versus
              thermisch uit.

              - `Temperatuurregeling` toont buiten-, supply- en kamertemperatuur
              tegen targets.


              </details>
            text_only: true
            grid_options:
              columns: full
          - type: history-graph
            title: Warmtevraag (24 uur)
            hours_to_show: 24
            refresh_interval: 30
            entities:
              - entity: sensor.openquatt_power_house_p_req
                name: Gevraagd vermogen
              - entity: sensor.openquatt_total_heat_power
                name: Werkelijk vermogen
            grid_options:
              columns: full
          - type: history-graph
            title: HP powerinput (24 uur)
            hours_to_show: 24
            refresh_interval: 30
            entities:
              - entity: sensor.openquatt_hp1_power_input
                name: HP1 powerinput
              - entity: sensor.openquatt_hp2_power_input
                name: HP2 powerinput
            grid_options:
              columns: full
          - type: history-graph
            title: HP heat output (24 uur)
            hours_to_show: 24
            refresh_interval: 30
            entities:
              - entity: sensor.openquatt_hp1_heat_power
                name: HP1 heating power
              - entity: sensor.openquatt_hp2_heat_power
                name: HP2 heating power
            grid_options:
              columns: full
          - type: history-graph
            title: Temperatuurregeling (24 uur)
            hours_to_show: 24
            refresh_interval: 30
            entities:
              - entity: sensor.openquatt_outside_temperature_selected
                name: Buiten
              - entity: sensor.openquatt_water_supply_temp_selected
                name: Supply systeem
              - entity: sensor.openquatt_heating_curve_supply_target
                name: Aanvoerdoel
              - entity: sensor.openquatt_room_temperature_selected
                name: Kamer temp
              - entity: sensor.openquatt_room_setpoint_selected
                name: Kamer setpoint
            grid_options:
              columns: full
        column_span: 2
    cards: []
    header:
      card:
        type: markdown
        content: |-
          # <ha-icon icon="mdi:radiator"></ha-icon> Warmteregeling
          Warmtevraag, warmteverdeling en compressorbelasting.
  - title: Koeling
    path: cooling
    icon: mdi:snowflake-thermometer
    type: sections
    max_columns: 3
    sections:
      - type: grid
        cards:
          - type: heading
            icon: mdi:state-machine
            heading: Koelstatus
            heading_style: title
          - type: tile
            entity: input_boolean.koeling_aan
          - type: entities
            show_header_toggle: false
            entities:
              - entity: sensor.openquatt_control_mode
                name: Control mode
              - entity: sensor.openquatt_control_mode_label
                name: Control mode (label)
              - entity: binary_sensor.openquatt_cooling_enable_selected
                name: Geselecteerde koeltoestemming
              - entity: binary_sensor.openquatt_cooling_request_active
                name: Cooling request active
              - entity: binary_sensor.openquatt_cooling_permitted
                name: Cooling permitted
              - entity: sensor.openquatt_cooling_block_reason
                name: Cooling block reason
      - type: grid
        cards:
          - type: heading
            icon: mdi:water-thermometer
            heading: Dauwpuntveiligheid
            heading_style: title
          - type: entities
            show_header_toggle: false
            entities:
              - entity: sensor.openquatt_cooling_room_count_selected
                name: Cooling room count
              - entity: sensor.openquatt_cooling_valid_room_count
                name: Cooling valid room count
              - entity: binary_sensor.openquatt_cooling_dew_point_available
                name: Cooling dew point available
              - entity: sensor.openquatt_cooling_dew_point_selected
                name: Cooling dew point (selected)
              - entity: sensor.openquatt_cooling_safety_margin_selected
                name: Cooling safety margin
              - entity: sensor.openquatt_cooling_minimum_safe_supply_temp
                name: Cooling minimum safe supply temp
      - type: grid
        cards:
          - type: heading
            icon: mdi:gauge
            heading: Koelregeling
            heading_style: title
          - type: entities
            show_header_toggle: false
            entities:
              - entity: sensor.openquatt_cooling_supply_target
                name: Cooling supply target
              - entity: sensor.openquatt_cooling_supply_error
                name: Cooling supply error
              - entity: sensor.openquatt_cooling_demand_raw
                name: Cooling demand (raw)
              - entity: number.openquatt_cooling_minimum_supply_temp
                name: Cooling minimum supply temp
              - entity: number.openquatt_cooling_demand_max
                name: Cooling demand max
              - entity: number.openquatt_cooling_safety_margin
                name: Cooling safety margin
                icon: mdi:delta
    cards: []
    header:
      card:
        type: markdown
        content: |-
          # <ha-icon icon="mdi:snowflake-thermometer"></ha-icon> Koeling
          Bekijk permissies, dauwpuntveiligheid en het CM5-koelregelpad.
  - title: Warmtepompen
    path: HPs
    icon: mdi:heat-pump-outline
    type: sections
    sections:
      - type: grid
        cards:
          - square: false
            type: grid
            columns: 1
            cards:
              - type: picture-elements
                title: Quatt HP1
                image: >-
                  https://raw.githubusercontent.com/jeroen85/OpenQuatt/refs/heads/main/docs/dashboard/heatpump/Quatt.png
                elements:
                  - type: image
                    style:
                      left: 0%
                      top: 0%
                      transform: translate(0,0)
                    entity: binary_sensor.openquatt_hp1_4_way_valve
                    state_image:
                      'on': >-
                        https://raw.githubusercontent.com/jeroen85/OpenQuatt/main/docs/dashboard/heatpump/Cool.png
                      'off': >-
                        https://raw.githubusercontent.com/jeroen85/OpenQuatt/refs/heads/main/docs/dashboard/heatpump/Heat.png
                      unknown: >-
                        https://raw.githubusercontent.com/jeroen85/OpenQuatt/refs/heads/main/docs/dashboard/heatpump/Heat.png
                      unavailable: >-
                        https://raw.githubusercontent.com/jeroen85/OpenQuatt/refs/heads/main/docs/dashboard/heatpump/Heat.png
                    tap_action:
                      action: none
                    hold_action:
                      action: none
                  - type: state-label
                    entity: sensor.openquatt_hp1_outside_temperature
                    style:
                      top: 3%
                      left: 8%
                      font-weight: bold
                      color: black
                      font-size: 0.75em
                      transform: none
                    prefix: 'Buiten: '
                  - type: state-badge
                    entity: sensor.openquatt_hp1_gas_discharge_temperature
                    style:
                      top: 22%
                      left: 58%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp1_inner_coil_temperature
                    style:
                      top: 70%
                      left: 60%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp1_eev_steps
                    style:
                      top: 70%
                      left: 42%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp1_gas_return_temperature
                    style:
                      top: 22%
                      left: 26%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp1_evaporating_temperature
                    style:
                      top: 70%
                      left: 25%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp1_evaporator_coil_temperature
                    style:
                      top: 58%
                      left: 6%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp1_condenser_pressure
                    style:
                      top: 11%
                      left: 55%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp1_evaporator_pressure
                    style:
                      top: 11%
                      left: 30%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp1_fan_speed
                    style:
                      top: 53%
                      left: 25%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp1_compressor_frequency
                    style:
                      top: 18%
                      left: 40%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp1_water_out_temperature
                    style:
                      top: 43%
                      left: 92%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp1_water_in_temperature
                    style:
                      top: 63%
                      left: 92%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp1_flow
                    style:
                      top: 76%
                      left: 81%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-label
                    entity: sensor.openquatt_hp1_working_mode_label
                    style:
                      top: 8%
                      left: 8%
                      font-weight: bold
                      color: white
                      font-size: 0.75em
                      transform: none
                    prefix: 'Modus: '
                  - type: state-label
                    entity: sensor.openquatt_hp1_power_input
                    style:
                      top: 11%
                      left: 8%
                      font-weight: bold
                      color: white
                      font-size: 0.75em
                      transform: none
                    prefix: 'PowerInput: '
                  - type: state-label
                    entity: sensor.openquatt_hp1_heat_power
                    style:
                      top: 14%
                      left: 8%
                      font-weight: bold
                      color: white
                      font-size: 0.75em
                      transform: none
                    prefix: 'Heat Power: '
                  - type: state-label
                    entity: sensor.openquatt_hp1_cop
                    style:
                      top: 17%
                      left: 8%
                      font-weight: bold
                      color: white
                      font-size: 0.75em
                      transform: none
                    prefix: 'COP: '
            grid_options:
              columns: 12
              rows: auto
          - square: false
            type: grid
            columns: 1
            cards:
              - type: entities
                title: HP1 kernwaarden
                show_header_toggle: false
                entities:
                  - entity: sensor.openquatt_hp1_working_mode_label
                    name: Werkmodus
                  - entity: sensor.openquatt_hp1_compressor_level
                    name: Compressorniveau
                  - entity: sensor.openquatt_hp1_compressor_frequency_demand
                    name: Vraagfrequentie
                  - entity: sensor.openquatt_hp1_compressor_frequency
                    name: Werkelijke frequentie
                  - entity: sensor.openquatt_hp1_active_failures_list
                    name: Actieve storingen
                  - entity: sensor.openquatt_hp1_power_input
                    name: PowerInput
                  - entity: sensor.openquatt_hp1_heat_power
                    name: Heat Power
                  - entity: sensor.openquatt_hp1_cop
                    name: COP
                  - entity: sensor.openquatt_hp1_flow
                    name: Flow
                  - entity: sensor.openquatt_hp1_water_in_temperature
                    name: Water in temp
                  - entity: sensor.openquatt_hp1_water_out_temperature
                    name: Water uit temp
                  - entity: binary_sensor.openquatt_hp1_defrost
                    name: Defrost
                  - entity: binary_sensor.openquatt_hp1_4_way_valve
                    name: 4-wegklep
            grid_options:
              columns: 12
              rows: auto
        column_span: 1
      - type: grid
        cards:
          - square: false
            type: grid
            columns: 1
            cards:
              - type: picture-elements
                title: Quatt HP2
                image: >-
                  https://raw.githubusercontent.com/jeroen85/OpenQuatt/refs/heads/main/docs/dashboard/heatpump/Quatt.png
                elements:
                  - type: image
                    style:
                      left: 0%
                      top: 0%
                      transform: translate(0,0)
                    entity: binary_sensor.openquatt_hp2_4_way_valve
                    state_image:
                      'on': >-
                        https://raw.githubusercontent.com/jeroen85/OpenQuatt/main/docs/dashboard/heatpump/Cool.png
                      'off': >-
                        https://raw.githubusercontent.com/jeroen85/OpenQuatt/refs/heads/main/docs/dashboard/heatpump/Heat.png
                      unknown: >-
                        https://raw.githubusercontent.com/jeroen85/OpenQuatt/refs/heads/main/docs/dashboard/heatpump/Heat.png
                      unavailable: >-
                        https://raw.githubusercontent.com/jeroen85/OpenQuatt/refs/heads/main/docs/dashboard/heatpump/Heat.png
                    tap_action:
                      action: none
                    hold_action:
                      action: none
                  - type: state-label
                    entity: sensor.openquatt_hp2_outside_temperature
                    style:
                      top: 3%
                      left: 8%
                      font-weight: bold
                      color: black
                      font-size: 0.75em
                      transform: none
                    prefix: 'Buiten: '
                  - type: state-badge
                    entity: sensor.openquatt_hp2_gas_discharge_temperature
                    style:
                      top: 22%
                      left: 58%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp2_inner_coil_temperature
                    style:
                      top: 70%
                      left: 60%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp2_eev_steps
                    style:
                      top: 70%
                      left: 42%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp2_gas_return_temperature
                    style:
                      top: 22%
                      left: 26%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp2_evaporating_temperature
                    style:
                      top: 70%
                      left: 25%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp2_evaporator_coil_temperature
                    style:
                      top: 58%
                      left: 6%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp2_condenser_pressure
                    style:
                      top: 11%
                      left: 55%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp2_evaporator_pressure
                    style:
                      top: 11%
                      left: 30%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp2_fan_speed
                    style:
                      top: 53%
                      left: 25%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp2_compressor_frequency
                    style:
                      top: 18%
                      left: 40%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp2_water_out_temperature
                    style:
                      top: 43%
                      left: 92%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp2_water_in_temperature
                    style:
                      top: 63%
                      left: 92%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-badge
                    entity: sensor.openquatt_hp2_flow
                    style:
                      top: 76%
                      left: 81%
                      font-weight: bold
                      color: rgba(0,0,0,0)
                      transform: none
                      font-size: 0.65em
                  - type: state-label
                    entity: sensor.openquatt_hp2_working_mode_label
                    style:
                      top: 8%
                      left: 8%
                      font-weight: bold
                      color: white
                      font-size: 0.75em
                      transform: none
                    prefix: 'Modus: '
                  - type: state-label
                    entity: sensor.openquatt_hp2_power_input
                    style:
                      top: 11%
                      left: 8%
                      font-weight: bold
                      color: white
                      font-size: 0.75em
                      transform: none
                    prefix: 'PowerInput: '
                  - type: state-label
                    entity: sensor.openquatt_hp2_heat_power
                    style:
                      top: 14%
                      left: 8%
                      font-weight: bold
                      color: white
                      font-size: 0.75em
                      transform: none
                    prefix: 'Heat Power: '
                  - type: state-label
                    entity: sensor.openquatt_hp2_cop
                    style:
                      top: 17%
                      left: 8%
                      font-weight: bold
                      color: white
                      font-size: 0.75em
                      transform: none
                    prefix: 'COP: '
            grid_options:
              columns: 12
              rows: auto
          - square: false
            type: grid
            columns: 1
            cards:
              - type: entities
                title: HP2 kernwaarden
                show_header_toggle: false
                entities:
                  - entity: sensor.openquatt_hp2_working_mode_label
                    name: Werkmodus
                  - entity: sensor.openquatt_hp2_compressor_level
                    name: Compressorniveau
                  - entity: sensor.openquatt_hp2_compressor_frequency_demand
                    name: Vraagfrequentie
                  - entity: sensor.openquatt_hp2_compressor_frequency
                    name: Werkelijke frequentie
                  - entity: sensor.openquatt_hp2_active_failures_list
                    name: Actieve storingen
                  - entity: sensor.openquatt_hp2_power_input
                    name: PowerInput
                  - entity: sensor.openquatt_hp2_heat_power
                    name: Heat Power
                  - entity: sensor.openquatt_hp2_cop
                    name: COP
                  - entity: sensor.openquatt_hp2_flow
                    name: Flow
                  - entity: sensor.openquatt_hp2_water_in_temperature
                    name: Water in temp
                  - entity: sensor.openquatt_hp2_water_out_temperature
                    name: Water uit temp
                  - entity: binary_sensor.openquatt_hp2_defrost
                    name: Defrost
                  - entity: binary_sensor.openquatt_hp2_4_way_valve
                    name: 4-wegklep
            grid_options:
              columns: 12
              rows: auto
        column_span: 1
    max_columns: 4
    header:
      card:
        type: markdown
        content: >-
          # <ha-icon icon="mdi:heat-pump-outline"></ha-icon> Overzicht HP1 en
          HP2

          Deze tab toont per HP een technische momentopname van
          koudemiddel/waterzijde. Gebruik dit vooral voor diagnose en
          vergelijking tussen HP1 en HP2.

          Voor instellingen: gebruik `Flow`, `Warmteregeling` en `Instellingen`.
  - title: Sensorconfiguratie
    path: sensor-configuration
    icon: mdi:source-branch
    type: sections
    max_columns: 3
    sections:
      - type: grid
        cards:
          - type: heading
            icon: mdi:source-branch
            heading: Sensorselectie
            heading_style: title
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg</strong></summary>


              Kies per signaal de bron die OpenQuatt gebruikt.

              De `Geselecteerde` waarde hoort de gekozen bron direct te volgen.

              Zo zie je snel of de effectieve regelinput overeenkomt met wat je
              verwacht.


              Gebruik dit blok voor:

              - bronkeuze tijdens tuning

              - snelle vergelijking tussen CIC, lokaal en HA input

              - validatie van de effectieve regelinput
              - bij `Flow bron = Outdoor unit` in een Duo-opstelling verschijnt
              een extra
                keuze voor `Flowmeter HP1`, `Flowmeter HP2` of de bestaande lokale
                aggregatie van HP1/HP2

              De lokale aggregatie van `HP1/HP2` is in principe het gemiddelde
              van beide

              flowmeters.


              </details>
            text_only: true
            grid_options:
              columns: full
          - type: vertical-stack
            cards:
              - type: heading
                icon: mdi:home-thermometer
                heading: Ruimtetemperatuur bronnen
                heading_style: subtitle
                grid_options:
                  columns: 12
                  rows: 1
              - type: entities
                show_header_toggle: false
                entities:
                  - entity: select.openquatt_room_temperature_source
                    name: Ruimtetemperatuur bron
                  - entity: sensor.openquatt_room_temperature_effective_source
                    name: Effectieve kamertemperatuurbron
                  - entity: sensor.openquatt_room_temperature_selected
                    name: Geselecteerde kamertemperatuur
                  - entity: sensor.openquatt_cic_room_temperature
                    name: Kamertemperatuur (CIC)
                  - entity: sensor.openquatt_ot_room_temperature
                    name: Kamertemperatuur (OT-thermostaat)
                  - entity: sensor.openquatt_ha_thermostat_room_temperature
                    name: Kamertemperatuur (HA-invoer)
          - type: vertical-stack
            cards:
              - type: heading
                icon: mdi:water-thermometer
                heading: Aanvoertemperatuur bronnen
                heading_style: subtitle
                grid_options:
                  columns: 12
                  rows: 1
              - type: entities
                show_header_toggle: false
                entities:
                  - entity: select.openquatt_water_supply_source
                    name: Aanvoertemperatuur bron
                  - entity: sensor.openquatt_water_supply_temp_selected
                    name: Geselecteerde aanvoertemperatuur
                  - entity: sensor.openquatt_water_supply_temp
                    name: Aanvoertemperatuur (ESP)
                  - entity: sensor.openquatt_cic_water_supply_temp
                    name: Aanvoertemperatuur (CIC)
                  - entity: sensor.openquatt_ha_water_supply_temperature
                    name: Aanvoertemperatuur (HA-invoer)
          - type: vertical-stack
            cards:
              - type: heading
                icon: mdi:waves
                heading: Flowbronnen
                heading_style: subtitle
                grid_options:
                  columns: 12
                  rows: 1
              - type: entities
                show_header_toggle: false
                entities:
                  - entity: select.openquatt_flow_source
                    name: Flow bron
                  - type: conditional
                    row:
                      entity: select.openquatt_outdoor_unit_flow_mode
                      name: Buitenunit flowmodus
                    conditions:
                      - condition: state
                        entity: select.openquatt_flow_source
                        state: Outdoor unit
                  - entity: sensor.openquatt_flow_average_selected
                    name: Geselecteerde flow
                  - entity: sensor.openquatt_flow_average_local
                    name: Flow (buitenunit)
                  - entity: sensor.openquatt_cic_flowrate_filtered
                    name: Flow (CIC)
          - type: vertical-stack
            cards:
              - type: heading
                icon: mdi:thermometer
                heading: Buitentemperatuur bronnen
                heading_style: subtitle
                grid_options:
                  columns: 12
                  rows: 1
              - type: entities
                show_header_toggle: false
                entities:
                  - entity: select.openquatt_outside_temperature_source
                    name: Buitentemperatuur bron
                  - entity: sensor.openquatt_outside_temperature_selected
                    name: Geselecteerde buitentemperatuur
                  - entity: sensor.openquatt_outside_temperature_local_aggregated
                    name: Buitentemperatuur (buitenunit)
                  - entity: sensor.openquatt_ha_outside_temperature
                    name: Buitentemperatuur (HA-invoer)
          - type: vertical-stack
            cards:
              - type: heading
                icon: mdi:thermostat
                heading: Kamer setpoint bronnen
                heading_style: subtitle
                grid_options:
                  columns: 12
                  rows: 1
              - type: entities
                show_header_toggle: false
                entities:
                  - entity: select.openquatt_room_setpoint_source
                    name: Kamer setpoint bron
                  - entity: sensor.openquatt_room_setpoint_effective_source
                    name: Effectieve setpointbron
                  - entity: sensor.openquatt_room_setpoint_selected
                    name: Geselecteerd kamer setpoint
                  - entity: sensor.openquatt_cic_room_setpoint
                    name: Kamer setpoint (CIC)
                  - entity: sensor.openquatt_ot_room_setpoint
                    name: Kamer setpoint (OT-thermostaat)
                  - entity: sensor.openquatt_ha_thermostat_setpoint
                    name: Kamer setpoint (HA-invoer)
          - type: vertical-stack
            cards:
              - type: heading
                icon: mdi:snowflake-check
                heading: Koeltoestemming bronnen
                heading_style: subtitle
                grid_options:
                  columns: 12
                  rows: 1
              - type: entities
                show_header_toggle: false
                entities:
                  - entity: select.openquatt_cooling_enable_source
                    name: Koeltoestemming bron
                  - entity: sensor.openquatt_cooling_enable_effective_source
                    name: Effectieve koeltoestemmingsbron
                  - entity: binary_sensor.openquatt_cooling_enable_selected
                    name: Geselecteerde koeltoestemming
                  - entity: binary_sensor.openquatt_cic_cooling_enabled
                    name: Koeltoestemming (CIC)
                  - entity: binary_sensor.openquatt_ha_cooling_enable
                    name: Koeltoestemming (HA-invoer)
        column_span: 3
      - type: grid
        cards:
          - type: heading
            icon: mdi:home-assistant
            heading: Home Assistant input configuration
            heading_style: title
          - type: vertical-stack
            cards:
              - type: heading
                icon: mdi:form-textbox
                heading: Dynamische bronselectors
                heading_style: subtitle
              - type: markdown
                content: |-
                  <details>
                  <summary><strong>Uitleg</strong></summary>

                  Vul hier de entity IDs in van de bronnen die de OpenQuatt HA
                  proxy-sensoren moeten voeden.

                  Voorbeelden:
                  - `sensor.outdoor_temperature`
                  - `sensor.water_supply_temperature`
                  - `sensor.thermostat_setpoint`
                  - `sensor.thermostat_room_temperature`
                  - `input_boolean.cooling_enable`
                  - `climate.woonkamer | current_temperature`
                  - `climate.woonkamer | hvac_mode`

                  Optioneel attribuutformaat:
                  - `entity_id|attribute_name`
                  Spaties rond `|` worden genegeerd.

                  Is een bron ongeldig, dan wordt de proxywaarde `Unavailable`.
                  </details>
                text_only: true
              - type: entities
                show_header_toggle: false
                entities:
                  - entity: input_text.openquatt_source_outdoor_temperature
                    name: Bronentity buitentemperatuur
                  - entity: input_text.openquatt_source_water_supply_temperature
                    name: Bronentity aanvoertemperatuur
                  - entity: input_text.openquatt_source_room_setpoint
                    name: Bronentity setpoint
                  - entity: input_text.openquatt_source_room_temperature
                    name: Bronentity ruimtetemperatuur
                  - entity: input_text.openquatt_source_cooling_enable
                    name: Bronentity koeltoestemming
          - type: vertical-stack
            cards:
              - type: heading
                icon: mdi:database-arrow-right
                heading: HA proxywaarden en validiteit
                heading_style: subtitle
              - type: markdown
                content: >-
                  <details>

                  <summary><strong>Uitleg</strong></summary>


                  Dit zijn de stabiele HA proxy-entities die als contract naar

                  OpenQuatt dienen.


                  De status `Valid` hoort voor alle vijf signalen op `on` te
                  staan.

                  Als `Valid` op `off` staat, is de huidige bron niet numeriek.

                  Dan wordt de proxywaarde `Unavailable` totdat de bron weer
                  geldig

                  is.

                  </details>
                text_only: true
              - type: entities
                show_header_toggle: false
                entities:
                  - entity: sensor.openquatt_ext_outdoor_temperature
                    name: Proxy buitentemperatuur
                  - entity: binary_sensor.openquatt_ext_outdoor_temperature_valid
                    name: Buitentemperatuur bron valid
                  - entity: sensor.openquatt_ext_water_supply_temperature
                    name: Proxy aanvoertemperatuur
                  - entity: binary_sensor.openquatt_ext_water_supply_temperature_valid
                    name: Aanvoertemperatuur bron valid
                  - entity: sensor.openquatt_ext_room_setpoint
                    name: Proxy kamer setpoint
                  - entity: binary_sensor.openquatt_ext_room_setpoint_valid
                    name: Doeltemperatuurbron geldig
                  - entity: sensor.openquatt_ext_room_temperature
                    name: Proxy ruimtetemperatuur
                  - entity: binary_sensor.openquatt_ext_room_temperature_valid
                    name: Ruimtetemperatuur bron valid
                  - entity: binary_sensor.openquatt_ext_cooling_enable
                    name: Proxy koeltoestemming
                  - entity: binary_sensor.openquatt_ext_cooling_enable_valid
                    name: Koeltoestemming bron valid
          - type: vertical-stack
            cards:
              - type: heading
                icon: mdi:chip
                heading: OpenQuatt HA-invoerwaarden
                heading_style: subtitle
              - type: markdown
                content: |-
                  <details>
                  <summary><strong>Uitleg</strong></summary>

                  Dit zijn de vijf HA-invoerwaarden zoals OpenQuatt ze ontvangt.
                  Deze horen de proxywaarden uit het middelste blok te volgen.

                  Blijft een waarde op `Unknown`, controleer dan eerst of de
                  bijbehorende `... bron valid` op `on` staat.

                  </details>
                text_only: true
              - type: entities
                show_header_toggle: false
                entities:
                  - entity: sensor.openquatt_ha_outside_temperature
                    name: HA - Buitentemperatuur
                  - entity: sensor.openquatt_ha_water_supply_temperature
                    name: HA - Aanvoertemperatuur
                  - entity: sensor.openquatt_ha_thermostat_setpoint
                    name: HA - Thermostat Doeltemperatuur
                  - entity: sensor.openquatt_ha_thermostat_room_temperature
                    name: HA - Thermostaat kamertemperatuur
                  - entity: binary_sensor.openquatt_ha_cooling_enable
                    name: HA - Koeltoestemming
        column_span: 3
        visibility:
          - condition: state
            entity: binary_sensor.openquatt_ha_dynamic_sources_package_active
            state: 'on'
      - type: grid
        cards:
          - type: heading
            icon: mdi:home-assistant
            heading: Home Assistant input configuration
            heading_style: title
          - type: markdown
            content: >
              **Optionele HA-bronselectie niet actief**


              `openquatt_ha_dynamic_sources_package.yaml` is niet geladen.  

              Met dit optionele package kun je in Home Assistant zelf de
              bron-entities voor buiten-, aanvoer-, kamer-, setpointtemperatuur
              en koeltoestemming kiezen, zonder OpenQuatt opnieuw te flashen.


              Na installatie verschijnen hier extra configuratieblokken voor
              dynamische bronselectie.


              Installatiehandleiding:

              [OpenQuatt documentatie - dynamische bronselectie via Home
              Assistant](https://jeroen85.github.io/OpenQuatt/dashboard/index.html#optioneel-dynamische-bronselectie-via-home-assistant)
            grid_options:
              columns: full
        column_span: 3
        visibility:
          - condition: state
            entity: binary_sensor.openquatt_ha_dynamic_sources_package_active
            state_not: 'on'
      - type: grid
        cards:
          - type: heading
            heading: Koeling - Dauwpunt-, temperatuur-, vochtigheidsmetingen
            heading_style: title
            icon: mdi:snowflake
            grid_options:
              columns: full
              rows: 1
          - type: markdown
            content: |-
              <details>
              <summary><strong>Uitleg</strong></summary>

              Configureer hier per kamer de dauwpunt-, temperatuur- en
              luchtvochtigheidsbron voor cooling.

              Gebruik per kamer bij voorkeur een directe dauwpuntentity. Heb je
              die niet, vul dan temperatuur en relatieve luchtvochtigheid in.

              OpenQuatt gebruikt per kamer eerst het directe dauwpunt en
              berekent anders zelf het dauwpunt uit temperatuur + RH. Voor de
              systeembeveiliging telt daarna de hoogste geldige kamerwaarde.

              Verhoog eerst `Aantal kamers`; daarna verschijnen de invoervelden
              per kamer.
              </details>
            text_only: true
            grid_options:
              columns: full
          - type: tile
            entity: input_number.openquatt_cooling_room_count
            name: Aantal kamers
            hide_state: true
            vertical: false
            features:
              - type: numeric-input
                style: buttons
            features_position: inline
          - type: heading
            icon: mdi:home-thermometer-outline
            heading: Kamers
            heading_style: subtitle
          - type: markdown
            content: >
              **Geen kamers geconfigureerd**


              Het aantal ingegeven kamers is 0. Verhoog het aantal kamers om de
              inputvelden zichtbaar te maken.
            visibility:
              - condition: numeric_state
                entity: input_number.openquatt_cooling_room_count
                below: 1
          - type: vertical-stack
            cards:
              - type: heading
                icon: mdi:home-thermometer
                heading: Kamer 1
                heading_style: subtitle
                grid_options:
                  columns: 12
                  rows: 1
              - type: entities
                show_header_toggle: false
                entities:
                  - entity: input_text.openquatt_source_cooling_room_1_dew_point
                    name: Cooling room 1 dauwpuntentity
                  - entity: input_text.openquatt_source_cooling_room_1_temperature
                    name: Cooling room 1 temperatuurentity
                  - entity: input_text.openquatt_source_cooling_room_1_humidity
                    name: Cooling room 1 luchtvochtigheidentity
                  - entity: sensor.openquatt_cooling_room_1_dew_point_effective
                    name: Actief dauwpunt
            visibility:
              - condition: numeric_state
                entity: input_number.openquatt_cooling_room_count
                above: 0
          - type: vertical-stack
            cards:
              - type: heading
                icon: mdi:home-thermometer
                heading: Kamer 2
                heading_style: subtitle
                grid_options:
                  columns: 12
                  rows: 1
              - type: entities
                show_header_toggle: false
                entities:
                  - entity: input_text.openquatt_source_cooling_room_2_dew_point
                    name: Cooling room 2 dauwpuntentity
                  - entity: input_text.openquatt_source_cooling_room_2_temperature
                    name: Cooling room 2 temperatuurentity
                  - entity: input_text.openquatt_source_cooling_room_2_humidity
                    name: Cooling room 2 luchtvochtigheidentity
                  - entity: sensor.openquatt_cooling_room_2_dew_point_effective
                    name: Actief dauwpunt
            visibility:
              - condition: numeric_state
                entity: input_number.openquatt_cooling_room_count
                above: 1
          - type: vertical-stack
            cards:
              - type: heading
                icon: mdi:home-thermometer
                heading: Kamer 3
                heading_style: subtitle
                grid_options:
                  columns: 12
                  rows: 1
              - type: entities
                show_header_toggle: false
                entities:
                  - entity: input_text.openquatt_source_cooling_room_3_dew_point
                    name: Cooling room 3 dauwpuntentity
                  - entity: input_text.openquatt_source_cooling_room_3_temperature
                    name: Cooling room 3 temperatuurentity
                  - entity: input_text.openquatt_source_cooling_room_3_humidity
                    name: Cooling room 3 luchtvochtigheidentity
                  - entity: sensor.openquatt_cooling_room_3_dew_point_effective
                    name: Actief dauwpunt
            visibility:
              - condition: numeric_state
                entity: input_number.openquatt_cooling_room_count
                above: 2
          - type: vertical-stack
            cards:
              - type: heading
                icon: mdi:home-thermometer
                heading: Kamer 4
                heading_style: subtitle
                grid_options:
                  columns: 12
                  rows: 1
              - type: entities
                show_header_toggle: false
                entities:
                  - entity: input_text.openquatt_source_cooling_room_4_dew_point
                    name: Cooling room 4 dauwpuntentity
                  - entity: input_text.openquatt_source_cooling_room_4_temperature
                    name: Cooling room 4 temperatuurentity
                  - entity: input_text.openquatt_source_cooling_room_4_humidity
                    name: Cooling room 4 luchtvochtigheidentity
                  - entity: sensor.openquatt_cooling_room_4_dew_point_effective
                    name: Actief dauwpunt
            visibility:
              - condition: numeric_state
                entity: input_number.openquatt_cooling_room_count
                above: 3
          - type: vertical-stack
            cards:
              - type: heading
                icon: mdi:home-thermometer
                heading: Kamer 5
                heading_style: subtitle
                grid_options:
                  columns: 12
                  rows: 1
              - type: entities
                show_header_toggle: false
                entities:
                  - entity: input_text.openquatt_source_cooling_room_5_dew_point
                    name: Cooling room 5 dauwpuntentity
                  - entity: input_text.openquatt_source_cooling_room_5_temperature
                    name: Cooling room 5 temperatuurentity
                  - entity: input_text.openquatt_source_cooling_room_5_humidity
                    name: Cooling room 5 luchtvochtigheidentity
                  - entity: sensor.openquatt_cooling_room_5_dew_point_effective
                    name: Actief dauwpunt
            visibility:
              - condition: numeric_state
                entity: input_number.openquatt_cooling_room_count
                above: 4
          - type: vertical-stack
            cards:
              - type: heading
                icon: mdi:home-thermometer
                heading: Kamer 6
                heading_style: subtitle
                grid_options:
                  columns: 12
                  rows: 1
              - type: entities
                show_header_toggle: false
                entities:
                  - entity: input_text.openquatt_source_cooling_room_6_dew_point
                    name: Cooling room 6 dauwpuntentity
                  - entity: input_text.openquatt_source_cooling_room_6_temperature
                    name: Cooling room 6 temperatuurentity
                  - entity: input_text.openquatt_source_cooling_room_6_humidity
                    name: Cooling room 6 luchtvochtigheidentity
                  - entity: sensor.openquatt_cooling_room_6_dew_point_effective
                    name: Actief dauwpunt
            visibility:
              - condition: numeric_state
                entity: input_number.openquatt_cooling_room_count
                above: 5
        column_span: 3
      - type: grid
        cards:
          - type: heading
            icon: mdi:thermostat-box
            heading: OpenTherm-thermostaat
            heading_style: title
          - type: markdown
            content: |-
              <details>
              <summary><strong>Uitleg</strong></summary>

              Dit blok toont de directe OpenTherm-thermostaatkoppeling.
              Gebruik het om te controleren dat OpenQuatt warmtevraag,
              koelvraag en kamerwaarden rechtstreeks van de thermostaat ziet,
              dus buiten CIC of Home Assistant om.

              Controleer bij afwijkingen eerst:
              - `OpenTherm Enabled`
              - `OT link problem`
              - `Thermostaat CH enable`
              - `Control setpoint`
              - `Room setpoint`
              - `Room temperature`

              </details>
            text_only: true
          - type: entities
            show_header_toggle: false
            entities:
              - entity: switch.openquatt_opentherm_enabled
                name: OpenTherm Enabled
              - entity: binary_sensor.openquatt_ot_link_problem
                name: OT link problem
              - entity: binary_sensor.openquatt_ot_thermostat_ch_enable
                name: Thermostaat CH enable
              - entity: binary_sensor.openquatt_ot_thermostat_cooling_enable
                name: Thermostaat cooling enable
              - entity: sensor.openquatt_ot_control_setpoint
                name: Control setpoint
              - entity: sensor.openquatt_ot_room_setpoint
                name: Room setpoint
              - entity: sensor.openquatt_ot_room_temperature
                name: Room temperature
      - type: grid
        cards:
          - type: heading
            icon: mdi:cloud-check
            heading_style: title
            heading: Quatt CiC-configuratie
          - type: markdown
            content: |-
              <details>
              <summary><strong>Uitleg</strong></summary>

              Dit blok toont de status van de CiC-feed.
              Als de feed niet OK is of data stale wordt, kunnen CIC-bronnen
              onbruikbaar worden voor de geselecteerde signalen.

              Controleer bij afwijkingen:
              - `JSON feed OK`
              - `Data verouderd`
              - `Tijd sinds laatste succes`

              </details>
            text_only: true
          - type: entities
            show_header_toggle: false
            entities:
              - entity: switch.openquatt_cic_enable_polling
                name: Polling inschakelen
              - entity: binary_sensor.openquatt_cic_json_feed_ok
                name: JSON feed OK
              - entity: binary_sensor.openquatt_cic_data_stale
                name: Data verouderd
              - entity: text.openquatt_cic_feed_url
                name: CIC feed URL
    cards: []
    header:
      card:
        type: markdown
        content: >-
          # <ha-icon icon="mdi:source-branch"></ha-icon> Sensorconfiguratie


          Configureer bronkeuze en bronkoppeling, en verifieer daarna per
          signaal

          de geselecteerde waarde en bronstatus.
    top_margin: false
    dense_section_placement: false
  - title: Instellingen
    path: tuning
    icon: mdi:tune-vertical
    type: sections
    max_columns: 3
    sections:
      - type: grid
        cards:
          - type: heading
            icon: mdi:volume-off
            heading: Instellingen stille modus
            heading_style: title
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg parameters</strong></summary>


              - **Day max level / Silent max level** begrenzen het maximale
              compressorlevel in normale of stille uren.

              - **Silent start/end time** definieert het tijdvenster waarin de
              silent-begrenzing actief is.


              </details>
            text_only: true
          - type: entities
            show_header_toggle: false
            entities:
              - entity: number.openquatt_day_max_level
                name: Day max level
              - entity: number.openquatt_silent_max_level
                name: Silent max level
              - entity: time.openquatt_silent_start_time
                name: Silent start time
              - entity: time.openquatt_silent_end_time
                name: Silent end time
      - type: grid
        cards:
          - type: heading
            icon: mdi:home-thermometer-outline
            heading: Huismodel (PH)
            heading_style: title
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg parameters</strong></summary>


              - **House cold temp** en **Rated maximum house power (Pr)**
              bepalen samen de schaal van de warmtevraag bij koude condities.

              - **Maximum heating outdoor temperature** is het punt waar
              modelmatig de warmtevraag naar ~0 gaat.

              - **PH Kp** bepaalt hoe sterk kamertemperatuurfout naar
              warmtevraag (W) wordt vertaald.

              - **Deadband** voorkomt onrust bij kleine afwijkingen.

              - `Effective room target = setpoint + comfort bias`.

              - **Comfort bias base** is de minimale verschuiving omhoog en is
              dus altijd actief. Bij `0.1` stuurt de regelaar minimaal op
              `setpoint + 0.1`.

              - **Comfort bias max** is de maximale verschuiving omhoog en ook
              de bovencap voor de warme correctierand: `setpoint + bias max`.

              - **Comfort above setpoint** is extra marge boven `effective
              target` voordat warme tegensturing begint, maar alleen tot de
              bovencap hierboven.

              - **Comfort below setpoint** bepaalt de marge onder `effective
              target` voordat extra opwarming begint.

              - Warme randformule: `Tr_high = min(effective_target +
              comfort_above, setpoint + bias_max)`.

              - Voorbeeld: setpoint `20.0`, base `0.1`, max `0.4`, above `0.5`
              geeft een maximale warme rand van `20.4`. Vind je het te warm:
              verlaag eerst `comfort above`, daarna `bias base` (eventueel naar
              `0.0`) en/of `bias max`.

              - **Comfort bias up/down** en **room error avg tau** bepalen hoe
              snel de bias zich over de tijd aanpast.

              - **Response profile** is een snelle voorkeuze voor rustige,
              gebalanceerde of vlottere Power House-reactie. Zodra opbouwtijd en
              afbouwtijd niet meer bij een preset horen, toont het profiel
              automatisch `Custom`.

              - **Demand rise time** geeft ongeveer aan hoe lang `P_req` nodig
              mag hebben om van `0` naar `Pr` te lopen. Lager = sneller
              opschakelen.

              - **Demand fall time** geeft ongeveer aan hoe lang `P_req` nodig
              mag hebben om van `Pr` naar `0` te zakken. Lager = sneller
              terugregelen bij overshoot.

              - **Low-load dynamic OFF/ON factor** bepalen wanneer Power House
              de warmtevraag rond lage last weer vrijgeeft of opnieuw oppakt.

              - **Low-load minimum hysteresis** houdt OFF en ON voldoende uit
              elkaar om pendelen te verminderen.

              - **Low-load CM2 re-entry block** vertraagt CM2-herintrede na een
              idle-exit trip tenzij de vraag duidelijk herstelt.

              </details>
            text_only: true
          - type: entities
            show_header_toggle: false
            entities:
              - entity: number.openquatt_house_cold_temp
                name: House cold temp
              - entity: number.openquatt_maximum_heating_outdoor_temperature
                name: Maximum heating outdoor temperature (P=0 temp)
              - entity: number.openquatt_rated_maximum_house_power
                name: Rated maximum house power (Pr)
              - entity: number.openquatt_power_house_kp_w_k
                name: PH Kp (W/K)
              - entity: number.openquatt_power_house_deadband
                name: PH deadband
              - entity: number.openquatt_power_house_comfort_below_setpoint
                name: PH comfort onder SP
              - entity: number.openquatt_power_house_comfort_above_setpoint
                name: PH comfort boven SP
              - entity: number.openquatt_power_house_comfort_bias_base
                name: PH bias basis
              - entity: number.openquatt_power_house_comfort_bias_max
                name: PH bias max
              - entity: number.openquatt_power_house_comfort_bias_up
                name: PH bias omhoog
              - entity: number.openquatt_power_house_comfort_bias_down
                name: PH bias omlaag
              - entity: number.openquatt_power_house_room_error_avg_tau
                name: PH room avg tau
              - entity: select.openquatt_power_house_response_profile
                name: PH reactieprofiel
              - entity: number.openquatt_power_house_demand_rise_time
                name: PH opbouwtijd
              - entity: number.openquatt_power_house_demand_fall_time
                name: PH afbouwtijd
              - entity: number.openquatt_low_load_dynamic_off_factor
                name: Low-load dynamic OFF factor
              - entity: number.openquatt_low_load_dynamic_on_factor
                name: Low-load dynamic ON factor
              - entity: number.openquatt_low_load_minimum_hysteresis
                name: Low-load minimum hysteresis
              - entity: number.openquatt_low_load_cm2_re_entry_block
                name: Low-load CM2 re-entry block
      - type: grid
        cards:
          - type: heading
            icon: mdi:chart-bell-curve
            heading: Stooklijnregeling
            heading_style: title
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg parameters</strong></summary>


              - De **aanvoerpunten** vormen de stooklijn: gewenste
              aanvoertemperatuur bij verschillende buitentemperaturen.

              - Pas eerst de curvepunten aan voor het juiste basiscomfort,
              daarna pas PID finetunen.

              - **Fallback-aanvoer** wordt gebruikt als buitentemperatuur
              tijdelijk ontbreekt.

              - `Heating Curve Control Profile` kiest het ingebouwde regelgedrag
              voor stabiliteit (o.a. smoothing/hysterese).

              - **PID Kp/Ki/Kd** bepaalt de correctie op de
              systeem-aanvoertemperatuur:
                - Kp te hoog: snelle maar nerveuze reactie.
                - Ki te hoog: traag pendelen/overshoot.
                - Kd meestal laag houden in trage hydraulische systemen.

              </details>
            text_only: true
          - type: entities
            show_header_toggle: false
            entities:
              - entity: number.openquatt_curve_tsupply_20degc
                name: Aanvoer @ -20C
              - entity: number.openquatt_curve_tsupply_10degc
                name: Aanvoer @ -10C
              - entity: number.openquatt_curve_tsupply_0degc
                name: Aanvoer @ 0C
              - entity: number.openquatt_curve_tsupply_5degc
                name: Aanvoer @ 5C
              - entity: number.openquatt_curve_tsupply_10degc_2
                name: Aanvoer @ 10C
              - entity: number.openquatt_curve_tsupply_15degc
                name: Aanvoer @ 15C
              - entity: number.openquatt_curve_fallback_tsupply_no_outside_temp
                name: Fallback-aanvoer
              - entity: select.openquatt_heating_curve_control_profile
                name:
                  type: entity
              - entity: number.openquatt_heating_curve_pid_kp
                name: Stooklijn-PID Kp
              - entity: number.openquatt_heating_curve_pid_ki
                name: Stooklijn-PID Ki
              - entity: number.openquatt_heating_curve_pid_kd
                name: Stooklijn-PID Kd
      - type: grid
        cards:
          - type: heading
            icon: mdi:water-thermometer
            heading: Watertempbegrenzing
            heading_style: title
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg parameters</strong></summary>


              - Gebruikt `Water Supply Temp (Selected)` als gemeten
              begrenzingsbron.

              - **Maximum water temperature** is het normale plafond voor de
              gemeten aanvoertemperatuur.

              - **Soft band** laat de regeling daaronder al terugnemen. In
              `Power House` gebeurt de sterkste afbouw tussen `max - band` en
              `max`.

              - **Trip** is de absolute bovengrens. In `CM3` valt eerst de
              boiler weg; alleen bij aanhoudende overshoot volgt daarna een
              harde HP-stop.


              </details>
            text_only: true
          - type: entities
            show_header_toggle: false
            entities:
              - entity: number.openquatt_maximum_water_temperature
                name: Max. water temperature
              - entity: number.openquatt_water_temperature_soft_band
                name: Water temperature soft band
              - entity: number.openquatt_maximum_water_temperature_trip
                name: Max. water temperature trip
      - type: grid
        cards:
          - type: heading
            icon: mdi:heat-wave
            heading: Heat allocation
            heading_style: title
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg parameters</strong></summary>


              - **Minimum runtime** houdt een al gestarte compressor minimaal
              `300 s` aan. Je kunt deze runtime verlengen, maar niet lager
              zetten.

              - **Demand filter ramp up** bepaalt met hoeveel demand-stappen per
              minuut `Demand filtered` maximaal mag stijgen richting `Demand
              raw` in PH-modus.

              - In heating-curve mode wordt PID-demand direct doorgezet; de
              allocatie is single-HP-first met dual-enable hysterese en
              sequentiële levelstappen.

              - In Power House mode vergelijkt OpenQuatt de beste single-HP- en
              dual-HP-opties, kiest normaal de topology met het laagste
              elektrische verbruik en laat een minder zuinige topology alleen
              winnen als de warmtematch duidelijk beter is. Wissels naar een
              duurdere topology worden kort vastgehouden om op en neer schakelen
              te beperken.

              - **Dual HP enable level (lvl)** bepaalt bij welk aanhoudend
              single-HP compressorlevel een tweede HP mag worden geactiveerd in
              heating-curve mode.

              - Disable-level wordt intern afgeleid als `enable - 1` om het
              aantal instellingen beperkt te houden.

              - **Enable/disable hold** voegt tijdhysterese toe om op en neer
              schakelen te dempen in heating-curve mode.

              - Lager enable-level of kortere enable-hold = sneller 2 HP actief
              in heating-curve mode.

              - Hogere disable-hold = langer dual-HP actief in heating-curve
              mode.


              </details>
            text_only: true
          - type: entities
            show_header_toggle: false
            entities:
              - entity: number.openquatt_minimum_runtime
                name: Minimum runtime
              - entity: number.openquatt_demand_filter_ramp_up
                name: Demand filter ramp up
              - entity: number.openquatt_dual_hp_enable_level
                name: Dual HP enable level
              - entity: number.openquatt_dual_hp_enable_hold
                name: Dual HP enable hold
              - entity: number.openquatt_dual_hp_disable_hold
                name: Dual HP disable hold
      - type: grid
        cards:
          - type: heading
            icon: mdi:tune-variant
            heading: Flow afstellen
            heading_style: title
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg parameters</strong></summary>


              - **Flow PI Kp/Ki** bepaalt de dynamiek van flowregeling; wijzig
              in kleine stappen.


              </details>
            text_only: true
          - type: entities
            show_header_toggle: false
            entities:
              - entity: number.openquatt_flow_pi_kp
                name: Flow PI Kp
              - entity: number.openquatt_flow_pi_ki
                name: Flow PI Ki
      - type: grid
        cards:
          - type: heading
            icon: mdi:fire
            heading: Ketelregeling
            heading_style: title
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg parameters</strong></summary>

              - **CM3 deficit ON/OFF thresholds** bepalen wanneer boiler-assist
              mag inschakelen/uitschakelen.

              - Boiler-assist wordt daarnaast geblokkeerd door de
              watertempbegrenzing als de gemeten aanvoer te hoog wordt.

              - Houd ON duidelijk hoger dan OFF om schakelen rond de grens te
              beperken.

              - Bij te agressief gedrag: ON verhogen of OFF verlagen.


              </details>
            text_only: true
          - type: entities
            show_header_toggle: false
            entities:
              - entity: number.openquatt_cm3_deficit_on_threshold
                name: CM3 deficit ON threshold
              - entity: number.openquatt_cm3_deficit_off_threshold
                name: CM3 deficit OFF threshold
      - type: grid
        column_span: 2
        cards:
          - type: heading
            icon: mdi:speedometer-medium
            heading: Uitgesloten compressorlevels
            heading_style: title
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg parameters</strong></summary>


              - Kies hier maximaal twee compressorlevels per HP die de
              verdelingslogica moet overslaan.

              - `None` betekent: geen uitsluiting in dat slot.

              - Als een gevraagd level is uitgesloten, zoekt OpenQuatt eerst een
              lager level en daarna pas een hoger level.

              - Meestal laat je beide slots op `None`; gebruik uitsluitingen
              alleen voor testen, geluid of specifieke beperkingen.

              - Als beide slots hetzelfde level kiezen, telt dat gewoon als
              een enkele uitsluiting.


              </details>
            text_only: true
            grid_options:
              columns: full
              rows: auto
          - type: entities
            title: HP1 uitgesloten levels
            show_header_toggle: false
            entities:
              - entity: select.openquatt_hp1_excluded_compressor_level_a
                name: Excluded level A
              - entity: select.openquatt_hp1_excluded_compressor_level_b
                name: Excluded level B
              - entity: sensor.openquatt_hp1_excluded_compressor_levels
                name: Actieve uitsluitingen
          - type: entities
            title: HP2 uitgesloten levels
            show_header_toggle: false
            entities:
              - entity: select.openquatt_hp2_excluded_compressor_level_a
                name: Excluded level A
              - entity: select.openquatt_hp2_excluded_compressor_level_b
                name: Excluded level B
              - entity: sensor.openquatt_hp2_excluded_compressor_levels
                name: Actieve uitsluitingen
    header:
      card:
        type: markdown
        content: >-
          # <ha-icon icon="mdi:tune-vertical"></ha-icon> Instellingen

          Structurele regelinstellingen voor limieten, huismodel, stooklijn,
          heat-allocation en flow.
    cards: []
  - title: Service en test
    path: service-test
    icon: mdi:toolbox-outline
    type: sections
    max_columns: 3
    sections:
      - type: grid
        cards:
          - type: heading
            icon: mdi:tools
            heading: Runtime / draaiuren
            heading_style: title
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg parameters</strong></summary>


              - **Reset draaitellers**. Let op: het kan maximaal 1 minuut duren
              voordat je effect ziet.

              - **Reset cumulatieve energietellers** zet cumulatieve
              elektriciteits- en warmte-energiemeters terug naar 0.

              - **HP1/HP2 draaitijd counters** tonen de actuele teller waarop de
              runtime-balans wordt gebaseerd.

              - **Leidende HP** toont welke unit momenteel lead is op basis van
              de laagste runtime.


              </details>
            text_only: true
          - type: entities
            show_header_toggle: false
            entities:
              - entity: button.openquatt_reset_runtime_counters_hp1_hp2
                name: Reset draaitellers
              - entity: button.openquatt_reset_cumulative_energy_counters
                name: Reset cumulatieve energietellers
              - entity: sensor.openquatt_hp1_runtime_hours
                name: HP1 draaitijd
              - entity: sensor.openquatt_hp2_runtime_hours
                name: HP2 draaitijd
              - entity: sensor.openquatt_runtime_lead_hp
                name: Leidende HP
      - type: grid
        cards:
          - type: heading
            icon: mdi:tools
            heading: Flow autotune
            heading_style: title
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg parameters</strong></summary>


              - **Flow autotune** starten bij stabiele installatie en zonder
              actieve fouten.

              - Eerst `u_step` en `max duration` bepalen, daarna pas autotune
              starten.

              - `Apply autotune Kp/Ki` alleen toepassen als de voorgestelde
              waarden logisch zijn.


              </details>
            text_only: true
          - type: entities
            show_header_toggle: false
            entities:
              - entity: switch.openquatt_flow_autotune_enable
                name: Flow autotune inschakelen
              - entity: button.openquatt_flow_autotune_start
                name: Flow autotune starten
              - entity: button.openquatt_flow_autotune_abort
                name: Flow autotune afbreken
              - entity: button.openquatt_apply_flow_autotune_kp_ki
                name: Pas autotune Kp/Ki toe
              - entity: number.openquatt_flow_autotune_u_step_ipwm
                name: Autotune u_step (iPWM)
              - entity: number.openquatt_flow_autotune_max_duration_s
                name: Autotune maximale duur
              - entity: number.openquatt_flow_autotune_kp_suggested
                name: Autotune Kp voorstel
              - entity: number.openquatt_flow_autotune_ki_suggested
                name: Autotune Ki voorstel
              - entity: sensor.openquatt_flow_autotune_status
                name: Autotune status
      - type: grid
        cards:
          - type: heading
            icon: mdi:flask-outline
            heading: Handmatige Modbus testlezer
            heading_style: title
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg</strong></summary>


              Eenmalige handmatige register-read voor debug/test:


              - Kies eerst het registernummer.

              - Druk daarna op **Debug: lees HP1-register** of **Debug Read HP2
              register**.

              - Resultaat verschijnt als `U16` en `S16`.


              </details>
            text_only: true
          - type: entities
            show_header_toggle: false
            entities:
              - entity: number.openquatt_debug_modbus_register
                name: Modbus register
              - entity: button.openquatt_debug_read_hp1_register
                name: 'Debug: lees HP1-register'
              - entity: button.openquatt_debug_read_hp2_register
                name: 'Debug: lees HP2-register'
              - entity: sensor.openquatt_debug_modbus_value_u16
                name: Result U16
              - entity: sensor.openquatt_debug_modbus_value_s16
                name: Result S16
              - entity: sensor.openquatt_debug_modbus_last_target
                name: Laatste doel
    header:
      card:
        type: markdown
        content: |-
          # <ha-icon icon="mdi:toolbox-outline"></ha-icon> Service en test
          Handmatige service-acties en tijdelijke testtools.
    cards: []
  - title: Diagnostiek
    path: diagnostics
    icon: mdi:stethoscope
    type: sections
    max_columns: 3
    sections:
      - type: grid
        cards:
          - type: heading
            icon: mdi:tag-text
            heading: Versie informatie
            heading_style: title
          - type: markdown
            content: >-
              <details>


              <summary><strong>Uitleg</strong></summary>


              Dit blok toont firmwareversie en OTA-update-status:


              - `OpenQuatt-versie`: versie die lokaal op de ESP draait

              (uit `project_version` in de build).

              - `OpenQuatt-releasekanaal`: buildkanaal dat nu op de ESP draait

              (`main` of `dev`).

              - `Firmware-updatekanaal`: kiest welk OTA-kanaal de update-

              entiteit hierna volgt (`main` of `dev`).

              - `Firmware-update`: vergelijkt jouw huidige firmware met de

              laatste GitHub release en toont of er een update beschikbaar is.

              - `Controleer firmware-updates`: forceert direct een nieuwe
              updatecheck

              (zonder te wachten op de volgende automatische poll).


              Let op: bij een nieuwe release kan het kort duren voordat de

              update-entiteit de nieuwe versie toont (cache/refresh interval).


              </details>
            text_only: true
          - type: entities
            title: Versie
            show_header_toggle: false
            entities:
              - entity: sensor.openquatt_openquatt_version
                name: OpenQuatt-versie
              - entity: sensor.openquatt_openquatt_release_channel
                name: OpenQuatt-releasekanaal
              - entity: select.openquatt_firmware_update_channel
                name: Firmware-updatekanaal
              - entity: update.openquatt_firmware_update
                name: Firmware-update
              - entity: button.openquatt_check_firmware_updates
                name: Controleer firmware-updates
          - type: heading
            icon: mdi:chip
            heading: Regelaarinformatie
            heading_style: title
          - type: markdown
            content: |-
              <details>

              <summary><strong>Uitleg</strong></summary>

              Basis runtime-diagnostiek van de controller:

              - `Status`: online/offline van de ESP-node.
              - `Uptime`: tijd sinds laatste reboot.
              - `ESP Internal Temperature`: interne controller-temperatuur voor behuizing/thermische diagnose.
              - `IP-adres`: huidig netwerkadres.
              - `Wifi-SSID`: verbonden draadloos netwerk.
              - `Wifi-signaal`: RSSI-signaalsterkte in dBm.
              - `ESPHome-versie`: versie van de ESPHome runtime.
              - `Herstart`: herstart de controllernode vanuit Home Assistant.

              </details>
            text_only: true
          - type: entities
            title: Controller
            show_header_toggle: false
            entities:
              - entity: binary_sensor.openquatt_status
                name: Status
              - entity: sensor.openquatt_uptime
                name: Uptime
              - entity: sensor.openquatt_esp_internal_temperature
                name: ESP Internal Temperature
              - entity: sensor.openquatt_ip_address
                name: IP-adres
              - entity: sensor.openquatt_wifi_ssid
                name: Wifi-SSID
              - entity: sensor.openquatt_wifi_signal
                name: Wifi-signaal
              - entity: sensor.openquatt_esphome_version
                name: ESPHome-versie
              - entity: button.openquatt_restart
                name: Herstart
      - type: grid
        column_span: 1
        cards:
          - type: heading
            icon: mdi:home-lightning-bolt
            heading: PH-diagnose
            heading_style: title
          - type: markdown
            content: >-
              <details>


              <summary><strong>Uitleg</strong></summary>


              Gebruik dit blok om de PH-regelketen te debuggen.


              - Relevant bij actieve PH-regeling.

              - `P_house` is de modelschatting op basis van buitentemperatuur.

              - `P_req` is de begrensde warmtevraag na deadband/ramp-limiter.

              - `Effective room target = room setpoint + comfort bias`.

              - `Comfort bias` toont de status van de adaptieve warm-bias
              regelaar.

              Als `P_req` onverwacht hoog/laag is: controleer buitenbron, kamer
              setpoint/temp en de ramp/deadband instellingen.


              </details>
            text_only: true
          - type: entities
            show_header_toggle: false
            entities:
              - entity: sensor.openquatt_outside_temperature_selected
                name: Buitentemp (gekozen)
              - entity: sensor.openquatt_room_setpoint_selected
                name: Kamersetpoint (gekozen)
              - entity: sensor.openquatt_room_temperature_selected
                name: Kamertemp (gekozen)
              - entity: sensor.openquatt_power_house_effective_room_target
                name: Effective room target
              - entity: sensor.openquatt_power_house_comfort_bias
                name: Comfort bias
              - entity: sensor.openquatt_power_house_p_house
                name: P_house
              - entity: sensor.openquatt_power_house_p_req
                name: P_req
      - type: grid
        column_span: 1
        cards:
          - type: heading
            icon: mdi:radiator
            heading: Stooklijndiagnose
            heading_style: title
          - type: markdown
            content: >-
              <details>

              <summary><strong>Uitleg</strong></summary>


              Gebruik dit blok om de curve-regeling stap voor stap te
              controleren.


              - Deze sectie is vooral relevant bij actieve stooklijnregeling.

              - Vergelijk eerst `Aanvoerdoel` met `Werkelijke aanvoer (gekozen)`
              om de regelafwijking te zien.

              - Gebruik `Stooklijn-PID` en `Reset PID-integraal` bij finetuning
              als de regeling te traag of te nerveus reageert.

              - `Buitentemp (gekozen)` helpt verklaren waarom het `Supply
              target` stijgt of daalt.


              </details>
            text_only: true
          - type: entities
            show_header_toggle: false
            entities:
              - entity: climate.openquatt_heating_curve_pid
                name: Stooklijn-PID
              - entity: sensor.openquatt_outside_temperature_selected
                name: Buitentemp (gekozen)
              - entity: sensor.openquatt_heating_curve_supply_target
                name: Aanvoerdoel
              - entity: sensor.openquatt_water_supply_temp_selected
                name: Werkelijke aanvoer (gekozen)
              - entity: button.openquatt_reset_heating_curve_pid_integral
                name: Reset PID-integraal
    cards: []
    header:
      card:
        type: markdown
        content: |-
          # <ha-icon icon="mdi:stethoscope"></ha-icon> Diagnostiek
          Controller- en firmwarediagnostiek, gericht op troubleshooting.
