Пришло время менять газовый счетчик в доме. В качестве нового газового счетчика был выбран cBKP G4 (аналог ELSTER), На младшем регистре (крайнее правое кольцо) установлен маленький магнит у него, а также к нему датчик импульсов IN-Z61 совместим для газовых счетчиков ВК, ВКР, МК, SG. Максимальное напряжение 24 В постоянного тока, с максимальным током до 50 мА. Минимальное время замкнутого контакта внутри счетчика 0.25 секунды, а сопротивление всего 0.5 Ома.
Я не стал изобретать очередной велосипед, выбрал готовое решение. Чтобы вся конструкция смотрелась как цельная.
Также нам потребуется : ESP-WROOM-32 DevKit модуль с помощью, которого мы будет передавать по wifi связи показания счетчика в HomeAssistant. Остановился именно на нем (до этого перепробовал ESP8266/D1 Mini), но он показал себя более стабильным в работе. Распиновка модуля ниже
Теперь все делаем пошагово.
Прошиваем ESP WROOM-32 и получаем наши сенсоры в ESPHOME
Вкратце как работает счетчик импульсов. Мы будем использовать всего 2 провода от него: это зеленый и коричневый. При поднесении магнита к самому датчику импульса срабатывает замыкание их, это есть 1 импульс равный 0.01м3 газа. Работает вообщем как обычный геркон.
Для ESP WROOM-32 используем два контакта GND, например D18 (GPIO18). Для ESP8266 можно использовать контакты с D5 и GND. Соот-но питание у всех 3.3В. Для первой прошивки этого модуля нам потребуется простейший программатор USB-to-TTL. Я использую такой.
Прошивать будем через компьютер на котором установлен Home Assistant (через порт USB). Далее обновлять прошивку уже будем удаленно по Wifi. При программировании ESP WROOM-32 питание у него будет от программатора.
USB-to-TTL | ESP WROOM-32 | |
RX | <-> | TX0 |
TX | <-> | RX0 |
3.3V | <-> | 3.3V |
GND | <-> | GND |
Далее нам потребуется приложение ESPHOME в Home Assistant. Он должен быть уже установлен в вашей системе. Создаем новый проект в нем.
Создался наш проект.
Я использую следующий скетч для газового счетчика. В нем мы получаем на выходе:
- input_number.Z16_meter_number счетчик показаний с возможностью “калибровки” данных
- бинарный сенсор binary_sensor.gaz_z16_live_impuls счетчик импульсов (On-Off)
- кнопку перезагрузки модуля ESP button.gaz_z16_restart_device
esphome:
name: gasmeter
friendly_name: GAZ
comment: GAS ESP controller
esp32:
board: esp32dev
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "AjA8hjZXs8v2chQ+Dpj4bfJYRmkjZds6mLJ8xGFVvFQ="
ota:
password: "3b1a5d64830479a3c190d138744796"
safe_mode: true
reboot_timeout: 10min
num_attempts: 5
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
fast_connect: true
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: !secret wifi_ssid_reserve
password: !secret wifi_password_reserve
captive_portal:
web_server:
port: 80
version: 2
local: true
substitutions:
pin_gas_counter: GPIO18
device_name: "Z16"
number:
- platform: template
name: "${device_name}"
id: Z16_meter_number
device_class: gas
icon: "mdi:fire"
mode: box
optimistic: true
unit_of_measurement: 'm³'
min_value: 0
max_value: 99999.999
step: 0.01
restore_value: yes
binary_sensor:
- platform: gpio
id: internal_pulse_counter_gas
pin:
number: ${pin_gas_counter}
mode: INPUT_PULLUP
inverted: true
name: "${device_name} Live-Impuls"
filters:
- delayed_on: 100ms
on_press:
then:
- number.increment: Z16_meter_number
button:
# Restart the ESP
- platform: restart
name: "${device_name} - Restart Device"
Фактически нам нужны будут значения только от input_number.Z16_meter_number в Home Assistant для передачи их в Utility Meter (подсчета показаний за день, месяц и год). Вы можете использовать и второй сенсор испульсов binary_sensor.gaz_z16_live_impuls (он находиться в состоянии ‘off’ (Не обнаружен), когда нет импульса. Когда магнит в счетчике замкнет, геркон сенсор перейдёт в состояние ‘on’ (Обнаружен). При переходе из состояния ‘on’ в ‘off’ (или наоборот, но только в одну сторону) надо будет прибавлять к нашему счетчику 0,01 м3.). У меня все эти вычисления делает первый input_number.Z16_meter_number (он умеет как накапливать показания так и менять их в онлайне для корректировки). На ваш выбор.
еще немного кода сенсоров: аптайм, IP адрес и SSID сети wifi.
text_sensor: - platform: template name: uptime_Z16 id: uptime_Z16 icon: mdi:clock-start update_interval: 60s - platform: wifi_info ip_address: name: IP Address id: ip ssid: name: Connected SSID id: ssid sensor: - platform: uptime name: uptime_sensor id: uptime_sensor update_interval: 60s internal: true on_raw_value: then: - text_sensor.template.publish: id: uptime_Z16 state: !lambda |- int seconds = round(id(uptime_sensor).raw_state); int days = seconds / (24 * 3600); seconds = seconds % (24 * 3600); int hours = seconds / 3600; seconds = seconds % 3600; int minutes = seconds / 60; seconds = seconds % 60; return ( (days ? to_string(days)+":" : "00:") + (hours ? to_string(hours)+":" : "00:") + (minutes ? to_string(minutes)+":" : "00:") + (to_string(seconds)) ).c_str();
Начинаем прошивать. На ESP жмем Boot (или Flash) и не отпуская подключаем по USB шнурку нашу связку USB-to-TTL – ESP WROOM-32 к компьютеру, как только питание появилось на ESP – отпускаем Boot и в ESPHOME нашего проекта жмем
выбираем наш USB-to-TTL (его имя)
Ждем окончания процесса. Он может быть долгим. Не забываем, что на вашем Wifi роутере должен быть разрешен доступ для подключения к Wifi сети клиенских устройств. После того как все удачно прошло (ниже успешный лог прошивки)
нажать на модуле ESP WROOM-32 кнопку EN (у некоторых она может быть с другим именем RST или RESET), по разному
и если вы увидите в логе IP адрес ESP WROOM-32 устройства полученного по DHCP (или на вашем роутере посмотреть), то подключаемся к нему по IP в браузере и видим что-то подобное
Показания пока все на нулях. В логах ничего пока нет. Отключаем от компа наш программатор и ESP WROOM-32 и подключаем датчик импульсов IN-Z16 к ESP согласно таблице распиновки
IN-Z16 | ESP |
коричневый | GND |
зеленый | D18 |
Если поднести магнит к датчику импульсов то сработают Z16 Live-Impuls из “off” переключиться в “On”, и в Z16 в state будут в браузере видны мгновенные показания с шагом 0.01. Делаем так несколько раз. Если все хорошо и показания увеличиваются, то собственно можно подключать датчик к газовому счетчику.
Далее обновлять наш скетч уже можно через Wifi выбирая в меню Wirelessly
Рекомендую с Linux система которой настроек докер с Home Assistant прописать в /etc/hosts локальные DNS наши хосты с IP адресами:
192.168.1.30 gasmeter.local gasmeter
На этом физика завершена. Датчик подготовлен для работы с Home Assistant, в следующей части разберем детально его подключение и работу с Utility Meter.
Добрый день, отличная инструкция. Переделал по ней свою устаревшую инсталяцию. А где вторая часть?)