Nuki Smartlock & Opener

Контроль и мониторинг вашего Smartlock Нуки и Нуки открывалка с ioBroker

Текущий релиз
2.8.2
Разработчик
Zefau, iobroker-community-adapters
Лицензия
MIT

Этот адаптер использует библиотеки Sentry для автоматического сообщения разработчикам об исключениях и ошибках в коде. Для получения более подробной информации и сведений о том, как отключить отправку сообщений об ошибках, см. Документация по плагину Sentry! Отправка сообщений Sentry используется начиная с js-controller 3.0.

Оглавление

  1. Список изменений

Функции

  • Поддержка Nuki Smartlock и Nuki Opener

  • Поддержка как Nuki Bridge API, так и Nuki Web API.

  • Поддержка хешированного токена на аппаратных мостах (см. https://developer.nuki.io/page/nuki-bridge-http-api-190/4#heading--token)

  • В случае сбоя действий, выполняемых через API Nuki Bridge, например, из-за ошибки моста 503 (см. https://developer.nuki.io/t/random-http-503-unavailable/909/85?u=zefau), используется резервный вариант с Nuki Web API.

  • Повторная попытка в случае сбоя действий, выполненных через API Nuki Bridge (если не используется Nuki Web API).

  • Возможность регулярной синхронизации вместо использования обратного вызова API Bridge (который может быть с задержкой из-за аппаратного моста).

  • Обновление всех состояний Nuki Web API при получении обратного вызова через Nuki Bridge API.

  • Получение информации об авторизованных пользователях для Nuki Smartlock и Nuki Opener (см. ниже Каналы и штаты)

  • Получить конфигурацию для Nuki Smartlock и Nuki Opener (см. ниже Каналы и состояния)

  • Получить настройки уведомлений Nuki (см. ниже Каналы и состояния)

  • Веб-интерфейс, отображающий последние события с вашего умного замка Nuki Smartlock и открывателя Nuki Opener:

    Расширенный веб-интерфейс Nuki

Установка

API моста Nuki

Как получить токен аппаратного моста (не работает для программных мостов):

  1. Вызовите http://<bridge_ip>:<bridge_port>/auth из любого браузера в вашей сети. Мост включит свой светодиод.
  2. Нажмите кнопку моста в течение 30 секунд.
  3. Результат вызова браузера должен выглядеть примерно так:
{
   "token":"token123",
   "success":true
}
  1. Используйте сгенерированный токен в адаптере nuki-extended.

Веб-API Nuki

Для использования веб-API Nuki выполните следующие действия:

  1. Получите токен по адресу https://web.nuki.io/de/#/admin/web-api
  2. Используйте этот токен в адаптере nuki-extended.
  3. Убедитесь, что ваши устройства Nuki опубликованы в Nuki Web API (используйте приложение для смартфона через Настройки, выбрав «Активировать Nuki Web»).

Каналы и штаты

Если вам удастся успешно настроить ioBroker.nuki-extended, будут созданы следующие каналы и состояния:

Мосты (с использованием API Nuki Bridge)

Будет создан мост как устройство с именем по шаблону bridge__<name of bridge>. В каждом мосте будут созданы следующие каналы/состояния:

КаналШтатОписание
-_connectedФлаг, указывающий, подключен ли мост к серверу Nuki
-имяНазвание моста / сервера
-bridgeIdID моста/сервера
-bridgeIpIP-адрес моста
-Порт мостаПорт моста
-bridgeTypeТип моста
-hardwareIdИдентификатор аппаратного моста (только для аппаратного моста)
-обновленоОтметка времени последнего обновления
-время работыВремя работы моста в секундах
-versFirmwareВерсия прошивки моста (только для аппаратного моста)
-versWifiВерсия прошивки модулей WiFi (только аппаратный мост)
-versAppВерсия приложения-моста (только программный мост)
Отсылки-Отсылки моста
обратные вызовысписокСписок обратных вызовов
callbacks.callbackId_deleteУдалить обратный вызов
callbacks.callbackIdurlURL обратного вызова

Общая информация

КаналШтатОписание
-соединениеСостояние подключения адаптера
-bridgeApiSyncУказывает, активирована ли синхронизация через Bridge API
-bridgeApiLastВременная метка последней синхронизации Bridge API
-webApiSyncУказывает, активирована ли синхронизация через Web API
-webApiLastВременная метка последней синхронизации Web API
уведомления-Уведомления
notifications.notificationIndex--
notifications.notificationIndex.settings-Настройки уведомлений
notifications.notificationIndex.settings.settingsIndex--
notifications.notificationIndex.settings.settingsIndexauthIdsНабор идентификаторов аутентификации для фильтрации push-уведомлений для определенных пользователей или клавиатур. Если ни одна запись не найдена, push-уведомления не отправляются всем пользователям и клавиатурам.
notifications.notificationIndex.settings.settingsIndexsmartlockIdИдентификатор смарт-замка. Если он не задан, все смарт-замки учетной записи будут получать push-уведомления.
notifications.notificationIndex.settings.settingsIndextriggerEventsНабор событий, при которых должны запускаться push-уведомления: lock, unlock, unlatch, lockngo, open, ring, doorsensor, warnings, smartlock
notifications.notificationIndexlanguageЯзык push-уведомлений
notifications.notificationIndexlastActiveDateДата последней активности
notifications.notificationIndexnotificationIdУникальный идентификатор уведомления
notifications.notificationIndexosОперационная система
{"0": 'Android', "1": 'iOS', "2": 'Webhook'}
notifications.notificationIndexpushIdИдентификатор push-уведомления или URL POST-запроса для веб-перехватчика
notifications.notificationIndexreferenceIdИдентификатор ссылки, идентификатор для идентификации внешней системы
notifications.notificationIndexstatusТекущее состояние активации
{"0": 'INIT', "1": 'ACTIVE', "2": 'FAILED'}
notifications.notificationIndexstatusТекущее состояние активации
{"0": 'INIT', "1": 'ACTIVE', "2": 'FAILED'}

Умные замки и открыватели (с использованием API Nuki Bridge)

Будет создан замок как устройство с именем, заданным шаблоном door__<name of door>. В каждом замке (при использовании API Nuki Bridge) будут созданы следующие каналы/состояния:

КаналШтатОписание
-_ДЕЙСТВИЕЗапустить действие на замке
-idID Нуки
-имяИмя Нуки
-типТип устройства
-bridgeIdИдентификатор моста Nuki
статус-Текущий статус блокировки
статусbatteryCritical**Сообщает о критическом уровне заряда батареи
статуссостояние блокировки**Текущее состояние блокировки Nuki
статусзаблокировано**Индикация, если дверь заблокирована
статусобновлено**Отметка времени последнего обновления

Помеченные состояния будут обновляться в действии Nuki, если установлен обратный вызов.

Умные замки и открыватели (с использованием Nuki Web API)

Будет создан замок как устройство с именем, заданным шаблоном door__<name of door>. В каждом замке (при использовании Nuki Web API) будут созданы следующие каналы/состояния:

КаналСостояниеОписание (возможные значения)
-_ДЕЙСТВИЕЗапустить действие на замке
-idID Нуки
-имяИмя Нуки
-типТип устройства
-журналыЖурналы / История Нуки
-bridgeIdИдентификатор моста Nuki

Информация

КаналСостояниеОписание (возможные значения)
информация-Дополнительная информация
информацияaccountIdИдентификатор учетной записи
infoauthIdИдентификатор авторизации
информацияизбранноеИзбранный флаг
информацияверсия прошивкиВерсия прошивки
информацияверсия оборудованияВерсия оборудования
информацияoperationIdИдентификатор операции - если задан, устройство блокируется для выполнения другой операции
infoserverStateСостояние сервера
{"0": 'OK', "1": 'UNREGISTERED', "2": 'AUTH UUID INVALID', "3": 'AUTH INVALID', "4": 'OFFLINE'}
infoadminPinStateСостояние PIN-кода администратора
{"0": 'OK', "1": 'MISSING', "2": 'INVALID'}
информацияvirtualDeviceФлаг, указывающий на виртуальный «умный замок»
информациядата созданияДата создания
информациядата обновленияДата обновления

Состояние

КаналСостояниеОписание (возможные значения)
состояние-Текущий статус блокировки
состояниекритический уровень заряда батареиСостояние критического уровня заряда батареи
состояниезакрытоИндикация, закрыта ли дверь (логическое значение параметра doorState)
состояниесостояние двериТекущее состояние двери Нуки
состояниепоследнее действиеПоследнее сработавшее действие
состояниесостояние блокировкиТекущее состояние блокировки Nuki
состояниезаблокированоИндикация, если дверь заблокирована
состояниережимРежим умного замка
{"0": 'UNINITIALIZED', "1": 'PAIRING', "2": 'NORMAL', "3": 'UNKNOWN', "4": 'MAINTENANCE'}
состояниеringToOpenTimerОставшееся время до открытия звонка
состояниетриггерТриггер состояния
{"0": 'SYSTEM', "1": 'MANUAL', "2": 'BUTTON', "3": 'AUTOMATIC', "4": 'WEB', "5": 'APP'}
состояниетриггерТриггер состояния
{"0": 'СИСТЕМА', "1": 'РУЧНОЙ', "2": 'КНОПКА', "3": 'АВТОМАТИЧЕСКИЙ', "4": 'ВЕБ', "5": 'ПРИЛОЖЕНИЕ'}

Общая конфигурация

КаналСостояниеОписание (возможные значения)
конфигурация-Конфигурация
configadvertisingModeРекламный режим (экономия заряда батареи)
{"0": 'AUTOMATIC', "1": 'NORMAL', "2": 'SLOW', "3": 'SLOWEST'}
configautoUnlatchTrue, если дверь должна отпираться при разблокировке (ручкой)
configbuttonEnabledTrue, если кнопка на смарт-замке включена
конфигурациявозможностиВозможности указывают, можно ли открыть дверь через приложение, RTO или обоими способами
configfobAction1Действие брелока при однократном нажатии кнопки
{"0": 'NONE', "1": 'UNLOCK', "2": 'LOCK', "3": 'LOCK_N_GO', "4": 'INTELLIGENT'}
configfobAction2Действие брелока при двойном нажатии кнопки
{"0": 'NONE', "1": 'UNLOCK', "2": 'LOCK', "3": 'LOCK_N_GO', "4": 'INTELLIGENT'}
configfobAction3Действие брелока при нажатии кнопки 3 раза
{"0": 'NONE', "1": 'UNLOCK', "2": 'LOCK', "3": 'LOCK_N_GO', "4": 'INTELLIGENT'}
configfobAction3Действие брелока при нажатии кнопки 3 раза
{"0": 'НЕТ', "1": 'РАЗБЛОКИРОВАТЬ', "2": 'ЗАБЛОКИРОВАТЬ', "3": 'ЗАБЛОКИРОВАТЬ_N_GO', "4": 'ИНТЕЛЛЕКТУАЛЬНЫЙ'}
configfobPairedTrue, если брелок сопряжен со смарт-замком
конфигурацияgpsLatitudeШирота
confighomekitStateСостояние HomeKit
{"0": 'UNAVAILABLE', "1": 'DISABLED', "2": 'ENABLED', "3": 'ENABLED & PAIRED'}
confighomekitStateСостояние HomeKit
{"0": 'НЕДОСТУПНО', "1": 'ОТКЛЮЧЕНО', "2": 'ВКЛЮЧЕНО', "3": 'ВКЛЮЧЕНО И СОПРЯЖЕНО'}
configkeypadPairedTrue, если клавиатура сопряжена со смарт-замком
configledBrightnessЯркость светодиода: от 0 (выкл.) до 5 (макс.)
configledEnabledTrue, если светодиод на умном замке включен
конфигурацияимяНазвание умного замка для новых пользователей
configoperatingModeРежим работы открывателя
configpairingEnabledTrue, если сопряжение разрешено через кнопку смарт-замка
configsingleLockTrue, если умный замок должен блокироваться только один раз (вместо двух)
configtimezoneIdИдентификатор часового пояса
configtimezoneOffsetСмещение часового пояса (в минутах)

Расширенные настройки

КаналСостояниеОписание (возможные значения)
advancedConfig-Расширенная конфигурация
advancedConfigautoLockTimeoutКоличество секунд, в течение которых умный замок автоматически заблокируется после разблокировки. Автоматическая блокировка не выполняется, если значение равно 0.
advancedConfigautomaticBatteryTypeDetectionФлаг, указывающий, включено ли автоматическое определение типа батареи
advancedConfigbatteryTypeТип батарей, установленных в умном замке
{"0": 'ALKALI', "1": 'ACCUMULATOR', "2": 'LITHIUM'}
advancedConfigdoubleButtonPressActionЖелаемое действие при двойном нажатии кнопки
{"0": "NO_ACTION", "1": "INTELLIGENT", "2": "UNLOCK", "3": "LOCK", "4": "UNLATCH", "5": "LOCK_N_GO", "6": "SHOW_STATUS"}
advancedConfigdoubleButtonPressActionЖелаемое действие при двойном нажатии кнопки
{"0": "NO_ACTION", "1": "INTELLIGENT", "2": "UNLOCK", "3": "LOCK", "4": "UNLATCH", "5": "LOCK_N_GO", "6": "SHOW_STATUS"}
advancedConfiglngTimeoutВремя ожидания в секундах для функции lock ‘n’ go
advancedConfigsingleButtonPressActionЖелаемое действие при однократном нажатии кнопки
{"0": "NO_ACTION", "1": "INTELLIGENT", "2": "UNLOCK", "3": "LOCK", "4": "UNLATCH", "5": "LOCK_N_GO", "6": "SHOW_STATUS"}
advancedConfigsingleButtonPressActionЖелаемое действие при однократном нажатии кнопки
{"0": "NO_ACTION", "1": "INTELLIGENT", "2": "UNLOCK", "3": "LOCK", "4": "UNLATCH", "5": "LOCK_N_GO", "6": "SHOW_STATUS"}
advancedConfigsingleLockedPositionOffsetDegreesСмещение, изменяющее единственное заблокированное положение
advancedConfigtotalDegreesАбсолютное суммарное положение в градусах, достигнутое во время калибровки
advancedConfigunlatchDurationПродолжительность в секундах удержания защелки в незащелкнутом положении
advancedConfigunlockedPositionOffsetDegreesСмещение, изменяющее разблокированное положение
advancedConfigunlockedToLockedTransitionOffsetDegreesСмещение, изменяющее положение, в котором происходит переход из разблокированного состояния в заблокированное

Расширенные настройки открывателя

КаналСостояниеОписание (возможные значения)
openerAdvancedConfig-Конфигурация открывателя
openerAdvancedConfigintercomIdИдентификатор подключенного домофона в базе данных
openerAdvancedConfigbusModeSwitchМетод переключения между режимами передачи данных и аналоговым режимом
{"0": 'DATA MODE', "1": 'ANALOGUE MODE'}
openerAdvancedConfigshortCircuitDurationДлительность короткого замыкания при переключении режима шины в мс
openerAdvancedConfigelectricStrikeDelayЗадержка срабатывания электромагнитного затвора в мс (после действия блокировки 3 - срабатывание электромагнитного затвора-)
openerAdvancedConfigrandomElectricStrikeDelayСлучайная задержка срабатывания электрозатвора (диапазон 3000-7000 мс) для имитации присутствия человека внутри, приводящего в действие электрозатвор
openerAdvancedConfigelectricStrikeDurationДлительность срабатывания электромагнитного затвора в мс (действие замка 3 - срабатывание электромагнитного затвора-)
openerAdvancedConfigdisableRtoAfterRingФлаг для отключения RTO после звонка
openerAdvancedConfigdoorbellSuppressionРежим подавления дверного звонка
{"0": 'NEVER', "1": 'ALWAYS', "2": 'RTO', "3": 'CONTINUOUS', "4": 'CONTINUOUS + RTO'}
openerAdvancedConfigdoorbellSuppressionРежим подавления дверного звонка
{"0": 'НИКОГДА', "1": 'ВСЕГДА', "2": 'RTO', "3": 'НЕПРЕРЫВНО', "4": 'НЕПРЕРЫВНО + RTO'}
openerAdvancedConfigdoorbellSuppressionDurationДлительность подавления звонка в мс (только в режиме работы 2 - цифровой домофон)
openerAdvancedConfigsoundRingЗвук для звонка
openerAdvancedConfigsoundOpenЗвук открытия
openerAdvancedConfigsoundRtoЗвук для RTO
openerAdvancedConfigsoundCmЗвук для CM
openerAdvancedConfigsoundConfirmationПодтверждение звука
openerAdvancedConfigsoundLevelУровень звука
openerAdvancedConfigsingleButtonPressActionЖелаемое действие при однократном нажатии кнопки
openerAdvancedConfigbatteryTypeТип батарей, используемых в умном замке
{"0": 'ALKALI', "1": 'ACCUMULATOR', "2": 'LITHIUM'}
openerAdvancedConfigbatteryTypeТип батарей, установленных в умном замке
{"0": 'ЩЕЛОЧНЫЕ', "1": 'АККУМУЛЯТОР', "2": 'ЛИТИЕ'}
openerAdvancedConfigautomaticBatteryTypeDetectionФлаг, указывающий, включено ли автоматическое определение типа батареи
openerAdvancedConfigoperationIdИдентификатор операции - если заданное устройство заблокировано для другой операции

Пользователи

КаналСостояниеОписание (возможные значения)
пользователи-Пользователи блокировки
users.userName-User userName
users.userNameallowedFromDateДата начала действия разрешения
users.userNameallowedUntilDateДата, до которой разрешено использование
users.userNameallowedWeekDaysРазрешенные дни недели
{64: 'Monday', 32: 'Tuesday', 16: 'Wednesday', 8: 'Thursday', 4: 'Friday', 2: 'Saturday', 1: 'Sunday'}
users.userNameallowedFromTimeВремя, с которого разрешено использование (в минутах от полуночи)
users.userNameallowedUntilTimeРазрешенное время до (в минутах от полуночи)
users.userNameauthIdИдентификатор авторизации смарт-замка
users.userNamedateCreatedДата создания
users.userNamedateUpdatedДата обновления
users.userNamedateLastActiveДата последней активности
users.userNameenabledTrue, если пользователь включен
users.userNameidУникальный идентификатор пользователя
users.userNamelockCountКоличество блокировок
users.userNamenameИмя пользователя
users.userNameremoteAllowedTrue, если у пользователя есть удаленный доступ
users.userNametypeТип авторизации
{"0": 'APP', "1": 'BRIDGE', "2": 'FOB', "3": 'KEYPAD', "13": 'KEYPAD CODE', "14": 'Z-KEY', "15": 'VIRTUAL'}
users.userNametypeТип авторизации
{"0": 'APP', "1": 'BRIDGE', "2": 'FOB', "3": 'KEYPAD', "13": 'KEYPAD CODE', "14": 'Z-KEY', "15": 'VIRTUAL'}

Интеграция умного дома и Alexa с использованием ioBroker.javascript

Несколько примеров возможной интеграции в вашу систему «умного дома».

Закройте дверь в 22:00.

var states = {
    "0": "uncalibrated",
    "1": "locked",
    "2": "unlocking",
    "3": "unlocked",
    "4": "locking",
    "5": "unlatched",
    "6": "unlocked (lock n go)",
    "7": "unlatching",
    "254": "motor blocked",
    "255": "undefined"
};

schedule('0 22 * * *', function()
{
    var status = (getState('nuki-extended.0.smartlocks.home_door.state.lockState').val);
    var msg = 'Main Door door is ' + (states[status]) + '. ';

    if (status == '3')
    {
        setState('nuki-extended.0.smartlocks.home_door._ACTION', 2);
        msg += 'Locking door..'
    }
    else
        msg += 'No action taken.'

    log(msg, {m: 'Nuki', o: ['msg']});
});

Замените nuki-extended.0.door__home_door.status.lockState на значение lockState вашего замка!__ Вы также можете настроить сообщение с помощью msg.

Пусть Alexa сообщит вам об изменении настроек замка

Для этого требуется адаптер ioBroker ioBroker.alexa2 (https://github.com/Apollon77/ioBroker.alexa2).

Для использования голосового вывода Alexa мы определяем функцию say. Поместите следующую функцию в скрипт в папке "global" файла ioBroker.javascript. ВАЖНО: Замените #ВАШ ИДЕНТИФИКАТОР ALEXA# (также замените #) на ваш идентификатор Alexa. Вы можете найти идентификатор Alexa в дереве объектов ioBroker alexa2.0.Echo-Devices.

/**
 * Say something with Alexa.
 *
 * @param       {string}        message         Message to say
 * @param       {string|array}  alexas          Alexa Device to say the voice message
 * @return      void
 *
 */
function say(message, alexas = '#YOUR ALEXA ID#') // use alexas = ['#YOUR ALEXA ID 1#', '#YOUR ALEXA ID 2#'] for default voice output from multiple devices (also replace #)
{
    alexas = typeof alexas === 'string' ? [alexas] : alexas;
    alexas.forEach(function(alexa)
    {
        setState('alexa2.0.Echo-Devices.' + alexa + '.Commands.speak', message);
    });
}

Вы можете использовать эту функцию в файле ioBroker.javascript, чтобы произнести фразу с помощью Alexa say('Hello World') или say('Hello World', ['#YOUR ALEXA ID 1#', '#YOUR ALEXA ID 2#']) для голосового вывода с нескольких устройств.

Создайте скрипт в папке "common" файла ioBroker.javascript и добавьте к нему следующий обработчик событий. ВАЖНО: Замените #LOCK STATE ID# (также замените #) на состояние, содержащее статус блокировки (например, nuki-extended.0.door__home_door.status.lockState):

const DOOR_STATES = {
    "0": "uncalibrated",
    "1": "locked",
    "2": "unlocking",
    "3": "unlocked",
    "4": "locking",
    "5": "unlatched",
    "6": "unlocked (lock n go)",
    "7": "unlatching",
    "254": "motor blocked",
    "255": "undefined"
};

/*
 * LISTEN TO CHANGES TO LOCK STATE
 *
 */
on({id: 'nuki-extended.0.smartlocks.home_door.state.lockState', change: 'any'}, function(obj)
{
    if (obj !== undefined && obj.state !== undefined)
      say('Door is ' + DOOR_STATES[obj.state.val] + '!')
});

Пусть Telegram информирует вас об изменениях в блокировке

Для этого требуется адаптер ioBroker ioBroker.telegram (https://github.com/iobroker-community-adapters/ioBroker.telegram).

Для использования вывода сообщений Telegram мы определяем функции msg и messenger. Поместите следующую функцию в скрипт в папке "global" файла ioBroker.javascript:

/**
 * Send something via telegram.
 *
 * @param       {string}        message         Message to print
 * @param       {string|array}  receiver        Users to send the message to
 * @return      void
 *
 */
function msg(message, receiver = 'ALL')
{
    if (receiver == 'ALL')
        messenger(message);

    else
    {
        receiver = typeof receiver == 'string' ? [receiver] : receiver;
        receiver.forEach(function(user)
        {
            messenger(message, user);
        });
    }
}
/**
 * Sends a message / text.
 *
 * @param   {string}            content         Message to send
 * @param   {string}            user            (optional) Specific user to send the message to (defaults to all registered users)
 * @return  void
 *
 */
function messenger(content, user = '')
{
    var config = {
        text: content,
        parse_mode: 'HTML',
        reply_markup: {
            resize_keyboard: true,
            one_time_keyboard: false
        }
    };

    sendTo('telegram', user ? Object.assign({user: user}, config) : config);
}

Вы можете использовать эту функцию в файле ioBroker.javascript для отправки чего угодно в Telegram через msg('Hello World') (всем пользователям) или msg('Hello World', 'Zefau') (конкретным пользователям).

Создайте скрипт в папке "common" файла ioBroker.javascript и добавьте к нему следующий обработчик событий. ВАЖНО: Замените #LOCK STATE ID# (также замените #) на состояние, содержащее статус блокировки (например, nuki-extended.0.door__home_door.status.lockState):

const DOOR_STATES = {
    "0": "uncalibrated",
    "1": "locked",
    "2": "unlocking",
    "3": "unlocked",
    "4": "locking",
    "5": "unlatched",
    "6": "unlocked (lock n go)",
    "7": "unlatching",
    "254": "motor blocked",
    "255": "undefined"
};

/*
 * LISTEN TO CHANGES TO LOCK STATE
 *
 */
on({id: 'nuki-extended.0.smartlocks.home_door.state.lockState', change: 'any'}, function(obj)
{
    if (obj !== undefined && obj.state !== undefined)
      msg('Door is ' + DOOR_STATES[obj.state.val] + '!')
});

ПРИМЕЧАНИЕ: Если вы используете скрипты Alexa и Telegram, вы можете определить только один слушатель для каждого действия:

const DOOR_STATES = {
    "0": "uncalibrated",
    "1": "locked",
    "2": "unlocking",
    "3": "unlocked",
    "4": "locking",
    "5": "unlatched",
    "6": "unlocked (lock n go)",
    "7": "unlatching",
    "254": "motor blocked",
    "255": "undefined"
};

/*
 * LISTEN TO CHANGES TO LOCK STATE
 *
 */
on({id: 'nuki-extended.0.smartlocks.home_door.state.lockState', change: 'any'}, function(obj)
{
    if (obj !== undefined && obj.state !== undefined)
    {
      say('Door is ' + DOOR_STATES[obj.state.val] + '!')
      msg('Door is ' + DOOR_STATES[obj.state.val] + '!')
    }
});

Пусть Telegram и Alexa сообщат вам о звонке через функцию «Открыть».

Для этого необходимы адаптеры ioBroker ioBroker.telegram (https://github.com/iobroker-community-adapters/ioBroker.telegram) и ioBroker.alexa2 (https://github.com/Apollon77/ioBroker.alexa2).

/*
 * Alexa and Telegram to notify on Opener Ringing state
 *
 */
let phrase = 'Somebody is ringing the doorbell.'; // Es hat an der Tür geklingelt
on({id: 'nuki-extended.0.openers.opener.state.ringStateUpdate', change: "any", ack: true}, function (s) {
  let state= s && s.state;

  if (state.val === true) {
    setState("alexa2.0.Echo-Devices.#YOUR ALEXA ID#.Commands.speak"/*speak*/, phrase);
    sendTo("telegram", "send", { text: phrase });
  }
});

Changelog

Please see release page for changelog and detailed information.

2.8.2 (2026-05-14)

  • (mcm1957) Missing translations have been added.
  • (mcm1957) Dependencies have been updated

2.8.1 (2026-05-13)

  • (copilot) Migrated linting setup to ESLint 9 with the shared @iobroker/eslint-config.
  • (copilot) Resolved ESLint error findings in adapter core files and aligned linting ignores for legacy frontend scripts.

2.8.0 (2026-05-13)

  • (copilot) Adapter requires node.js >= 22 now
  • (copilot) Adapter requires admin >= 7.7.22 now
  • (copilot) Adapter requires js-controller >= 6.0.11 now
  • (VierlingMt) Adding Nuki Smartlock 4.X and Pro Support, "toLowerCase" error fixed
  • (sbormann) Added deviceType 5 and fixed empty type variable
  • (mcm1957) Dependencies have been updated

2.7.0 (2024-04-21)

  • (mcm1957) Adapter requires node.js 18 and js-controller >= 5 now
  • (mcm1957) Dependencies have been updated

2.6.5 (2022-06-17)

  • (Apollon77) Fix some crash cases reported by Sentry

License

The MIT License (MIT)

Copyright (c) 2024-2026 iobroker-community-adapters iobroker-community-adapters@gmx.de
Copyright (c) 2019-2022 Zefau zefau@mailbox.org

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.