基于 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 电…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
