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



ссылка на сообщение  Отправлено: 27.08.19 10:45. Заголовок: Crestron + Алиса


Добрый день,коллеги. Пытался кто-нибудь связать Алису с Crestron с помощью новой API "Умный дом" от Яндекс?

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







ссылка на сообщение  Отправлено: 28.08.19 02:47. Заголовок: Да, но https так и н..


Да, но https так и не осилил. Поэтому связал через чужой навык, который отдает все по http, да ещё и с плюшками в виде регулярных выражений. Кроме http еще ненужные особо IFTTT, MQTT, вроде и по https тоже может.

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



ссылка на сообщение  Отправлено: 28.08.19 08:55. Заголовок: не через MajorDomo с..


не через MajorDomo случаем?

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





ссылка на сообщение  Отправлено: 28.08.19 13:03. Заголовок: Нет, через Домовенка..


Нет, через Домовенка Кузю
Сейчас навык добавили в приложение как умные устройства и можно говорить Алисе команды без вызова навыка домовенка.
Можно сказать «Алиса, включи свет на 82%»
Или «Алиса, включи канал 101», но в этом варианте нельзя самому задать контрольное слово ( яндекс генерит варианты сам на основе имени устройства) и нельзя сформировать свой ответ алисы как в случае стандартного вызова команды через навык.
Т.е. Через раздел умных устройств на «Алиса, включи свет» она ответит типа «окей, включаю», а если говорить “Алиса, попроси домовенка кузю включить свет» она может ответить пользовательское “Спокойной ночи, сладких снов» вечером и “Включила, нет проблем» в дневные часы

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



ссылка на сообщение  Отправлено: 29.08.19 14:07. Заголовок: Доброго дня, Вячесла..


Доброго дня, Вячеслав
Можете поподробнее описать что использовали качестве шлюза и какие его настройки?

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





ссылка на сообщение  Отправлено: 29.08.19 20:15. Заголовок: Шлюзом можно назвать..


Шлюзом можно назвать только сервер владельца навыка "Домовенок Кузя" (alexstar.ru)
Начнем с того что нужен аккаунт на яндексе к которому вы регистрируете устройства умного дома и собственно Яндекс станцию.
Есть приложение Яндекс для телефонов в котором выполняются необходимые привязки Яндекс станции и создание/привязка прочих умных устройств.

Яндекс станция понимает куда отправлять запрос анализируя того что вы сказали.
Если к примеру сказать "Алиса, включи свет"
Первым делом Алиса проверит, зарегистрированы ли для вашего аккаунта какие то умные устройства которые управляются словами "включи свет", если таких нет, то Алиса скажет просто типа "Я еще не умею такого делать, ну или поставит вам песню с таким названием"
Если устройство есть (например вы добавили "лампа" сервиса Домовенок Кузя, в последствии переименовав на сайте alexstart "Лампа" в "Свет" ) то алиса генерит для такого устройства на основании его типа и имени пару десятков
активационных фраз. Среди которых само собой есть фраза "Включи свет"
Ваша фраза совпала с имеющейся фразой для одного из "виртуальных устройств", значит алиса отправляет команду серверу alexstar.ru данные в которых содержится инфа о пользователе (ваш уникальный id на яндексе идентификатор устройства и его состояние вкл/выкл/value)
Ресурс alexstar тоже знает Вас как пользователя яндекс и на странице настроек ваших устройств выполняет для устройства "Свет" пункт меню "Правило на включение" в котором указано правило созданное вами на этом же сайте ("Включить свет").
В моем случае это url строка которая формирует GET запрос http://vyacheslav.ddns.net:6000/svet{value}
Соответственно это GET запрос прилетает на мой домашний роутер и по порту 6000 редиректится на контроллер Crestron. Внутри этого Get запрос содержится фраза svet1 Я парсю её и понимаю что надо включить свет (средствами крестрон).
Устройства можно создавать прямо на сайте alexstar они автоматически появятся в приложении яндекс. Подтверждает Алиса такую команду без тру фидбэка, на основании нескольких вариантов, которые генерит её AI.
Это был вариант который через умные устройства.

