乐于分享
好东西不私藏

手把手教你用AI把海康SADP从Windows搬到麒麟——十轮对话搞定跨平台重构

手把手教你用AI把海康SADP从Windows搬到麒麟——十轮对话搞定跨平台重构

点击标题下「蓝色微信名」可快速关注

摘要:

信创时代,你是不是时常抱怨麒麟的生态不行?以前windows常用的小工具,神插件都用不了?抱怨没有用,我们自己的操作系统,需要我们自己努力构建生态。这次尝试虽然很小,但是让我看到了,在AI时代,编程可以不用啃协议、不用写界面、不用编译内核,全程跟AI聊天就把软件写出来了。

相似文章:

字节腾讯阿里三国杀:国内三大 AI IDE 全方位横评

3 天爆肝 3 万行代码,一个因 AI 编程而生的轻量监控项目

1为什么我们要重写SADP

海康威视的SADP是干安防、做弱电人必备神器,搜索网内海康摄像头、录像机,激活、修改IP等操作必不可少。但这玩意儿只出Windows版。如果是在信创终端上,要么用不了,要么得开个虚拟机,特别别扭。

没有现成的,怎么办?那就自己写一个。

放在以前,编写这样的一个软件,就算你很是一个熟练的程序员,也是一个不小的工作。因为除了编程工作,有很大的任务是得先去搞明白SADP的通信协议,虽然网上有不少资料,但是要啃完,在写算法,写界面、调bug……没一两周根本下不来。

但现在不一样了,我们有AI

今天这篇文章,我就用实现SADP的核心功能为例,记录完整的用AI大模型把Windows专用工具平移到麒麟系统的全过程。不需要你是协议专家,你只要初步了解pythonpyQT编程,然后AI会教你11步的,实现你所需要的功能。

2第一步:让AI先帮你理清楚到底要做什么

AI编程也是直接就跟他说:你给我编写一个和SADP一样的软件,也许他会响应,但是我但是结果一般不不会太好。

我的做法是:先不写代码,先做需求分析。我是这么问的:

分析总结SADP的基本功能,对功能进行拆解,对功能的必要性进行排序;提出你认为比较合适的实现方法,按实现的难易程度进行排序;我根据你的输出,提示你如何进行操作。

这相当于把AI当成一个资深架构师,让AI先帮你把地图画出来。

AI很快就回了一大段(这里的回复就不全贴了),把SADP的功能分成了三档:

·P0 核心必备:设备搜索、设备信息展示

·P1 高频使用:设备激活、修改网络参数、密码重置

·P2/P3 进阶:批量操作、固件升级、数据导出

同时还给了四种技术实现路线:纯socket自己撸协议、海康SDK封装、ONVIF+ISAPI混合、参考开源代码移植。

贴心的推荐了方案的事实策略和跨平台的注意事项。

从这个分析上来看,AI完全理SADP,甚至比我这个弱电佬都懂,我和AI在需求上已经“对齐”了,下一步需要进行编程了。

3第二步:给AI精准约束

下一步不是让AI直接写全部代码,而是继续缩小范围,因为AI编程也还是辅助,还是有些小bug需要调试,因此一步一来比较好。

这里我告诉AI我的具体决定:

“1.我选择首先实现2项核心功能+修改网络参数这3项功能,预留拓展空间(选择主要的功能)2.技术实现方案采用你推荐的方案为核心、方案为补充(小编就是听劝)3.采用此方法是不是不局限于海康威视的产品?(实际上这条偏离编程主题,败笔)4.我有海康威视的测试设备;银河麒麟系统是 aarch64 架构。(这是回答AI上次对我疑问)从我有的PyCharm编程环境,请从搭建编程环境开始,实现这个软件。

这段话其实是给AI画了一个非常清晰的圈:

  • 圈定范围:只做设备发现+修改网络参数,不急着一口吃胖
  • 圈定路线:用UDP组播模拟SADP搜索,用HTTP ISAPI做配置(纯Python,天然跨平台)
  • 圈定平台x86开发 + aarch64部署
  • 确认可行性:问AI能不能兼顾其他品牌,给我吃个定心丸

然后AI就开始干活了,上来给两个平台的 pip 安装命令,再给出项目目录结构。跨平台的伏笔在这里就埋下了:全程只用标准socketrequests库,不碰任何操作系统的私有API

4第三步:从界面开始搭骨架

关于先写协议还是先写界面,我觉得都可以,但是我还是先写界面,因为界面搭出来才是最快的正反馈——你马上就能看到东西,而且后续的调试也更直观。

我的指令很简单:

好的,我在Windows开发环境搭建(PyCharm),帮我先搭建基本的 PyQt5 界面框架。

因为根据上面来看,AISADP很熟悉,

然后AI就给我生成了一套完整的PyQt5主窗口,里面包含:

  • 一个设备表格,列名直接对齐海康原版SADP的字段(设备类型、IP、端口、掩码、网关、MAC、序列号、固件版本、状态)
  • 在线设备文字变绿,离线变灰
  • 点击搜索按钮先用模拟数据填充表格

这里我也很吃惊,因为我并没告诉AI表格要有几列,叫什么名字。但因为AI已经充分理解了SADP的功能,所以AI自动生成了符合预期的界面。可能是因为SADP使用率太高的软件,其他的软件可能需要微调。

运行起来一看,界面长这样(反正跟原版SADP差不多),AI甚至还贴心的给力模拟数据,心态一下就稳了。

