http-устройство в Z-Way

Данный раздел предназначен для русскоязычных пользователей. Если вы владеете английским, рекомендуем также просмотреть общую ветку обсуждений на английском.
Post Reply
siplix
Posts: 5
Joined: 12 Oct 2015 22:46

http-устройство в Z-Way

Post by siplix »

0
Создал HTTP устройство switchBinary, прописал URL для включения и выключения устройства - все работает отлично. Но c получением состояния устройства у меня проблема. Мое устройство имеет несколько управляемых GPIO, их состояние отображается по запросу "http://<<ip>>/gpiostat" в виде 1:0;2:1;3:0; и т.д. Таким образом, если на первом выходе логическая единица, то отобразится 1:1;, а если ноль, то 1:0; Т.е. идет номер выхода, за ним через двоеточие состояние и точка с запятой и далее для каждого выхода. Так вот, я не силен в JavaScript, и ни как не могу понять, что прописать в строке "JavaScript код для преобразования полученного значения в строки 'on' или 'off'.
pofs
Posts: 688
Joined: 25 Mar 2011 19:03

Re: http-устройство в Z-Way

Post by pofs »

Что-то типа:

Code: Select all

/(?:^|;)1:(0|1)(?:;|$)/.exec($$)[1]
Это для gpio 1, для любого другого нужно поменять 1: на номер нужного gpio
siplix
Posts: 5
Joined: 12 Oct 2015 22:46

Re: http-устройство в Z-Way

Post by siplix »

[quote="pofs"]Что-то типа:

Code: Select all

/(?:^|;)1:(0|1)(?:;|$)/.exec($$)[1]
А можно расшифровку? Я только начал разбираться с JavaScript, и мне непонятна природа данного выражения.
pofs
Posts: 688
Joined: 25 Mar 2011 19:03

Re: http-устройство в Z-Way

Post by pofs »

Абракадабра внутри /…/ – это регулярное выражение в js. Про их синтаксис нужно читать много и отдельно, так что я оставлю это на самостоятельное изучение, расскажу лишь про конкретный частный случай.

Скобками обозначается группа. Запись ?: в начале группы означает, что группа не попадет отдельно в конечный результат (non-capturing). Таким образом, первые скобки (?:^|;) – это группа, которая заматчит начало строки либо точку с запятой.

Далее, 1: – это просто идущий следом номер gpio и двоеточие. Дальше capturing группа, которая заматчит значение (0 или 1).

Далее снова non-capturing группа (?:;|$) – точка с запятой либо конец строки.
Если gpio меньше 10, то можно упростить до /1:(0|1)/.

Итого, у нас получилось регулярное выражение с одной capturing группой, которое мы исполняем с помощью метода exec с аргументом $$ (так называется переменная в http device). Exec в нашем случае возвращает массив из двух элементов в случае успеха: полное значение заматченной строки, и значение группы. Вот его-то мы и вытаскиваем последними квадратными скобками.

Http device допускает значения 0 и 1 как результат, так что больше ничего делать не нужно.
siplix
Posts: 5
Joined: 12 Oct 2015 22:46

Re: http-устройство в Z-Way

Post by siplix »

pofs wrote:Абракадабра внутри /…/ – это регулярное выражение в js. Про их синтаксис нужно читать много и отдельно, так что я оставлю это на самостоятельное изучение, расскажу лишь про конкретный частный случай...
Спасибо за разъяснения. Буду дальше осваивать js...
siplix
Posts: 5
Joined: 12 Oct 2015 22:46

Re: http-устройство в Z-Way

Post by siplix »

pofs wrote:Что-то типа:

Code: Select all

/(?:^|;)1:(0|1)(?:;|$)/.exec($$)[1]
Это для gpio 1, для любого другого нужно поменять 1: на номер нужного gpio
Сегодня удалось попробовать, но ничего не получилось.
Вот что шлет устройство в ответ на запрос состояния:
Image

но состояние в Z-Way не обновляется...
pofs
Posts: 688
Joined: 25 Mar 2011 19:03

Re: http-устройство в Z-Way

Post by pofs »

А в логе zway что?

И я, кажется, ошибся насчет того, что ему подходят значения 0 и 1, посмотрел не в ту ветку.
Тогда придется немного извратиться:

Code: Select all

["off","on"][/(?:^|;)1:(0|1)(?:;|$)/.exec($$)[1]]
siplix
Posts: 5
Joined: 12 Oct 2015 22:46

Re: http-устройство в Z-Way

Post by siplix »

pofs wrote:

Code: Select all

["off","on"][/(?:^|;)1:(0|1)(?:;|$)/.exec($$)[1]]
Спасибо! Заработало!
Andrey68
Posts: 1
Joined: 02 Dec 2015 07:35

Re: http-устройство в Z-Way

Post by Andrey68 »

Спасибо! pofs
за Ваш JavaScript он мне тоже помог.
Post Reply