0
Создал HTTP устройство switchBinary, прописал URL для включения и выключения устройства - все работает отлично. Но c получением состояния устройства у меня проблема. Мое устройство имеет несколько управляемых GPIO, их состояние отображается по запросу "http://<<ip>>/gpiostat" в виде 1:0;2:1;3:0; и т.д. Таким образом, если на первом выходе логическая единица, то отобразится 1:1;, а если ноль, то 1:0; Т.е. идет номер выхода, за ним через двоеточие состояние и точка с запятой и далее для каждого выхода. Так вот, я не силен в JavaScript, и ни как не могу понять, что прописать в строке "JavaScript код для преобразования полученного значения в строки 'on' или 'off'.
http-устройство в Z-Way
Re: http-устройство в Z-Way
Что-то типа:
Это для gpio 1, для любого другого нужно поменять 1: на номер нужного gpio
Code: Select all
/(?:^|;)1:(0|1)(?:;|$)/.exec($$)[1]
Re: http-устройство в Z-Way
[quote="pofs"]Что-то типа:
А можно расшифровку? Я только начал разбираться с JavaScript, и мне непонятна природа данного выражения.
Code: Select all
/(?:^|;)1:(0|1)(?:;|$)/.exec($$)[1]
Re: http-устройство в Z-Way
Абракадабра внутри /…/ – это регулярное выражение в js. Про их синтаксис нужно читать много и отдельно, так что я оставлю это на самостоятельное изучение, расскажу лишь про конкретный частный случай.
Скобками обозначается группа. Запись ?: в начале группы означает, что группа не попадет отдельно в конечный результат (non-capturing). Таким образом, первые скобки (?:^|;) – это группа, которая заматчит начало строки либо точку с запятой.
Далее, 1: – это просто идущий следом номер gpio и двоеточие. Дальше capturing группа, которая заматчит значение (0 или 1).
Далее снова non-capturing группа (?:;|$) – точка с запятой либо конец строки.
Если gpio меньше 10, то можно упростить до /1:(0|1)/.
Итого, у нас получилось регулярное выражение с одной capturing группой, которое мы исполняем с помощью метода exec с аргументом $$ (так называется переменная в http device). Exec в нашем случае возвращает массив из двух элементов в случае успеха: полное значение заматченной строки, и значение группы. Вот его-то мы и вытаскиваем последними квадратными скобками.
Http device допускает значения 0 и 1 как результат, так что больше ничего делать не нужно.
Скобками обозначается группа. Запись ?: в начале группы означает, что группа не попадет отдельно в конечный результат (non-capturing). Таким образом, первые скобки (?:^|;) – это группа, которая заматчит начало строки либо точку с запятой.
Далее, 1: – это просто идущий следом номер gpio и двоеточие. Дальше capturing группа, которая заматчит значение (0 или 1).
Далее снова non-capturing группа (?:;|$) – точка с запятой либо конец строки.
Если gpio меньше 10, то можно упростить до /1:(0|1)/.
Итого, у нас получилось регулярное выражение с одной capturing группой, которое мы исполняем с помощью метода exec с аргументом $$ (так называется переменная в http device). Exec в нашем случае возвращает массив из двух элементов в случае успеха: полное значение заматченной строки, и значение группы. Вот его-то мы и вытаскиваем последними квадратными скобками.
Http device допускает значения 0 и 1 как результат, так что больше ничего делать не нужно.
Re: http-устройство в Z-Way
Спасибо за разъяснения. Буду дальше осваивать js...pofs wrote:Абракадабра внутри /…/ – это регулярное выражение в js. Про их синтаксис нужно читать много и отдельно, так что я оставлю это на самостоятельное изучение, расскажу лишь про конкретный частный случай...
Re: http-устройство в Z-Way
Сегодня удалось попробовать, но ничего не получилось.pofs wrote:Что-то типа:Это для gpio 1, для любого другого нужно поменять 1: на номер нужного gpioCode: Select all
/(?:^|;)1:(0|1)(?:;|$)/.exec($$)[1]
Вот что шлет устройство в ответ на запрос состояния:
но состояние в Z-Way не обновляется...
Re: http-устройство в Z-Way
А в логе zway что?
И я, кажется, ошибся насчет того, что ему подходят значения 0 и 1, посмотрел не в ту ветку.
Тогда придется немного извратиться:
И я, кажется, ошибся насчет того, что ему подходят значения 0 и 1, посмотрел не в ту ветку.
Тогда придется немного извратиться:
Code: Select all
["off","on"][/(?:^|;)1:(0|1)(?:;|$)/.exec($$)[1]]
Re: http-устройство в Z-Way
Спасибо! Заработало!pofs wrote:Code: Select all
["off","on"][/(?:^|;)1:(0|1)(?:;|$)/.exec($$)[1]]
Re: http-устройство в Z-Way
Спасибо! pofs
за Ваш JavaScript он мне тоже помог.
за Ваш JavaScript он мне тоже помог.