Medidor de gás no Home Assistant sem ferro de solda

Não faz muito tempo, recebi uma conta de gás da qual me senti desconfortável e decidi integrar um medidor de gás normal em minha casa inteligente com base no Raspberry Pi + Home Assistant para prever o custo das despesas e receber alertas assim que à medida que o consumo supera as expectativas.





Em primeiro lugar, subi no Habr e, para minha surpresa, entre não poucos artigos sobre como ler leituras de medidores e até alguns artigos diretamente sobre como fazer leituras de medidores de gás, não encontrei o que era procurando em qualquer um deles.





Há um artigo bastante interessante de 2014 sobre leitura ótica de qualquer medidor usando um smartphone , mas não há uma palavra sobre Home Assistant, nem sobre seu componente para reconhecimento ótico de medidores em particular.





Há um artigo de 2018 sobre um dispositivo universal de baixo custo para leitura óptica de qualquer medidor , que eu ficaria feliz em comprar naquela época, mas ainda não chegou à venda gratuita.





Lendo esses e outros artigos (por exemplo, o artigo de 2018 sobre Waterius ou o artigo de 2020 Smart Khrushchev em velocidade máxima ), percebi que os contadores não estão divididos em duas gerações (offline e online), mas em três. Além da 3ª geração de medidores, que pode enviar leituras de medidores sempre que necessário, existe também uma 2ª geração que não sabe transmitir dados pela própria rede, mas está equipada com um transmissor de pulso (óptico ou magnético) que permite conectar um módulo ao medidor que lê esses pulsos e passa adiante.





Pesquisando meu medidor de gás no Google (acabou sendo BK-G4), felizmente descobri não só que um gerador de pulso magnético está embutido nele (um ímã no tambor de baixa ordem), mas mesmo que já existem exemplos bem-sucedidos de seu integração no Home Assistant .





() IN-Z61 (1640 , ), esp8266 (788 ), , , , , , , .





, , Home Assistant Xiaomi ( MCCGQ01LM), - 600 .





, , . , - AliExpress 20 .





Home Assistant configuration.yaml





counter:
  gas_counter:
    step: 10
      
      



automations.yaml





- id: '1606010744418'
  alias: Gas count
  description: ''
  trigger:
  - entity_id: binary_sensor.openclose_gas
    platform: state
    from: 'on'
    to: 'off'
  action:
  - data:
      entity_id:
      - counter.gas_counter
    service: counter.increment
      
      



configuration.yaml utility_meter: !include utility_meter.yaml



, utility_meter.yaml , (, , )





gas_monthly:
  source: sensor.gas_counter_sensor
  cycle: monthly
  tariffs:
    - single
gas_daily:
  source: sensor.gas_counter_sensor
  cycle: daily
  tariffs:
    - single
gas_hourly:
  source: sensor.gas_counter_sensor
  cycle: hourly
  tariffs:
    - single
      
      



,





- platform: template
  sensors:
    gas_counter_sensor:
      friendly_name: "  "
      unit_of_measurement: '3'
      value_template: "{{ (states('counter.gas_counter') | float) / 1000 }}"
      icon_template: mdi:counter
- platform: template
  sensors:
    gas_last_month:
      friendly_name: "  ( )"
      unit_of_measurement: '₽'
      value_template: "{{ ((state_attr('sensor.gas_monthly_single', 'last_period') | float) / 1000 * 6056.4) | round(2) }}"
      icon_template: mdi:cash-100
- platform: template
  sensors:
    gas_this_month:
      friendly_name: "  ( )"
      unit_of_measurement: '₽'
      value_template: "{{ ((states('sensor.gas_monthly_single') | float) / 1000 * 6056.4) | round(2) }}"
      icon_template: mdi:cash-100
- platform: template
  sensors:
    gas_today:
      friendly_name: "  ()"
      unit_of_measurement: '₽'
      value_template: "{{ ((states('sensor.gas_daily_single') | float) / 1000 * 6056.4) | round(2) }}"
      icon_template: mdi:cash-100
- platform: template
  sensors:
    gas_yesterday:
      friendly_name: "  ()"
      unit_of_measurement: '₽'
      value_template: "{{ ((state_attr('sensor.gas_daily_single', 'last_period') | float) / 1000 * 6056.4) | round(2) }}"
      icon_template: mdi:cash-100
- platform: template
  sensors:
    gas_this_hour:
      friendly_name: "  ( )"
      unit_of_measurement: '₽'
      value_template: "{{ ((states('sensor.gas_hourly_single') | float) / 1000 * 6056.4) | round(2) }}"
      icon_template: mdi:cash-100
- platform: template
  sensors:
    gas_last_hour:
      friendly_name: "  ( )"
      unit_of_measurement: '₽'
      value_template: "{{ ((state_attr('sensor.gas_hourly_single', 'last_period') | float) / 1000 * 6056.4) | round(2) }}"
      icon_template: mdi:cash-100
- platform: template
  sensors:
    gas_hour_based_monthly_estimate:
      friendly_name: "  (->)"
      unit_of_measurement: '₽'
      value_template: "{{ ((state_attr('sensor.gas_hourly_single', 'last_period') | float) / 1000 * 6056.4 * 24 * 30) | int }}"
      icon_template: mdi:chart-line-variant
- platform: template
  sensors:
    gas_day_based_monthly_estimate:
      friendly_name: "  (->)"
      unit_of_measurement: '₽'
      value_template: "{{ ((state_attr('sensor.gas_daily_single', 'last_period') | float) / 1000 * 6056.4 * 30) | int }}"
      icon_template: mdi:chart-line-variant
      
      



SD Home Assistant , Home Assistant , , configuration.yaml





recorder:
  exclude:
    entities:
      - binary_sensor.openclose_gas
      
      



Home Assistant





, Home Assistant , ( ) , .





( ) ( ) .








All Articles