基于 iAP2 协议 的指令协议,用于对安防设备的 MCU 进行操作
协议设计目标
1. 安全性:通过 iAP2 协议与 MCU 设备进行安全通信。
2. 通用性:支持对安防设备的常见功能进行操作,如状态查询、设备控制、参数配置等。
3. 高效性:数据结构简洁清晰,易于解析和扩展。
4. 扩展性:支持新指令和功能的快速集成。
协议框架设计
协议结构划分为以下几部分:
• 固定消息头:用于标识合法数据包。
• 协议版本号:支持版本管理。
• 设备标识:用于区分多个设备。
• 指令类型:分门别类标识操作。
• 指令编号:具体功能指令。
• 数据区长度:标识数据区大小。
• 数据区(可变):实际的指令参数。
• 校验字段:用于验证数据完整性。
- 数据包结构

- 指令类型和指令编号
指令类型(commandType):
commandType 描述
0x01 系统指令(重启、查询状态)
0x02 网络配置(Wi-Fi 配置等)
0x03 设备控制(门禁、警报等)
0x04 参数配置(灵敏度、模式等)
指令编号(commandID):
每种指令类型下定义具体的功能指令。
• 系统指令(commandType = 0x01)
commandID 描述 数据区内容
0x01 查询设备状态 无数据区
0x02 重启设备 无数据区
• 网络配置(commandType = 0x02)
commandID 描述 数据区内容
0x01 配置 Wi-Fi SSID + 密码
0x02 查询网络状态 无数据区
• 设备控制(commandType = 0x03)
commandID 描述 数据区内容
0x01 开启警报 无数据区
0x02 停止警报 无数据区
0x03 开门 门锁 ID
• 参数配置(commandType = 0x04)
commandID 描述 数据区内容
0x01 设置灵敏度 灵敏度值(1-10)
0x02 设置工作模式 模式值(0:关闭,1:开启)
- 数据包示例
示例 1:查询设备状态
• 协议头:0xAA55AA55
• 协议版本:0x01
• 设备 ID:0x00000001
• 指令类型:0x01(系统指令)
• 指令编号:0x01(查询设备状态)
• 数据区长度:0x0000(无数据区)
• 校验码:计算所得
完整数据包
AA 55 AA 55 01 00 00 00 01 01 01 00 00 02
示例 2:配置 Wi-Fi
• 协议头:0xAA55AA55
• 协议版本:0x01
• 设备 ID:0x00000001
• 指令类型:0x02(网络配置)
• 指令编号:0x01(配置 Wi-Fi)
• 数据区长度:0x0016(22 字节)
• 数据区内容:
• SSID: MyWiFi -> 6D 79 57 69 46 69
• 密码: 12345678 -> 31 32 33 34 35 36 37 38
• 校验码:计算所得
完整数据包:
AA 55 AA 55 01 00 00 00 01 02 01 00 16 6D 79 57 69 46 69 31 32 33 34 35 36 37 38 A5
示例 3:开启警报
• 协议头:0xAA55AA55
• 协议版本:0x01
• 设备 ID:0x00000001
• 指令类型:0x03(设备控制)
• 指令编号:0x01(开启警报)
• 数据区长度:0x0000(无数据区)
• 校验码:计算所得
完整数据包:
AA 55 AA 55 01 00 00 00 01 03 01 00 00 A8
- 数据校验
为了确保数据完整性,使用校验字段进行校验。可以采用 简单的 XOR 校验 或 CRC 校验。
校验码计算:
func calculateChecksum(for data: [UInt8]) -> UInt8 {return data.reduce(0) { $0 ^ $1 }
}
- iAP2 数据传输
通过 iAP2 协议的 EASession,利用输入输出流进行数据传输。
数据发送:
func sendCommand(to session: EASession, commandData: Data) {guard let outputStream = session.outputStream else { return }outputStream.open()let bytesWritten = commandData.withUnsafeBytes {outputStream.write($0.bindMemory(to: UInt8.self).baseAddress!, maxLength: commandData.count)}print("Bytes written: \(bytesWritten)")
}
数据接收:
func receiveData(from session: EASession) -> Data? {guard let inputStream = session.inputStream else { return nil }inputStream.open()var buffer = [UInt8](repeating: 0, count: 1024)let bytesRead = inputStream.read(&buffer, maxLength: buffer.count)if bytesRead > 0 {return Data(buffer.prefix(bytesRead))}return nil
}
总结
1. 协议设计:
• 数据包包含 头部、指令类型、数据区 和 校验字段,易于解析和扩展。
2. 数据传输:
• 通过 EASession 的输入输出流,与 MCU 设备通信。
3. 灵活性:
• 协议支持 设备控制、网络配置 和 参数设置 等常见功能,可根据业务需求扩展。
这套协议适用于基于 iAP2 的安防设备控制,确保通信可靠性和扩展性。
相关文章:
基于 iAP2 协议 的指令协议,用于对安防设备的 MCU 进行操作
协议设计目标 1. 安全性:通过 iAP2 协议与 MCU 设备进行安全通信。 2. 通用性:支持对安防设备的常见功能进行操作,如状态查询、设备控制、参数配置等。 3. 高效性:数据结构简洁清晰,易于解析和扩展。 4. 扩展性&#x…...
02-5.python入门基础一控制流(while)
Python 控制流是指控制程序执行顺序的机制,它允许程序根据不同的条件和情况执行不同的代码块或重复执行某些代码。 while 循环的用法与示例 语法结构及要点 在 Python 中,while循环是一种基于条件判断的循环结构,其语法构成如下:…...
Go语言开发入门与实战
Go语言(简称Golang)由Google开发,是一门现代化的编程语言,因其简洁高效、并发支持友好、跨平台特性而在后端服务开发、云计算等领域大放异彩。本文将介绍Go语言的基本特点、开发环境配置,并通过一个简单的实战项目带领大家快速上手。 一、Go语言的特点 简单易学:语法简洁…...
HarmonyOS Next应用开发实战:ArkWeb组件使用介绍及使用举例
ArkWeb简介 ArkWeb(方舟Web)是HarmonyOS Next中提供的一个Web组件,主要用于在应用程序中显示Web页面内容。这个组件使得开发者可以在HarmonyOS应用中嵌入Web页面,从而降低开发成本,提升开发和运营效率。 使用场景 A…...
【已解决】在Visual Studio里将应用与Microsoft Store关联时提示网络异常
发布Windows应用时。在Visual Studio里点击"发布“,将应用与Microsoft Store关联时,一直提示网络错误。 查了一下论坛,发现之前也经常出现,但我是第一次遇到。 不能就这样一直被卡着呀,研究了一下,还…...
springcloud-gateway获取应用响应信息乱码
客户端通过springcloud gateway跳转访问tongweb上的应用,接口响应信息乱码。使用postman直接访问tongweb上的应用,响应信息显示正常。 用户gateway中自定义了实现GlobalFilter的Filter类,在该类中获取了上游应用接口的响应信息,直…...
[笔记]关于Qt的nativeEvent事件无法接收window消息的Bug
1.nativeEvent事件无法接收window消息 此处不是nativeEvent不能接收,是possmessage一定要写对发送的软件名称,这个名称在Qt中是主界面类的名称,就是主界面UI的名称,而不是rc文件中定义的名称。 所以在FindWindow函数获取目标窗口…...
LeetCode 热题 100_K 个一组翻转链表(31_25_困难_C++)(四指针法)
LeetCode 热题 100_K 个一组翻转链表(31_25) 题目描述:输入输出样例:题解:解题思路:思路一(四指针法): 代码实现代码实现(思路一(四指针法&#x…...
Pytorch | 从零构建MobileNet对CIFAR10进行分类
Pytorch | 从零构建MobileNet对CIFAR10进行分类 CIFAR10数据集MobileNet设计理念网络结构技术优势应用领域 MobileNet结构代码详解结构代码代码详解DepthwiseSeparableConv 类初始化方法前向传播 forward 方法 MobileNet 类初始化方法前向传播 forward 方法 训练和测试训练代码…...
CSS系列(18)-- 工程化实践详解
前端技术探索系列:CSS 工程化实践详解 🏗️ 致读者:探索 CSS 工程化之路 👋 前端开发者们, 今天我们将深入探讨 CSS 工程化实践,学习如何在大型项目中管理 CSS。 工程化配置 🚀 项目结构 …...
日拱一卒(18)——leetcode学习记录:二叉树中的伪回文路径
一、题目 给你一棵二叉树,每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的,当它满足:路径经过的所有节点值的排列中,存在一个回文序列。 请你返回从根到叶子节点的所有路径中 伪回文 路径的数目。 二、思路 …...
hive—炸裂函数explode/posexplode
1、Explode炸裂函数 将hive某列一行中复杂的 array 或 map 结构拆分成多行(只能输入array或map) 语法: select explode(字段) as 字段命名 from 表名; 举例: 1)explode(array)使得结果中将array列表里的每个元素生…...
SpringBoot 新特性
优质博文:IT-BLOG-CN 2.1.0新特性最低支持jdk8,支持tomcat9 对响应式编程的支持,spring-boot-starter-webflux starter POM可以快速开始使用Spring WebFlux,它由嵌入式Netty服务器支持 1.5.8 2.1.0/2.7.0/3.0.0 Configuration propertie…...
鸿蒙app封装 axios post请求失败问题
这个问题是我的一个疏忽大意,在这里记录一下。如果有相同问题的朋友,可以借鉴。 当我 ohpm install ohos/axios 后,进行简单post请求验证,可以请求成功。 然后,我对axios 进行了封装。对axios 添加请求拦截器/添加响…...
消息队列 Kafka 架构组件及其特性
Kafka 人们通常有时会将 Kafka 中的 Topic 比作队列; 在 Kafka 中,数据是以主题(Topic)的形式组织的,每个 Topic 可以被分为多个分区(Partition)。每个 Partition 是一个有序的、不可变的消息…...
网络攻击与防范
目录 选填 第一章 1、三种网络模式 2、几种创建网络拓扑结构 NAT模式 VPN模式 软路由模式1 软路由模式2 3、Linux网络配置常用指令 4、常见网络服务配置 DHCP DNS Web服务与FTP服务 FTP用户隔离 第二章 DNS信息收集(dnsenum、dnsmap) 路…...
文献研读|基于像素语义层面图像重建的AI生成图像检测
前言:本篇文章主要对基于重建的AI生成图像检测的四篇相关工作进行介绍,分别为基于像素层面重建的检测方法 DIRE 和 Aeroblade,以及基于语义层面重建的检测方法 SimGIR 和 Zerofake;并对相应方法进行比较。 相关文章:论…...
【操作系统】为什么需要架构裁剪?
为什么需要架构裁剪? 原因 减小核心大小提高架构初始化速度降低内存占用提高系统性能移除不需要的功能,增加安全性 裁剪方法 初始化配置设置功能模块化移除不需要的驱动底层 一般裁剪对象(以操作系统为例) 文件系统的支持网…...
LSTM长短期记忆网络
LSTM(长短期记忆网络)数学原理 LSTM(Long Short-Term Memory)是一种特殊的递归神经网络(RNN),解决了标准RNN中存在的梯度消失(Vanishing Gradient) 和**梯度爆炸&#x…...
基于前端技术UniApp和后端技术Node.js的电影购票系统
文章目录 摘要Abstruct第一章 绪论1.1 研究背景与意义1.2 国内外研究现状 第二章 需求分析2.1 功能需求分析2.2 非功能性需求分析 第二章系统设计3.1 系统架构设计3.1.1 总体架构3.1.2 技术选型 3.2 功能架构 第四章 系统实现4.1 用户端系统实现4.1.1 用户认证模块实现4.1.2 电…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
Pandas 可视化集成:数据科学家的高效绘图指南
为什么选择 Pandas 进行数据可视化? 在数据科学和分析领域,可视化是理解数据、发现模式和传达见解的关键步骤。Python 生态系统提供了多种可视化工具,如 Matplotlib、Seaborn、Plotly 等,但 Pandas 内置的可视化功能因其与数据结…...
华为云Flexus+DeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手
华为云FlexusDeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手 一、构建知识库问答助手引言二、构建知识库问答助手环境2.1 基于FlexusX实例的Dify平台2.2 基于MaaS的模型API商用服务 三、构建知识库问答助手实战3.1 配置Dify环境3.2 创建知识库问答助手3.3 使用知…...
SQLSERVER-DB操作记录
在SQL Server中,将查询结果放入一张新表可以通过几种方法实现。 方法1:使用SELECT INTO语句 SELECT INTO 语句可以直接将查询结果作为一个新表创建出来。这个新表的结构(包括列名和数据类型)将与查询结果匹配。 SELECT * INTO 新…...
