Автоматизируем передачу показаний счетчиков в коммунальные службы не выходя из дома
- У меня был установлен счетчик холодной воды "от застройщика", самый простой, показания можно только посмотреть глазами
- Установлен бойлер, счетчик горячей воды не используется (показания не меняются), но показания надо все равно передавать регулярно (даже если не менялись надо заходить и жать кнопку "передать"...)
- На звонок в киевводоканал с вопросом "как автоматически передавать показания из квартиры?" был получен ответ "Мы таким не занимаемся..."
- Автор про паяльник знает только то, что им можно получать сведения от незаинтересованных в выдачи таких сведений граждан и что-то там делать с оловом
- Счетчик электроэнергии установлен не в квартире и показания передаются без моего участия
- В квартире все "умное" (даже шторы по расписанию закрываются/открываются) и на счетчики я довольно долго косо смотрел, но как-то руки не доходили
- Отсутствие желания общаться с коммунальными службами на эту тему отпало в принципе, после звонка с вопросом в киевводоканал
- Отсутствие желания делать повторяющиеся и абсолютно бесполезные телодвижения по передаче показаний
- Наличие возможности потратить на эксперимент деньги и время в разумных пределах
Довольно интересное для моих входящих данных решение было в статье: https://habr.com/ru/post/409829/. Народ сделал девайс-накладу, который фотографирует показания счетчика, шлет фотку на сервис через интернет используя встроенный GSM модуль (у GSM операторов есть спец тариф "датчик" для таких дел), сервис распознает фотку и показания можно забирать через интернет. Вот это чудо устройство: https://www.accentcom.ru/sps-1g.
Проблемы с чудо-девайсом:
- В случае включения "великого русского файрвола" есть угроза потерять все полимеры
- Найти чудо-устройство на украинском рынке довольно проблематично и цена сильно завышена
Подобный девайс подсказали коллеги уже когда я закончил свой эксперимент:
Стрельнув по нескольким сайтам со счетчиками с вопросом "как автоматизировать передачу показаний", попал на одного очень хорошего продавца (https://vodomery.kiev.ua/) который сразу предложил решение (в выходные по вечерам отвечал человек), а конкретнее:
- Заменить счетчик на более подготовленный к задаче: https://ectc.com.ua/schetchiki-vody/kvartirnyj-schetchik-holodnoj-vody-residia-jet
- Поставить накладку на счетчик, она будет опрашивать счетчик и ее можно подключать дальше к чему-то: https://ectc.com.ua/distancionnaya-peredacha-pokazanij/peredatchik-impulsov-sensus-residia-p
- Подключить накладку к сервису smart-mac через вот такой девайс: https://ectc.com.ua/distancionnaya-peredacha-pokazanij/schetchik-impulsov-smart-mac-d105
Ну сам smart-mac девайс производитель продает вроде дешевле, но так как продавец активно взялся помогать, то я решил что экономить сотню или около того не буду. Как эти показания затолкать в коммунальную службу продавец не сказал, и вроде как можно, но там "не все так просто"...
Ну штож - "Challenge accepted"...
Картинка ниже сразу возникла у меня в голове и я начал поэтапно ее имплементировать:
- накладка для передачи работает от батарейки, что хорошо, но должна по кабелям быть подключена к smart-mac девайсу
- smart-mac девайс требует питание 220 и для передачи показаний на сервис - доступ к wifi и интернет. Можно и по локальной сети на него попасть по wifi, но решение усложнится, так как придется все автоматизацию запускать на локальном сервере, а у него аптайм не стабилен, а хочется сделать и забыть:)
- веб интерфейс smart-mac сервиса с дашбордами я не осилил: какие-то автогенеренные дашборды, надо что-то читать. Я почти сразу на форуме smart-mac нашел доку по REST API и успокоился
- для передачи показаний нужен сервер, где можно будет по расписанию что-то запускать, ну мы подумали и я решил что хватит github actions и крона который будет просто собирать проект и ранить юнит тесты
Был интересный нюанс - надо выбрать диаметр 15 или 20, я не знаю как продавец по фото моего старого счетчика увидел 15, но сказал что "на счетчике же написано", где там оно написано я до сих пор не знаю... Ну дальше все просто - покупаем новый счетчик, звоним в киевводоканал и за 400грн происходит замена с постановкой на учет и всеми танцами вокруг водоканала без моего участия. Тут все пошло быстро и оперативно - после звонка, на следующий день пришел мастер, за 20 минут заменил, выдал документы и рассказал когда новый счетчик станет на учет.
Тут было просто - по ссылке https://ectc.com.ua/distancionnaya-peredacha-pokazanij/schetchik-impulsov-smart-mac-d105 есть
таба "Скачать файлы", там pdf с инструкцией. Читаем, выполняем, все работает:)
Примерно такие шаги:
- кабеля питания 220 сунуть в гнездо 9 и 10
- подключить к вайфай по инструкции
- настроить девайс в личном кабинете
Тут было больше всего непонятного поэтому описываю что произошло. Накладка на счетчик устанавливается просто и выглядит так:
Два провода коричневый и черный надо затолкать в клемы 1 и 2 smart-mac девайсу. Вот так:
Далее надо попасть на девайс по локальной сети (да у него есть свой маленький http сервер с вебмордой) и настроить начальные показания, и вот тут началось интересное. Счетчик считает импульсы и надо знать цену импульса... Я был послан в паспорт счетчика который выглядит вот так:
Так как чукча не читатель, а писатель - то я вернулся назад к продавцу с вопросами. В итоге получил ответ "импульс это литр", что привело меня к следующему:
Игого я на показателе smart-mac "Total Pulse Ch1" (потому как я засунул белый провод накладки в импульсный вход 1) прописываю цифру в импульсах, тоесть литрах:
Далее заходим в личный кабинет smart-mac и проверяем что все работает - открываем кран холодной воды и смотрим, что литроимпульсы соответствуют цифрам на счетчике. Как я уже писал выше - в интерфейсе разбираться не было ни желания ни необходимости ... то я просто дернул апишку и получил ответ с нужной циферой и обрадовался: https://support.smart-mac.com/knowledge-bases/2/articles/43-api-dlya-servera
Тут я не буду углубляться в детали - код в репозитории, смотрите, форкайте, автоматизируйте.. Алюминь! :)
Стек технологий следующий:
- java 11
- maven
- selenuim + pageobjects
- selenuim testcontainer
- spring boot
- spring cloud openfeign
В итоге кнопка "передать" не меняющиеся показания горячего счетчика выгладит так:
String successPopupText = new LoginPage(container.getWebDriver())
.loginAs(teploEnergoProperties.getEmail(), teploEnergoProperties.getPassword())
.openCountersPage()
.copyCountersDataFromPrevious()
.submit()
.getSuccessPopupText();
assertThat(successPopupText).isNotEmpty();
Далее надо чтобы по расписанию запускалась сборка проекта и чтобы логины и пароли были не в паблике. Ну тут все очень просто:
- https://docs.github.com/en/actions/language-and-framework-guides/building-and-testing-java-with-maven
- https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#onschedule
- https://docs.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets
- Потрачено пару вечеров и 3620 гривен
- Автоматизировано все что хотелось автоматизировать
- Накладных расходов нет, кроме сапорта в счет личного времени (что намного интереснее чем лазить за показаниями:)
- Тестконтейнер с селениумом записывает видео о том как мой код кликает по сайту, в свободное время попробую сделать чтобы эти видео прилетали мне в телеграм