Бежит-бежит водичка
Увлёкся я тут умным домом. Ну как увлёкся - услышал от коллег, заинтересовался. Поднял себе Home Assistant в контейнерах на NAS-e. Поигрался - прикольно. Развернул полноценную виртуалку, заказал пару первых датчиков... Ну и (понеслось) :)
А зачем это вообще?
Очень правильный вопрос! В моём случае насущной необходимости, конечно же, не было. Ну разве что, можно подключиться к домашним телевизорам и отслеживать, сколько времени ребёнок проводит за просмотром Нетфликс, когда родителей нет дома :)
Дальше - больше: какая температура в комнатах и термостаты на радиаторах, чтобы автоматически подогревать в холодное время. Хороший датчик воздуха на кухне позволяет определить предельную влажность и концентрацию углекислого газа и автоматически включить приточную вентиляцию.
Потом прибавились агенты на телефонах и лэптопе у Санька - стало проще следить за временем в интернете и за играми: всё собрано на одном дэшборде.
Ну а потому уж и машинка подключилась: стало проще следить за уровнем заряда, постановкой на охрану и закрытыми дверями/окнами.
Контроль потребления
Есть в HA встроенный дэшборд для контроля за потреблением воды/газа/электричества и это очень интересная фича.
Счётчики газа и электричества находятся в шкафу в подъезде и они полностью электронные. Т.е. сами подают сведения о потреблении поставщику и он каждый месяц присылает актуальный счёт за услуги. Местное изобретение в этих счётчиках - стандартизированный порт P1, к которому можно подключить своё устройство для сбора телеметрии. Такое устройство можно собрать и запрограммировать и самому, но готовое можно купить не сильно дороже исходников. Девайс подключается к домашнему wi-fi и после настройки начинает слать статистику потребления электричества/газа, причём даже с учётом дневного/ночного тарифов.
С водой дело обстоит иначе (по крайней мере, у меня). Счётчик - классический аналоговый. Потребитель сам оценивает плановое потребление в месяц, а в конце года - доплачивает разницу/получает назад переплаченное.

Собственно, рассказ сегодня про небольшой DIY проект для сбора показаний со счётчика воды (ну или любого другого аналогового).
Как дело было
В целом, устройства для оцифровки показателей аналоговых счётчиков тоже можно найти в интернете. Однако, я в своих поисках наткнулся на opensource-проект AI on the edge device, посвящённый как раз этому. Смысл проекта в том, что камера устройства с заданной периодичностью делает снимок табло счётчика. Пользователь размечает эту картинку таким образом, чтобы система знала, в каких местах расположены цифровые значения, а в каких - циферблаты. Потом она эти участки нарезает на отдельные картинки и пытается распознать с помощью специально обученной модели.
Я полазил в сети, почитал отзывы и всякие "тонкости" (типа того, как правильно выбрать плату контроллера или разблокировать камеру для более короткого фокусного расстояния).
Подобрал и заказал на али подходящую плату ESP32-CAM с камерой и нужным объемом памяти. Когда она приехала - разобрался с драйверами на Mac и прошивкой через ESP-HOME. Предстояло самое интересное - придумать, как же это всё стабильно зафиксировать перед счётчиком, чтобы можно было настроить распознавание.

Ужасно не терпелось поскорее получить какой-то результат, поэтому в ход пошло всё, что было под рукой - картон от коробок и скотч. Первый прототип показал себя неплохо, однако были и проблемы: во-первых, конструкция была довольно неустойчива, а т.к. чёткость фотографии (имеющая огромное значение для качества распознавания) зависит от стабильности положения камеры - качество результата страдало. Во-вторых, даже при малом энергопотреблении запитать конструкцию было не от чего, а внешней батарейки хватало максимум на неделю. Ну и в-третьих, выглядело всё это дело безобразно :)

Посему, прикинув и закупив возможные компоненты (ПВХ фитинг для канализации, пара хомутов и крышка от чипсов Pringles), второй вариант уже можно было с гордостью показывать гостям! :)
Также удалось аккуратно прокинуть туда проводок и прикрутить розетку для полноценного питания.
Интерфейс системы простой и понятный:

Красным цветом отмечены маркеры для правильной ориентации и масштабирования изображения. Относительно них система находит цифровые сегменты (синие) и циферблаты (зелёные), которые потом в нужном порядке складывает в окончательное значение.

Интересно, что значения распознаются с учетом сдвига барабана с цифрами и положения стрелок между целыми значениями. Очень круто!
Вот такой вот интересный получился проект. Большое спасибо ребятам, которые его поддерживают и обновляют!