Создание приложения

Wialon Apps, или приложения Wialon — одностраничные веб-приложения, работающие в браузере как обычные сайты. В данной статье мы рассмотрим, как создать приложение для Wialon с нуля.

Для взаимодействия с внешними приложениями Wialon предоставляет Remote API — набор HTTP запросов, с помощью которых можно полноценно взаимодействовать с Wialon. Для удобной работы с Remote API в браузере можно использовать специальную JavaScript библиотеку Wialon SDK JS — набор классов, методы которых оборачивают и выполняют запросы Remote API.

В данном примере мы создадим простейшее приложение, которое авторизуется на сервере Wialon и выводит на экран имя текущего пользователя и список доступных ему объектов.

Шаг 1: Создание пустой страницы

Для начала создадим папку для нашего проекта со следующей структурой и содержанием:

    app/               # корневая папка проекта
       js/
          script.js    # JavaScript-файл, содержащий логику работы приложения
       css/
          style.css    # css-стили
       index.html      # html-разметка

index.html — шаблон простой разметки

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Новый Wialon App</title>
    <link rel="stylesheet" type="text/css" href="css/style.css"/>
  </head>
  <body>
    <p>Новый Wialon App</p>
    <script src="js/script.js"></script>
  </body>
</html>

style.css — стили полноэкранного режима

html, body {
  margin: 0;
  padding: 0;
  width: 100%;
  height: 100%;
  color: #333;
  font-family:Arial;
}

script.js

(function() {
  alert('Привет, Wialon!');
})();

Важно! Чтобы изолировать логику и переменные приложения от глобального контекста, мы обернули код JavaScript в самовызывающуюся анонимную функцию.

Для проверки откройте приложение в браузере. Если всё сделано верно, на экране должна отобразиться страница с надписью Новый Wialon App, а также появиться всплывающее сообщение Привет, Wialon!

Важно! Просто открыть файл в браузере не правильно. Приложения, использующие Wialon SDK JS, корректно работают только по протоколу http(s). Для корректной работы можно воспользоваться любым удобным веб-сервером.

Шаг 2: Подключение к Wialon

Скрипт wialon.js

Для работы с сервером Wialon необходимо загрузить на страницу wialon.js, в котором содержится Wialon SDK JS.

<!-- index.html -->
...
    <p>Новый Wialon App</p>
    <script src="https://hst-api.wialon.com/wsdk/script/wialon.js"></script>    <script src="js/script.js"></script>
  </body>
</html>

Важно! Мы использовали wialon.js с сервера Wialon Hosting. Для корректной работы с Wialon Local укажите адрес своего сервера, например, http://local.wialon.com/wsdk/script/wialon.js.

wialon.js добавляет на страницу новое пространство имен wialon с набором классов. Чаще всего мы будем использовать wialon.core.Sessionсинглтон, в котором хранится вся информация об активной сессии и реализованы базовые методы авторизации, поиска и создания объектов и др.

После загрузки страницы необходимо инициализировать сессию.

// script.js
(function() { // самовызывающаяся анонимная функция
  alert ('Привет, Wialon!');
 
  // инициализации сессии  var session = wialon.core.Session.getInstance();  session.initSession('https://hst-api.wialon.com');})();

Авторизация

В Wialon cуществует несколько методов авторизации. В данном примере мы будем использовать авторизацию по токену — метод loginToken на js, который вызывает запрос token/login.

// script.js
...
  // инициализации сессии
  var session = wialon.core.Session.getInstance();
  session.initSession('https://hst-api.wialon.com');
 
  // отправка запроса авторизации token/login  var token = 'авторизационный токен';  session.loginToken(token, function(code) {    console.log(code);  });})();

Важно! Подробнее о новом способе авторизации и токенах можно прочитать в документации.

Объявим функцию loginCallback, которая будет вызвана после ответа на запрос авторизации и изменим вызов tokenLogin.

// script.js
...
  // обработчик ответа авторизации  function loginCallback(code) {    if (code) {      alert('Ошибка авторизации: ' + code);    } else {      alert('Авторизации прошла успешно');    }  }   // отправка запроса авторизации token/login
  var token = 'авторизационный токен';
  session.loginToken(token, loginCallback);
})();

Получение и отображение информации

После авторизации часть данных уже доступна в wialon.core.Session, например, текущий пользователь. Другие данные (например, список объектов) необходимо сначала запросить с сервера.


Чтобы вывести имя пользователя на экран, добавим новый элемент div, добавим для него CSS стили и выведем имя пользователя.

<!-- index.html -->
...
  <body>
    <div id="username" class="username"></div>    <script src="https://hst-api.wialon.com/wsdk/script/wialon.js"></script>
...
/* style.css */
.username {  border:1px solid #666;}
// script.js
...
  // обработчик ответа авторизации
  function loginCallback(code) {
    if (code) {
      alert('Ошибка авторизации: ' + code);
      } else {
      alert('Авторизации прошла успешно');
      var user = session.getCurrUser();      document.getElementById('username').innerHTML = user.getName();    }
  }

Для того чтобы вывести список доступных объектов, необходимо выполнить запрос поиска объектов. Для этого объявим новую функцию printItems(), которую вызовем после успешной авторизации в функции loginCallback(code). Она запросит у сервера список объектов с данными из последнего сообщения и выведет его в виде таблицы.

Важно! Полную информацию по методу searchItems можно найти на страницах документации Wialon SDK JS

// script.js
...
function printItems() {
    var searchSpec = {
      itemsType:"avl_unit", // тип искомых элементов системы Wialon
      propName: "sys_name", // имя свойства, по которому будет осуществляться поиск
      propValueMask: "*",   // значение свойства — могут быть использованы * | , > < =
      sortType: "sys_name"  // имя свойства, по которому будет осуществляться сортировка ответа
    };
    var dataFlags = wialon.item.Item.dataFlag.base |        // флаг базовых свойств
                    wialon.item.Unit.dataFlag.lastMessage;  // флаг данных последнего сообщения
 
    // запрос поиска объектов
    session.searchItems(searchSpec, true, dataFlags, 0, 0, function(code, data) {
      if (code) {
        alert(wialon.core.Errors.getErrorText(code));
        return;
      }
      // генерация таблицы данных
      var table = '<table><tr><td>Unit</td><td colspan="3">Last message</td></tr>';
      var pos;
      for (var i = 0; i < data.totalItemsCount; i++){
        pos = data.items[i].getPosition();
        table += '<tr><td>' + data.items[i].getName() + '</td>';
        if (pos) {
          table += '<td>' + pos.y + '</td><td>' + pos.x + '</td><td>' +
                   wialon.util.DateTime.formatTime(pos.t);
        } else {
          table += '<td colspan="3">';
        }
        table += '</td></tr>';
      }
      table += '</table>';
      document.querySelector("#units").innerHTML = table;
    });
  }
...
...
  // script.js
  function loginCallback(code) {
    if (code) {
      alert('Ошибка авторизации: ' + code);
    } else {
      alert('Авторизации прошла успешно');
      var user = session.getCurrUser();
      document.querySelector("#username").innerHTML = user.getName();
      printItems();    }
  }
...

Для вывода таблицы добавим элемент на страницу

<!-- index.html -->
...
  <body>
    <div id="username" class="username"></div>
    <div id="units"></div>    <script src="https://hst-api.wialon.com/wsdk/script/wialon.js"></script>

и немного изменим таблицы стилей.

/* style.css */
.username, td {  border:1px solid #666;
}