On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение



ссылка на сообщение  Отправлено: 26.02.15 19:15. Заголовок: Можно обойтись без Telnet'a? Чистый http api, GET, POST?


Подскажите коллеги, а куда копать, чтобы подружить crestron с оборудованием, не поддерживающим telnet?

Надо:
1) Отправить крестрону GET или POST запрос формата http://[ip_address_of_crestron]:[port]/?[some_key1]=[some_value1]&[some_key2]=[some_value2]
2) Получить от него осознанное действие. Например, включить свет.

Прошу подсказать, возможен ли такой функционал и где почитать. Спасибо.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 41 , стр: 1 2 3 All [только новые]





ссылка на сообщение  Отправлено: 12.08.16 15:17. Заголовок: gosha Спасибо! Уже с..


gosha Спасибо! Уже смотрел, но вопрос у меня в другом:
Как весь запрос (пример ниже) закинуть через контроллер? Сворачивание в одну строчку - не помогает

POST /RPC2 HTTP/1.0
User-Agent: Frontier/5.1.2 (WinNT)
Host: betty.userland.com
Content-Type: text/xml
Content-length: 181


<?xml version="1.0"?>
<methodCall>
<methodName>examples.getStateName</methodName>
<params>
<param>
<value><i4>41</i4></value>
</param>
</params>
</methodCall>



Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 12.08.16 22:02. Заголовок: Это не пример команд..


Это не пример команды в чистом виде это описание её обязательных или не очень параметров (хотя описание ближе к истинной команде, чем то что можно ввести в строку браузера, который добавит к ней еще всякой служебной инфы). Лучший способ подсмотреть Wireshark-ом пример одной из команд с рабочего варианта коммуникации. При этом символы \r\r смотреть в hex варианте (для Crestron \r\n интерпретируется иначе чем в WireShark. В Crestron \r\n заменить на \n)
Скопировав целиком рабочую команду из Wireshark засовываем её в Simpl+ модуль Crestron (можно выкинуть аккуратно!! всякую чушь типа имени браузера, User-Agent и т.п.)
Обрабатывайте эту команду как строковую переменную, меняя необходимые значения параметров и отправляйте через TCP_CLIENT на MCU.
При этом неизменяемые части типа "POST /RPC2/..."и " HTTP/1.0\n" используете как строковые константы и лепите из них нужную полную строку команды через +
заканчивая каждый параметр \n
добавив в конце +"\n\n";
Можно видимо как тут советуют использовать внешний TCP client, но придется разбивать строки на части не длиннее 255 символов. Я всегда использовал внутренний в SIMPL+ TCP_CLIENT, чтоб не заморачиваться с длиной команды (а она получится достаточно длинная). Боюсь даже предположить, что это можно реализовать на Serial i/o только не используя SIMPL+.(почему смотри ниже)
С большой долей вероятности, придется позаботится еще о расчете параметра Content-Length:xx\n Ведь он (длина команды) будет меняться динамически в зависимости от параметров команды. Если это поле использовать как константу всегда одинаковое (т.е. не пересчитывать длину или не использовать параметр вовсе) то сервер может и не принять такую команду вернув ошибку.
Либо описывать все команды как константы (заменив лишь \r на \n) на все возможные варианты (перехватив только самые нужные). Но это не наш метод ).

+79161734005 Спасибо: 2 
ПрофильЦитата Ответить
постоянный участник




ссылка на сообщение  Отправлено: 14.08.16 23:30. Заголовок: Ответ тут должен быт..


Ответ тут должен быть таким: можно, в соответствии с протоколами и синтаксисом.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 15.08.16 11:17. Заголовок: Вячеслав, Спасибо, з..


Вячеслав, Спасибо, за столь развернутый ответ, попробую написать модуль.
По всей видимости у меня не были соблюдены "\n\" , в довесок команда больше 255 символов

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 15.08.16 22:30. Заголовок: Только говоря про &#..


Только говоря про \n я не имел ввиду параметры xml, я имел ввиду параметры POST запроса для http. Разметку xml по факту в перехваченном пакете. Отправляйте из приложения на ПК по возможности и ловите wireshark с фильтром ip.addr==IP_адрес_MCU
Скопировать ПКМ на пакете Copy->as Printable Text. Но непечатные символы 0d 0a (тоже в wireshark .. или \r\n тоже в Crestron \n) придется добавить в строку Crestron как \x0d\x0a или \n
Вам нужно все начиная с фразы POST и заканчивая .... (\n\n) если блок xml попадает в эти рамки. Иногда данные могут подставляться к конце пакета, уже за символами \n\n
Длину (Content-length:) определяет видимо блок xml начиная от <? и заканчивая последней > включая непечатные символы (\x0d\x0a это два символа даже если вы их запишите как \n)
Длину подставляемую после "Content-length: " легко посчитать применив штатные функции SIMPL+ LEN() и ITOA() Пример: command_length$=ITOA(len("<?......>"));
В качестве значения для параметра "Host: " подставляйте IP адрес MCU.

