Неофициальная интеграция для домофонной системы D-Keys / S-M-D.
Протокол восстановлен методом реверс-инжиниринга с помощью перехвата HTTPS-трафика через BurpSuite.
Версия оригинального приложения: 5.3.13. Открытой документации по API у производителя нет.
⚠️ Это неофициальная интеграция, созданная путём реверс-инжиниринга, и она всё ещё находится в разработке.
Производитель может в любой момент изменить или отключить используемые эндпоинты без предупреждения — тогда интеграция перестанет работать. Используйте её только со своим собственным аккаунтом и ключами, с учётом условий использования сервиса D-Keys/S-M-D. Ответственность за это лежит на пользователе.
- Авторизация по номеру телефона, как в приложении.
- Вместо SMS-кода сейчас используется дозвон на номер телефона: нужно ввести последние 6 цифр номера, с которого был звонок.
- Автоматическое обнаружение всех ключей (домофонов, шлагбаумов, калиток) на аккаунте.
- Сущность
lock.*для каждого ключа, который поддерживает удалённое открытие (флагmqttвoptions_exist) — вызовlock.unlockоткрывает дверь. - Сущность
sensor.*для всех ключей, включая те, что открываются только звонком или по ссылке, чтобы они тоже были видны в Home Assistant, с атрибутами: адрес, номер помещения, доступные опции и т.д. - Настраиваемый интервал опроса (по умолчанию 300 секунд, через Настроить → Параметры у интеграции).
- Повторная авторизация (
reauth), если токен перестал приниматься сервером.
- Скопируйте папку
custom_components/dkeysв<config>/custom_components/dkeysвашей установки Home Assistant. - Перезапустите Home Assistant.
- Откройте Настройки → Устройства и службы → Добавить интеграцию.
- Найдите D-Keys Intercom.
- Введите номер телефона, привязанный к вашему аккаунту D-Keys, в формате
79XXXXXXXXX. - Дождитесь звонка и введите последние 6 цифр номера, с которого был совершён звонок.
- Готово — появятся сущности
lock.*для ключей с удалённым открытием иsensor.*для всех ключей.
- Откройте HACS → Integrations.
- Добавьте пользовательский репозиторий ic23/dkeys.
- После добавления установите интеграцию D-Keys Intercom через HACS.
- Перезапустите Home Assistant.
- Откройте Настройки → Устройства и службы → Добавить интеграцию.
- Найдите D-Keys Intercom и выполните авторизацию:
- номер телефона в формате
79XXXXXXXXX - последние 6 цифр номера, с которого был звонок
- номер телефона в формате
- После успешной авторизации сущности появятся автоматически.
Основной сервер: https://mde.s-m-d.ru:38257/DKeys_app_3/MAIN.php/
Метод запросов: POST
Тип данных: application/x-www-form-urlencoded
В каждом запросе используется общий набор полей:
action, os, lang, version, token, mobile, versionOS
action=regPhone(с пустымtoken) — сервер инициирует подтверждение номера.- Вместо SMS теперь выполняется звонок на номер телефона, а для подтверждения нужно ввести последние 6 цифр номера, с которого пришёл звонок.
action=sendPin&otp=XXXXXX— возвращает постоянныйtokenвDATA.Token.
action=getKey— возвращает массив ключей с полями:codeKeyNicknameAddressIconColorcodeMPisMasterKeyTypeKeyoptions_exist(например:["mqtt","openLink","openCall","qr", ...])crc
Открытие доступно только если в options_exist есть "mqtt":
-
action=getDataOption&option=mqtt&codeKey=<codeKey>
→DATA.mqtt = {"topicCommand": "smd/<uid>", "openCommand": "cmd1"} -
POST <cmdc-сервер>/itWork
JSON с полями авторизации. Проверка связи, как правило, необязательна, но приложение выполняет её перед открытием. -
POST <cmdc-сервер>/openDoor
JSON вида:{"action":"openDoor","topic":"smd/<uid>","command":"cmd1","uid":"<uid>", ...}
Адрес cmdc-сервера интеграция получает динамически через action=getServers.
Там же возвращаются адреса других внутренних сервисов — видео, изображения иконок и т.д. — они в интеграции не используются.
Все JSON-ответы, даже с Content-Type: text/html, имеют вид:
{"error": false, "critical": "10", "message": "", "warning": "", "DATA": {...}}Интеграция логирует свою работу в стандартный лог Home Assistant через логгер custom_components.dkeys:
- INFO — значимые события: успешная авторизация/переавторизация, запуск/выгрузка интеграции, обнаружение нового ключа или пропажа старого, добавление новых сущностей
lock/sensor, открытие двери (запрос и результат). - WARNING — восстановимые ошибки: API вернул
error:true, сбой опроса (UpdateFailed), неверный код подтверждения. - ERROR — сетевые/таймаут-ошибки, ошибка авторизации, неудачная попытка открыть дверь.
- DEBUG — подробности каждого запроса и ответа к серверу D-Keys, с редактированием токена и номера телефона, а также пошаговый лог последовательности открытия двери (
getDataOption→itWork→openDoor).
Чтобы включить подробные DEBUG-логи, добавьте в configuration.yaml:
logger:
default: warning
logs:
custom_components.dkeys: debugО приватности логов: во всех запросах и ответах к API токен сессии и номер телефона автоматически маскируются перед записью в лог (например, c123*****************12f), так что DEBUG-логи можно прикладывать к багрепорту без риска слить токен доступа.
При этом сами ответы сервера могут содержать другие данные вашего аккаунта — адрес, номер квартиры, никнейм ключа и т.п. — они не маскируются, поэтому перед публичной отправкой лога стоит один раз просмотреть его глазами.
- Состояние
lock— оптимистичное: у домофона нет обратной связи о реальном состоянии замка, поэтому сущность считается «заперта» в покое и на несколько секунд переходит в «отперта» сразу после успешной команды открытия, затем сама возвращается в «заперта». - Ключи без поддержки удалённого открытия (
mqttотсутствует вoptions_exist) не получаютlock-сущность — толькоsensorдля видимости. - Определение «токен истёк» сделано эвристически, по тексту ошибки от сервера, содержащему «пин» или «токен» — при появлении новых кодов ошибок логику стоит уточнить в
api.py. - Не используйте слишком короткий интервал опроса — это чужой бэкенд, и слишком частые запросы могут привести к ограничениям с их стороны.