Привет! Я Даша, я люблю паять и программировать микроконтроллеры)))
Недавно из ЕС пришел заказ на разработку прототипа устройства умного дома, где одним из основных функциональных требований было push‑уведомление на телефон в случае срабатывания датчиков. Писать приложение для данного вида девайса не было смысла, и заказчик выразил желание интегрироваться в экосистему Tuya и отслеживать состояние устройства и получать уведомления с помощью Smart Life.
В поисках способов как быстро интегрироваться с Tuya, я нашла open‑source решение TuyaOpen. Гайдов по нему я не нашла, поэтому решила поделиться им здесь, вдруг кому будет полезно:)
Что такое TuyaOpen
TuyaOpen — открытый SDK от Tuya для ESP32 и не только, работает поверх ESP‑IDF. Плата с ним сама подключается к облаку Tuya и сопрягается с приложением по Bluetooth.
Всё, что обычно пишут руками, уже есть:
приложение под Android и iOS — это Smart Life;
экран устройства строится сам по списку функций;
push‑уведомления рассылает облако по указанным правилам в админке платформы.
От нас нужны три вещи: продукт на платформе, лицензия в плате и прошивка, которая отправляет значения функций.
Танцы с аккаунтами и лицензиями
Аккаунт Tuya привязывается к дата‑центру по стране, которую вы выбрали при регистрации, и поменять её потом нельзя. Посмотреть списки можно здесь:
таблица «страна → дата‑центр» в документации Tuya;
список стран и регионов, где приложение не поддерживается, в базе знаний поддержки.
Аккаунт на платформе и аккаунт в Smart Life должны попадать в один дата‑центр, иначе платформа не увидит наше устройство.
Важное замечание: мне удалось даже бесплатные лицензии скачать только с аккаунта, где мы были зарегистрированы как организация (не как individual developer) и привязаны счета банков ЕС, ну то есть уже продакшн аккаунт заказчика. Там есть механизм верификации аккаунта, и он как раз делается через счет в банке. Через individual developer это проверить не удалось, так как из‑за ограничений мы не можем использовать свои счета в РФ.
Продукт и функции
На platform.tuya.com создаём продукт. Категория подойдёт любая, у меня Others — Custom, протокол Wi‑Fi + Bluetooth.
Дальше описываем функции устройства. В Tuya они называются DP, data point:
К примеру, простейшая функция alert для уведомлений

Идентификатор |
Тип |
Значения |
|---|---|---|
|
Enum |
|
После этого копируем PID продукта, он понадобится в прошивке.
Лицензия
Лицензия — это пара UUID и AuthKey, одна на каждое устройство. Две штуки дают бесплатно по официальной инструкции, остальные лицензии платные. В продукте выбираем модуль T5, нажимаем Add Custom Firmware, загружаем любой файл‑пустышку и забираем коды авторизации.

PS: Скачается xlsx файл с двумя строками. Чтобы лицензия скачалась, нужно набраться терпения, она это делает долго (проверьте, чтобы VPN не был включен на момент формирования ссылки на скачивание).
Прошивка
Сама прошивка делается уже не через привычные нам PlatformIO/Arduino IDE, а через SDK TuyaOpen.
Ставим SDK и собираем:
git clone https://github.com/tuya/TuyaOpen ~/TuyaOpen cd ~/TuyaOpen && . ./export.sh cd ~/мой_проект/firmware tos.py config choice tos.py build tos.py flash
export.sh — включает окружение, в первый раз сам ставит зависимости;
tos.py config choice — выбор платы.
За основу можно взять пример switch_demo из SDK. Подключаем продукт и лицензию:
tuya_iot_init(&client, &(const tuya_iot_config_t){ .software_ver = PROJECT_VERSION, .productkey = TUYA_PRODUCT_ID, .uuid = license.uuid, .authkey = license.authkey, .event_handler = user_event_handler_on, .network_check = user_network_check, });
user_event_handler_on — функция для обработки событий Tuya(TUYA_EVENT_BIND_START — начало сопряжения, TUYA_EVENT_ACTIVATE_SUCCESSED — успешное сопряжение. и т.д)
TUYA_PRODUCT_ID — PID с платформы, который мы копировали ранее;
license.uuid и license.authkey — лицензия.
Разрешаем сопряжение и запускаем:
netmgr_init(NETCONN_WIFI); netmgr_conn_set(NETCONN_WIFI, NETCONN_CMD_NETCFG, &(netcfg_args_t){.type = NETCFG_TUYA_BLE | NETCFG_TUYA_WIFI_AP}); tuya_iot_start(&client); for (;;) { tuya_iot_yield(&client); }
И главное — отправка значения функции:
dp_obj_t dp = {.id = 101, .type = PROP_ENUM, .value = {.dp_enum = level}}; tuya_iot_dp_obj_report(&client, NULL, &dp, 1, 0);
id — номер функции (DP ID) на платформе, у alert это 101;
level — номер значения Enum: 0, 1 или 2. В облако уходит именно номер, поэтому порядок значений в прошивке и на платформе должен совпадать.
Датчики лучше держатть в отдельном потоке, а тоtuya_iot_yield() может долго обрабатываться.
Прошиваем плату и включаем режим сопряжения, у меня это удержание кнопки 5 секунд. В Smart Life нажимаем «Добавить устройство». Приложение находит плату по Bluetooth. Вводим пароль Wi‑Fi. Устройство определяется приложением довольно быстро.
Быстрые пуши
Прошивка уведомления не отправляет, вместо этого она сообщает новое значение функции облаку, а оно в свою очередь уже и рассылает уведомление по правилу. Настройка занимает пару минут.

На странице продукта во вкладке Product Configuration находим Device Notification.

battery_state = low» Нажимаем Create Notification, конфигурируем как нам нужно. Здесь существует 3 вида нотификаций, которые в списке устройств приложение помечает каждый своим цветом:
Notify: обычное информационное уведомление.
Slight: предупреждение средней важности.
Serious: важная тревога.
Так же на платформе есть разные виды уведомлений:
Message Center: уведомление только попадает в историю сообщений в приложении, на экран телефона не всплывает.
Push Notification and Message Center: всплывающий пуш на телефон плюс запись в истории; это ваш вариант.
LINE Push: сообщение уходит в мессенджер LINE.

Ждём статус Delivering. У меня он появился сразу. Дальше можно дергать датчики и проверять на телефоне.
Они у меня заработали сразу.
ЗЫ: дада, сразу, только главное не перепутать id продуктов как я сделала в первый раз и ждала такая когда‑же, когда!?
Вывод
Чтобы устройство умного дома присылало уведомления на телефон, писать мобильное приложение не обязательно. Приложение, экран устройства и рассылку пушей берет на себя Tuya, а нам остаются прошивка и пара настроек на платформе.
У такого решения есть цена. Прошивку придется писать на SDK TuyaOpen вместо привычного Arduino. Две лицензии бесплатные, а дальше за каждое устройство нужно платить. И с аккаунтами придется повозиться, особенно из РФ.
Если заказчик уже пользуется Smart Life или нужен быстрый прототип с пушами, то это хороший способ не тратить время на приложение:)