Управление Raspberry Через Вебсокеты

Raspberry Pi завоевал огромную популярность во всем мире.

Однако многие разработчики-любители сталкиваются с проблемой доступа к устройству из Интернета.

Как правило, приходится творить чудеса с DDNS или покупать статический IP-адрес.

Оба варианта требуют настройки роутера, который есть не у всех и не всегда доступен.

Кроме того, открытие прямого доступа к устройству из Интернета несет в себе определенные риски безопасности.

Чрезвычайно распространенный способ решения этой проблемы — использование промежуточного сервера, через который сервер и клиент соединяются друг с другом.

Схема чрезвычайно широко используется в различных пакетах удаленного доступа: VNCViewer, AmmyyAdmin и др.

Вариант 1-DDNS

Управление Raspberry через вебсокеты

Вариант 2 – статический IP-адрес

Управление Raspberry через вебсокеты

Вариант 3 – использование промежуточного сервера

Управление Raspberry через вебсокеты

Эту схему подключения можно реализовать через протокол MQTT over Websockets, но меня интересовала реализация чего-то гораздо более простого, JSON-ориентированного, расширяемого, без ограничений протокола на размер сообщения и с более очевидной моделью безопасности.

Выбор протокола был очевиден.

WebSocket уже давно поддерживается браузерами, большинством платформ и языков программирования.

Модель шины данных тривиальна: Сервер WebSocket поддерживает неограниченное количество каналов.

Каждый канал может быть либо открытым, либо защищенным паролем.

Канал существует только до тех пор, пока к нему подключен хотя бы один клиент. Никакие данные принципиально не хранятся на сервере.

Пароль задается первым клиентом, подключающимся к каналу.

Клиенты без пароля/с неправильным паролем не будут допущены в канал.

Канал — это контейнер для сообщений.

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



Управление Raspberry через вебсокеты

Такая схема позволяет относительно безопасно использовать общие хабы для многих потребителей, поскольку нет необходимости в настройках, генерации пользователей на сервере (как в MQTT), генерации ключей доступа и т. д. Сообщения нигде не сохраняются, не логируются и передаются по защищенному протоколу wss. Сообщения представляют собой типизированные объекты JSON. Двоичная информация передается в виде строки в кодировке Base64. Код проекта доступен по адресу GitHub , и вы сможете найти текущий хаб Здесь .

Проект состоит из сервера WebSocket в .

net, клиентского веб-приложения, которое подключается к серверу, и приложения Python для Raspberry Pi. Веб-приложение — далеко не единственный возможный способ взаимодействия с веб-сервером.

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

Архитектура позволяет подключать к одному каналу неограниченное количество Raspberry Pi и клиентов.

Например, если вы хотите построить какую-то систему безопасности/климат-контроля/умного дома, вы можете поставить всю малину на один канал и отправлять команды всем или некоторым экземплярам сразу.

Трансляции событий будут принимать все участники сети.



Несколько слов о возможностях приложения

  1. Удаленный доступ к файловой системе.

    Вы можете смотреть, скачивать и загружать изображения, звуковые файлы и другие файлы.

    Довольно удобно, чтобы не таскать на телефоне весь свой многотерабайтный архив фотографий.

    Ну или если нужно что-то поискать в архивах.

  2. PiCamera позволяет получать изображения как по запросу, так и в режиме веб-камеры.

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

    Требуется подключенная камера Pi.

  3. Отправка звукозаписей на Raspberry или получение записей с микрофона.

    Его можно использовать как для некоторых задач безопасности, так и для голосового взаимодействия с кошками или детьми.

    Требуется подключение к телевизору/колонке и микрофону соответственно.

  4. Включите/выключите/получите фокус телевизора.

    Протокол CEC позволяет управлять телевизором через кабель HDMI. Вам необходимо установить cec-клиент на малину.

  5. Отображение аудио и текстовой информации на телевизоре.

    Эта функция включается, фокусируется на телевизоре и отображает текстовое сообщение, сопровождаемое звуковым сигналом.

    Удобно, если вам нужно заставить детей делать домашнее задание удаленно.

  6. Дистанционное отображение изображений.

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

    Выберите любую картинку с компьютера или телефона и отправьте ее на Raspberry.

  7. Получение данных о влажности и температуре.

    Raspberry отправляет широковещательное сообщение с определенной частотой.

    Помимо влажности и температуры, сообщение содержит информацию о температуре и загрузке процессора, загрузки диска и памяти.

    Вместе с дистанционным управлением порты ввода-вывода можно использовать для дистанционного управления климатом в помещении.

    Для измерения температуры требуется датчик DHT11 (1 доллар США).

  8. Управление портами ввода-вывода.

    Позволяет как считывать информацию с выбранных портов GPIO, так и выводить на них сигнал.

    Через реле можно получать статус выключателей, лампочек, звонков, а также управлять некоторыми более серьёзными устройствами.

  9. Удаленное выполнение команд позволяет выполнять любые команды оболочки на Raspberry. Например, начать просмотр фотоальбома или фильма.

    Если эта функция кажется вам небезопасной, вы можете отключить ее.



Управление Raspberry через вебсокеты

Продолжение следует. Теги: #python #Raspberry Pi #разработка Raspberry Pi #websockets #ddns
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.