Другой базовый вариант (куда более мощный но требует добавлять в общем случае к команде название навыка) это голосовая команда непосредственно через навык "Алиса, попроси домовенка кузю включить свет"
Алиса, зная свой зарегистрированный разработчиком Alex навык "Домовенок Кузя" перенаправляет вашу голосовую команду на сайт alexstar.ru (в ней есть куча полей согласно API яндекс диалогов), среди полей есть Ваш идентификатор (под которым объединены ваши устройства голосового управления телефон, яндекс станцию, браузер и т.п.) и собственно текст "включить свет". Ресурс находит нужного пользователя
и в списке его правил находит правило с именем "включить свет" к которому вы привязали Get запрос вида http://vyacheslav.ddns.net:6000/{in}{1}
Далее он прилетает к вам на роутер и т.д. как описано выше. Кроме GET может быть использована еще куча всяких вариантов на любой вкус и цвет.

Преимущество второго варианта, 1) это несколько регулярных выражений а не только единственное {value} как в первом варианте (в примере {in}{1} ) с помощью которых вы можете дополнять GET запрос. См. на сайте alexstar описание. Вместо {in} в поле GET запроса прилетает та фраза которую вы сказали "включить свет". Вместо {1} прилетает "1" если в вашей фразе было "вкл" и "0" если в фразе было "выкл"
Т.е. на контроллере я получаю "включить свет1"
2)Могу отправить свой ответ для озвучивания или написать его прямо в разделе правила на сайте. Если я отправлю в ответ на GET фразу "Включаю, нет проблем", алиса её озвучивает через колонку Яндекс станции.
3) Я сам полностью придумываю фразу которую потом могу парсить из голосовой команды. С помощью ответов и фраз я даже могу некий диалог реализовать между шлюзом и мной.
Например:
Я: Алиса, попроси домовенка кузю выключить режим охраны
Алиса: Назовите, пароль
Я: Алиса, ээээ 12345
Алиса: Пароль принят, выключаю режим охраны

К сожалению, яндекс не хочет лечить "баг" с невыходом из навыка из браузера и наоборот бодрым выходом из навыка при работе со станцией по тайм ауту. Если бы они оставили выход только по фразе "Алиса, вернись", то можно было бы запустив навык однажды "Алиса, запусти навык Домовенок Кузя", потом говорить команды коротко без префикса как в варианте 1, при этом имея широкий функционал варианта 2. А уж если приперло музычку включить, то выйти из навыка "Алиса, вернись" и потом уже "Алиса, включи радио семь". Т.е. внутри навыка Алиса будет понимать только те команды, которым вы её обучили, на остальное говорить голосом домовенка "Команда не найдена".
Кстати, первый вариант работы через умные устройства ещё хорош еще тем, что не нужно слушать противный голос домовенка Кузи.

Быстрее это все попробовать и все станет понятно. Тем более вы можете поупражняться с голосовым помощником встроенным в Яндекс Браузер, необязательно покупать голосовые устройства Яндекса.
Я описал лишь часть функционала, а там еще тележка плюшек.

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





ссылка на сообщение  Отправлено: 30.08.19 01:40. Заголовок: Вячеслав пишет: Дал..


Вячеслав пишет:

 цитата:
Далее он прилетает к вам на роутер и т.д. как описано выше. Кроме GET может быть использована еще куча всяких вариантов на любой вкус и цвет.

А как же с безпасностью? Эдак каждый может включить свет в вашем доме? ;)

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





ссылка на сообщение  Отправлено: 30.08.19 12:47. Заголовок: Может, если знает чт..


