Превращаем обычный электросчетчик в умный: продолжаем осваивать Samsung SmartThings
Вам не кажется, что вручную переписывать цифры с ЖК-экрана на электросчетчике каждый месяц — это немного странное занятие? Все слышали про умные электросчетчики, но не все готовы заплатить несколько тысяч (а счетчик с дистанционным снятием показаний стоит как минимум 15000 рублей). И не факт, что этот электросчетчик нормально встроится в вашу экосистему умного дома, скорее всего там будет свое собственное закрытое приложение.
Как насчет старого доброго DIY? Давайте сделаем свой собственный умный электросчетчик с подключением к любой платформе, которую захотим. И делать мы это будем максимально мягкими методами, без вскрытия корпуса самого счетчика.
Расскажем, как мы подключили электросчетчик «Меркурий» к ESP32 двумя разными способами (через встроенные интерфейсы RS-485 и оптопорт), соединили по Wi-Fi с платформой Samsung Smart Things и получили возможность записывать статистику энергопотребления в реальном времени чтобы оптимизировать свои траты на электроэнергию.
Зачем нужен умный счетчик
Умный электросчетчик — это, прежде всего, шаг вперед к экономии ваших средств. Ведь чтобы контролировать параметр, сначала нужно начать его измерять. Если вы смотрите на показания счетчика один раз в конце месяца, картина остается непрозрачной.
Другое дело, если вы видите, в какие периоды дня для вас пользоваться электроэнергией выгоднее, и можете подстраиваться под них. Да и просто лишний раз выключить свет становится более интуитивно понятным (и ощутимым в деньгах, особенно если речь идет про лампочки накаливания) действием. Особенно, если вы платите за электричество по двум (день/ночь) или трем (ночь/полупиковая/пиковая зона) тарифам.
Также вы можете последить за своей бытовой техникой и проводкой. Смогут ли ваши старые алюминиевые провода потянуть 16 А, которые возникнут, например, при включенной стиральной машине, посудомойке и чайнике?
И любому человеку, близкому к технике, будет чуточку радостнее от того, что ресурсы распределяются рациональнее и экологичнее. В конце концов, делать свой умный дом просто интересно!
Наше устройство Smart Energy Meter
Работать решили со счетчиками марки Меркурий, поскольку такие устройства являются одними из самых распространенных. Выбрали семейство однофазных многотарифных счетчиков Меркурий-206, обладающих несложной системой команд и интерфейсами для снятия показаний.
Наш микроконтроллер с Wi-Fi-модулем делает из обычного электросчетчика умный. Он подключается к счетчику через проводной интерфейс RS-485 или оптопорт, и далее с помощью Wi-Fi (2.4 ГГц) передает показания силы тока, напряжения, мощности и потребленной энергии по тарифам на облачный сервер системы Samsung SmartThings. В приложении можно посмотреть графики и настроить уведомления.
Структурная схема системы считывания показаний электросчетчика
Главный элемент устройства — плата Lilygo TTGO T1 на базе микроконтроллера Espressif ESP32, обеспечивающая работу управляющей программы и связь через сеть Wi-Fi. Подключение к счетчику через проводной интерфейс RS-485 выполняется с помощью конвертера TTL-RS485, а подключение через оптопорт — с помощью доработанного ИК-датчика линии из любительской робототехники с превращением его в оптический UART, характерный для электросчетчиков. Схема устройства представлена ниже.
Электрическая устройства для считывания показаний электросчетчика
Все компоненты устройства, включая миниатюрный сетевой источник питания, помещены в стандартный корпус для монтажа на DIN-рейку. Если покупать компоненты устройства в розницу, его стоимость не превысит 2500 рублей.
Компоненты устройства для считывания показаний электросчетчика
Так выглядит наш экспериментальный стенд (входной автомат, счетчик, Smart Energy Meter и розетка для нагрузки) при подключении счетчика через RS-485 и оптопорт. Выбор интерфейса выполняется с помощью переключателя на корпусе. Стенд оснащен выходным автоматом и розеткой для подключения нагрузки.
Подключение считывателя показаний электросчетчика через порт RS-485
Подключение считывателя показаний электросчетчика через оптопорт
Итог: система позволяет получать текущие значения тока, напряжения и потребляемой мощности, строить графики зависимости этих величин от времени и анализировать историю потребления энергии по тарифам для большей наглядности.
Программное обеспечение
В качестве платформы умного дома используется Samsung SmartThings. Данные отправляются на платформу через Wi-Fi, в «родном» мобильном приложении отображаются показания счетчика и выдаются уведомления.
Для написания программы Smart Energy Meter использовали SDK for Direct Connected Devices for C для ESP32. Основой программы, использующей Samsung SmartThings SDK, послужил официальный пример switch_example
, описанный в документации, а также статьи на Хабре (про умный выключатель, умный чайник и его продолжение). Как и в этих статьях, наше устройство работает без хаба, таким образом используется прямое подключение (Directly connected) к облаку SmartThings Cloud. Так что для старта работы не нужно ничего, кроме самого устройства.
Полный исходный код разработанной нами программы Smart Energy Meter свободно доступен в репозитории проекта на GitLab.
Выбор платформы не принципиален: при желании вы можете подключиться к той платформе, с которой вы умеете работать. SmartThings — один из возможных вариантов платформы, она бесплатная, открытая, обладает задокументированными API и примерами, поддерживает множество устройств от различных вендоров.
Архитектура SmartThings. Мы использовали вариант Directly Connected (слева посередине)
Как создать прошивку умного счетчика — руководство
Ниже поделимся инструкцией, для всех, кто хочет повторить проект.
Перед написанием программы необходимо создать учетную запись Samsung Developer, в которой создается проект для Direct-connected Device. В процессе конфигурирования проекта в среде Developer Workspace в качестве типа устройства (Device Type) выбираем измеритель мощности (Power Meter), как наиболее подходящий для решения нашей задачи.
Далее добавляем следующие Components & Capabilities:
Voltage Measurement для отображения текущего значения напряжения сети;
Power Meter для отображения текущего значения мощности нагрузки на выходе счетчика;
Energy Meter в количестве 4 штук для отображения значений потребления энергии по 4 тарифам,
и настраиваем отображение значения мощности на виджете устройства в программе SmartThings.
Затем получаем конфигурационные JSON-файлы, необходимые для написания программы и регистрации устройства в мобильном приложении SmartThings — device_info.json
и onboarding_config.json
.
Комментарии к коду
Разберем подробнее код (вы можете посмотреть его в репозитории проекта).
Структурно программу из главного файла main.c можно разделить на две части, реализованные в отдельных потоках:
взаимодействие с SmartThings (
app_main_task
);циклический опрос счетчика (
meter_task)
.
Добавление указанных выше Capabilities требует включения в проект следующих файлов, обеспечивающих отображение напряжения, мощности и показаний по 4 тарифам:
Рассмотрим каждый из потоков программы более подробно.
В потоке app_main_task
выполняется стандартный набор действий для регистрации устройства и его работы в системе SmartThings. Инициализация необходимых нам Capabilities добавлена в функцию capability_init
.
В потоке meter_task
выполняется опрос счетчика через UART независимо от реализации его физического уровня (RS-485 или оптопорт), выводы которого заданы в константах TXD_PIN
и RXD_PIN
. Для взаимодействия со счетчиком через UART нужен его заводской серийный номер, указанный на наклейке и штрих-коде на передней стороне счетчика. В текущей реализации он задается в константе COUNTER_SERIAL
на этапе компиляции, а в перспективе может быть задан пользователем на этапе первичного сопряжения (т.е., прохождения процедуры onboarding) в программе SmartThings в качестве PIN-кода.
Для однофазных счетчиков Меркурий 200, 201, 203 (кроме 203.2TD), 206 доступна официальная документация по протоколу обмена (системе команд). В нашей программе реализованы наиболее употребительные команды для таких счетчиков:
0x27
— чтение содержимого тарифных аккумуляторов активной энергии;0x28
— чтение идентификационных данных счетчика;0x2f
— чтение серийного номера;0x63
— чтение значений U (напряжение), I (ток), P (мощность);0x66
— чтение даты изготовления.
При отправке данных в SmartThings используется только две команды — 0x27
(потребление по тарифам) и 0x63
(напряжение, ток и мощность). В перспективе этот список может быть расширен при добавлении в проект соответствующих Custom Capabilities.
Наиболее кратко работу функций внутри потока meter_task
можно представить в виде следующей последовательности шагов:
функция
prepare_command
подготавливает для счетчика с заданным серийным номером указанную команду вместе с расчетом последних двух байтов контрольной суммы;встроенная функция
uart_write_bytes
отправляет команду в счетчик через UART;встроенная функция
uart_read_bytes
принимает ответ от счетчика через UART в массивbytesReceived
;функция
parse_reply
выполняет проверку контрольной суммы массиваbytesReceived
и далее производит его парсинг для вывода соответствующей информации в терминал и отправки показаний счетчика в SmartThings и их показа в мобильном приложении;выдерживается пауза в 10 секунд, после чего весь процесс повторяется.
Вспомогательными функциями для этого потока являются следующие:
init_uart
— инициализация UART;crc16MODBUS
— расчет контрольной суммы CRC16 по схеме Modbus;bcd2dec
— преобразование BCD в десятичный формат.
Далее программа загружается в плату через USB-кабель стандартным способом с помощью команды python build.py esp32 energy_meter flash
, а ее состояние в любой момент времени может быть оценено путем подключения к терминалу платы — python build.py esp32 energy_meter monitor
. При эксплуатации устройства у пользователя подключение USB-кабеля не требуется.
Первое подключение устройства к приложению SmartThings может быть выполнено двумя способами: поиском устройств поблизости по Wi-Fi или сканированием QR-кода, доступного в папке проекта по пути output/esp32/iotcore_energy_meter_latest/*.png
.
Использование устройства Smart Energy Meter
Наше устройство может работать со счетчиком электрической энергии через два интерфейса на выбор — RS-485 и оптопорт, в зависимости от способа подключения к электросчетчику.
Схема подключения электросчетчика к Smart Energy Meter через интерфейс RS-485
Схема подключения электросчетчика к Smart Energy Meter через оптопорт
Порядок действий пользователя при первом запуске:
Найти свободное место на DIN-рейке для установки Smart Energy Meter.
Отключить входной электрический автомат и подключить провода питания к Smart Energy Meter.
Выбрать интерфейс подключения счетчика и выполнить подключение в соответствии с одним из рисунков — для RS-485 или для оптопорта.
Включить питание входным автоматом.
Убедиться, что на выходе счетчика есть сетевое напряжение и что красный светодиод на Smart Energy Meter загорелся.
Запустить на смартфоне приложение Samsung SmartThings, выполнить поиск Smart Energy Meter и его первичное подключение к сети Wi-Fi.
Наблюдать поступление показаний от счетчика в приложение SmartThings и, при желании, настроить пользовательские сценарии (об этом ниже).
После подключения устройства к приложению Samsung SmartThings пользователю становится доступным виджет устройства.
Виджет устройства в приложении SmartThings на Android
Без дополнительных настроек пользователь может видеть текущие значения показаний электросчетчика: напряжение, мощность нагрузки и потребление энергии по разным тарифам.
Текущие значения показаний электросчетчика в приложении SmartThings на Android
А при нажатии на соответствующие кнопки отображения истории показаний отображаются графики мощности и потребления энергии по тарифам (T1, T2, T3) в зависимости от времени (в течение дня, за день, за неделю, за месяц и т.п.).
История показаний мощности нагрузки электросчетчика в приложении SmartThings на Android
История показаний потребления энергии электросчетчика в приложении SmartThings на Android
Дополнительно пользователь может настроить оповещения (в терминологии приложения SmartThings называемые »сценариями»), связанные с электросчетчиком. На рисунке ниже продемонстрированы следующие оповещения:
Ночной тариф — предупреждает пользователя о начале и окончании действия ночного тарифа на электрическую энергию, позволяет сэкономить и/или оптимизировать потребление электроэнергии, например, включив стиральную машину ночью;
Дневной тариф — предупреждает пользователя о начале и окончании действия дневного тарифа на электрическую энергию, помогая предотвратить переплату за электроэнергию;
Вне дома, потребление >500W — определяет отсутствие пользователя дома и в случае заданного превышения порога потребляемой мощности (например, 500 Вт), выдает предупреждение. Наконец-то можно перестать мучить себя тревогами на тему «а не оставил ли я включенным утюг»!
При желании пользователь может создать и другие оповещения.
Сценарии оповещений электросчетчика в приложении SmartThings на Android
Итог
Все задуманное получилось осуществить: устройство Smart Energy Meter получает данные от электросчетчика и отправляет данные в облачную платформу Samsung SmartThings через Wi-Fi. Это позволяет отслеживать показания напряжения, мощности и потребления электрической энергии по нескольким тарифам в приложении на смартфоне или планшете. Подключение к счетчику реализовано двумя способами — через проводной (RS-485) и оптический интерфейс, являющимися традиционными для счетчиков электрической энергии.
Любой желающий может повторить этот проект или реализовать свой аналогичный, пользуясь свободно распространяемыми исходниками на GitLab под лицензией Apache License 2.0.
Эта статья — продолжение серии обучающих материалов по работе с платформой Samsung SmartThings. Предыдущие статьи цикла:
Об авторах
Устройство было спроектировано студентом лаборатории Интернета Вещей НИУ «МЭИ» Каплинским Андреем Владимировичем и объявлено победителем специальной номинации «Выбор Samsung» в финале пятого ежегодного всероссийского межвузовского конкурса среди выпускников социально-образовательного проекта «Samsung Innovation Campus» в 2022 году (кстати, конкурс 2023 года можно посмотреть здесь, он состоится 26 октября).
Научный руководитель — к.т.н. Стрелков Николай Олегович, руководитель очно-заочной программы магистратуры 11.04.01 Радиотехника (Киберфизические системы и интернет вещей) НИУ «МЭИ».
В проекте Samsung Innovation Campus уже 31 вуз-партнер. Мы приглашаем вузы к сотрудничеству по следующим учебным трекам: «Искусственный интеллект», «Интернет вещей», «Мобильная разработка», «Большие данные».