Raspberry Pi завоевал огромную популярность во всем мире.
Однако многие разработчики-любители сталкиваются с проблемой доступа к устройству из Интернета.
Как правило, приходится творить чудеса с DDNS или покупать статический IP-адрес.
Оба варианта требуют настройки роутера, который есть не у всех и не всегда доступен.
Кроме того, открытие прямого доступа к устройству из Интернета несет в себе определенные риски безопасности.
Чрезвычайно распространенный способ решения этой проблемы — использование промежуточного сервера, через который сервер и клиент соединяются друг с другом.
Схема чрезвычайно широко используется в различных пакетах удаленного доступа: VNCViewer, AmmyyAdmin и др.
Вариант 1-DDNS
Вариант 2 – статический IP-адрес
Вариант 3 – использование промежуточного сервера
Эту схему подключения можно реализовать через протокол MQTT over Websockets, но меня интересовала реализация чего-то гораздо более простого, JSON-ориентированного, расширяемого, без ограничений протокола на размер сообщения и с более очевидной моделью безопасности.
Выбор протокола был очевиден.
WebSocket уже давно поддерживается браузерами, большинством платформ и языков программирования.
Модель шины данных тривиальна: Сервер WebSocket поддерживает неограниченное количество каналов.
Каждый канал может быть либо открытым, либо защищенным паролем.
Канал существует только до тех пор, пока к нему подключен хотя бы один клиент. Никакие данные принципиально не хранятся на сервере.
Пароль задается первым клиентом, подключающимся к каналу.
Клиенты без пароля/с неправильным паролем не будут допущены в канал.
Канал — это контейнер для сообщений.
Сообщения бывают трех типов: адресные сообщения (команды), которые предназначены для одного или нескольких получателей, ответные сообщения и широковещательные сообщения, которые будут получены всеми клиентами, подключенными к каналу.
Такая схема позволяет относительно безопасно использовать общие хабы для многих потребителей, поскольку нет необходимости в настройках, генерации пользователей на сервере (как в MQTT), генерации ключей доступа и т. д.
Сообщения нигде не сохраняются, не логируются и передаются по защищенному протоколу wss.
Сообщения представляют собой типизированные объекты JSON. Двоичная информация передается в виде строки в кодировке Base64.
Код проекта доступен по адресу GitHub , и вы сможете найти текущий хаб Здесь .
Проект состоит из сервера WebSocket в .
net, клиентского веб-приложения, которое подключается к серверу, и приложения Python для Raspberry Pi. Веб-приложение — далеко не единственный возможный способ взаимодействия с веб-сервером.
Например, вы легко можете написать облачный клиент, который будет «прослушивать» события с веб-камеры и сохранять изображения в какое-нибудь облачное хранилище.
Архитектура позволяет подключать к одному каналу неограниченное количество Raspberry Pi и клиентов.
Например, если вы хотите построить какую-то систему безопасности/климат-контроля/умного дома, вы можете поставить всю малину на один канал и отправлять команды всем или некоторым экземплярам сразу.
Трансляции событий будут принимать все участники сети.
Несколько слов о возможностях приложения
- Удаленный доступ к файловой системе.
Вы можете смотреть, скачивать и загружать изображения, звуковые файлы и другие файлы.
Довольно удобно, чтобы не таскать на телефоне весь свой многотерабайтный архив фотографий.
Ну или если нужно что-то поискать в архивах.
- PiCamera позволяет получать изображения как по запросу, так и в режиме веб-камеры.
Помимо приема звука с микрофона, его можно использовать в качестве недорогого решения для обеспечения безопасности.
Требуется подключенная камера Pi.
- Отправка звукозаписей на Raspberry или получение записей с микрофона.
Его можно использовать как для некоторых задач безопасности, так и для голосового взаимодействия с кошками или детьми.
Требуется подключение к телевизору/колонке и микрофону соответственно.
- Включите/выключите/получите фокус телевизора.
Протокол CEC позволяет управлять телевизором через кабель HDMI. Вам необходимо установить cec-клиент на малину.
- Отображение аудио и текстовой информации на телевизоре.
Эта функция включается, фокусируется на телевизоре и отображает текстовое сообщение, сопровождаемое звуковым сигналом.
Удобно, если вам нужно заставить детей делать домашнее задание удаленно.
- Дистанционное отображение изображений.
Если вы хотите удивить своих родных и неожиданно отобразить фото своих приключений на семейном телевизоре, то эта функция как раз для этого.
Выберите любую картинку с компьютера или телефона и отправьте ее на Raspberry.
- Получение данных о влажности и температуре.
Raspberry отправляет широковещательное сообщение с определенной частотой.
Помимо влажности и температуры, сообщение содержит информацию о температуре и загрузке процессора, загрузки диска и памяти.
Вместе с дистанционным управлением порты ввода-вывода можно использовать для дистанционного управления климатом в помещении.
Для измерения температуры требуется датчик DHT11 (1 доллар США).
- Управление портами ввода-вывода.
Позволяет как считывать информацию с выбранных портов GPIO, так и выводить на них сигнал.
Через реле можно получать статус выключателей, лампочек, звонков, а также управлять некоторыми более серьёзными устройствами.
- Удаленное выполнение команд позволяет выполнять любые команды оболочки на Raspberry. Например, начать просмотр фотоальбома или фильма.
Если эта функция кажется вам небезопасной, вы можете отключить ее.
Продолжение следует. Теги: #python #Raspberry Pi #разработка Raspberry Pi #websockets #ddns
-
Ноутбуки И Производители
19 Oct, 24 -
Лучшие Обзоры Веб-Хостинга
19 Oct, 24 -
Ваш Собственный Css-Фреймворк
19 Oct, 24 -
Passado.com Придет В Россию
19 Oct, 24 -
Yahoo Закрывает Свои Аукционы
19 Oct, 24 -
Ru-Center Начинает Хостинг
19 Oct, 24