Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Можно ли добавить модель km231s #69

Open
sedukindv opened this issue Oct 22, 2024 · 19 comments
Open

Можно ли добавить модель km231s #69

sedukindv opened this issue Oct 22, 2024 · 19 comments

Comments

@sedukindv
Copy link

Добрый день приобрел чайник km231s, есть ли возможность добавить его в интеграцию?

@StarokaznikovOleg
Copy link

Присоединяюсь с вопросом

@Igortool
Copy link

Добрый день. Тоже не могу добавить чайник km231s.
ClusterM - просьба добавить, или его нельзя подключить к этой интеграции?

@Vasecl
Copy link

Vasecl commented Dec 27, 2024

Тоже интересно удалось подключить такой чайник REDMOND SkyKettle KM231S ?

@belolap
Copy link

belolap commented Jan 2, 2025

Тоже счастливый обладатель сего чайника. Поковырял чуть-чуть. Он подключается через WiFi. По MQTT отправляет в просторы интернета примерно такое:

{"type":"boilStarted","boilEnable":true,"warmTemperature":40}
{"type":"stopped","boilEnable":false,"warmTemperature":40}
{"type":"warmTemperatureChanged","boilEnable":false,"warmTemperature":55}
...

Приложение лезет по http в центр управления полётами. Как команды из приложения попадают в чайник пока не расковыривал (с HA познакомился только сегодня).

С учётом того, что данный проект про bluetooth, а чайник про WiFi, то в этом ли репозитории необходимо делать поддержку?

@Vasecl
Copy link

Vasecl commented Jan 2, 2025

Всё-таки наверно нужно развивать тему или может отдельную ветку создать для WiFi устройств этой фирмы . подскажите как его добавить в mqtt или и нструкцию ткните как это делать ?

@belolap
Copy link

belolap commented Jan 2, 2025

Отдельные темы, которые вижу:

  1. Завернуть трафик от чайника из интернета к себе, в свой HA MQTT
  2. Получить все возможные очереди MQTT, команды и значения JSON
  3. Реализовать полученное в своём коде

По первому пункту. Без изменения прошивки чайник будет соединяться с сервером по конкретному адресу. Указан ли он внутри как DNS-имя, прибиты ли айпишники гвоздями, есть ли какая-то другая динамическая логика - предстоит узнать. У себя для экспериментов я завернул на роутере весь исходящий трафик на tcp/8333 (mqtt over ssl). Варианты будут или разгадать динамику, или в а-ля hosts для конкретного имени на своём dns-сервере делать свой айпишник, или dnat, как у меня. Ну или патч прошивки.

По второму надо бы сорудить mqtt прокси, начать подслушивать, понатыкать в чайнике и в родном приложении всего, записать.

@belolap
Copy link

belolap commented Jan 3, 2025

В код HA сейчас не имею возможности погружаться, для меня это целый новый мир. Если кто-то раньше доберётся - будет круто.

Пока накидаю на чём остановился. Кнопки в приложении и в чайнике тыкал несистемно, так что возможно упустил какие-то режимы работы. Если что-то пропущено - говорите.

Описание протокола

Чайник подключается к серверу redmond по протоколу MQTT over SSL. Для этого надо сначала настроить подключение через стандартное приложение. Подключение осуществляется с авторизацией. Логин KETTLE, пароль KM231S (правда неожиданно?).

Чайник подписывается на топики для получения команд, отправляет результат выполнения команд, также в отдельный топик шлёт свои события. Топики:

  • devices/KETTLE/KM231S/<ID>/cmd/<команда>
  • devices/KETTLE/KM231S/<ID>/reply/<команда>
  • devices/KETTLE/KM231S/<ID>/event/<событие>

Здесь <ID> - уникальный идентификатор устройства.

В качестве кодировки тела сообщений используется JSON (мапа).

Команды

Команды отправляются в очередь devices/KETTLE/KM231S/<ID>/cmd/<команда>. В теле сообщения присутствует обязательный параметр commandID, который является числом и служит для идентификации ответов. Ответы от чайника придут в соответствующую очередь devices/KETTLE/KM231S/<ID>/reply/<команда>.

buzzer

Включает или выключает звук у чайника.

Запрос в devices/KETTLE/KM231S/<ID>/cmd/buzzer:

{"commandId":9411542,"isSound":true}
  • isSound - true, если надо звук включить, false - выключить

Ответ из devices/KETTLE/KM231S/<ID>/reply/buzzer:

{"commandId":9411542,"code":0}
  • code - код ответа, содержание неизвестно

readState

Команда на получение состояния чайника.

Запрос в devices/KETTLE/KM231S/<ID>/cmd/readState:

{"commandId":9411068}

Ответ из devices/KETTLE/KM231S/<ID>/reply/readState:

{"commandId":9412009,"program":0,"warmTemperature":80,"isBlocked":false,"isSound":true,"currentTemperature":90,"boilEnable":false,"state":2,"boilingDuration":2,"error":0}
  • program - неизвестно
  • warmTemperature - установленная температура подогрева
  • isBlocked - неизвестно
  • isSound - true - звук у чайника включён
  • currentTemperature - текущая температура
  • boilEnable - true - чайник сейчас нагревается
  • state - число - состояние чайник
    • 0 - ничего не происходит, чайник охлаждается
    • 1 - чайник включён, происходит нагрев
    • 2 - чайник в режиме поддержания температуры
  • boilingDuration - время кипечения воды
  • error - код ошибки, 0 - ошибок нет

setWarmTemperature

Установка температуры для поддержания.

Запрос в devices/KETTLE/KM231S/<ID>/cmd/setWarmTemperature:

