Интеграция в другие системы

Материал из WebHMI Wiki
Перейти к: навигация, поиск
На этой странице были произведены изменения, не отмеченные для перевода.

Другие языки:
English • ‎русский

WebHMI позволяет взаимодействовать с другими системами посредством выполнения HTTP-запросов. Для этого в WebHMI есть библиотека Lua-cURLv3. С ее помощью можно легко и просто отправлять данные в сторонние системы а также запрашивать необходимые данные из этих систем.

Данная функция доступна начиная с версии 2.6.4520.


Внимание! При выполнении запросов к удаленным серверам могут возникать неконтролируемые задержки при выполнении программ. Если такие задержки будут длиться более чем 90 секунд пределах одной программы то WebHMI перезагрузится по сторожевому таймеру. Для предотвращения этой проблемы всегда указывайте максимально допустимое время для выполнения HTTP-запросов. Это делается с помощью функции c:setopt_timeout(X). Где X - это максимально допустимое время запроса в секундах. Если время выполнения запроса будет превышено то работа скрипта будет прервана. Команды, следующие за сбойным запросом выполнены не будут.


Пример программы, выполняющей HTTPS-запрос для отправки данных виде файла на URL https://demo.com/upload:

function main (userId)
    
  INFO("Doing CURL");

  c = cURL.easy_init()
  c:setopt_url("https://demo.com/upload")
  c:setopt_timeout(5)

  postdata = {
      name = {
          file="dummy.html",
          data="<html><bold>bold</bold></html>",
          type="text/html"
      } 
  }
  c:post(postdata)
  c:perform()
  c:close()

  INFO("CURL done");
end

Обратите внимание, что для корректной работы SSL-сертификатов необходимо иметь точное локально время. При значительном отклонении локальных часов, https-запросы могут не работать. Рекомендуем использовать синхронизацию времени по NTP-серверу.


Пример запроса числа по GET-запросу с URL http://demo.example.com/read-data?param=32 и записи его в регистр с id=4356:

function main (userId)
  c = cURL.easy_init()
  c:setopt_timeout(5)
  c:setopt_url("http://demo.example.com/read-data?param=32")
  local res = "";
  c:perform({
        writefunction = function(str)
            res = res .. str;
        end})
  c:close()
  WriteReg(4356, res);
end