Может, если знает что и куда отправить. Для тех кому критична безопасность https тоже доступен
Есть еще промежуточный вариант c basic авторизацией, да и acl никто не отменял, принимайте пакет только с доверенного сервера

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



ссылка на сообщение  Отправлено: 30.08.19 13:44. Заголовок: Вячеслав пишет: Я п..


Вячеслав пишет:

 цитата:
Я парсю её и понимаю что надо включить свет



Вячеслав, спасибо огромное за подробный ответ.
Я ещё не так глубоко изучил Crestron, поэтому у меня ещё вопрос - какой модуль вы используете для "приёма" пакетов от Алисы?

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





ссылка на сообщение  Отправлено: 30.08.19 14:37. Заголовок: Я использую самописн..


Я использую самописный модуль на simpl+.
Если не владете навком написания модулей на simpl+, то я варианта корректно обработать приходящие длинные строки стандартными кубиками с трудом представляю.
Может коллеги подскажут.
Могу конечно за небольшую плату предложить Вам модуль на simpl+ или дописать его под вашу задачу.

В модуле в качестве параметров пишите искомые строки (типа: svet1 / свет1 / свет0 / выключить дисплей) каждой искомой строке соответствует параметр со строкой ответа (типа: включаю свет/ включаю дисплей для Яндекс станции), можно выбирать отправлять ответ или ответ формируется на сервере. Так же есть аналоговый выход для значений присылаемых через регулярные выражения {d1} или {value} чтоб реализовать управление каналами, температурой или % света. Ну и понятно, что каждому параметру соответствует digital выход для управления реакцией оборудования.
В планах еще возможность добавить в ответы целочисленные значения, ну и наверно basic авторизацию. Добавил в версии 6 модуля
Модуль используется на контроллере 2 -серии, под 3 серию может придётся править для поддержки кириллических символов, хотя может и заработает. В любом случае на латинице точно будет работать.

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



ссылка на сообщение  Отправлено: 30.08.19 23:49. Заголовок: с simpl+ нормально к..


с simpl+ нормально
как обработать запрос с WEB-страницы с поиском я умею
вот с получением не работал
вы используете SocetServerStartListen?

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





ссылка на сообщение  Отправлено: 31.08.19 00:47. Заголовок: Да, его..


Да, его

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



ссылка на сообщение  Отправлено: 31.08.19 14:17. Заголовок: Спасибо. Буду пробов..


Спасибо. Буду пробовать

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



ссылка на сообщение  Отправлено: 01.09.19 23:56. Заголовок: Почти всё победил. О..


Почти всё победил. Осталось только разобраться с настройкой Алисы при работе не через Кузю.
Вячеслав, вам удалось уменьшить интервал посыла команд?
У меня команды ходят только с интервалом 15 сек.

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





ссылка на сообщение  Отправлено: 02.09.19 13:46. Заголовок: Было у меня такое.))..


Было у меня такое.)) Совершаете мои же ошибки на раннем этапе интеграции с сервисом.
{текст удален}
Но собственные ошибки и их поиск конечно полезны в плане саморазвития.
Могу сэкономить Вам пару дней и скажу из-за чего это, если хотите )

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



ссылка на сообщение  Отправлено: 02.09.19 14:27. Заголовок: :) хочу..


:) хочу

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





ссылка на сообщение  Отправлено: 02.09.19 19:51. Заголовок: 1.Используйте поле C..


1.Используйте поле Content-Length
2.Используйте размерность переменной для TX не менее 500 символов (Тут я попался, так как использовал внешний клиент сначала, поменял потом на сокет, а размерность осталась прежняя, потерял время пока увидел что команда ушла обрезанной, хоть и с правильной длиной).
Причина в кропнутом ответе. Из за некорректной команды сервак начинает тупить и время перед нормальным приёмом повторной команды иногда составляло до 20с

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



ссылка на сообщение  Отправлено: 03.09.19 00:03. Заголовок: не смог разобраться ..


