Medidor de gas en Home Assistant sin soldador

No hace mucho, recibí una factura de gas de la que me sentía incómodo, y decidí integrar un medidor de gas regular en mi casa inteligente basado en la Raspberry Pi + Home Assistant para predecir el costo de los gastos y recibir alertas lo antes posible. ya que el consumo supera las expectativas.





En primer lugar, subí a Habr, y para mi sorpresa, entre un número no pequeño de artículos sobre cómo leer las lecturas de los contadores, e incluso un par de artículos directamente sobre la toma de lecturas de un contador de gas, no encontré lo que estaba buscando. buscando en cualquiera de ellos.





Hay un artículo bastante interesante de 2014 sobre la lectura óptica de cualquier medidor utilizando un teléfono inteligente , pero no hay ni una palabra sobre Home Assistant, ni sobre su componente para el reconocimiento óptico de medidores en particular.





Hay un artículo de 2018 sobre un dispositivo universal y económico para lectura óptica desde cualquier medidor , que me encantaría comprar en ese momento, pero aún no ha entrado en la venta gratuita.





Al leer estos y otros artículos (por ejemplo, el artículo de 2018 sobre Waterius , o el artículo de 2020 Smart Khrushchev a máxima velocidad ), me di cuenta de que los contadores no están divididos en dos generaciones (offline y online), sino en tres. Además de la 3ra generación de medidores, que es capaz de enviar lecturas de medidores donde sea necesario, también hay una 2da generación que no sabe cómo transmitir datos a través de la red, pero está equipada con un transmisor de pulsos (óptico o magnético) que le permite conectar un módulo al medidor que lee estos pulsos y los transmite.





Buscando en Google mi medidor de gas (resultó ser BK-G4), felizmente descubrí no solo que un generador de pulso magnético está integrado en él (un imán en el tambor de bajo orden), sino incluso que ya hay ejemplos exitosos de su integración en 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