Changes for page Руководство по скриптам Lua
Last modified by superadmin on 2026/06/15 21:57
From version 1.1
edited by pugachevskaya_elena
on 2026/01/16 16:17
on 2026/01/16 16:17
Change comment:
There is no comment for this version
Summary
-
Page properties (2 modified, 0 added, 0 removed)
Details
- Page properties
-
- Author
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. pugachevskaya_elena1 +XWiki.admin - Content
-
... ... @@ -277,7 +277,7 @@ 277 277 (% style="text-align: left;" %) 278 278 Подключение прикладного Lua-модуля осуществляется функцией require. Рекомендуемая форма использования: 279 279 280 -{{code}} 280 +{{code language="java"}} 281 281 local log = require("log") 282 282 {{/code}} 283 283 ... ... @@ -284,7 +284,7 @@ 284 284 (% style="text-align: left;" %) 285 285 Вызвать функцию Lua-модуля в таком случае можно следующим образом, например: 286 286 287 -{{code}} 287 +{{code language="java"}} 288 288 local logger = log.get_logger("MyLogger") 289 289 {{/code}} 290 290 ... ... @@ -402,7 +402,7 @@ 402 402 (% style="text-align: left;" %) 403 403 В перечислении {{code language="none"}}fec.TYPE{{/code}} описаны различные типы периферии. Для управления пригодны типы {{code language="none"}}fec.TYPE.RELE{{/code}} (выход на плате контроллера) и {{code language="none"}}fec.TYPE.SART_RELE{{/code}} (выход на модуле расширения). Для управления выходами следует использовать функцию set_value(тип периферии, ID элемента, состояние), где в первый параметр необходимо передать одно из значений перечисления {{code language="none"}}fec.TYPE{{/code}}, во второй параметр — идентификатор (адрес) элемента для управления, в третий параметр — требуемое состояние (для выходов это 0 = Выключено, 1 = Включено). Например: 404 404 405 -{{code}} 405 +{{code language="java"}} 406 406 local fec = require("fec") 407 407 fec.set_value(fec.TYPE.RELE, 1, 1) 408 408 {{/code}} ... ... @@ -419,7 +419,7 @@ 419 419 (% style="text-align: left;" %) 420 420 Поскольку управление светодиодной / звуковой индикацией на считывателях осуществляется в рамках алгоритмов доступа и состояние красного, зелёного светодиодов и звука взаимосвязано (если красный светодиод горит, то зелёный погашен и др.) — для удобства управления всей индикацией реализована функция-обёртка {{code language="none"}}fec.set_reader(ID считывателя, зелёный светодиод, красный светодиод, звук){{/code}}. Пример использования функции приведён ниже: 421 421 422 -{{code}} 422 +{{code language="java"}} 423 423 local fec = require("fec") 424 424 fec.set_reader(1, fec.DIOD.MODE_OFF, fec.DIOD.MODE_025_025, fec.BEEPER.MODE_OFF) 425 425 {{/code}} ... ... @@ -441,7 +441,7 @@ 441 441 (% style="text-align: left;" %) 442 442 Ниже приведён пример использования модуля HTTP для отправки GET-запроса на IP-адрес веб-сайта (% class="nolink" %)http:~/~/example.com. 443 443 444 -{{code}} 444 +{{code language="java"}} 445 445 local log = require("log") 446 446 local http = require("http") 447 447 local logger = log.get_logger("script.lua") ... ... @@ -491,7 +491,7 @@ 491 491 (% style="text-align: left;" %) 492 492 Пример: 493 493 494 -{{code}} 494 +{{code language="java"}} 495 495 -- параметры запроса 496 496 local http_request = { 497 497 url = "http://93.184.216.34", ... ... @@ -513,7 +513,7 @@ 513 513 (% style="text-align: left;" %) 514 514 Для передачи запроса с телом в форме текста достаточно присвоить параметру запроса body соответствующее строковое значение. Например: 515 515 516 -{{code}} 516 +{{code language="java"}} 517 517 local http_request = { 518 518 url = "http://10.1.30.3:8080/myservice", 519 519 method = http.METHOD.POST, ... ... @@ -526,7 +526,7 @@ 526 526 (% style="text-align: left;" %) 527 527 Модуль также позволяет передавать запрос с телом в форме JSON-документа, который автоматически формируется из Lua-таблицы. Например: 528 528 529 -{{code}} 529 +{{code language="java"}} 530 530 local http_request = { 531 531 url = "http://10.1.30.3:8080/myservice", 532 532 method = http.METHOD.POST ... ... @@ -597,7 +597,7 @@ 597 597 (% style="text-align: left;" %) 598 598 Пример приведён ниже: 599 599 600 -{{code}} 600 +{{code language="java"}} 601 601 local log = require("log") 602 602 local logger = log.get_logger("MyLogger") 603 603 ... ... @@ -734,7 +734,7 @@ 734 734 735 735 Получить список точек доступа с их идентификаторами можно через поле {{code language="none"}}lonpacs.ap_instance{{/code}}, которое заполняется при инициализации модуля и виртуальной Lua-машины (до того, как будет выполняться пользовательский Lua-скрипт). Поле {{code language="none"}}lonpacs.ap_instance{{/code}} содержит Lua-таблицу, в которой ключами являются токены точек доступа, а значениями — Lua-таблицы с системными параметрами точек доступа. Структура таблицы представлена в коде ниже: 736 736 737 -{{code}} 737 +{{code language="java"}} 738 738 lonpacs.ap = { 739 739 "токен первой точки доступа" = { 740 740 ... ... ... @@ -1133,7 +1133,7 @@ 1133 1133 1134 1134 Функция {{code language="none"}}parse_ap_status{{/code}} возвращает Lua-таблицу следующего вида: 1135 1135 1136 -{{code}} 1136 +{{code language="java"}} 1137 1137 { 1138 1138 door_state = .. 1139 1139 lock_state = .. ... ... @@ -1304,7 +1304,7 @@ 1304 1304 (% style="text-align: left;" %) 1305 1305 Получить список точек доступа с их идентификаторами можно через поле {{code language="none"}}pacs.ap{{/code}}, которое заполняется при инициализации модуля и виртуальной Lua-машины (до того, как будет выполняться пользовательский Lua-скрипт). Поле {{code language="none"}}pacs.ap{{/code}} содержит Lua-таблицу, в которой ключами являются токены точек доступа, а значениями — Lua-таблицы с системными параметрами точек доступа. Структура таблицы представлена в коде ниже: 1306 1306 1307 -{{code}} 1307 +{{code language="java"}} 1308 1308 pacs.ap = { 1309 1309 "токен первой точки доступа" = { 1310 1310 "#" = 0, ... ... @@ -1320,7 +1320,7 @@ 1320 1320 (% style="text-align: left;" %) 1321 1321 Соответственно, для перебора точек доступа (например, чтобы для каждой точки доступа проинциализировать свой алгоритм) удобно использовать следующий код: 1322 1322 1323 -{{code}} 1323 +{{code language="java"}} 1324 1324 for key,item in pairs(pacs.ap) do 1325 1325 if item["#"] == 0 or item["#"] == 1 then 1326 1326 -- код обработки точки доступа с токеном = key ... ... @@ -1423,7 +1423,7 @@ 1423 1423 (% style="text-align: left;" %) 1424 1424 В режиме доступа «Пользовательский» для реализации алгоритма может потребоваться задать из Lua-скрипта для каждой точки доступа системные параметры. Для указания параметров из Lua-скрипта предназначена функция {{code language="none"}}pacs.set_configuration(token, {...}){{/code}}, в первом аргументе необходимо передать токен точки доступа, во втором аргументе — Lua-таблицу с параметрами. Например: 1425 1425 1426 -{{code}} 1426 +{{code language="java"}} 1427 1427 for key,item in pairs(pacs.ap) do 1428 1428 local configuration = {} 1429 1429 configuration["input.mode"] = "card" ... ... @@ -1555,7 +1555,7 @@ 1555 1555 {{info title="ВНИМАНИЕ"}} 1556 1556 В данном случае это должны быть именно «глобальные функции», определённые, например, следующим образом: 1557 1557 1558 -{{code}} 1558 +{{code language="java"}} 1559 1559 function pacs_reader_input(token, data) 1560 1560 -- тело функции 1561 1561 end ... ... @@ -1563,7 +1563,7 @@ 1563 1563 1564 1564 Локальные функции с таким же именем не будут вызваны: 1565 1565 1566 -{{code}} 1566 +{{code language="java"}} 1567 1567 local pacs_reader_input = function(token, data) 1568 1568 -- функция не будет вызвана 1569 1569 end ... ... @@ -1596,7 +1596,7 @@ 1596 1596 1597 1597 В первом аргументе {{code language="none"}}token{{/code}} передаётся токен точки доступа, на которой предъявлен идентификатор; во втором аргументе передаётся Lua-таблица с идентификаторами: 1598 1598 1599 -{{code}} 1599 +{{code language="java"}} 1600 1600 { 1601 1601 "facility_code" = "123", 1602 1602 "card_number" = "12345", ... ... @@ -1622,7 +1622,7 @@ 1622 1622 1623 1623 Второй аргумент {{code language="none"}}args{{/code}} — параметры разрешения доступа: 1624 1624 1625 -{{code}} 1625 +{{code language="java"}} 1626 1626 { 1627 1627 "use_extended_time" = true, 1628 1628 "access_time_duration" = число (unix-timestamp), ... ... @@ -1771,7 +1771,7 @@ 1771 1771 (% style="text-align: left;" %) 1772 1772 При изменении состояния какого-либо элемента периферии (обычно, это различные входы) вызывается функция-обработчик {{code language="none"}}pacs_input{{/code}}. Ниже приведён Lua-код, который позволит в зависимости от типа элемента периферии получить его логическое состояние. 1773 1773 1774 -{{code}} 1774 +{{code language="java"}} 1775 1775 local fec = require("fec") 1776 1776 1777 1777 -- Логическое состояние элемента ... ... @@ -1855,7 +1855,7 @@ 1855 1855 ((( 1856 1856 Первый аргумент — токен точки доступа. Второй аргумент — Lua-таблица с идентификаторами (такая же, какая получена в функции-обработчике {{code language="none"}}pacs_reader_input{{/code}}): 1857 1857 1858 -{{code}} 1858 +{{code language="java"}} 1859 1859 { 1860 1860 "facility_code" = "123", 1861 1861 "card_number" = "12345", ... ... @@ -1944,7 +1944,7 @@ 1944 1944 1945 1945 Второй аргумент — Lua-таблица со значением состояния по различным «осям»: 1946 1946 1947 -{{code}} 1947 +{{code language="java"}} 1948 1948 { 1949 1949 "lock" = Unlocked, 1950 1950 "door" = Open, ... ... @@ -1985,7 +1985,7 @@ 1985 1985 (% style="text-align: left;" %) 1986 1986 Пример использования модуля приведён ниже: 1987 1987 1988 -{{code}} 1988 +{{code language="java"}} 1989 1989 local storage = require("storage") 1990 1990 1991 1991 local my_options = storage.get("my_key") ... ... @@ -2040,7 +2040,7 @@ 2040 2040 (% style="text-align: left;" %) 2041 2041 Пример: 2042 2042 2043 -{{code}} 2043 +{{code language="java"}} 2044 2044 local log = require("log") 2045 2045 local logger = log.get_logger("script.lua") 2046 2046 ... ... @@ -2077,7 +2077,7 @@ 2077 2077 * ключ — строка, ключ, по которому можно будет понять в Lua-функции, кто и когда запланировал её отложенный вызов. 2078 2078 2079 2079 {{error title="ВНИМАНИЕ"}} 2080 -Также [[как и в JavaScript>>url:https://learn.javascript.ru/settimeout-setinterval#%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9-settimeout||style=" text-decoration: none;" shape="rect"]], рекомендуется избегать использования set_interval, сделав выбор в пользу рекурсивного set_timeout.2080 +Также [[как и в JavaScript>>url:https://learn.javascript.ru/settimeout-setinterval#%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9-settimeout||style="" shape="rect"]], рекомендуется избегать использования set_interval, сделав выбор в пользу рекурсивного set_timeout. 2081 2081 {{/error}} 2082 2082 2083 2083 (% style="text-align: left;" %)