не смог разобраться и понять :(
пора с бутылкой пива в личку ;)

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





ссылка на сообщение  Отправлено: 03.09.19 14:23. Заголовок: Пивом тут не обойдёт..


Пивом тут не обойдётся

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



ссылка на сообщение  Отправлено: 06.09.19 17:23. Заголовок: Вячеслав пишет: А..


Вячеслав пишет:
[quote]`
А возможно использовать вместо самописного модуля модуль TCP/IP Server для приема GET запроса на него?
Или из-за длины команды он никогда его не увидит?

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





ссылка на сообщение  Отправлено: 06.09.19 22:27. Заголовок: Да, возможно использ..


Да, возможно использовать внешний TCP/IP Server.
Просто вы будете ограничены по длине голосовых команд. Но в 80% случаев, особенно при использовании идентификаторов заменителей (например для варианта работы через умные устройства, так как символьное выражение голосовой команды там всё равно Яндексом не пересылается) внешнего модуля будет достаточно.
RX запрос с идентификатором "tv0" составляет всего 66 символов, т.е. 66-3=63. 63 это минимальная служебная информация добавляемая к вашему идентификатору команды+value.
255-63=192 Итого 192 символа останется на вашу команду вместе со статусом/value. Или половину (96) от этого если будет использоваться кириллица.
Чуть хуже ситуация с ответом. В моем случае служебный оверхед составляет порядка 184 символа (но это лишь в моем варианте). С другой стороны по методу 1, ответы вообще не нужны, так как Алиса не позволяет их озвучивать.
Главная сложность парсить приходящие команды. В случае SIMPL+ эта задача решается куда более ловко. А если уж дошли то SIMPL+, то добавить сокет сервера пользуясь справкой не составит труда.

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



ссылка на сообщение  Отправлено: 07.09.19 09:53. Заголовок: johnytsat пишет: Пы..


johnytsat пишет:

 цитата:
Пытался кто-нибудь связать Алису с Crestron с помощью новой API "Умный дом" от Яндекс?



А, где посмотреть этот API?

И, совсем ламмерский вопрос: Обязательно пользоваться Умной Колонкой или можно говорить в телефон?

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





ссылка на сообщение  Отправлено: 07.09.19 11:43. Заголовок: Можно говорить в тел..


Можно говорить в телефон.
Api можно посмотреть в разделе Яндекс диалоги
click here

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



ссылка на сообщение  Отправлено: 07.09.19 14:05. Заголовок: Вячеслав пишет: ..


Вячеслав пишет:
[quote]`

Спасибо. Говорю в телефон. Кузя отвечает заданным ответом, т.е. Правило выполняется, но GET запрос пока не приходит... Порт проброшен, на компе поднят TCP сервер.

Буду разбираться, вещь интересная...

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





ссылка на сообщение  Отправлено: 07.09.19 20:19. Заголовок: Похоже все таки сете..


Похоже все таки сетевая проблема. Смотрите Wireshark-ом, ну и сервер свой проверьте Hercules -ом (сначала на локальный IP, потом на внешний)

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



ссылка на сообщение  Отправлено: 07.09.19 21:55. Заголовок: Вячеслав пишет: ..


