Перейти к основному содержимому

Legrand Netatmo Home Control

Legrand Netatmo Home Control - модуль для работы с оборудованием Legrand Netatmo (умные розетки, обогреватели, диммеры и др.).

документация обновлена 01.01.2024

Важно

C 01.09.22 поддержка Legrand Netatmo Home Control приостановлена. Навык отозван, в связи со сменой API у производителя Legrand.

Legrand Netatmo Home Control - модуль, разработанный для работы с оборудованием Legrand Netatmo (умные розетки, обогреватели, диммеры и др.). Данный модуль можно встроить в проект и управлять оборудованием из приложения i3pro на панели управления (iOS, Android, Windows, Mac).

Требуется лицензия:*

Подключение​

Модуль работает по HTTP протоколу. Статус онлайн приобретает только во время передачи данных, в остальное время статус всегда офлайн. Для подключения к оборудованию необходимо:

  1. Скачать приложение Home+Control в Play Market или App Store;

  2. В приложении Home+Control добавить и настроить необходимые устройства;

  3. Настроить модуль и добавить в проект необходимые команды и фидбеки.

Интеграция модуля в проект​

Мы подготовили специальный панельный проект, с помощью которого можно узнать все добавленные в приложении устройства и необходимые команды и фидбеки к ним. Для добавления модуля в ваш проект достаточно совместить вкладки проектов и подтвердить слияние.

LegrandNetatmo4.png

Модуль содержит в себе (основные элементы):

  • Java Script:
    • "Driver" - в этом скрипте прописана основная логика модуля (не требует изменений);
    • Script 1 - скрипт с примерами функций для дополнительной логики проекта (все пояснения к драйверу указаны в комментариях скрипта).
  • Devices: Office (имя дома) - пример драйвера с командами и фидбэками для управления оборудования. Его можно удалить после импорта устройств из json файла. Так же в добавленный импортом файл можно добавить дополнительные команды и фидбэки из таблицы . Auth - драйвер, отвечающий за авторизацию на облаке производителя.

Получение ключа активации Legrand​

Для получения ключа активации Legrand необходимо выполнить следующие шаги:

  1. Зарегистрируйтесь на официальном сайте Legrand;

  2. Перейдите на вкладку MY APPLICATIONS и нажмите Create new ;

LegrandNetatmo6.png

  1. Заполните все необходимые поля в бланке регистрации нового приложения.
примечание

Обязательно в поле Type of the application выбираем Mobile application , поле First Reply Url автоматически заполнится этой ссылкой: https://eliotclouduamprd.b2clogin.com/oauth2/nativeclient

LegrandNetatmo7.png

примечание

Для корректной работы приложения желательно выбрать все пункты в разделе Scopes .

  1. После регистрации приложения, как только его одобрят, на почту придет письмо в котором укажут client id и client secret , необходимые ключи, которые нужно скопировать в скрипт проекта (см. описание в разделе Работа в iRidi Studio ).

  2. Оформим подписку на Api Legrand, для этого перейдите на вкладку Api > SUBSCRIPTIONS > Stater Kit .

LegrandNetatmo8.png

  1. Нажмите на кнопку Subscribe .

LegrandNetatmo9.png

  1. Введите имя подписки и нажмите кнопку Confirm .

LegrandNetatmo10.png

  1. Подписка оформлена. На странице My Subscriptions вы можете посмотреть или изменить ключи, а так же удалить подписку.

LegrandNetatmo11.png

Работа в iRidi studio​

Настройка модуля производится в несколько этапов:

  1. Открываем в iRidi Studio приложенный выше пример панельного проекта и вставляем в скрипт Driver client id и client secret .

LegrandNetatmo12.png

  1. Запускаем приложенный выше панельный проект с помощью эмулятора;

  2. В окне приложения отобразится страница авторизации, где необходимо ввести адрес электронной почты и пароль, используя существующую учетную запись Legrand (эта учетная запись используется также для авторизации в приложении Home+Control );

LegrandNetatmo2.png

  1. Подтвердите, что вы предоставляете приложению доступ к вашим данным Legrand;

LegrandNetatmo3.png

  1. После предоставления доступа откроется страница проекта. Нажмите кнопку "Get JSON" для получения списка команд и фидбеков добавленного оборудования. Список формируется в логах проекта iRidi Log в формате JSON.

LegrandNetatmo1.png

Пример:


Commands":[{"Name":"Офис Светильник|Set value", "Direction":1}, {"Name":"Офис Светильник|Get value", "Direction":1}]

"Feedbacks":[{"Name":"Офис Светильник|Reachable", "Direction":2}, {"Name":"Офис Светильник|Value", "Direction":2}, {"Name":"Офис Светильник|Status", "Direction":2}, {"Name":"Офис Светильник|Consumption type", "Direction":2}, {"Name":"Офис Светильник|Consumption value", "Direction":2}]

  • Name - имя команды / фидбэка. Команда / фидбэк формируется по принципу:

имя комнаты + пробел (" ") + имя устройства + вертикальная черта ("|") + тип команды / фидбэка.

  • Direction - тип (1 - команда, 2 - фидбэк).
  1. Скопируйте полученную информацию в текстовый файл и сохраните его в формате *.json.

  2. В iRidi Studio на вкладке Device нажмите кнопку Scanner / Import > **Universal import from JS (.js, .json) и выберите сохраненный ранее файл (п.6). В проект добавится драйвер с командами и фидбэками всех устройств.

