Olá Pessoal,
Para quem não conhece temos um grupo no Telegram, que acabam compartilhando muitos projetos por lá, e para não ficarem perdidos vou passar eles para o forum.
Este projeto foi desenvolvido pelo José (@jhbcosta) e compartilhado no grupo do telegram, e o Drikos (@Drikos) recentemente compartilhou o seu código. Obrigado por compartilharem os projetos, segue o material compartilhado no grupo:
Do que vai precisar:
Placa Nodecum
2 Celulas de Carga são suficientes para botijão de P13, mas também pode usar 4 celulas de 50Kg:
Base para pesar botijão
Vai precisar fixar as 2 ou 4 ceulas de carga em uma base, segue alguns modelos:
Base do José
Base do Lima
Base do Elton
Com a base pronta, o esquema de ligação:
*Na imagem da ligação é um arduino, mas ira fazer as ligações na placa Nodecum:
dout → Porta: D1 no Nodecum
sck → Porta: D2 no Nodecum
GND → Porta GND no Nodecum
5v → Porta VIN no Nodecum
O código para subir no Esphome:
esphome:
name: botijao_gas
platform: ESP8266
board: nodemcuv2
wifi:
ssid: "id"
password: "pass"
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Botijao Gas Fallback Hotspot"
password: "pass"
captive_portal:
# Enable logging
logger:
# Enable Home Assistant API
api:
ota:
sensor:
- platform: hx711
name: "Botijão de Gás"
dout_pin: D1
clk_pin: D2
gain: 128
icon: 'mdi:scale'
update_interval: 60s
accuracy_decimals: 2
filters:
- calibrate_linear:
- 527924 -> 0
- 554807 -> 1
unit_of_measurement: kg
Calibrar a balança:
Modificar no código a parte do calibrate_linear, onde está 527924 colocar o valor da tara, no caso o valor que sua balança estiver lendo sem nada em cima. E onde está 554807, substituir pelo valor de quando colocar um objeto de 1 kg sobre a balança
Código para integrar balança no HA:
#------------------Imput text----------------------------------------#
inserir_preco_gas:
name: R$ Botijão de Gás
max: 6
icon: mdi:cash-multiple
tara_botijao_vazio_gas:
name: Tara do Botijão
max: 6
icon: mdi:weight-kilogram
#------------------Imput number----------------------------------------#
gas_gasto_ontem:
name: Gasto de Gás ontem
icon: mdi:gas-cylinder
unit_of_measurement: kg
min: 0
max: 100
step: 0.01
mode: slider
gas_inicial_para_calculo_hoje:
name: Gás Inicial para Calculo hoje
icon: mdi:gas-cylinder
unit_of_measurement: kg
min: 0
max: 100
step: 0.01
mode: slider
gas_gasto_semana_anterior:
name: Gasto de Gás Semana Anterior
icon: mdi:gas-cylinder
unit_of_measurement: kg
min: 0
max: 100
step: 0.01
mode: slider
gas_gasto_semana_atual:
name: Gasto de Gás Semana Atual
icon: mdi:gas-cylinder
unit_of_measurement: kg
min: 0
max: 100
step: 0.01
mode: slider
gas_gasto_mes_anterior:
name: Gasto de Gás Mês Anterior
icon: mdi:gas-cylinder
unit_of_measurement: kg
min: 0
max: 100
step: 0.01
mode: slider
gas_gasto_mes_atual:
name: Gasto de Gás Mês Atual
icon: mdi:gas-cylinder
unit_of_measurement: kg
min: 0
max: 100
step: 0.01
mode: slider
#------------------Sensor----------------------------------------#
#-------Gasto de Gás em kilos--------------------------------------------------------------#
# Template do Sensor do botijão de Gás
- platform: template
sensors:
peso_somente_do_gas:
friendly_name: "Peso Somente do Gás do Botijão"
value_template: "{{ (states('sensor.botijao_de_gas')|float - states('input_text.tara_botijao_vazio_gas')|float) | round(3) }}"
icon_template: mdi:gas-cylinder
unit_of_measurement: "kg"
#Template de Consumo do Gás Ontem.
- platform: template
sensors:
consumo_gas_ontem:
friendly_name: "Consumo do Gás Ontem"
value_template: "{{ states('input_number.gas_gasto_ontem') }}"
icon_template: mdi:gas-cylinder
unit_of_measurement: "kg"
#Template de Consumo do Gás Hoje.
- platform: template
sensors:
consumo_gas_hoje:
friendly_name: "Consumo do Gás Hoje"
value_template: "{{ (states('input_number.gas_inicial_para_calculo_hoje')|float - states('sensor.peso_somente_do_gas')|float) | round(2) }}"
icon_template: mdi:gas-cylinder
unit_of_measurement: "kg"
#Template de Consumo do Gás Semana Anterior.
- platform: template
sensors:
consumo_gas_semana_anterior:
friendly_name: "Consumo do Gás Semana Anterior"
value_template: "{{ states('input_number.gas_gasto_semana_anterior') }}"
icon_template: mdi:gas-cylinder
unit_of_measurement: "kg"
#Template de Consumo do Gás Semana Atual.
- platform: template
sensors:
consumo_gas_semana_atual:
friendly_name: "Consumo do Gás Semana Atual"
value_template: "{{ (states('input_number.gas_gasto_semana_atual')|float - states('sensor.peso_somente_do_gas')|float) | round(2) }}"
icon_template: mdi:gas-cylinder
unit_of_measurement: "kg"
#Template de Consumo do Gás Mês Anterior.
- platform: template
sensors:
consumo_gas_mes_anterior:
friendly_name: "Consumo do Gás Mês Anterior"
value_template: "{{ states('input_number.gas_gasto_mes_anterior') }}"
icon_template: mdi:gas-cylinder
unit_of_measurement: "kg"
#Template de Consumo do Gás Mensal.
- platform: template
sensors:
consumo_gas_mes_atual:
friendly_name: "Consumo do Gás Mês Atual"
value_template: "{{ (states('input_number.gas_gasto_mes_atual')|float - states('sensor.peso_somente_do_gas')|float) | round(2) }}"
icon_template: mdi:gas-cylinder
unit_of_measurement: "kg"
#-------R$ Gasto de Gás em valores monetarios R$--------------------------------------------------------------#
#Template de Preço do Gás por Grama.
- platform: template
sensors:
preco_gas_por_grama:
friendly_name: "R$ Gás por Kilo"
value_template: "{{ (states('input_text.inserir_preco_gas')|float / 13.000) | round(2) }}"
icon_template: mdi:gas-cylinder
unit_of_measurement: "Reais"
#Template de R$ do Gás Ontem.
- platform: template
sensors:
consumo_gas_ontem_valores:
friendly_name: "R$ do Gás Ontem"
value_template: "{{ 'R$%.2f'|format (float(states('sensor.consumo_gas_ontem')|float * states('sensor.preco_gas_por_grama')|float)) | round(3) }}"
icon_template: mdi:gas-cylinder
#Template de Consumo do Gás Hoje.
- platform: template
sensors:
consumo_gas_hoje_valores:
friendly_name: "R$ do Gás Hoje"
value_template: "{{ 'R$%.2f'|format (float(states('sensor.consumo_gas_hoje')|float * states('sensor.preco_gas_por_grama')|float)) | round(3) }}"
icon_template: mdi:gas-cylinder
#Template de Consumo do Gás Semana Anterior.
- platform: template
sensors:
consumo_gas_semana_anterior_valores:
friendly_name: "R$ do Gás Semana Anterior"
value_template: "{{ 'R$%.2f'|format (float(states('sensor.consumo_gas_semana_anterior')|float * states('sensor.preco_gas_por_grama')|float)) | round(3) }}"
icon_template: mdi:gas-cylinder
#Template de Consumo do Gás Semana Atual.
- platform: template
sensors:
consumo_gas_semana_atual_valores:
friendly_name: "R$ do Gás Semana Atual"
value_template: "{{ 'R$%.2f'|format (float(states('sensor.consumo_gas_semana_atual')|float * states('sensor.preco_gas_por_grama')|float)) | round(3) }}"
icon_template: mdi:gas-cylinder
#Template de Consumo do Gás Mês Anterior.
- platform: template
sensors:
consumo_gas_mes_anterior_valores:
friendly_name: "R$ do Gás Mês Anterior"
value_template: "{{ 'R$%.2f'|format (float(states('sensor.consumo_gas_mes_anterior')|float * states('sensor.preco_gas_por_grama')|float)) | round(3) }}"
icon_template: mdi:gas-cylinder
#Template de R$ do Gás Mensal.
- platform: template
sensors:
consumo_gas_mes_atual_valores:
friendly_name: "R$ do Gás Mês Atual"
value_template: "{{ 'R$%.2f'|format (float(states('sensor.consumo_gas_mes_atual')|float * states('sensor.preco_gas_por_grama')|float)) | round(3) }}"
icon_template: mdi:gas-cylinder
#------------------Automation----------------------------------------#
- id: '1586831656805'
alias: Informa que o Botijão de Gás foi trocado e esta cheio
description: Informa que o Botijão de Gás esta cheio se for se o peso for superior
a 12.5kg
trigger:
- above: '12.5'
entity_id: sensor.peso_somente_do_gas
platform: numeric_state
condition:
- condition: template
value_template: '{{ as_timestamp(now()) - as_timestamp(states.automation.informa_que_o_botijao_de_gas_esta_cheio_acima_de_12_5kg.attributes.last_triggered)
| int > 86400 }}'
action:
- data:
entity_id: media_player.sala
message: Foi detectado a troca do Botijão de Gás, e o Nível agora está cheio.
service: tts.google_say
- data:
message: Agora você esta com o botijão de gás cheio novamente, e seu nível de
gás atual é de {{states('sensor.peso_somente_do_gas')}} kilos.
title: Troca do botijão de gás realizada.
service: notify.telegram
- data_template:
entity_id: input_number.gas_inicial_para_calculo_hoje
value: '{{ (states(''input_number.gas_inicial_para_calculo_hoje'')|float + 13.00
|float - states(''sensor.peso_somente_do_gas'')|float) | round(2) }}'
service: input_number.set_value
- data_template:
entity_id: input_number.gas_gasto_semana_atual
value: '{{ (states(''input_number.gas_gasto_semana_atual'')|float + 13.00 |float
- states(''sensor.peso_somente_do_gas'')|float) | round(2) }}'
service: input_number.set_value
- data_template:
entity_id: input_number.gas_gasto_mes_atual
value: '{{ (states(''input_number.gas_gasto_mes_atual'')|float + 13.00 |float
- states(''sensor.peso_somente_do_gas'')|float) | round(2) }}'
service: input_number.set_value
- id: '1586832561624'
alias: Informa que o Botijão de Gás esta pela metade
description: Informa que o Botijão de Gás esta pela metade que equivale 7.5kg
trigger:
- below: '7.51'
entity_id: sensor.peso_somente_do_gas
platform: numeric_state
condition:
- above: '1.59'
below: '7.51'
condition: numeric_state
entity_id: sensor.peso_somente_do_gas
- condition: template
value_template: '{{ as_timestamp(now()) - as_timestamp(states.automation.informa_que_o_botijao_de_gas_esta_pela_metade.attributes.last_triggered)
| int > 86400 }}'
action:
- data:
entity_id: media_player.sala
message: O botijão de gás atingiu a metade da sua capacidade.
service: tts.google_say
- data:
message: O botijão de gás atingiu a metade da sua capacidade, que é de {{states('sensor.peso_somente_do_gas')}}
kilos.
service: notify.telegram
- id: '1586833826489'
alias: 'Informa que o Botijão de Gás esta com seu Nível em 25% '
description: ''
trigger:
- below: '3.26'
entity_id: sensor.peso_somente_do_gas
platform: numeric_state
condition:
- above: '3.24'
below: '3.26'
condition: numeric_state
entity_id: sensor.peso_somente_do_gas
- condition: template
value_template: '{{ as_timestamp(now()) - as_timestamp(states.automation.informa_que_o_botijao_de_gas_esta_com_seu_nivel_em_25.attributes.last_triggered)
| int > 86400 }}'
action:
- data:
entity_id: media_player.sala
message: O Nível do Gás chegou a 25% de sua capacidade, mais fique tranquilo,
que eu avisarei você quando estiver na hora de trocar o botijão.
service: tts.google_say
- data:
message: Mais fique tranquilo, que eu avisarei você quando estiver na hora de
trocar o botijão.
title: O Nível do Gás chegou a 25% de sua capacidade, que é de {{states('sensor.peso_somente_do_gas')}}
kilos.
service: notify.telegram
- id: '1586834697355'
alias: 'Informa que o Gás esta quase acabando - Nível em 2% '
description: ''
trigger:
- below: '0.26'
entity_id: sensor.peso_somente_do_gas
platform: numeric_state
condition:
- above: '0.25'
below: '0.26'
condition: numeric_state
entity_id: sensor.peso_somente_do_gas
- condition: template
value_template: '{{ as_timestamp(now()) - as_timestamp(states.automation.informa_que_o_gas_esta_quase_acabando_nivel_em_5.attributes.last_triggered)
| int > 86400 }}'
action:
- data_template:
language: pt-br
message: O Nível do Botijão de Gás está com a capacidade de - {{states('sensor.peso_somente_do_gas')}}
kilos
entity_id: media_player.sala
service: tts.google_say
- delay: 00:00:07
- data_template:
language: pt-br
message: O nível está muito baixo, sugiro que não asse e não cozinhe nada nesse
momento, realize a troca do botijão urgente.
entity_id: media_player.sala
service: tts.google_say
- data:
message: O nível está muito baixo, sugiro que não asse e não cozinhe nada nesse
momento, realize a troca do botijão urgente.
title: O Nível do Botijão de Gás está com a capacidade de - {{states('sensor.peso_somente_do_gas')}}
kilos.
service: notify.telegram
- id: '1587096088998'
alias: Pega a quantidade de gás no Inicio do dia (Calculo DIA)
description: ''
trigger:
- hours: '00'
minutes: '00'
platform: time_pattern
seconds: '53'
condition: []
action:
- data_template:
entity_id: input_number.gas_inicial_para_calculo_hoje
value: '{{ states(''sensor.peso_somente_do_gas'') }}'
service: input_number.set_value
- id: '1587139436797'
alias: Pega o consumo do Gás de ontem
description: ''
trigger:
- hours: '23'
minutes: '59'
platform: time_pattern
seconds: '59'
condition: []
action:
- data_template:
entity_id: input_number.gas_gasto_ontem
value: '{{ states(''sensor.consumo_gas_hoje'') }}'
service: input_number.set_value
- id: '1587139534424'
alias: Pega o consumo do Gás Semana Atual
description: ''
trigger:
- hours: '00'
minutes: '00'
platform: time_pattern
seconds: '10'
condition:
- condition: time
weekday:
- sun
action:
- data_template:
entity_id: input_number.gas_gasto_semana_atual
value: '{{ states(''sensor.peso_somente_do_gas'') }}'
service: input_number.set_value
- id: '1587139604911'
alias: Pega o consumo do Gás Mês Atual
description: ''
trigger:
- hours: '00'
minutes: '00'
platform: time_pattern
seconds: '10'
condition:
- condition: template
value_template: '{{ now().strftime("%d") == "1" }}'
action:
- data_template:
entity_id: input_number.gas_gasto_mes_atual
value: '{{ states(''sensor.peso_somente_do_gas'') }}'
service: input_number.set_value
- id: '1587252151958'
alias: Pega o consumo do Gás do Mês Anterior
description: ''
trigger:
- hours: '00'
minutes: '00'
platform: time_pattern
seconds: '00'
condition:
- condition: template
value_template: '{{ now().strftime("%d") == "1" }}'
action:
- data_template:
entity_id: input_number.gas_gasto_mes_anterior
value: '{{ states(''sensor.consumo_gas_mes_atual'') }}'
service: input_number.set_value
- id: '1587267082904'
alias: Pega o consumo do Gás da Semana Anterior
description: ''
trigger:
- hours: '00'
minutes: '00'
platform: time_pattern
seconds: '00'
condition:
- condition: time
weekday:
- sun
action:
- data_template:
entity_id: input_number.gas_gasto_semana_anterior
value: '{{ states(''sensor.consumo_gas_semana_atual'') }}'
service: input_number.set_value
Como o peso do botijão vazio varia, assim como o peço, por isto que o Drikos incluir estas variáveis como input:
Card da Barra de Carga
Jose tambem compartilhou uma barra de carga bem bacana:
**Código do Card Barra de Carga**
card:
entities:
- entity: sensor.balanca_gas
icon: 'mdi:gas-cylinder'
name: PESO BOTIJÃO (15 kg = vazio)
- card:
align: split
columns: 1
entity: sensor.peso_botijao
height: 30px
positions:
icon: 'off'
indicator: 'off'
minmax: inside
title: 'off'
value: inside
rounding: 0px
severity:
- color: '#bf4040'
from: 0
to: 30.99
- color: '#ffc300'
from: 31
to: 59.99
- color: '#40bf40'
from: 60
to: 100
style: |-
bar-card-value {
margin-right: auto;
margin-left: auto;
margin-bottom: auto;
margin-top: -8px;
font-size: 14px
}
bar-card-minvalue {
margin-top: 16px;
margin-left: 8px;
margin-right: auto;
margin-bottom: -13px;
bottom: 8px;
}
bar-card-maxvalue {
margin-bottom: 0px;
margin-right: 8px;
margin-left: auto;
margin-top: -13px;
top: 6px;
}
bar-card-divider {
display: none;
}
bar-card-contentbar {
flex-direction: column;
}
bar-card-title {
margin-bottom: 0px;
}
title_position: inside
title_style:
font-size: 14px
type: 'custom:bar-card'
unit_of_measurement: '%'
value_style:
font-size: 12px
width: 100%
type: 'custom:auto-entities'
type: entities
style:
border: solid 2px var(--primary-color)
border-radius: 10px
transform: scale(1.00)
type: 'custom:card-modder'
É isto, obrigado a todos que compartilharam, especial ao Jose (@jhbcosta) que pensou na solução e implantou primeiro a ideia.
Abraço!