{"commandId":9414602,"warmTemperature":90}

warmTemperature - температура для поддержания

Ответ из devices/KETTLE/KM231S/<ID>/reply/setWarmTemperature:

{"commandId":9414602,"code":0}
  • code - код ответа, содержание неизвестно

startBoil

Включить чайник.

Запрос в devices/KETTLE/KM231S/<ID>/cmd/startBoil:

{"commandId":9411106,"boilingDuration":2,"warmTemperature":0}
  • boilingDuration - время кипячения, единицы измерения неизвестны. В приложении чем выше жёсткость воды, тем больше время
  • warmTemperature - температура для поддержания

Ответ из devices/KETTLE/KM231S/<ID>/reply/startBoil:

{"commandId":9411106,"code":0}
  • code - код ответа, содержание неизвестно

stop

Остановка нагрева чайника.

Запрос в devices/KETTLE/KM231S/<ID>/cmd/stop:

{"commandId":9411115}

Ответ из devices/KETTLE/KM231S/<ID>/reply/stop:

{"commandId":9411115,"code":0}
  • code - код ответа, содержание неизвестно

События

События отправляет сам чайник. В теле всегда присутствует параметр type.

connection

Приходит в очередь devices/KETTLE/KM231S/<ID>/event/connection:

{"type":"CONNECT","timestam":"not supported yet"}
  • type - всегда CONNECT
  • timestam - тут нет опечатки, именно без p в конце

workParamChanged

Приходит в очередь devices/KETTLE/KM231S/<ID>/event/workParamChanged:

{"type":"warmTemperatureChanged","boilEnable":false,"warmTemperature":90}
  • type
    • warmTemperatureChanged - изменилась температура воды
    • boilStarted - чайник начал нагреваться
    • stopped - чайник прекратил нагреваться
  • boilEnable - чайник прямо сейчас нагревается
  • warmTemperature - температура поддержания

@sedukindv
Copy link
Author

@belolap Спасибо что разобрал MQTT запросы.

@Inkvi66
Copy link

Inkvi66 commented Jan 20, 2025

По второму надо бы сорудить mqtt прокси, начать подслушивать, понатыкать в чайнике и в родном приложении всего, записать.

@belolap А что именно было сделано?
Трафик от чайника через микрот завернуть не проблема, а вот как будет выглядеть mqtt прокси, я себе слабо представляю.
Ну и да, как я понял там же шифрованный трафик ходит

@dnstkrv
Copy link

dnstkrv commented Jan 24, 2025

как будет выглядеть mqtt прокси

Тоже ничего сложного, вот пример
https://4pda.to/forum/index.php?showtopic=1051392&view=findpost&p=123725639

@dnstkrv
Copy link

dnstkrv commented Jan 27, 2025

Чайник подключается к серверу redmond

Подскажите, пожалуйста, вы узнали домен?

@Inkvi66
Copy link

Inkvi66 commented Jan 27, 2025

Подскажите, пожалуйста, вы узнали домен?

sd-prod-mqtt.redmond.company

@belolap
Copy link

belolap commented Feb 2, 2025

@belolap А что именно было сделано?

@Inkvi66, вопрос как я добыл описание протокола?

@Inkvi66
Copy link

Inkvi66 commented Feb 2, 2025

@Inkvi66, вопрос как я добыл описание протокола?

Это, конечно, тоже, но это просто из интереса.
Я все никак не могу чайник к брокеру подцепить.
Поднимал и древнюю версию москитто как для поларисов (по ссылке выше) и актуальную, и туда и туда прикладывал сертификаты (да, самоподписные), mqttexplorer подключается (tls используется, проверка сертификатов выключена, потому что самоподписные) а чайник - нет.
Точно могу сказать, что чайник ломится куда надо, адрес и порт правильные (смотрю это в списке соединений в микротике) но соединение не устанавливается, просто идут бесконечные запросы.
Что я упускаю?

@belolap
Copy link

belolap commented Feb 7, 2025

@Inkvi66 у меня задача была зареверсить протокол, поэтому я на коленках сделал mqtt прокси. На роутере весь трафик завернул в свой прокси, все запросы форвардил на настоящий сервер. По пути подслушивал.

@vkl62
Copy link

vkl62 commented Mar 3, 2025

А кто как борется с частным маком у чайника? Хотел попробовать завернуть пакеты от чайника в свой mqtt, но при каждом поднятии он сбрасывает частный мак на новый, из-за чего нет возможности его выловить и задать статику, чтоб уже рулить его пакетами

@IASolomin
Copy link

IASolomin commented Mar 4, 2025

Здесь <ID> - уникальный идентификатор устройства.

Добрый день. Нет случайно простого способа узнать ID устройства? Может это часть серийника? Первым шагом можно было бы цепляться на внешний mqtt и управлять через него.

@vkl62
Copy link

vkl62 commented Mar 4, 2025

Здесь <ID> - уникальный идентификатор устройства.

Добрый день. Нет случайно простого способа узнать ID устройства? Может это часть серийника? Первым шагом можно было бы цепляться на внешний mqtt и управлять через него.

Не думаю что у них в открытом доступе будет управление всеми чайниками на внешнем mqtt)

@IASolomin
Copy link

Не думаю что у них в открытом доступе будет управление всеми чайниками на внешнем mqtt)

Полагаю что так оно и есть... а ID наверное тот что при инициализации wifi показывается. Интересно другое - как выше запросы/ответы получили, если для подключения используется TLS? И через mosquitto_sub подключиться не получилось... пишет проверка серта не пройдена...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants