В данной статье описывается как с помощью языка сценариев, встроенных в сервис VIALATM автоматизировать посылку команд на объекты из сферы «Интернет Вещей». Базовые сведения о языке сценариев давались в предыдущих статьях.
Описание последней версии языка сценариев (добавлены новые команды, операторы, процедуры) будет опубликовано в ближайшее время. Пока можно познакомиться с языком сценариев по ссылке Язык сценариев ViaLatM.
Посылка команд на объекты
В текущей реализации программа языка сценариев выполняется при получении сообщений от объекта (в следующей версии язык сценариев будет допускать вызов программ по более расширенным алгоритмами: по расписанию, через заданные интервалы, при отсутствии сообщений от объекта в течении заданного времени).
В системе есть два оператора посылки команд: безусловный и условный.
Формат безусловного оператора:
COMMAND (UNIT.ZTEMPER_SETTER,12);
С помощью этого оператора на текущий объект (для которого выполняется сценарий), отправляется команда установки атрибута ZTEMPER_SETTER в значение 12.
Формат условного оператора:
COMMANDIF (UNIT.ROOM_TEMPER>20,UNIT.ZTEMPER_HEATER,OFF);
С помощью этого оператора на текущий объект отправляется команда выключения нагревателя (OFF) в том случае, если датчик температуры в комнате (ROOM_TEMPER) более 20 градусов.
Все числовые значения в выше приведенных примерах можно определить в виде констант или предварительно вычисляемых переменных. Объекты должны публиковать на сервис соответствующие атрибуты и быть подписаны на обработку команд (ZTEMPER_SETTER,ZTEMPER_HEATER).
Команды работы с несколькими объектами сервиса
Наиболее интересной возможностью языка сценариев является работа с несколькими объектами.
Допустим к сервису подключено транспортное средство и объект, который осуществляет обогрев дома. В таком случае можно создать отправку команды включения обогрева, когда ваш транспорт приблизился к нему на заданное расстояние. Пример такого скрипта:
CONST HEAT_ON = 1;
CONST HEAT_OFF = 0;
CONST NEAR_HOME = 20000 # 20km
DIST_TO_HOME = DISTANCE(L,UNIT(«IOT_HOME»).L);
COMMANDIF(DIST_TO_HOME<NEAR_HOME,UNIT(«IOT_HOME»).HEATER,HEAT_ON);
Комментарий:
В начале скрипта определяются константы, задающие включение и выключение нагревателя. И константа, определяющая при каком приближении объекта к дому следует посылать команду.
Скрипт выполняется для объекта — транспортное средство, которое должно быть оснащено GPS слежением (автомобильный или персональный трекер) и подключено к сервису. При приходе в сервис сообщений от этого объекта, вычисляется расстояние до дома.
Далее в зависимости от вычисленного расстояния применяется условный оператор посылки команды на объект.
Объекты, которые находятся вне выполняемого сценария задаются функцией UNIT(«OBJECT_ID»). Для трекеров, в качестве OBJECT_ID следует задавать IMEI, для объектов «Интернет Вещей» — корневую тему (HOME) и для этих объектов теме всегда должен предшествовать префикс «IOT_».
Заключение
Помимо работ над упомянутыми выше расширениями языка сценариев, наиболее важной представляется работа над упрощением языка. Создается надстройка в виде работы с макросами, которая позволит использовать язык людям далеким от программирования.
В следующей статье будет рассказано как создавать уведомления по событиям и состояниям объектов из сферы интернет вещей.
Поделиться с друзьями
boramod
Вопрос о подключаемых к сервису объектах.
1. Как происходит авторизация и аутентификация подключаемых к сервису объектов управления?
2. Как происходит авторизация и аутентификация сервиса, выполняющего скрипты на объекте управления?
3. На сколько я понял, для связи «сервис — объект управления» используется открытый протокол, без какого-либо шифрования?
4. Что будет в случае, если злоумышленники взломают ваш сервис, и выполнят скрипты на подключенных пользовательских устройствах обогрева:
CONST HEATER_TEMP = 200;
CONST HEATER_IGNORE_EMERGENCY_SWITCH_OFF = 1;
CONST HEATER_ON = 1;
5. Кто будет отвечать за устроенный гриль в масштабе квартиры в случае взлома вашего сервиса?
Euler2012
1. Как происходит авторизация и аутентификация…
Владелец учетной записи задает пароль (ид пользователя формируется автоматически), под которым объекты присылают сообщения и с которым отправляются команды.
2. Как происходит авторизация и аутентификация сервиса…
При приходе сообщений они проходят авторизацию и аутентификацию. Скрипт выполняется от имени владельца учетной записи.
3. На сколько я понял, для связи «сервис — объект управления»…
В принципе, сервис и сайт работают по протоколу HTTPS (через некоторое время поддержка работы по HTTP будет полностью прекращена). Для протоколов MQTT и CoAP возможна работа по защищенному протоколу. В ближайшее время будет открыт доступ по протоколу CoAP и мы планировали опубликовать номера портов для SSL (после Вашего комментария возможно мы будем сообщать эти данные непосредственно клиентам, а не в общедоступной публикации)
4. Что будет в случае, если злоумышленники взломают ваш сервис…
Опять же спасибо Вам, поднятый вопрос привел к решению внедрения в сервис доп. подтверждений на принятие скрипта (при их создании/модификации). Полностью это не спасет (злоумышленник может сделать это рядом с вами, с помощью паяльника), но риск уменьшит.
5. Кто будет отвечать за устроенный гриль в масштабе квартиры в случае взлома вашего сервиса?
Развернутый юридически грамотный ответ я дать не готов. Вопрос важный и требует дополнительной проработки. Планируется подготовка коробочного решения для полной установки сервиса на площадках клиентов (срок назвать не готов: не раньше чем в сентябре, но в этом году точно). Клиент при этом сам может обеспечить шифрованные туннели и каналы передачи данных, провести полные тесты. Но это полностью нас не спасает. Если «дыра» в нашем софте, то виноваты мы. Все эти проблемы весьма серьезно стоят в тематике IoT. Медицинские датчики и приборы тоже в этой теме, а здесь уже более фатальные чем гриль случаи могут возникнуть.
Еще раз спасибо Вам за комментарий. Он действительно очень ВАЖНЫЙ!!!
boramod
Большое спасибо за развернутый ответ!