+79161734005 Спасибо: 1 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 16.08.16 17:08. Заголовок: Вячеслав Еще раз огр..


Вячеслав Еще раз огромное спасибо!

Вообщем, кусок simpl+, который заработал (вдруг кому понадобится):
Push Call_to_Name1
{
BodyLine1 = "\n\n";
BodyLineCMD1 = "<methodCall><methodName>participant.add</methodName><params><param><value><struct>";
BodyLineCMD2 = "<member><name>authenticationUser</name><value><string>admin</string></value></member><member><name>authenticationPassword</name><value><string>password</string></value></member>";
BodyLineCMD3 = "<member><name>conferenceName</name><value><string>666</string></value></member><member><name>participantName</name><value><string>andrei.movi</string></value></member>";
BodyLineCMD4 = "<member><name>address</name><value><string>shatov.movi</string></value></member></struct></value></param></params></methodCall>";
Body = BodyLineCMD1 +BodyLineCMD2 + BodyLineCMD3 +BodyLineCMD4 + BodyLine1;
Header1 = "POST /RPC2 HTTP/1.1\n";
Header2 = "Connection: keep-alive\n";
MAKESTRING (Header3, "Content-Length: %d\n", LEN (Body));
MAKESTRING (Header4, "HOST: %s\n", MCU_IPAddr);
Header5 = "Content-Type: text/html\n";
Header6 = "Accept-Encoding:\nUser-Agent:\nAuthorization:\n\n";
MCU_BODY_OUT = Header1+Header2+Header3+Header4+Header5+Header6+BodyLineCMD1;
MCU_BODY_OUT = BodyLineCMD2;
MCU_BODY_OUT = BodyLineCMD3;
MCU_Body_OUT = BodyLineCMD4+BodyLine1;
}

Как видно, вывожу по строчкам весь код через внешний TCP\IP client,
если коллеги подскажет, как использовать внутренний /*TCP_CLIENT tcpclient80 [20000]; - буду очень благодарен, сам как-то не осилил.


Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 16.08.16 19:48. Заголовок: AndreySh обратите вн..


AndreySh обратите внимания на
 цитата:
Header6 = "Accept-Encoding:\nUser-Agent:\nAuthorization:\n\n";


это не верный формат запроса.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 17.08.16 11:23. Заголовок: Ale4ko А что Вас сму..


Ale4ko А что Вас смущает?

1. Если не заполнены поля с данными, то это "прихоть" MCU. хоть и с пустыми значениями, но строки
Accept-Encoding:
Authorization
должны присутствовать, без них http запрос не обрабатывается и ответ с ошибкой 201 (operation failed)

2. Или же что команда записана в одну строку?

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 17.08.16 14:16. Заголовок: Я бы все-таки убрал ..


Я бы все-таки убрал Connection: keep-alive, поменял Content-Type на text/xml, и посмотрел .pcap запроса, который дает 201


Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 18.08.16 08:52. Заголовок: gosha Позже попробую..


gosha Позже попробую проверить, сейчас уже такой возможности нет.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 18.08.16 09:54. Заголовок: AndreySh , два вопро..


AndreySh , два вопроса:
1. Речь о Codian?
2. Раз уж CP3, почему бы не делать все средствами S#? Решение упростится и ускорится в разы.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 18.08.16 10:06. Заголовок: gosha? 1. Да, Codian..


gosha? 1. Да, Codian! (Cisco MCU 4515) 2. пытался, но, к сожалению, знаний не хватает :(

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 19.08.16 13:17. Заголовок: AndreySh пишет: 1. ..


AndreySh пишет:

 цитата:
1. Если не заполнены поля с данными, то это "прихоть" MCU. хоть и с пустыми значениями, но строки
Accept-Encoding:
Authorization
должны присутствовать, без них http запрос не обрабатывается и ответ с ошибкой 201 (operation failed)


странно, я был уверен что такой запрос может выдать ошибку.
не знаю как на счет Authorization скорее всего должно быть заполнини значениями authenticationUser и authenticationPassword из BodyLineCMD2 , а Accept-Encoding и User-Agent желательно заполнить значениями.
Гоша прав 'Content-Type: text/xml' будет правильно.
я бы выбрал вариант:
Header5 = "Content-Type text/xml; charset=utf-8\n";
Header6 = "Accept-Encoding: identity\nUser-Agent: AndreySh\nAuthorization: Basic YWRtaW46cGFzc3dvcmQ=\n\n";

еше более подробно описано тут и тут


Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 23.08.16 09:21. Заголовок: Без претензий на пра..


Без претензий на правильность, но тем не менее рабочий вариант встроенного TCP client:
integer MCU_connected;

Integer_Function connect()
{
return(SocketConnectClient (tcpclient80, MCU_IPAddr, 80, 0));
}

Function disconnect()
{
SocketDisconnectClient (tcpclient80);
}

Function to_MCU(string data)
{
signed_integer iStatus,i;
if (MCU_Connected=0){connect();}
i=0;
while(i<90)
{
if (MCU_Connected=1)
{
iStatus = SocketSend(tcpclient80,data);
if (iStatus < 0)Print("Error Sending to MCU: %d\n", iStatus);
if (iStatus=-5){connect();delay(200);}else {i=100;}
}else
{delay(20);i=i+1;}
}
}

SOCKETCONNECT
tcpclient80
{
MCU_Connected = 1;
}

SOCKETDISCONNECT
tcpclient80
{
MCU_Connected = 0;
}


Спасибо: 1 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 31.01.20 11:32. Заголовок: Добрый день! Подскаж..


Добрый день!
Подскажите, через программу postman отправляю по адресу: http://10.10.10.99/mnc/secure_api.php
Команду: {"p_targetId":0,"p_cmd":"getProductListSaved","p_userName":"admin","p_password":"admin"}
Wireshark видит как:
POST /mnc/secure_api.php HTTP/1.1
Content-Type: application/json
User-Agent: PostmanRuntime/7.22.0
Accept: */*
Cache-Control: no-cache
Postman-Token: 2b7ab1ae-93bb-49fd-975a-ab90603527c2
Host: 10.10.10.99
Accept-Encoding: gzip, deflate, br
Content-Length: 88
Connection: keep-alive

