Estou tentando montar o template para me mostrar o custo previsto que terei com a conta de agua.
Tenho um hidrômetro de pulso conectado ao Home Assistant que mostrei nesse tópico:
Pessoal,
Conclui a configuração do medidor de água com o hidrômetro de pulso que comentei acima.
Quem tiver curiosidade deixo abaixo em maiores detalhes.
Instalação dentro da casa de bomba:
[imagem]
Obs: o ideal seria instalar logo após a entrada da rua e antes da cisterna mas para evitar obras achei esse o melhor ponto para fazer a instalação na minha casa.
Como eu quase não utilizo a cisterna pois a água entra da rua direto para a minha caixa d’água e caso eu venha utilizar a água da ci…
Estou tentando incluir um sensor que me mostre o custo mensal que terei com a água.
Já incluí utility_meter com offset de 25 dias para consolidar mensalmente quantos litros estou recebendo de agua e agora estou tentando calcular o custo.
A Estrutura tarifária de Niterói - RJ, cidade onde moro, segue na imagem abaixo:
Pensei na seguinte lógica mas estou com dificuldade em relação a sintaxe.
Alguém poderia me ajudar com o código abaixo:
# - platform: template
# sensors:
# custo_mensal_aguas_de_niteroi:
# friendly_name: "Custo previsto da Aguas de Niterói"
# icon_template: mdi:cash-usd
# unit_of_measurement: 'R$'
# Se sensor.monthly_water_in_aguas_de_niteroi < 15000
value_template: "{{ ( float(states.sensor.monthly_water_in_aguas_de_niteroi.state) *
(3,8671 * 2) ) | round(2) }}"
# Se sensor.monthly_water_in_aguas_de_niteroi < 30000
value_template: "{{ ( (float(states.sensor.monthly_water_in_aguas_de_niteroi.state)
* (3,8671 * 2)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-15000) *
(9,6677 * 2)) ) | round(2) }}"
# Se sensor.monthly_water_in_aguas_de_niteroi < 45000
value_template: "{{ ( (float(states.sensor.monthly_water_in_aguas_de_niteroi.state)
* (3,8671 * 2)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-15000) *
(9,6677 * 2)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-30000) *
(11,9879 * 2)) ) | round(2) }}"
# Se sensor.monthly_water_in_aguas_de_niteroi < 60000
value_template: "{{ ( (float(states.sensor.monthly_water_in_aguas_de_niteroi.state)
* (3,8671 * 2)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-15000) *
(9,6677 * 2)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-30000) *
(11,9879 * 2)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-45000) *
(23,2024 * 2)) ) | round(2) }}"
# Se sensor.monthly_water_in_aguas_de_niteroi > 60000
value_template: "{{ ( (float(states.sensor.monthly_water_in_aguas_de_niteroi.state)
* (3,8671 * 2)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-15000) *
(9,6677 * 2)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-30000) *
(11,9879 * 2)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-45000) *
(23,2024 * 2)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-60000) *
(30,9366 * 2)) ) | round(2) }}"
1 curtida
A sintaxe para condicionais no template é:
value_template: >-
{% if (states('sensor.monthly_water_in_aguas_de_niteroi') | float < 15000) %}
{{ (states('sensor.monthly_water_in_aguas_de_niteroi') | float * 3.8671 * 2) | round(2) }}
{% elif (states('sensor.monthly_water_in_aguas_de_niteroi') | float < 30000) %}
{{ (states('sensor.monthly_water_in_aguas_de_niteroi') | float * 9.6677 * 2) | round(2) }}
{% else %}
{{ (states('sensor.monthly_water_in_aguas_de_niteroi') | float * 30.9366 * 2) | round(2) }}
{% endif %}
O código acima não está na forma correta para o seu cálculo, apenas usei um exemplo para mostrar o uso do if
e elif
no template.
1 curtida
Obrigado @douglasit .
Ainda preciso entender melhor porque não consegui o resultado que eu queria e o sensor aparece como “Indisponível”
- platform: template
sensors:
custo_mensal_aguas_de_niteroi:
friendly_name: "Custo previsto da Aguas de Niterói"
icon_template: mdi:cash-usd
unit_of_measurement: 'R$'
value_template: >-
{% if (states('sensor.monthly_water_in_aguas_de_niteroi') < 15000) %}
{{ ( float(states.sensor.monthly_water_in_aguas_de_niteroi.state) * (3,8671 * 2) ) | round(2) }}
{% elif (states('sensor.monthly_water_in_aguas_de_niteroi') < 30000) %}
{{ ( (float(states.sensor.monthly_water_in_aguas_de_niteroi.state) * (3,8671 * 2)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-15000) * (9,6677 * 2)) ) | round(2) }}
{% elif (states('sensor.monthly_water_in_aguas_de_niteroi') < 45000) %}
{{ ( (float(states.sensor.monthly_water_in_aguas_de_niteroi.state) * (3,8671 * 2)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-15000) * (9,6677 * 2)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-30000) * (11,9879 * 2)) ) | round(2) }}
{% elif (states('sensor.monthly_water_in_aguas_de_niteroi') < 60000) %}
{{ ( (float(states.sensor.monthly_water_in_aguas_de_niteroi.state) * (3,8671 * 2)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-15000) * (9,6677 * 2)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-30000) * (11,9879 * 2)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-45000) * (23,2024 * 2)) ) | round(2) }}
{% else %}
{{ ( (float(states.sensor.monthly_water_in_aguas_de_niteroi.state) * (3,8671 * 2)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-15000) * (9,6677 * 2)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-30000) * (11,9879 * 2)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-45000) * (23,2024 * 2)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-60000) * (30,9366 * 2)) ) | round(2) }}
{% endif %}
Acredito que seja devido que na casa decimal da tarifa você usou vírgula ao invés de ponto.
Obrigado @douglasit
Era isso e também tinha que incluir | float nas condições “If”.
Também dividi por 1000 pois a tarifa é para m³ (1000 litros)
Ficou assim:
- platform: template
sensors:
custo_mensal_aguas_de_niteroi:
friendly_name: "Custo previsto da Aguas de Niterói"
icon_template: mdi:cash-usd
unit_of_measurement: 'R$'
value_template: >-
{% if (states('sensor.monthly_water_in_aguas_de_niteroi') | float < 15000) %}
{{ ( float(states.sensor.monthly_water_in_aguas_de_niteroi.state) * (3.8671 * 2 / 1000) ) | round(2) }}
{% elif (states('sensor.monthly_water_in_aguas_de_niteroi') | float < 30000) %}
{{ ( (float(states.sensor.monthly_water_in_aguas_de_niteroi.state) * (3.8671 * 2 / 1000)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-15000) * (9.6677 * 2 / 1000)) ) | round(2) }}
{% elif (states('sensor.monthly_water_in_aguas_de_niteroi') | float < 45000) %}
{{ ( (float(states.sensor.monthly_water_in_aguas_de_niteroi.state) * (3.8671 * 2 / 1000)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-15000) * (9.6677 * 2 / 1000)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-30000) * (11.9879 * 2 / 1000)) ) | round(2) }}
{% elif (states('sensor.monthly_water_in_aguas_de_niteroi') | float < 60000) %}
{{ ( (float(states.sensor.monthly_water_in_aguas_de_niteroi.state) * (3.8671 * 2 / 1000)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-15000) * (9.6677 * 2 / 1000)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-30000) * (11.9879 * 2 / 1000)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-45000) * (23.2024 * 2 / 1000)) ) | round(2) }}
{% else %}
{{ ( (float(states.sensor.monthly_water_in_aguas_de_niteroi.state) * (3.8671 * 2 / 1000)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-15000) * (9.6677 * 2 / 1000)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-30000) * (11.9879 * 2 / 1000)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-45000) * (23.2024 * 2 / 1000)) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-60000) * (30.9366 * 2 / 1000)) ) | round(2) }}
{% endif %}
No Lovelace ficou assim por enquanto:
Valeu!
Seria uma boa você criar um input_number
com o valor de cada tarifa e usar essa entidade no seu template, assim você conseguir atualizar os valores de tarifa sem ter que editar o template.
Obrigado pela dica @douglasit !
Criei as variaveis “input_number” e corrigi a lógica da programação.
Me parece que agora está correto.
#Configuração das variaveis auxiliares para controlar a tarifa de Agua por faixas de volume
input_number:
# Faixa 1 - consumo de agua até 15.000m³
tarifa_agua_faixa1:
name: Tarifa de agua Faixa 1
unit_of_measurement: 'R$'
initial: 3.8671
min: 0
max: 999
# Faixa 2 - consumo de agua entre 15.000m³ e 30.000m³
tarifa_agua_faixa2:
name: Tarifa de agua Faixa 2
unit_of_measurement: 'R$'
initial: 9.6677
min: 0
max: 999
# Faixa 3 - consumo de agua entre 30.000m³ e 45.000m³
tarifa_agua_faixa3:
name: Tarifa de agua Faixa 3
unit_of_measurement: 'R$'
initial: 11.9879
min: 0
max: 999
# Faixa 4 - consumo de agua entre 45.000m³ e 60.000m³
tarifa_agua_faixa4:
name: Tarifa de agua Faixa 4
unit_of_measurement: 'R$'
initial: 23.2024
min: 0
max: 999
# Faixa 5 - consumo de agua acima de 60.000m³
tarifa_agua_faixa5:
name: Tarifa de agua Faixa 5
unit_of_measurement: 'R$'
initial: 30.9366
min: 0
max: 999
Codigo do template:
- platform: template
sensors:
custo_mensal_aguas_de_niteroi:
friendly_name: "Custo Mensal Aguas de Niterói"
icon_template: mdi:cash-usd
unit_of_measurement: 'R$'
value_template: >-
{% if (states('sensor.monthly_water_in_aguas_de_niteroi') | float < 15000) %}
{{ ( float(states.sensor.monthly_water_in_aguas_de_niteroi.state) * ((states('input_number.tarifa_agua_faixa1') | float) * 2 / 1000) ) | round(2) }}
{% elif (states('sensor.monthly_water_in_aguas_de_niteroi') | float < 30000) %}
{{ ( (15000 * (states('input_number.tarifa_agua_faixa1') | float) * 2 / 1000) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-15000) * ((states('input_number.tarifa_agua_faixa2') | float) * 2 / 1000)) ) | round(2) }}
{% elif (states('sensor.monthly_water_in_aguas_de_niteroi') | float < 45000) %}
{{ ( (15000 * (states('input_number.tarifa_agua_faixa1') | float * 2 / 1000) + (15000 * states('input_number.tarifa_agua_faixa2') | float) * 2 / 1000) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-30000) * ((states('input_number.tarifa_agua_faixa3') | float) * 2 / 1000)) ) | round(2) }}
{% elif (states('sensor.monthly_water_in_aguas_de_niteroi') | float < 60000) %}
{{ ( (15000 * (states('input_number.tarifa_agua_faixa1') | float) * 2 / 1000) + (15000 * (states('input_number.tarifa_agua_faixa2') | float) * 2 / 1000) + (15000 * (states('input_number.tarifa_agua_faixa3') | float) * 2 / 1000) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-45000) * ((states('input_number.tarifa_agua_faixa4') | float) * 2 / 1000)) ) | round(2) }}
{% else %}
{{ ( (15000 * (states('input_number.tarifa_agua_faixa1') | float) * 2 / 1000) + (15000 * (states('input_number.tarifa_agua_faixa2') | float) * 2 / 1000) + (15000 * (states('input_number.tarifa_agua_faixa3') | float) * 2 / 1000) + (15000 * (states('input_number.tarifa_agua_faixa4') | float) * 2 / 1000) + ((float(states.sensor.monthly_water_in_aguas_de_niteroi.state)-60000) * ((states('input_number.tarifa_agua_faixa5') | float) * 2 / 1000)) ) | round(2) }}
{% endif %}
1 curtida
Bom dia, Amigo!
Será que seria possível eu entrar com o valor de leitura do hidrômetro manualmente?
Gostaria de fazer isso para sempre um dia antes da próxima leitura, consumir todo o mínimo de água que tenho para gastar.