通过websockets管理Raspberry

Raspberry Pi在世界范围内获得了极大的欢迎。 但是,许多业余开发人员都面临着从Internet访问设备的问题。 通常,您必须使用DDNS或购买静态IP地址。 这两个选项都涉及设置路由器,该路由器并不适合所有人,并且并非始终可用。 另外,从Internet直接访问设备的开放还带来某些安全风险。

解决此问题的一种极为常见的方法是使用中间服务器,服务器和客户端通过该中间服务器相互连接。
该方案在各种远程访问软件包中非常广泛地使用:VNCViewer,AmmyyAdmin等。

选项1-DDNS

图片

选项2-静态IP地址

图片

选项3-使用中间服务器

图片

可以通过基于Websockets的MQTT协议来实现此连接方案,但是对我来说,实现更简单,面向JSON,可扩展的东西很有趣,而协议对消息大小没有限制,并且具有更明显的安全模型。

协议的选择是显而易见的。 长期以来,浏览器以及大多数平台和编程语言都支持WebSocket。

数据总线模型很简单:

WebSocket服务器支持无限数量的通道。 每个通道可以是开放的,也可以是受密码保护的。 通道仅在连接了至少一个客户端时才存在。 从根本上说,没有数据存储在服务器上。 密码由连接到该频道的第一个客户端设置。 没有密码/密码错误的客户将无法进入频道。

通道是消息的容器。 消息具有三种类型:地址消息(命令)(用于一个或多个收件人),响应消息和广播消息,将由与该通道连接的所有客户端接收。

图片

这种方案允许相对安全地为许多消费者使用通用集线器,因为 无需进行设置,无需在服务器上生成用户(如在MQTT中一样),生成访问密钥等。

消息不会保存在任何地方,不会记录,也不会通过wss安全协议进行传输。
消息是JSON对象类型的。 二进制信息作为Base64编码的字符串传输。

该项目代码在GitHub可用 ,您可以在此处找到当前的中心。
该项目由.net上的WebSocket服务器,连接到服务器的Web客户端应用程序以及用于raspberry pi的python应用程序组成。

Web应用程序远非与Websocket服务器交互的唯一可能方式。 例如,您可以轻松编写一个将“监听”网络摄像头事件并将图片保存到某种云存储中的云客户端。

该体系结构允许您每个通道连接无限数量的树莓派和客户端。
例如,如果您要构建某种安全/气候控制/智能家居系统,则可以将所有树莓派放在一个通道上,然后一次将命令发送给所有或某些实例。

广播事件“广播”将接收所有网络参与者。

关于应用程序功能的几句话


  1. 远程访问文件系统。 您可以观看,下载和上传图片,声音文件和其他文件。 不用在手机上保存整个多TB的照片档案,这非常方便。 好吧,或者如果您需要在档案中查找内容。
  2. PiCamera允许您按需和在网络摄像头模式下接收图像。 除了从麦克风接收声音,它还可以用作廉价的安全解决方案。 需要连接的pi摄像机。
  3. 将录音发送到树莓派或从麦克风接收录音。 它既可以用于某些安全任务,也可以与猫或儿童进行语音交互。 需要分别连接到电视/扬声器和麦克风。
  4. 打开/关闭/获得电视焦点。 CEC协议允许您通过HDMI电缆控制电视。 您必须在树莓派上安装cec-client。
  5. 在电视上显示音频和文本信息。 此功能包括在电视上打开和接收焦点以及显示带有声音信号的文本消息。 如果您需要远程强迫孩子做作业,这很方便。
  6. 远程图像显示。 如果您想给家人一个惊喜,并突然在家庭电视上显示您的冒险照片,那么此功能仅用于此目的。 选择您的PC或手机中的任何图片,然后发送到树莓派。
  7. 获取有关湿度,温度的数据。 Raspberry会以指定的周期发送广播消息。 除湿度和温度外,该消息还包含有关温度和处理器负载,磁盘和内存负载的信息。 远程I / O端口控制可一起用作室内气候的远程控制。 需要温度传感器DHT11($ 1)来测量温度。
  8. 管理I / O端口 它既允许从选定的GPIO端口读取信息,又可以向它们输出信号。 您可以获取开关,灯泡,铃铛的状态,并通过继电器控制一些更重要的设备。
  9. 远程启动命令允许在树莓派上执行任何shell命令。 例如,开始查看相册或电影。 如果这样的机会对您而言不安全,则可以禁用此功能。


图片
待续...

Source: https://habr.com/ru/post/zh-CN447496/


All Articles