{"p_targetId":0,"p_cmd":"getProductListSaved","p_userName":"admin","p_password":"admin"}

Команда выполнена, ответ SUCCESS

Через Crestron засылаю такого типа команду:
POST /mnc/secure_api.php?{"p_targetId":0,"p_cmd":"getProductListSaved","p_userName":"admin","p_password":"admin"} HTTP/1.0\nHost: 10.10.10.99\nContent-Type: text/json\n\n\n

Выдает Failed, "p_msg":"invalid command"

Это контроллер MUxlab.

Может в строке где синтаксис не верный, подскажите

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 31.01.20 21:11. Заголовок: 1.Начнем с того, что..


1.Начнем с того, что блок json (тот что в фигурных скобках) должен быть в самом конце пакета, за пределами \n\n Ведь в WireShark же так и есть
2.Скорее всего нужно еще и токен получить сначала как то и его тоже отправлять
3.100% нужно считать длину блока json и помещать её в поле Content-Length

Дальше посмотрим )

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 06.03.23 16:58. Заголовок: Коллеги, хочу повтор..


Коллеги, хочу повторить вопрос, заданный в начале этой темы.
Есть устройство (кнопочная панель), которая по нажатию на кнопки генерит простые HTTP запросы (GET, к примеру) по указанному адресу. Нужно как то обрабатывать эти запросы, сходу не смог их получить на контроллере ( TCP/IP сервер с портом 80). В Как получить эти запросы в контроллере?

Спасибо: 0 
ПрофильЦитата Ответить
администратор


ссылка на сообщение  Отправлено: 06.03.23 17:37. Заголовок: Примените TCP/IP Ser..


Примените TCP/IP Server в SIMPL.
Подозреваю, у вас кнопка Sure Button.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 06.03.23 21:46. Заголовок: Admin пишет: Примен..


Admin пишет:

 цитата:
Примените TCP/IP Server в SIMPL


так сходу и не получилось :( в настройка сервера указывать адрес панели?

Спасибо: 0 
ПрофильЦитата Ответить
администратор


ссылка на сообщение  Отправлено: 07.03.23 10:01. Заголовок: В случае, если "..


В случае, если "панель" не может быть сконфигурирована так, чтобы знать IP процессора, схема Клиент-сервер неприменима.
Нет разницы, где клиент и сервер, можно использовать то, что понятно и работает.
Установите связь, например через TCP/IP Client и следите за посылками от панели.
В настройках клиента укажите адрес панели. Должен же он быть где-то обозначен, хотя бы один раз.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 41 , стр: 1 2 3 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 33
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет