Создание сайта для связи со встроенным устройством - PullRequest
5 голосов
/ 28 сентября 2010

В настоящее время я работаю над проектом, в котором я пытаюсь управлять встроенным устройством через веб-сайт, выходящий в Интернет.Идея состоит в том, что пользователь может перейти на веб-сайт и сказать этому устройству, чтобы он совершил какое-то действие.Действие на веб-сайте будет преобразовано в серию команд консоли и затем отправлено на устройство.В будущем общение потенциально может идти обоими путями, но сейчас я сосредоточен на сервер-устройство.

Веб-сервер - это LAMP-стек, использующий Python (Django) и устройство, которое я пытаюсь использовать.общаться с Beagle Board под управлением eLinux.В любое время будет существовать только одно устройство, осуществляющее связь с сервером.

У меня есть все функциональные части, написанные на стороне сервера и устройства, но у меня возникли некоторые проблемы с выяснением, как написатьуровень связи.Одна из моих больших проблем заключается в том, что устройство будет мобильным и будет перемещаться через каждые несколько дней.Поэтому я не могу гарантировать статический IP-адрес для устройства.Мои знания по сетевому программированию довольно минимальны, поэтому я не представляю, с чего начать.

У кого-нибудь есть идеи / ресурсы о том, как я могу начать развивать такого рода коммуникации?

Спасибо!

Ответы [ 4 ]

3 голосов
/ 28 сентября 2010

Если сервер будет статическим, вы всегда можете заставить устройство установить соединение с сервером и сообщить его IP-адрес.

Вы можете написать простой UDP-сервер чтобы устройство прослушивало входящие сообщения, а затем напишите клиент на python для вызова вашего веб-сервера.

3 голосов
/ 28 сентября 2010

Вы можете просто зарегистрировать динамическое имя хоста, используя провайдера, например DynDNS , и заставить устройство обновлять свой IP на этом веб-сайте, чтобы динамическое имя хоста всегда указывало на IP устройства - существует множество клиентов, скриптов и т.д. доступны для Linux, которые делают именно это.

2 голосов
/ 28 сентября 2010

Мой обычный режим поведения (конечно, поскольку он может проходить через NAT и т.п.) - это настроить устройство на обратный туннель SSH, который просто «звонит домой»: http://www.howtoforge.com/reverse-ssh-tunneling

Mindвы, SSH-соединения время от времени обрываются, поэтому я бы установил метод биения на сервере, и если клиент (Beagle Board) пропустит установленное количество биений, пусть он разрушит туннель и создаст новый.

0 голосов
/ 28 сентября 2010

устройство будет мобильным и будет перемещаться через каждые несколько дней.Поэтому я не могу гарантировать статический IP-адрес для устройства.

Ваше устройство может быть клиентом веб-сайта.

Ваш веб-сайт имеет два интерфейса.

  1. HTML-интерфейс для людей.

  2. Не-HTML интерфейс к устройству.В качестве клиента веб-сайта устройству потребуется HTTP-библиотека на стороне клиента для отправки запроса на веб-сайт.Этот запрос будет включать в себя IP-адрес устройства, а также все обычные вредоносные сообщения, скрытые в HTTP-запросе.(Существует несколько стандартных заголовков, которые отправляются в запросе)

После того, как устройство отправило свой первоначальный запрос, ваш веб-сайт может сохранить текущее состояние устройства и связаться с ним.через другой протокол, если вы хотите это сделать.(Я предполагаю, что «у меня все функциональные части написаны на стороне сервера и устройства» означает, что у вас есть какой-то другой протокол для управления устройством, и этот протокол не основан на HTTP.)

Этов конечном итоге может быть проще всего сделать так, чтобы устройство опрашивало веб-сайт на предмет наличия команд, обновлений или чего-либо еще.Таким образом, устройство представляет собой чистый веб-клиент, использующий только HTTP, а ваш веб-сайт - чистый веб-сервер, использующий только HTTP.Тогда вам не нужен ваш более специализированный второй протокол.Использование только HTTP означает, что вы можете использовать SSL для обеспечения безопасной связи.

Если ваше устройство использует HTTP для получения команд и обновлений, вам необходимо разработать пригодное для использования представление для данных, которые можно легко кодировать в HTTP.запросы и ответы.Выбор включает в себя XML, JSON и YAML.Вы всегда можете придумать свой собственный формат данных;однако, вы, вероятно, будете счастливее отлаживать стандартизированный формат, такой как JSON.

Создание этих двух интерфейсов в Django довольно тривиально.У вас просто будет несколько URL-адресов, предназначенных для людей, а некоторые - для вашего устройства.У вас будут функции просмотра для людей, которые возвращают страницы HTML, и функции просмотра для вашего устройства, которые возвращают сообщения JSON или XML.

...