Вячеслав пишет:
[quote]`

Да, переброс портов не перебрасывается )))
Как раз Hercules'ом и слушаю TCP

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



ссылка на сообщение  Отправлено: 09.09.19 09:47. Заголовок: Я просто не до конца..


Я просто не до конца понимаю видимо,что нужно указывать в IP адрес сервера.
Потому что,чтобы что-то передать или получить сигнал Connect-F должен быть активным,как я понимаю?
И его status должен быть равен 2d?Тогда какой IP должен выступать в роли сервера?Адрес контроллера?

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





ссылка на сообщение  Отправлено: 09.09.19 11:46. Заголовок: Для варианта TCP/IP ..


Для варианта TCP/IP server используется 2 типа адреса:
Вариант1 0.0.0.0 позволяет организовать входящее подключение с любого внешнего адреса. Своего рода отключенный файервол.
Вариант2 x.x.x.x позволяет подключаться к вашему серверу клиенту с IP адресом x.x.x.x (Например можно вписать вместо x.x.x.x адрес сервера alexstar.ru 46.173.214.134, хотя правильнее вписать доменное имя alexstar.ru используя поле use host name) .
Впрочем, зная вашу url команду, другой пользователь сайта alexstar.ru сможет управлять вашими устройствами, поэтому держите ёё в секрете или реализуйте авторизацию basic (пароль и логин с вашей страницы настроек доступен только Вам). Но basic авторизация это уже однозначно программный код и на кубиках такого не сделать.
Никакие 127.0.0.1 или адрес крестрона сюда вписывать не нужно. Можно посмотреть контекстную справку по этому элементу в SimplWindows.
В общем случае status будет равен 1 (ожидание соединения), а Connect-F равен 0. Когда прилетит входящий Get, то статус поменяется на 2d , и Connect-F на 1. Это подключение будет вскоре разорвано (после передачи запроса Get), по инициативе сервера alexstar.ru, так как нет необходимости его поддерживать постоянно (оно и к лучшему). Не интересовался как долго сервис поддерживает это входящее соединение открытым, но скорее всего около 0,5s выделенные разработчиком для вашего ответа на Get запрос, если он предусмотрен.

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



ссылка на сообщение  Отправлено: 09.09.19 12:15. Заголовок: Спасибо огромное,оче..


Спасибо огромное,очень помогло двинуться!

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



ссылка на сообщение  Отправлено: 09.09.19 17:18. Заголовок: Не понял как убрать ..


Не понял как убрать задержку в 15с через поле Content-Length,ведь в GET-запросе этого поля нет.
Убрал задержку через последовательный SocketServerStopListen,SocketServerStartListen после получения запроса. Не знаю только,создаст ли это какие-нибудь проблемы?

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





ссылка на сообщение  Отправлено: 09.09.19 19:12. Заголовок: Задержка возникает п..


Задержка возникает при не корректном ответе на входящий Get.
Если вы не отправляете ответ с крестрона, то проблема задержки может быть иная..
Поле Content-Length относится лишь к ответу в формате json.
Как влияет SocketServerStopListen, SocketServerStartListen не могу сказать. Я изначально закрываю соединение, если оно остается активным более 0,2s в силу особенностей единственно возможного подключения. Но это скорее костыль на всякий случай. (Вот он видимо меня и выручил)
Вы хотите сказать, что если его не закрывать, то удаленная сторона закроет его не ранее чем через 15с и следовательно новые входящие запросы крестрон принять не сможет, потому что для них навык alexstar создает новые сессии?

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





ссылка на сообщение  Отправлено: 09.09.19 20:10. Заголовок: Paul_T пишет: Да, п..


Paul_T пишет:

 цитата:
Да, переброс портов не перебрасывается )))
Как раз Hercules'ом и слушаю TCP


Вангую, у Вас наверное роутер получает серый внешний адрес от провайдера.

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



ссылка на сообщение  Отправлено: 10.09.19 09:34. Заголовок: Вячеслав пишет: Д..


Вячеслав пишет:
[quote]`
Да,я пока без ответа делал,только на получение)И такое ощущение что SocketStartListen,если его не останавливать слушает в течении 15с.

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



ссылка на сообщение  Отправлено: 10.09.19 21:43. Заголовок: Вячеслав пишет: Е..


Вячеслав пишет:
[quote]`
Естественно, но это никогда не мешало достучаться на локальный IP по переброшенному порту. Дело в корявой прошивке MI роутера, поставил альтернативную, все работает...

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





ссылка на сообщение  Отправлено: 17.09.19 11:16. Заголовок: Вячеслав пишет: Да..


Вячеслав пишет:

 цитата:

Да, возможно использовать внешний TCP/IP Server.
Просто вы будете ограничены по длине голосовых команд.



А что мешает прием буферизировать, он ведь данные не должен потерять, просто дошлет их в следующих посылках CHANGE Rx и если поставить BUFFER_INPUT Rx, то все в итоге должно прийти корректно. (или я чего-то не знаю про TCP Server?)

А на отправку та же история - просто выходную команду отправлять в Tx циклом, разбивающим ее на куски по 250 байт, например.

HTTP сервер ведь не дурак, знает когда HTTP запрос начинается и когда заканчивается (по нескольким \x0D\x0A).

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





ссылка на сообщение  Отправлено: 17.09.19 11:25. Заголовок: Вячеслав пишет: Вы ..


Вячеслав пишет:

 цитата:
Вы хотите сказать, что если его не закрывать, то удаленная сторона закроет его не ранее чем через 15с и следовательно новые входящие запросы крестрон принять не сможет, потому что для них навык alexstar создает новые сессии?



johnytsat пишет:

 цитата:
Да,я пока без ответа делал,только на получение)И такое ощущение что SocketStartListen,если его не останавливать слушает в течении 15с.



Вклинюсь в диалог.
HTTP клиент, отправив вам HTTP запрос, ждет адрекватного ответа на него, по всем правилам HTTP. (С кодом завершения и тд).
А коль уж вы эмулируете HTTP сервер - вы должны ему этот ответ дать.
Иначе он будет ждать его, пока не наступит таймаут. Это легко увидеть в браузере - набрав соответсвующий URL вы будете видеть как он пытается что-то загрузить и потом отваливается по таймауту.

Вероятно, тот клиент не шлет следующие запросы, не завершив текущий. (Либо он однопоточный, либо крестроновский сокет не хочет принимать новые соединения.)

Принудительный обрыв соединения позволяет избавиться от долгого таймаута, но это, конечно, костыль и для клиента формально означает ошибку (Удаленный хост неожиданно оборвал соединение).
Поэтому обязательно ответьте на HTTP запрос минимально необходимым ответом, что-то типа
HTTP/1.1 200 OK\x0D\x0A\x0A\x0A
(пишу по памяти, примерно)

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



ссылка на сообщение  Отправлено: 18.09.19 20:35. Заголовок: Минимальный ответ не..


Минимальный ответ недостаточно.
Я вот такой ответ шлю через Serial I/O
HTTP/1.1 200 OK\x0d\x0aContent-Length: 30\x0d\x0aContent-Type: text/html\x0d\x0aConnection: keep-alive\x0d\x0a\x0d\x0a{"status":"ok","value":"100"}\x0D\x0A\x0D\x0A

Алиса переваривает, задержки в 15 сек нет...

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





ссылка на сообщение  Отправлено: 18.09.19 22:18. Заголовок: А почему Content-Len..


А почему Content-Length: 30 получился, а не 29 или это рукотворный отредактированный вариант?

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



ссылка на сообщение  Отправлено: 19.09.19 09:50. Заголовок: Вячеслав пишет: А п..


Вячеслав пишет:

 цитата:
А почему Content-Length: 30 получился, а не 29 или это рукотворный отредактированный вариант?



Да, рукотворный вариант. В Content-Lenght кроме основной нагрузки входит 1 символ перевода строки... Как я вычитал (хотя уже не уверен, сейчас перепроверю). Во всяком случае запрос моментально работает в из браузера, Алиса работает корректно, так-же корректно я вижу лог на сайте домовенка Кузи.

UPD
Лишний \n\r можно в конце не передавать. Content-Lenght сократил до реального значения 29
Кроме того, как оказалосьб достаточно передавать сообщение с таким заголовком:
HTTP/1.1 200 OK\x0d\x0aContent-Length: 29\x0d\x0a\x0d\x0a{"status":"ok","value":"100"}\x0d\x0a

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





ссылка на сообщение  Отправлено: 19.09.19 21:41. Заголовок: Я вообще после блока..


Я вообще после блока json ничего не добавляю, тоже норм.
Отправляю правда {"status":"ok","text":""} если ответ не предусмотрен. Наверное, можно и до {"status":"ok"} сократить

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





ссылка на сообщение  Отправлено: 21.09.19 17:27. Заголовок: Вячеслав пишет: Я в..


Вячеслав пишет:

 цитата:
Я вообще после блока json ничего не добавляю, тоже норм.



И это правильно, потому что длина контента задается в заголовке Content-Length и никаких дополнительных переводов строки в контенте не нужно.
Они нужны чтобы отделить контент от http-запроса или обозначить конец запроса, если контента нет.

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





ссылка на сообщение  Отправлено: 23.09.19 04:45. Заголовок: Не совсем так. Это и..


Не совсем так. Это используется при Chunked Encoding как альтернативе фиксированной длине, т.е. Chunked и Content-Length - взаимоисключающие методы.

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



ссылка на сообщение  Отправлено: 18.03.20 21:47. Заголовок: Коллеги, сейчас бьюс..


Коллеги, сейчас бьюсь с RGB лампой домовёнка Кузи и уже сломал себе весь мозг. Яндекс при попытке войти в настройки лампы говорит "Что-то пошло не так. Попробуйте позднее ещё раз", по всей видимости ему не нравятся ответы сервера.
Сервер кузи запрашивает состояние питания, яркость, цвет (цветовую температуру я не использую), в ответ соответственно получает:
HTTP/1.1 200 OK\x0D\x0AContent-Length:27\x0D\x0AContent-Type: text/html\x0D\x0AConnection: keep-alive\x0D\x0A\x0D\x0A{"status":"ok","value":"1"}\x0D\x0A\x0D\x0A
HTTP/1.1 200 OK\x0D\x0AContent-Length:28\x0D\x0AContent-Type: text/html\x0D\x0AConnection: keep-alive\x0D\x0A\x0D\x0A{"status":"ok","value":"61"}\x0D\x0A\x0D\x0A
HTTP/1.1 200 OK\x0D\x0AContent-Length:34\x0D\x0AContent-Type: text/html\x0D\x0AConnection: keep-alive\x0D\x0A\x0D\x0A{"status":"ok","value":"16711680"}\x0D\x0A\x0D\x0A

Может подскажете где я не прав?

UPD Вопрос снят
HTTP/1.1 200 OK\x0D\x0AContent-Length:34\x0D\x0AContent-Type: text/html\x0D\x0AConnection: keep-alive\x0D\x0A\x0D\x0A{"status":"ok","value":16711680}\x0D\x0A\x0D\x0A

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



ссылка на сообщение  Отправлено: 19.03.20 01:49. Заголовок: как варианнт: HTTP/..


как варианнт:

HTTP/1.1 200 OK\x0D\x0AContent-Length:34\x0D\x0AContent-Type: text/html\x0D\x0AConnection: keep-alive\x0D\x0A\x0D\x0A{"status":"ok","value":"16711680"}\x0D\x0A\x0D\x0A
UPD Вопрос снят
HTTP/1.1 200 OK\x0D\x0AContent-Length:34\x0D\x0AContent-Type: text/html\x0D\x0AConnection: keep-alive\x0D\x0A\x0D\x0A{"status":"ok","value":16711680}\x0D\x0A\x0D\x0A

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



ссылка на сообщение  Отправлено: 11.03.21 18:47. Заголовок: Уважаемые гуру! Пыта..


Уважаемые гуру! Пытаюсь скрестить Алису с Крестроном. Много не понятного. Возможно получить фрагмент программы крестрона с участием Алисы. В личку....

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

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