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.mzph.cn/news/46259.shtml

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

相关文章

Qt下拉菜单

1,QComboBox 2,setMenu()---设置下拉菜单 AI对话未来丨智能写作对话: setMenu()是QWidget类的一个成员函数,在Qt中用于将一个菜单作为一个控件的下拉菜单设置。具体来说,它会把相应的菜单对象与该控件关联,并在控件上…

阿里云无影云电脑/云桌面收费价格表_使用申请方法

阿里云无影云电脑配置具体收费价格表,4核8G企业办公型云电脑可以免费使用3个月,无影云电脑地域不同价格不同,无影云电脑费用是由云桌面配置、云盘、互联网访问带宽、AD Connector 、桌面组共用桌面session 等费用组成,阿里云百科分…

Django的模型

定义模型 from django.db import models class User(models.Model):# 类属性是表示表的字段username models.CharField(max_length50,uniqueTrue)password models.CharField(max_length200)create_time models.DateTimeField(auto_now_addTrue) # auto_now_add新增数据时间…

计算机竞赛 垃圾邮件(短信)分类算法实现 机器学习 深度学习

文章目录 0 前言2 垃圾短信/邮件 分类算法 原理2.1 常用的分类器 - 贝叶斯分类器 3 数据集介绍4 数据预处理5 特征提取6 训练分类器7 综合测试结果8 其他模型方法9 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 垃圾邮件(短信)分类算…

NPM 创建和管理组织

目录 1、创建一个组织 2、将用户帐户转换为组织 3、组织中开启双因素身份验证 3.1 关于组织的双因素身份验证 3.2 先决条件 3.3 在您的组织中要求双因素身份验证 3.4 帮助已删除的成员和外部协作者重新加入您的组织 4、重命名组织 5、删除组织 1、创建一个组织 任何n…

Win7 x86 家庭版SP1 配置 Python 开发环境

1 Win7 下载地址 来源于 MSDN, 我告诉你 - 做一个安静的工具站 ed2k://|file|cn_windows_7_home_basic_with_sp1_x86_dvd_u_676500.iso|2653276160|843E7A78F2126FAC726CF5342710082D|/ 2 Python 版本选择 Python 3.7.9 Python Release Python 3.7.9 | Python.org 3 Pychar…

Shepherd: A Critic for Language Model Generation

本文是LLM系列的相关文章,针对《Shepherd: A Critic for Language Model Generation》的翻译。 Shepherd:语言模型生成的评价 摘要1 引言2 数据收集3 Shepherd模型4 评估反馈5 结果6 相关工作7 结论不足 摘要 随着大型语言模型的改进,人们对…

ChatGPT和Claude的能力全测评

创造性思维/语言 提示:“写一首 4 行诗,每行只有 3 个词,描写重庆” ChatGPT写诗👇 Claude写诗👇 仁者见仁,您怎么看谁更强? 提示: "如果你随机选择这个问题的答案,…

“维度削减+逻辑回归”:如何使用PCA大幅提升乳腺癌的预测成功率?

一、引言 乳腺癌是女性中最常见的恶性肿瘤之一,也影响着全球范围内许多人们的健康。据世界卫生组织(WHO)的数据,乳腺癌是全球癌症发病率和死亡率最高的肿瘤之一,其对个体和社会的危害不可忽视。因此,早期乳…

线性回归+基础优化算法

案例代码用法 torch.tensor(data, dtypeNone, deviceNone, requires_gradFalse) # data:表示要转换为张量的数据。可以是列表、NumPy 数组、标量值或其他可转换为张量的对象。 # dtype:可选参数,用于指定输出张量的数据类型。如果不指定&…

leetcode:字符串相乘(两种方法)

题目: 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 示例 1: 输入: num1 "2", nu…

【生态经济学】利用R语言进行经济学研究技术——从数据的收集与清洗、综合建模评价、数据的分析与可视化、因果推断等方面入手

查看原文>>>如何快速掌握利用R语言进行经济学研究技术——从数据的收集与清洗、综合建模评价、数据的分析与可视化、因果推断等方面入手 近年来,人工智能领域已经取得突破性进展,对经济社会各个领域都产生了重大影响,结合了统计学、…

周易卦爻解读笔记——未济

第六十四卦未济 火水未济 离上坎下 未济卦由否卦所变,否卦六二与九五换位,象征尚未完成。 天地否 未济卦和既济卦既是错卦又是覆卦,这也是最后一卦,序卦传【物不可穷也,故受之以未济终焉】 未济卦象征尚未完成&…

跨域资源共享 (CORS) | PortSwigger(burpsuite官方靶场)【万字】

写在前面 在开始之前,先要看看ajax的局限性和其他跨域资源共享的方式,这里简单说说。 下面提到大量的origin,注意区分referer,origin只说明请求发出的域。 浏览器的同源组策略:如果两个 URL 的 protocol、port 和 h…

达梦数据库表空间创建和管理

概述 本文将介绍在达梦数据库如何创建和管理表空间。 1.创建表空间 1.1表空间个数限制 理论上最多允许有65535个表空间,但用户允许创建的表空间 ID 取值范围为0~32767, 超过 32767 的只允许系统使用,ID 由系统自动分配,ID不能…

网页及屏幕的尺寸区域宽高总结

网页可见区域宽 document.body.clientWidth 网页可见区域高 document.body.clientHeight 网页可见区域宽(包括边线的宽) document.body.offsetWidth 网页可见区域高(包括边线的宽) document.body.offsetHeight 网页正文全文宽 document.body.scrollWidth 网页正…

数据库厂商智臾科技加入龙蜥社区,打造多样化的数据底座

近日,浙江智臾科技有限公司(以下简称“智臾科技”)正式签署 CLA 贡献者许可协议,加入龙蜥社区(OpenAnolis)。 智臾科技主创团队从 2012 年开始投入研发 DolphinDB。DolphinDB 作为一款基于高性能时序数据库…

W5500-EVB-PICO做UDP Client进行数据回环测试(八)

前言 上一章我们用开发板作为UDP Server进行数据回环测试,本章我们让我们的开发板作为UDP Client进行数据回环测试。 连接方式 使开发板和我们的电脑处于同一网段: 开发板通过交叉线直连主机开发板和主机都接在路由器LAN口 测试工具 网路调试工具&a…

Vue--进度条

挺有意思的&#xff0c;大家可以玩一玩儿&#xff1a; 前端代码如下&#xff1a;可以直接运行的代码。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content&qu…

open cv学习 (三) 绘制图形和文字

绘制图形和文字 demo1 # 绘制线段 import cv2 import numpy as np # 创建一个300300 3通道的图像 canvas np.ones((300, 300, 3), np.uint8)*255 # 绘制一条直线起点坐标为(50, 50)终点坐标为(250,50),颜色的BGR值为(255, 0, 0)(蓝色)&#xff0c;粗细为5 canvas cv2.line(…