5第四步:啃最难啃的骨头——设备搜索协议

这是整个项目最核心也最难的环节。SADP的搜索报文怎么发?发到哪个地址?设备是什么格式?我们平时用,但是从来没有了解过他

这时候不能直接丢一句帮我实现SADP协议,那样AI会懵。我的做法是带着具体目标去问这里我也是根据上次AI的建议:

帮我实现核心层 core/discover.py(这个在前面的软件框架可以看到):构造并发送 SADP 搜索报文,解析返回的设备信息,替换 on_search 中的模拟数据。

AI给出了完整的discover_devices函数,不但给出完整代码,还有思路,如果需要软件调试,也能有个帮助。

  • 使用组播地址239.255.255.250:37020(海康设备监听这个端口)
  • 报文是UTF-8编码的XML,根节点<Probe>
  • 收到应答后解析XML里的MACIP、序列号等字段
  • 用组播而不是抓链路层帧,这样不需要管理员权限

最后一个点特别重要——如果用原始帧(0x8033)的方式,在Linux上必须root运行,而我们选组播方案,普通用户权限就能跑,跨平台完美。

我一看这代码结构,socket收发、XML解析、MAC去重都考虑到了,甚至加了重复发送4次报文来提高可靠性。这说明AI不仅知道协议,还知道工程上该怎么写。

这时实现的效果:

发现只有搜索,但是没有停止,紧接着我增加了一个自己的需求:

main_window增加一个停止搜索的按键,并实现功能。

这个需求涉及到线程中断和UI通信,按理说得写不少代码。AI直接在原来的while循环里插入了threading.Event检查,然后通过pyqtSignal把结果传回主线程。只一轮对话就搞定了。

6第五步:激活设备 + IP,用HTTP搞定

设备搜索完了,下一步是激活新设备、修改网络参数。这两个功能海康是通过ISAPI接口提供的——其实就是HTTP请求。

我直接说:

继续实现设备激活和修改网络参数功能。

AI输出的core/config.py做了这么几件事:

  • 激活:对未激活设备发POST请求,body里带<ActivateInfo>,设置admin密码
  • 修改网络参数:先用HTTPDigestAuth做摘要认证,然后PUT一段网络配置XML/ISAPI/System/Network/interfaces/1
  • 顺便把ISAPI的状态码(1成功、3参数错误、5XML格式无效等)也列出来了

UI层,AI还给我加上了点击按钮弹出输入框的逻辑,以及后台线程处理防止界面卡死。

到这里,一个能搜设备、能激活、能改IPSADP替代品就已经能用了。

7第六步:加日志,方便调试

开发过程中肯定会有各种小问题,所以最后我补了一个要求:

为了调试方便,请在必要的地方增加详细的日志功能,并将日志输出到文件中。

AI给每个关键函数都埋了日志点,在main.py里做了双通道输出(控制台+文件)。

8在麒麟上跑起来

代码写完后,我拿到银河麒麟aarch64的机器上,先装依赖:

bashpip install PyQt5 requests

然后把整个项目目录拷过去,直接python main.py,搜索、激活、改IP一切正常。

整个迁移过程,一行代码没改。这就是从头就用跨平台技术栈的好处。

9复盘:我是怎么跟AI协作的

回顾整个开发过程,前后大约十轮对话,从零到可用的工具。总结下来,我并没有让AI包办一切,而是逐步让AI了解我们需要做什么,同时也了解AI能做什么,我把这个过程叫四步走(这个也是AI总结的)

Step 1:让AI先当架构师(需求分析 + 技术路线)

不要一上来就写代码。先让AI分析你要复刻的软件有什么功能、该怎么实现。这一步的目的是AI在你的会话里建立领域知识,后面AI才会越来越聪明。

你可以这样问分析XX软件的核心功能,按重要性排序;给出几种实现方案,比较优缺点。

Step 2:框定范围,明确约束(需求决策 + 环境设定)

拿到AI的分析之后,由你来拍板:做什么、不做什么、用什么技术、跑在什么平台上。然后把决策连同你的实际环境一起喂回去。

你可以这样问我选择做AB两个功能,用方案C的技术路线,运行环境是银河麒麟aarch64。请从环境搭建开始指导。

Step 3:分模块迭代,先界面后逻辑(UI先行 + 功能接力)

先从界面下手,马上看到东西,获得正反馈。然后一个功能一个功能地加,每次只聚焦一个点。

你可以这样问先帮我搭建一个包含表格和按钮的PyQt界面框架。”“现在把搜索按钮接到真实的设备发现函数上。

Step 4:保留上下文,要求全量输出(持续对话 + 最终整合)

不要开新会话,始终在同一个对话里迭代。每个阶段结束时,让AI把当前所有文件重新全量输出一次,确保没有遗漏。

你可以这样问请在必要处增加日志,然后输出当前全部完整的源代码文件。

10写在最后

这次实践让我真切感受到,AI已经可以成为软件迁移的超级助推器。以前需要啃协议、抠API、适配环境的苦活,现在通过几轮高质量的对话就能搞定。对于麒麟生态建设来说,这意味着大量原本锁死Windows上的行业小工具,有机会以极低的成本获得新生。

当然,这个程序的实现过程运气比较好,没有很大的错误,但我在其他软件实现的过程中,还是有不少的错误,需要多次对话消除。

如果你也有类似的迁移需求,不妨试着这样跟AI聊聊看。

关注放牛娃,好文章不迷路: