mqtt开关实现

这个项目的主要需求其实并不复杂,只是需要让用户可以在小程序上控制预约后的自习室座位的灯和柜子等的开关。这里的关键是需要通过一个网络应用来转发用户对智能硬件的控制请求。

物联网应用的主要几个难点及对应的思路如下:

  1. 通信数据量小、通信环境不确定。传统的HTTP/HTTPS协议相对比较复杂,传递这么小的数据量显然性价比过低,而且无法应对网络不稳定的状况。所以在loT应用中,通常使用MQTT协议代替HTTP协议来实现控制程序和智能硬件的通信。本文的目的不是介绍MQTT协议如何实践应用,所以不再赘述。
  2. 安全问题。这里初步计划是使用MQTT推荐的一些安全方案,加上阿里云的微消息队列MQTT自带的一些鉴权方案,如果资金充足考虑使用VPN来保证鉴权和加密的安全。
  3. 硬软件测试。软件层面相对解决方案比较成熟,有很多可以用的方案,这里先把软件方案设计展示出来。硬件层面则潜在的问题比较多,树莓派、输出接口、智能锁都有很多不确定的环节,只有拿到实物以后才有可能逐步覆盖测试。

MQTT协议架构

MQTT协议架构要求三个部分:发布者(Publish)、代理(Broker)、订阅者(Subscribe)。 其中,发布者负责发布消息,代理作为消息队列连接发布者和订阅者,订阅者接收消息。

MQTT协议下发送的消息格式为: - 固定报头(Fixed header): - 类型:连接、发布、订阅等 - 有效载荷(Payload): - 锁ID:自定义字段,标记需要操作的锁的ID - 开关行为:自定义字段,标记开关的行为,可选开、关、转换状态三种。

https://github.com/mcxiaoke/mqtt/blob/master/mqtt/02-ControlPacketFormat.md

MQTT协议下需要自定义安全方案。 最省事并且最贵的方法是搭建VPN,其次是实现双向鉴权,再其次是实现客户端鉴权。 加密方式考虑使用推荐的方案,比如AES对称加密。

https://github.com/mcxiaoke/mqtt/blob/master/mqtt/05-Security.md

完整架构

完整架构包括用户的操作和服务器的处理。用户通过HTTP请求开关,服务器接收HTTP请求以后把消息转给MQTT服务器。

技术选型

订阅者:Flask-MQTT

Flask-MQTT的文档推荐使用树莓派作为客户端,配合MQTT服务器使用,可以作为订阅者的选型。

"Flask-MQTT was developed to provide an easy-to-setup solution for interacting with IoT devices. A typical scenario would be a Raspberry Pi running a mosquitto mqtt server combined with a Flask webserver."

发布者:Flask/Django/云函数 + paho-mqtt

Flask-MQTT不支持多个Worker同时运行,所以这里考虑直接用底层的包实现转发协议。 服务端优选使用云函数,可以保持服务端的轻量级,和小程序云开发容易配合。 其次可以使用Flask和Django的Serverless Framework,方便部署和运维。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/73585.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

七夕特辑——3D爱心(可监听鼠标移动)

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄,vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

【C++】STL---list

STL---list 一、list 的介绍二、list 的模拟实现1. list 节点类2. list 迭代器类(1)前置(2)后置(3)前置- -、后置- -(4)! 和 运算符重载(5)* 解引用重载 和 …

感觉和身边其他人有差距怎么办?

虽然清楚知识需要靠时间沉淀,但在看到自己做不出来的题别人会做,自己写不出的代码别人会写时还是会感到焦虑怎么办? 你是否也因为自身跟周围人的差距而产生过迷茫,这份迷茫如今是被你克服了还是仍旧让你感到困扰? 下…

【C语言】字符函数和字符串函数

目录 1.求字符串长度strlen 2.长度不受限制的字符串函数 字符串拷贝strcpy 字符串追加strcat 字符串比较strcmp 3.长度受限制的字符串函数介绍strncpy strncat ​编辑strncmp 4.字符串查找strstr 5.字符串分割strtok 6.错误信息报告 strerror perror 7.字符分类函…

小程序的数据绑定和事件绑定

小程序的数据绑定 1.需要渲染的数据放在index.js中的data里 Page({data: {info:HELLO WORLD,imgSrc:/images/1.jpg,randomNum:Math.random()*10,randomNum1:Math.random().toFixed(2)}, }) 2.在WXML中通过{{}}获取数据 <view>{{info}}</view><image src"{{…

C++之atomic_load与atomic_store原子操作实例(一百八十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

他是98年的卷王,我真的玩不过他····

现在的小年轻真的卷得过分了。前段时间我们公司来了个98年的&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪18K&#xff0c;都快接近我了。后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天&#xff0c;原来这位小老弟家里条…

汽车租赁管理系统/汽车租赁网站的设计与实现

摘 要 租赁汽车走进社区&#xff0c;走进生活&#xff0c;成为当今生活中不可缺少的一部分。随着汽车租赁业的发展&#xff0c;加强管理和规范管理司促进汽车租赁业健康发展的重要推动力。汽车租赁业为道路运输车辆一种新的融资服务形式、广大人民群众一种新的出行消费方式和…

Nacos和GateWay路由转发NotFoundException: 503 SERVICE_UNAVAILABLE “Unable to find

问题再现&#xff1a; 2023-08-15 16:51:16,151 DEBUG [reactor-http-nio-2][CompositeLog.java:147] - [dc73b32c-1] Encoding [{timestampTue Aug 15 16:51:16 CST 2023, path/content/course/list, status503, errorService Unavai (truncated)...] 2023-08-15 16:51:16,17…

Mathematica(42)-计算N个数值的和

比如&#xff0c;我们要用Mathematica求得到下面的式子&#xff1a; 这就需要用到一个函数&#xff1a;Sum 具体地&#xff0c;Sum函数的使用形式如下&#xff1a; 因此&#xff0c;按照公式就可以得到下面的结果&#xff1a; 如果&#xff0c;我们想要将求和号也加进去&#…

Java 项目日志实例基础:Log4j

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ 介绍几个日志使用方面的基础知识。 1 Log4j 1、Log4j 介绍 Log4j&#xff08;log for java&#xff09;是 Apache 的一个开源项目&#xff0c;通过使用 Log4j&#xff0c;我…

Windows10上VS2022单步调试FFmpeg 4.2源码

之前在 https://blog.csdn.net/fengbingchun/article/details/103735560 介绍过通过VS2017单步调试FFmpeg源码的方法&#xff0c;这里在Windows10上通过VS2022单步调试FFmpeg 4.2的方法&#xff1a;基于GitHub上ShiftMediaProject/FFmpeg项目&#xff0c;下面对编译过程进行说明…