+1

Помощь в написании драйвера - шлюза с сетью LON через HTTP SOAP запросы

Roman Fatykov 2 months ago in Tips and Tricks 0

Здравствуйте!

Мне нужны рекомендации по оптимальной структуре драйвера и примеры по парсингу ответов исходя из формата сообщений.

Исходные данные:


1. Нужен двусторонный обмен сообщениями с сетью Lon через шлюз - SmarServer2.0 (SS, в дальнейшем) посредством SOAP запросов. Опытными тестами мне удалось сформировать правильные HTTP пакеты и получить ответ от SS о состоянии запрашиваемой перменной.

2. В сети Lon обращение идет к перменным, входным и выходным. Т.е команду на включение канала мы отправляем на входную перменную, проверяем, что команда прошла по ответу. А фидбек смотрим по выходной переменной (Вот тут не знаю как правильно сделать - проверять фидбек после отправки команды или сделать службу по приёмке сообщений от SS с информацией о измененных переменных, там можно настроить отсылку сообщений на внешний сервер)

3. Обращение в сеть лон осуществляется по определенному адресу, но в моем проекте канал один, в строке запроса меняются только контроллеры и переменные в них. Пример адреса переменной: Buzharovo/Channel 1/SA2_CU3_Alpha/Virtual Functional Block/nviSvet2VnROsnov - первое выделенное - это имя контроллера, второе - перменная, nvi - означает, что входная

4. Пример скрипта с успешной связью с SS, через драйвер Custom HTTP (TCP), и ответ. 

SOAP Request exmpl.js
SOAP Response exmpl.txt


5. В примере выше запрашиваемая переменная имеет два поля Value и Switch. Но тут она используется только на включение канала и может быть либо (0.0 0) либо (100.0 1) в данном случае можно без склейки просто задавать нужные значения и отправлять. Но у меня еще есть переменные структурированные в которых лежат несколько значений (шесть) температур и есть необходимость передавать по одному значению, если меняется уставка. Есть два варианта передачи 1. формировать пакет из нового значения и указывать имя поля в структурированной переменной. 2. Формировать сообщение с новым значением и вставкой текущих значений других полей и целиком передавать обновленное значение структурированной перменной



Понимаю что запрос очень сложный, но у меня пока совсем мало знаний в JS и нужна начальная помощь в организации структуры драйвера, работы с каналами и фидбеками. И хотя бы на примере одного запроса алгоритм составления запроса исходя из имени контроллера и переменной в нём (Или оптимальнее в GUI драйвера создать переменную уже состоящую из двух частей - имени контроллера и перменной в нём) и парсинга ответа (Попытка исползовать метод XML() у меня пока не дала результата, а как без этого парсить еще не обладаю знаниями...)


Заранее спасибо!