- Разбираем протокол чайника Redmond G200S и подключаем его к HomeAssistant
- Вступление
- Проблемы и задачи
- Инструменты
- Практика
- Заключение
- Обзор электрического чайника Redmond SkyKettle RK-G211S
- Оглавление
- Характеристики
- Комплектация
- На первый взгляд
- Инструкция
- Управление
- Дистанционное управление по Bluetooth
- Управление со смартфона через гейт
- Эксплуатация
- Наши измерения
- Выводы
Разбираем протокол чайника Redmond G200S и подключаем его к HomeAssistant
Вступление
На Гиктаймс уже была статья, посвященная разбору протокола чайника Redmond SkyKettle. Однако там речь шла о модели RK-M171S, здесь же речь пойдет о более функциональном G200S. В данной модели изменился протокол взаимодействия, из за чего подход автора предыдущей статьи уже не работает, а также появились дополнительные функции ночника и индикации текущей температуры цветом.
В данной статье я приведу результаты разбора протокола с примерами кода на python (если кто захочет разработать свой модуль/приложение для управления чайником). Также в конце статьи ссылка на готовый модуль для подключения чайника к HomeAssistant (это мой первый опыт написания на python после прохождения онлайн-курса, так что данный модуль можно и даже нужно улучшать).
Всем, кому интересно, добро пожаловать под кат.
Проблемы и задачи
У данного чайника есть один большущий минус (кроме тех, что указал автор первой статьи): как только чайник снимаешь с подставки, происходит сброс текущего времени и, как следствие, невозможность использования расписания для кипячения чайника. По задумкам авторов сего творения, каждый раз после возвращения чайника на подставку ты должен запустить их фирменное приложение и синхронизировать чайник со смартфоном. Вот так вместо облегчения рутинных задач «умная» техника дрессирует нас совершать дополнительные действия. Но все изменилось, когда в доме появился HomeAssistant. Тогда я и решил разобраться в протоколе.
Инструменты
Я честно пытался декомпилировать и разобрать оригинальное приложение, но потерпел фиаско. Те инструменты, которые я использовал, не позволили мне понять логику работы чайника. Все процедуры и функции получались «кривыми», безымянными (по типу a, b, c и тд). Возможно, у меня не хватает опыта и умения. В итоге я пошел тем же путем, что и автор предыдущей статьи. Единственное существенное отличие в том, что я использовал интерактивный режим работы утилиты gatttool. Преимущество в том, что данный режим исключает всевозможные «гонки», о которых писал автор первой статьи.
Так как HomeAssistant написан на python, то все дальнейшие команды будем писать на нем. Для использования интерактивного режима работы gatttool на python нам поможет библиотека pexpect, позволяющая порождать сущности сторонних приложений и следить за их выводом (лихо загнул).
Практика
Про общее описание протокола обмена я вновь отправлю к автору первой статьи, поэтому без долгих прелюдий приступим к командам управления.
- Установка и разрыв соединения
Здесь mac — мак адрес чайника.
Подписка на уведомления
После установления соединения перво-наперво нам надо подписаться на получение уведомлений от чайника. Без этого чайник будет воспринимать команды, однако не сможет ничего нам ответить, кроме текстового «Successfully».
Здесь и далее iter — целочисленная итерационная hex переменная от 0 до 64 (от 0 до 100 в десятичной системе). После каждой команды (как успешной, так и неуспешной) эту переменную следует увеличивать на 1, при достижении 64 она вновь сбрасывается на 0; key — hex 8 байт ключ авторизации (например: ffffffffffffffff).
Четвертый байт (01) означает, что чайник авторизовал вас, в противном случае ответ будет 00.
Немного уличной магии
После авторизации всегда отправляется «волшебный» запрос, суть которого мне не ясна. Есть теория, что он нужен для «удержания» состояния connected. Якобы если его не отправлять, то разрыв связи происходит в пределах секунды, и нужно начинать все заново. Если же его отправить, то таймаут существенно увеличивается, доходя до примерно десятка секунд. Достоверно подтвердить это я так и не смог.
Во всех моих экспериментах ответ неизменно был таким.
UPD: в комментариях подсказали, что никакая это не магия, а просто запрос версии ПО, в ответе соответственно именно эта версия и содержится. Таким образом, данный запрос можно вообще убрать за ненадобностью.
Синхронизация
Команда, синхронизирующая время в чайнике с часами сервера. У нее есть еще один эффект. В чайнике есть возможность показывать текущую температуру в режиме простоя миганием светодиода определенного цвета. Эта функция работает только после синхронизации. Описание самой функции см. в пункте 11.
Здесь tmz — часовой пояс в обратном hex формате (например, часовой пояс +3 переводим в секунды, затем в hex формат и получаем hex(3*60*60)=2a30, разбиваем по парам и выводим в обратном порядке 302a). Как быть с отрицательными часовыми поясами я не знаю, не тестировал, но есть подозрение, что за это отвечает следующий за tmz байт. Здесь timeNow — текущее время unixtime в обратном hex формате. Алгоритм такой же: получаем текущее время в секундах, переводим в HEX, разбиваем по парам и выводим строкой в обратном порядке.
Во всех моих экспериментах ответ неизменно был таким.
Статистика
В чайнике есть счетчик затраченной электроэнергии, общее время работы и количество пусков. Если кому то эти данные не нужны, можно смело пропускать данный пункт.
Watts — возвращает затраченную энергию в Вт*ч, alltime — время работы чайника в часах, times — количество запусков чайника. hexToDec — функция перевода в десятичный формат.
Прочесть текущий режим работы
value: 55 04 06 00 00 00 00 01 2a 1e 00 00 00 00 00 00 80 00 00 aa
Четвертый байт — режим работы (mode): 00 — кипячение, 01 — нагрев до температуры, 03 — ночник. Шестой байт — hex температура, до которой нужно нагревать в режиме работы «нагрев», в режиме кипячения равен 00. Девятый байт — hex текущая температура воды (2a=42 по Цельсию). Двенадцатый байт — это состояние чайника: 00 — выключен, 02 — включен. Семнадцатый байт — это продолжительность работы чайника после достижения нужной температуры, по умолчанию равна 80 в hex (видимо, это какие то относительные единицы, точно не секунды).
Записать текущий режим работы
Параметр mode: 00 — кипячение, 01 — нагрев до температуры, 03 — ночник. Параметр temp — hex температура, до которой нужно нагревать в режиме работы «нагрев», в режиме кипячения он равен 00. Параметр howMuchBoil — это продолжительность работы чайника после достижения нужной температуры, по умолчанию равна 80 в hex (видимо, это какие то относительные единицы, точно не секунды).
Четвертый байт ответа показывает успешность настроек: 01 — успешно, 00 — не успешно.
Запустить текущий режим работы
Четвертый байт ответа показывает успешность включения: 01 — успешно, 00 — не успешно.
Остановить текущий режим работы
Четвертый байт ответа показывает успешность выключения: 01 — успешно, 00 — неуспешно.
Отображение текущей температуры цветом в простое
Параметр onoff равен либо 01 — включить функцию, либо 00 — выключить функцию.
Во всех моих экспериментах ответ неизменно был таким.
Записать палитру цветов различных режимов работы
Устанавливается палитра соответствия между цветом светодиода и температурой в режиме отображения текущей температуры и режимах нагрева и кипячения, а также палитра цветов в режиме ночника.
Параметр boilOrLight равен 00, если мы настраиваем режим отображения текущей температуры или 01, если мы настраиваем режим ночника. Параметр scale_from указывает начало диапазона изменения цвета и равен 00 в режиме ночника и 28 в режиме отображения текущей температуры (28 — это 40 в десятичном формате и именно с этой температуры начнется плавное изменение цвета). Параметр scale_mid — это середина диапазона и равен 32 в режиме ночника и 46 в режиме отображения текущей температуры. Параметр scale_to указывает конец диапазона изменения цвета и равен 64 в обоих режимах. Параметр rgb1 — hex цвет начала палитры. Параметр rgb_mid — hex цвет середины палитры (я вычисляю его как середину между левым и правым концом, но теоретически можно задать любой цвет, это повлияет только на красивость и плавность смены цвета). Параметр rgb2 — hex цвет конца палитры. Параметр rand — некий параметр, значение которого я точно не понял, возможно, как то связан с яркостью цвета (примеры значений: e5, cc).
Во всех моих экспериментах ответ неизменно был таким.
Прочесть палитру цветов различных режимов работы
Параметр boilOrLight может быть 00 — если мы настраиваем режим отображения текущей температуры или 01 — если мы настраиваем режим ночника.
value: 55 10 33 01 00 7f 00 00 ff 32 7f 00 ff 00 64 7f ff 00 00 aa
Заключение
Если gatttool не желает подключаться к чайнику (такое возможно при первом подключении к неизвестным устройствам), то попробуйте выполнить поиск чайника средствами os до подключения модуля:
device — id вашего блютус устройства (например, hci0). Убедитесь, что мак адрес вашего чайника есть в списке найденных устройств. После этого:
mac — мак адрес вашего чайника
UPD6: Существенно доработал модуль чайника:
1. Перевел модуль с платформы на режим интеграции
2. После добавления у вас автоматически появится 3 элемента: водный нагреватель (текущая температура, целевая температура, кипячение и нагрев), сенсор (время синхронизации, затрачено энергии, часов работы, количество включений) и свет (можно использовать как ночник и выбирать любой цвет подсветки)
3. теперь модуль доступен на GitHub.
4. Модуль поддерживает установку через HACS
5. Пример конфигурации:
UPD7: Удалил неактуальную информацию
Источник
Обзор электрического чайника Redmond SkyKettle RK-G211S
Оглавление
Электрический чайник — это настолько обычный и простой бытовой прибор, что на него иногда и внимания не обращают: пусть себе кипятит воду, а что он там еще может — нам и знать не хочется. Чайник-светильник Redmond SkyKettle G211S можно использовать попросту, без чинов, пусть себе кипятит и подсвечивает красиво. А можно разобраться и выяснить, какие именно в нем скрыты таланты. Именно этим мы и занялись.
Характеристики
Производитель | Redmond | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Модель | SkyKettle RK-G211S | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Тип | электрический чайник | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Страна производства | Китай | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Гарантия | 1 год | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Срок службы * | 3 года | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Объем | 1,7 л | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Мощность | 1850—2200 Вт | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Защита от поражения током | класс I | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Материал корпуса | термостойкое стекло и пластик | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Автоотключение | есть (при закипании, при отсутствии воды, при снятии с подставки) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Тип управления | электронный | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Дистанционное управление | есть | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Протокол передачи данных | Bluetooth v4.0 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Поддержка на операционных системах | iOS, Android | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Выбор температуры нагрева воды | 40, 55, 70, 85, 100 °C | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Поддержка заданной температуры | есть | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Индикация | светодиодная, звуковая | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Нагревательный элемент | скрытый | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Вращение на подставке | 360° | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Отсек для хранения электрошнура | есть | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Вес | 1 кг | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Габариты (Ш×В×Г) | 218×158×224 мм | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Длина сетевого кабеля | 0,7 м | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Розничные предложения |
Полезный объем | 1,69 л |
---|---|
Полный чайник (1,7 л) воды температурой 20 °C доводится до кипения за | 5 минут 47 секунд |
На что тратится количество электроэнергии, равное | 0,177 кВт·ч |
1 литр воды температурой 20 °C доводится до кипения за | 3 минуты 18 секунд |
На что тратится количество электроэнергии, равное | 0,118 кВт·ч |
Температура корпуса чайника через 3 минуты после закипания | 92 °C |
Максимальная потребляемая мощность при напряжении в сети 220 В | 1983 Вт |
Потребление в состоянии простоя | 0,6 Вт |
Затраты электроэнергии на поддержание температуры 80 °C в течение 1 часа | 0,069 кВт·ч |
Фактическая температура после нагрева до 40 °C | 37 °C |
Фактическая температура после нагрева до 55 °C | 57 °C |
Фактическая температура после нагрева до 70 °C | 73 °C |
Фактическая температура после нагрева до 85 °C | 90 °C |
Температура воды в чайнике через 1 час после кипячения | 69 °C |
Температура воды в чайнике через 2 часа после кипячения | 54 °C |
Температура воды в чайнике через 3 часа после кипячения | 44 °C |
Время выливания полного объема воды штатным способом | 38 секунд с закрытой крышкой, 12 секунд с открытой |
Максимальная зафиксированная нами мощность прибора ниже минимальной заявленной, но несущественно. Слегка превышены показатели по всем предустановленным температурным режимам: превышение больше чем на пять градусов для самого горячего режима — не очень хорошо.
Стекло не термоизолировано, поэтому остывает вода в чайнике достаточно быстро. По той же причине сразу после кипячения о корпус легко можно обжечься. Однако пластиковые детали корпуса нагреваются значительно слабее — до 70 градусов, а ручка вообще остается комнатной температуры.
Также мы провели ряд тестов, которые позволили нам проверить, через какое время чайник достигает нужных температур, если кипятить максимальный объем воды.
t, °C | Время |
---|---|
36 | 1 мин. 06 сек. |
40 | 1 мин. 42 сек. |
50 | 2 мин. 15 сек. |
55 | 2 мин. 39 сек. |
60 | 2 мин. 48 сек. |
70 | 3 мин. 44 сек. |
80 | 4 мин. 23 сек. |
85 | 4 мин. 44 сек. |
90 | 5 мин. 01 сек. |
100 | 5 мин. 47 сек. |
отключение | 5 мин. 47 сек. |
Выводы
Чайник SkyKettle RK-G211S не только умный, но еще и красивый. И если использовать его для подогрева и кипячения воды, в том числе по Bluetooth, он очень хорош. Мы бы назвали его идеальным, потому что пристрастны к чайникам с прозрачным корпусом и подсветкой, но некоторые конструктивные особенности крышки нам мешают.
В части же дополнительных возможностей, связанных с дистанционным заказом продуктов, возможностями подсветки, кипячением на расстоянии и кипячением с помощью персонального помощника Алисы, нужны еще некоторые доработки, чтобы эту модель выбирали именно за эти особенности.
Дистанционное управление с помощью гейта является, несомненно, весьма полезным начинанием, однако в существующем виде вся связка между чайником, смартфоном-гейтом и управляющим смартфоном имеет слишком много тонких мест. В частности, необходимо регулярно возобновлять доступ к приложению для гейта. Ну и инструкция по подключению голосового помощника могла бы быть подробнее.
Источник