input_number: tiempo_quemador_diario_minutos: name: Tiempo quemador diario (min) initial: 0 min: 0 max: 1440 step: 1 unit_of_measurement: "min" mode: box consumo_total_caldera: name: Consumo total caldera initial: 0 min: 0 max: 10000 step: 0.01 unit_of_measurement: "L" mode: box precio_litro_gasoil: name: Precio litro gasoil initial: 1.0 min: 0 max: 10 step: 0.01 unit_of_measurement: "EUR/m³" mode: box deposito_gasoil_nivel: name: Nivel estimado depósito initial: 350 min: 0 max: 700 step: 1 unit_of_measurement: "L" mode: box deposito_gasoil_repostar: name: Repostar litros initial: 0 min: 0 max: 700 step: 1 unit_of_measurement: "L" mode: box binary_sensor: - platform: template sensors: caldera_quemador_activo: friendly_name: "Caldera Quemador Activo" delay_on: "00:00:10" delay_off: "00:00:10" value_template: > {{ states('sensor.caldera_power') | float(0) > 150 }} sensor: - platform: template sensors: tiempo_quemador_hh_mm: friendly_name: "Tiempo quemador HH:MM" value_template: > {% set minutos = states('input_number.tiempo_quemador_diario_minutos') | int %} {% set h = (minutos // 60) %} {% set m = (minutos % 60) %} {{ h }}h {{ m }}min consumo_diario_caldera_estimado: friendly_name: "Consumo diario caldera (estimado)" unit_of_measurement: "L" value_template: > {% set min = states('input_number.tiempo_quemador_diario_minutos') | float(0) %} {% set litros_por_hora = 2.94 %} {{ ((min / 60) * litros_por_hora) | round(2) }} consumo_total_caldera: friendly_name: "Consumo total caldera" unit_of_measurement: "L" value_template: "{{ states('input_number.consumo_total_caldera') }}" consumo_total_gasoil_energia: friendly_name: "Consumo total gasoil energía" unit_of_measurement: "m³" device_class: gas state_class: total_increasing value_template: > {{ (states('input_number.consumo_total_caldera') | float(0)) * 0.001 }} coste_diario_caldera: friendly_name: "Coste diario caldera" unit_of_measurement: "€" icon_template: mdi:currency-eur value_template: > {% set litros = states('sensor.consumo_diario_caldera_estimado') | float(0) %} {% set precio = states('input_number.precio_litro_gasoil') | float(0) %} {{ (litros * precio) | round(2) }} coste_total_caldera: friendly_name: "Coste total caldera" unit_of_measurement: "€" icon_template: mdi:currency-eur value_template: > {% set litros = states('input_number.consumo_total_caldera') | float(0) %} {% set precio = states('input_number.precio_litro_gasoil') | float(0) %} {{ (litros * precio) | round(2) }} automation: - alias: "Contador tiempo quemador diario (min)" trigger: - platform: time_pattern minutes: "/1" condition: - condition: state entity_id: binary_sensor.caldera_quemador_activo state: "on" action: - service: input_number.set_value data: entity_id: input_number.tiempo_quemador_diario_minutos value: > {{ (states('input_number.tiempo_quemador_diario_minutos') | float(0)) + 1 }} mode: single - alias: "Resetear tiempo quemador diario" trigger: - platform: time at: "00:00:00" action: - service: input_number.set_value data: entity_id: input_number.tiempo_quemador_diario_minutos value: 0 mode: single - alias: "Sumar consumo diario al total caldera" trigger: - platform: time at: "23:59:00" action: - service: input_number.set_value data: entity_id: input_number.consumo_total_caldera value: > {{ (states('input_number.consumo_total_caldera') | float(0)) + (states('sensor.consumo_diario_caldera_estimado') | float(0)) }} mode: single - alias: "Restar consumo diario al depósito" trigger: - platform: time at: "23:59:00" action: - service: input_number.set_value data: entity_id: input_number.deposito_gasoil_nivel value: > {% set actual = states('input_number.deposito_gasoil_nivel') | float(0) %} {% set consumo = states('sensor.consumo_diario_caldera_estimado') | float(0) %} {% set nuevo = actual - consumo %} {{ nuevo if nuevo > 0 else 0 }} mode: single - alias: "Repostar depósito de gasoil" trigger: - platform: state entity_id: input_number.deposito_gasoil_repostar condition: - condition: numeric_state entity_id: input_number.deposito_gasoil_repostar above: 0 action: - service: input_number.set_value data: entity_id: input_number.deposito_gasoil_nivel value: > {% set actual = states('input_number.deposito_gasoil_nivel') | float(0) %} {% set añadido = states('input_number.deposito_gasoil_repostar') | float(0) %} {% set nuevo = actual + añadido %} {% set maximo = 700 %} {{ [nuevo, maximo] | min }} - service: input_number.set_value data: entity_id: input_number.deposito_gasoil_repostar value: 0 mode: single - alias: "Aviso: Nivel bajo en el depósito de gasoil" trigger: - platform: numeric_state entity_id: input_number.deposito_gasoil_nivel below: 100 condition: - condition: numeric_state entity_id: input_number.deposito_gasoil_nivel above: 0 action: - service: notify.persistent_notification data: title: "⚠️ Gasoil bajo" message: "Quedan menos de 100 litros en el depósito. ¡Revisa si necesitas repostar!" mode: single