LegrandNetatmo5.png

Commands & Feedbacks​

примечание

Так как драйвер работает по HTTP протоколу, для получения актуального статуса оборудования необходимо отправить, в соответствующий фидбеку канал, Get запрос.

Для каждой учетной записи Legrand ограничивает число запросов в сутки до 1000. Для уменьшения количества запросов используйте команду Get plant или Get ambient , так как эти команды опрашивают все фидбеки устройств за раз, таким образом экономится количество запросов..

Все добавленные команды и фидбэки подразделены по типам:

CommandType​

Имя команды или обратной связиValue*Описание
Run sceneне используетЗапустить конкретную сцену (используется только со сценами).
Пример: Scene1|Run scene
Название сцены должно полностью соответствовать тому, которое указано в приложении Home+Control.
Get plantне используетПолучить актуальные значения всех фидбэков.
Пример: Get plant
Get ambientне используетПолучить актуальные значения фидбеков только в одной комнате.
Пример: Кухня|Get ambient
Set valueValueУстановить значение для выбранного устройства.
Пример: Офис Светильник|Set value
Get valueне используетПолучить актуальное значение для выбранного устройства.
Пример: Офис Светильник|Get value
Get jsonне используетПолучить информацию о всех командах и фидбэках оборудования в формате json (информация выводится в лог проекта).
Пример: Get json
Authorizeне используетАвторизоваться в приложении под учетной записью Legrand.
Пример: Authorize
Get tokenне используетCлужебная команда, которая отправляет запрос на получение токена от панельного проекта (для серверного проекта).
Пример: Get token
Refresh tokenне используетCлужебная команда, которая принудительно обновляет текущий токен.
Пример: Refresh token

Value — значение, которое необходимо указать при перетягивании команды на элемент. Если элемент не использует указанное значение, то его можно задать любое.

FeedbackType​

Имя команды или обратной связиValue*Описание
ValueValueТекущее значение.
Пример: Офис Светильник|Value
Status0 / 1Текущий статус.
Пример: Офис Светильник|Status
Reachable0 / 1Текущее состояние подключения устройства.
Пример: Офис Светильник|Reachable
ModeTextТекущий режим (только для автоматических устройств).
Пример: Офис Device1|Mode
Battery0-100Текущий заряд батареи (для пульта управления).
Пример: Беспроводной выключатель|Battery
Consumption typeTextТип потребления тока (Ватт, Ватт в час).
Пример: Electrical cabinet Светильник|Consumption type
Consumption valueValueТекущее значение потребления тока.
Пример: Electrical cabinet Светильник|Consumption value
Out of commands0 / 1Сообщение о превышении лимита запросов на сутки (0 - не превышен, 1 - превышен).
Пример: Out of commands
Out of commands messageTextСообщение о превышении лимита запросов на сутки.
Пример: Out of commands message
Need authorizeTextСообщение с требованием авторизации.
Пример: Need authorize

Value — значение, которое будет отображать фидбэк на графическом элементе.

Настройка команд и фидбеков​

SendRecieve.png

Для управления оборудованием настройте команды (Commands) и каналы обратной связи (Feedbacks). Чтобы отправить команду, перетяните ее на графический элемент и укажите значение (Value), которое необходимо отправить. Чтобы отобразить значение с канала обратной связи, перетащите Feedback на графический элемент, и укажите, каким образом вывести значение (Value).

Подробнее о работе с графическими элементами написано в статье "Типы графических элементов".

Создание скрипта​

В Script 1 указаны шаблоны функций, которые можно использовать для переопределения значений фидбэков (перевод текстового значения фидбэка в числовое или наоборот) и создания дополнительной логики проекта (например, отправка push-уведомлений по истечению кол-ва запросов).

Для этого необходимо:

  1. В первой строке заменить название драйвера "Office", на имя вашего дома, который был добавлен с помощью импорта устройств;

var l_oTest = new Legrand.Netatmo(IR.GetDevice("Office"), IR.GetDevice("Auth"), true);

  1. Воспользуйтесь шаблоном данных функций для написания логики:

l_oTest.onCommandsLimit = function() {
//do something
}
l_oTest.onModeReceive = function(in_sName, in_sText) {
return in_sText
}
l_oTest.onBatteryReceive = function(in_sName, in_sText) {
return in_sText
}

  • .onCommandsLimit - действия по ограничению попыток получения значений;
  • .onModeReceive - служит для преобразования полученных значений (для оборудования типа "Heater");
  • .onBatteryReceive(in_sText) - служит для преобразования полученных значений (для оборудования типа "Battery").

Пример 1 (отправка push-уведомления на панель при окончании лимита запросов):


l_oTest.onCommandsLimit = function() {
IR.SendPush('You have reached limit for commands', '', 1);
}

Пример 2 (переопределение текстового значения в числовое):

  • in_sName - имя устройства (до вертикальной черты);
  • in_sText - полученное значение.

l_oTest.onBatteryReceive = function(in_sName, in_sText) {
var l_Value = in_sText;
if(in_sName == 'Room 1 Light 1') {
l_Value = 0;
switch(in_sText) {
case "full":
l_Value = 0;
break;
case "high":
l_Value = 1;
break;
case "medium":
l_Value = 2;
break;
case "low":
l_Value = 3;
break;
case "very_low":
l_Value = 4;
break;
case "unknown":
l_Value = 5;
break;
}
}
return l_Value;
}