Changes for page Руководство по скриптам Lua
Last modified by superadmin on 2026/06/15 21:57
Summary
-
Page properties (2 modified, 0 added, 0 removed)
Details
- Page properties
-
- Author
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki.a dmin1 +XWiki.pugachevskaya_elena - Content
-
... ... @@ -40,7 +40,7 @@ 40 40 == {{id name="РуководствопоскриптамLua-Какредактироватьскрипт"/}}Как редактировать скрипт == 41 41 42 42 (% style="text-align: left;" %) 43 -Для удобство редактирования и отладки скрипта автоматизации предназначен текстовый online-редактор, доступный в наших продуктах по адресу {{code language="none"}}http://[ip-address]/lua-editor/{{/code}} или ##http:~/~/[ip-address]/internal/(%%)lua-editor/##. 43 +Для удобство редактирования и отладки скрипта автоматизации предназначен текстовый online-редактор, доступный в наших продуктах по адресу {{code language="none"}}http://[ip-address]/lua-editor/{{/code}} или ##http:~/~/[ip-address]/(% style="color: rgb(51,51,51);" %)internal/(%%)lua-editor/##. 44 44 45 45 (% style="text-align: left;" %) 46 46 1. В левом блоке — текст скрипта автоматизации. Внесите в него изменения, для сохранения нажмите на кнопку «Сохранить» внизу. ... ... @@ -277,7 +277,7 @@ 277 277 (% style="text-align: left;" %) 278 278 Подключение прикладного Lua-модуля осуществляется функцией require. Рекомендуемая форма использования: 279 279 280 -{{code language="java"}}280 +{{code}} 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 language="java"}}287 +{{code}} 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 language="java"}}405 +{{code}} 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 language="java"}}422 +{{code}} 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 language="java"}}444 +{{code}} 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 language="java"}}494 +{{code}} 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 language="java"}}516 +{{code}} 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 language="java"}}529 +{{code}} 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 language="java"}}600 +{{code}} 601 601 local log = require("log") 602 602 local logger = log.get_logger("MyLogger") 603 603 ... ... @@ -633,6 +633,7 @@ 633 633 634 634 loninput.lua позволяет «подписаться» на изменения состояния входов. Для управления «подписчиками» в модуле доступны следующие функции: 635 635 636 +(% class="wrapped" %) 636 636 |=((( 637 637 Функция 638 638 )))|=((( ... ... @@ -671,6 +671,7 @@ 671 671 672 672 В функцию {{code language="none"}}on_loninput_input_state_changed{{/code}} передаются следующие параметры: 673 673 675 +(% class="wrapped" %) 674 674 |=((( 675 675 Параметр 676 676 )))|=((( ... ... @@ -732,7 +732,7 @@ 732 732 733 733 Получить список точек доступа с их идентификаторами можно через поле {{code language="none"}}lonpacs.ap_instance{{/code}}, которое заполняется при инициализации модуля и виртуальной Lua-машины (до того, как будет выполняться пользовательский Lua-скрипт). Поле {{code language="none"}}lonpacs.ap_instance{{/code}} содержит Lua-таблицу, в которой ключами являются токены точек доступа, а значениями — Lua-таблицы с системными параметрами точек доступа. Структура таблицы представлена в коде ниже: 734 734 735 -{{code language="java"}}737 +{{code}} 736 736 lonpacs.ap = { 737 737 "токен первой точки доступа" = { 738 738 ... ... ... @@ -744,12 +744,13 @@ 744 744 } 745 745 {{/code}} 746 746 747 -Каждая точка доступа в списке — это либо точка доступа модуля расширения МДС, либо одна из точек доступа М2. 749 +(% style="color: rgb(51,51,51);" %)Каждая точка доступа в списке — это либо точка доступа модуля расширения МДС, либо одна из точек доступа М2. 748 748 749 749 ===== {{id name="РуководствопоскриптамLua-Управлениеточкойдоступа"/}}Управление точкой доступа ===== 750 750 751 751 Для управления точками доступа на модулях расширения доступна функция {{code language="none"}}transmit_status(token, status){{/code}}, которая позволяет отправлять модулям команды управления. Функция принимает следующие параметры: 752 752 755 +(% class="wrapped" %) 753 753 |=((( 754 754 Параметр 755 755 )))|=((( ... ... @@ -776,8 +776,9 @@ 776 776 Команда управления (требуемый статус точки доступа); значение из перечисления {{code language="none"}}lonpacs.AP_COMMAND{{/code}} (см. ниже) 777 777 ))) 778 778 779 -Для управления точкам доступа доступны следующие команды (значения параметра {{code language="none"}}status{{/code}}): 782 +(% style="color: rgb(51, 51, 51); color: rgb(51, 51, 51)" %)Для управления точкам доступа доступны следующие команды (значения параметра {{code language="none"}}status{{/code}}): 780 780 784 +(% class="wrapped" %) 781 781 |=((( 782 782 Команда 783 783 )))|=((( ... ... @@ -844,6 +844,7 @@ 844 844 845 845 Модуль {{code language="none"}}lonpacs.lua{{/code}} позволяет «подписаться» на события изменения состояния точек доступа, мониторинга связи с точками доступа, изменения состояния прохода (фазы алгоритма прохода). Для управления «подписчиками» в модуле доступны следующие функции: 846 846 851 +(% class="wrapped" %) 847 847 |=((( 848 848 Функция 849 849 )))|=((( ... ... @@ -926,6 +926,7 @@ 926 926 927 927 Параметр {{code language="none"}}ap_status{{/code}} может принимать одно из следующих значений: 928 928 934 +(% class="wrapped" %) 929 929 |=((( 930 930 Состояние точки доступа 931 931 )))|=((( ... ... @@ -940,7 +940,7 @@ 940 940 )))|((( 941 941 0 942 942 )))|((( 943 -Точка доступа в состоянии ожидания транзакции 949 +(% style="color: rgb(51,51,51);" %)Точка доступа в состоянии ожидания транзакции 944 944 ))) 945 945 |((( 946 946 {{code language="none"}} ... ... @@ -958,7 +958,7 @@ 958 958 )))|((( 959 959 2 960 960 )))|((( 961 -Старт транзакции прохода по кнопке выхода 967 +(% style="color: rgb(51,51,51);" %)Старт транзакции прохода по кнопке выхода 962 962 ))) 963 963 |((( 964 964 {{code language="none"}} ... ... @@ -967,7 +967,7 @@ 967 967 )))|((( 968 968 5 969 969 )))|((( 970 -Дверь удержана открытой (удержание двери) 976 +(% style="color: rgb(51,51,51);" %)Дверь удержана открытой (удержание двери) 971 971 ))) 972 972 |((( 973 973 {{code language="none"}} ... ... @@ -992,7 +992,7 @@ 992 992 )))|((( 993 993 10 994 994 )))|((( 995 -Дверь открыта при совершении прохода 1001 +(% style="color: rgb(51,51,51);" %)Дверь открыта при совершении прохода 996 996 ))) 997 997 |((( 998 998 {{code language="none"}} ... ... @@ -1078,7 +1078,7 @@ 1078 1078 )))|((( 1079 1079 32 1080 1080 )))|((( 1081 -Неисправное состояние замка (не является состоянием точки доступа) 1087 +(% style="color: rgb(51,51,51);" %)Неисправное состояние замка (не является состоянием точки доступа) 1082 1082 ))) 1083 1083 |((( 1084 1084 {{code language="none"}} ... ... @@ -1087,7 +1087,7 @@ 1087 1087 )))|((( 1088 1088 53 1089 1089 )))|((( 1090 -Удержание двери точки доступа в состоянии "закрыта и заблокирована" 1096 +(% style="color: rgb(51,51,51);" %)Удержание двери точки доступа в состоянии "закрыта и заблокирована" 1091 1091 ))) 1092 1092 |((( 1093 1093 {{code language="none"}} ... ... @@ -1096,7 +1096,7 @@ 1096 1096 )))|((( 1097 1097 54 1098 1098 )))|((( 1099 -Взлом двери точки доступа в состоянии "закрыта и заблокирована" 1105 +(% style="color: rgb(51,51,51);" %)Взлом двери точки доступа в состоянии "закрыта и заблокирована" 1100 1100 ))) 1101 1101 |((( 1102 1102 {{code language="none"}} ... ... @@ -1115,7 +1115,7 @@ 1115 1115 Текущая транзакция пользователя обрывается. 1116 1116 ))) 1117 1117 |((( 1118 -##ARMED_CLOSE_BLOCKED_FORCE_OPEN(%%)## 1124 +##(% style="color: rgb(68,68,68);" %)ARMED_CLOSE_BLOCKED_FORCE_OPEN(%%)## 1119 1119 )))|((( 1120 1120 106 1121 1121 )))|((( ... ... @@ -1127,7 +1127,7 @@ 1127 1127 1128 1128 Функция {{code language="none"}}parse_ap_status{{/code}} возвращает Lua-таблицу следующего вида: 1129 1129 1130 -{{code language="java"}}1136 +{{code}} 1131 1131 { 1132 1132 door_state = .. 1133 1133 lock_state = .. ... ... @@ -1138,6 +1138,7 @@ 1138 1138 1139 1139 где значение полей таблицы следующее: 1140 1140 1147 +(% class="wrapped" %) 1141 1141 |=((( 1142 1142 Поле 1143 1143 )))|=((( ... ... @@ -1206,6 +1206,7 @@ 1206 1206 (% style="text-align: left;" %) 1207 1207 Значение кода состояния алгоритма прохода (фазы прохода) {{code language="none"}}status, {{/code}}полученного в функции {{code language="none"}}lonpacs_on_pass_status_changed(token, status, notify_key),{{/code}} может принимать одно из следующих значений: 1208 1208 1216 +(% class="wrapped" %) 1209 1209 |=((( 1210 1210 Код (условный) 1211 1211 )))|=((( ... ... @@ -1296,7 +1296,7 @@ 1296 1296 (% style="text-align: left;" %) 1297 1297 Получить список точек доступа с их идентификаторами можно через поле {{code language="none"}}pacs.ap{{/code}}, которое заполняется при инициализации модуля и виртуальной Lua-машины (до того, как будет выполняться пользовательский Lua-скрипт). Поле {{code language="none"}}pacs.ap{{/code}} содержит Lua-таблицу, в которой ключами являются токены точек доступа, а значениями — Lua-таблицы с системными параметрами точек доступа. Структура таблицы представлена в коде ниже: 1298 1298 1299 -{{code language="java"}}1307 +{{code}} 1300 1300 pacs.ap = { 1301 1301 "токен первой точки доступа" = { 1302 1302 "#" = 0, ... ... @@ -1312,7 +1312,7 @@ 1312 1312 (% style="text-align: left;" %) 1313 1313 Соответственно, для перебора точек доступа (например, чтобы для каждой точки доступа проинциализировать свой алгоритм) удобно использовать следующий код: 1314 1314 1315 -{{code language="java"}}1323 +{{code}} 1316 1316 for key,item in pairs(pacs.ap) do 1317 1317 if item["#"] == 0 or item["#"] == 1 then 1318 1318 -- код обработки точки доступа с токеном = key ... ... @@ -1415,7 +1415,7 @@ 1415 1415 (% style="text-align: left;" %) 1416 1416 В режиме доступа «Пользовательский» для реализации алгоритма может потребоваться задать из Lua-скрипта для каждой точки доступа системные параметры. Для указания параметров из Lua-скрипта предназначена функция {{code language="none"}}pacs.set_configuration(token, {...}){{/code}}, в первом аргументе необходимо передать токен точки доступа, во втором аргументе — Lua-таблицу с параметрами. Например: 1417 1417 1418 -{{code language="java"}}1426 +{{code}} 1419 1419 for key,item in pairs(pacs.ap) do 1420 1420 local configuration = {} 1421 1421 configuration["input.mode"] = "card" ... ... @@ -1547,7 +1547,7 @@ 1547 1547 {{info title="ВНИМАНИЕ"}} 1548 1548 В данном случае это должны быть именно «глобальные функции», определённые, например, следующим образом: 1549 1549 1550 -{{code language="java"}}1558 +{{code}} 1551 1551 function pacs_reader_input(token, data) 1552 1552 -- тело функции 1553 1553 end ... ... @@ -1555,7 +1555,7 @@ 1555 1555 1556 1556 Локальные функции с таким же именем не будут вызваны: 1557 1557 1558 -{{code language="java"}}1566 +{{code}} 1559 1559 local pacs_reader_input = function(token, data) 1560 1560 -- функция не будет вызвана 1561 1561 end ... ... @@ -1588,7 +1588,7 @@ 1588 1588 1589 1589 В первом аргументе {{code language="none"}}token{{/code}} передаётся токен точки доступа, на которой предъявлен идентификатор; во втором аргументе передаётся Lua-таблица с идентификаторами: 1590 1590 1591 -{{code language="java"}}1599 +{{code}} 1592 1592 { 1593 1593 "facility_code" = "123", 1594 1594 "card_number" = "12345", ... ... @@ -1614,7 +1614,7 @@ 1614 1614 1615 1615 Второй аргумент {{code language="none"}}args{{/code}} — параметры разрешения доступа: 1616 1616 1617 -{{code language="java"}}1625 +{{code}} 1618 1618 { 1619 1619 "use_extended_time" = true, 1620 1620 "access_time_duration" = число (unix-timestamp), ... ... @@ -1758,12 +1758,12 @@ 1758 1758 {{/info}} 1759 1759 1760 1760 (% style="text-align: left;" %) 1761 -===== {{id name="РуководствопоскриптамLua-Изменениесостоянияпериферии"/}}Изменение состояния периферии(%%) ===== 1769 +===== {{id name="РуководствопоскриптамLua-Изменениесостоянияпериферии"/}}(% style="color: rgb(112,112,112);" %)Изменение состояния периферии(%%) ===== 1762 1762 1763 1763 (% style="text-align: left;" %) 1764 1764 При изменении состояния какого-либо элемента периферии (обычно, это различные входы) вызывается функция-обработчик {{code language="none"}}pacs_input{{/code}}. Ниже приведён Lua-код, который позволит в зависимости от типа элемента периферии получить его логическое состояние. 1765 1765 1766 -{{code language="java"}}1774 +{{code}} 1767 1767 local fec = require("fec") 1768 1768 1769 1769 -- Логическое состояние элемента ... ... @@ -1847,7 +1847,7 @@ 1847 1847 ((( 1848 1848 Первый аргумент — токен точки доступа. Второй аргумент — Lua-таблица с идентификаторами (такая же, какая получена в функции-обработчике {{code language="none"}}pacs_reader_input{{/code}}): 1849 1849 1850 -{{code language="java"}}1858 +{{code}} 1851 1851 { 1852 1852 "facility_code" = "123", 1853 1853 "card_number" = "12345", ... ... @@ -1936,7 +1936,7 @@ 1936 1936 1937 1937 Второй аргумент — Lua-таблица со значением состояния по различным «осям»: 1938 1938 1939 -{{code language="java"}}1947 +{{code}} 1940 1940 { 1941 1941 "lock" = Unlocked, 1942 1942 "door" = Open, ... ... @@ -1977,7 +1977,7 @@ 1977 1977 (% style="text-align: left;" %) 1978 1978 Пример использования модуля приведён ниже: 1979 1979 1980 -{{code language="java"}}1988 +{{code}} 1981 1981 local storage = require("storage") 1982 1982 1983 1983 local my_options = storage.get("my_key") ... ... @@ -2013,7 +2013,7 @@ 2013 2013 {{/info}} 2014 2014 2015 2015 (% style="text-align: left;" %) 2016 -===== {{id name="РуководствопоскриптамLua-set_timeout"/}}set_timeout(%%) ===== 2024 +===== {{id name="РуководствопоскриптамLua-set_timeout"/}}(% style="color: rgb(112,112,112);" %)set_timeout(%%) ===== 2017 2017 2018 2018 (% style="text-align: left;" %) 2019 2019 Запланировать вызов указанной Lua-функции спустя заданное количество миллисекунд. ... ... @@ -2032,7 +2032,7 @@ 2032 2032 (% style="text-align: left;" %) 2033 2033 Пример: 2034 2034 2035 -{{code language="java"}}2043 +{{code}} 2036 2036 local log = require("log") 2037 2037 local logger = log.get_logger("script.lua") 2038 2038 ... ... @@ -2069,11 +2069,11 @@ 2069 2069 * ключ — строка, ключ, по которому можно будет понять в Lua-функции, кто и когда запланировал её отложенный вызов. 2070 2070 2071 2071 {{error title="ВНИМАНИЕ"}} 2072 -Также [[как и в 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. 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. 2073 2073 {{/error}} 2074 2074 2075 2075 (% style="text-align: left;" %) 2076 -===== {{id name="РуководствопоскриптамLua-clear_interval"/}}clear_interval(%%) ===== 2084 +===== {{id name="РуководствопоскриптамLua-clear_interval"/}}(% style="color: rgb(112,112,112);" %)clear_interval(%%) ===== 2077 2077 2078 2078 (% style="text-align: left;" %) 2079 2079 Аналогично clear_timeout функция позволяет отменить запланированное ранее периодическое задание: {{code language="none"}}clear_interval(ID задания){{/code}}, где {{code language="none"}}ID задания{{/code}} — результат выполнения функции {{code language="none"}}set_interval{{/code}}.