大象笔记

知者行之始,行者知之成

TeamsACS 对于 PERIODIC Event 的处理逻辑

Event 类型的判别 tr069/handlers.go func (s *Tr069Server) processInformEvent(c echo.Context, lastInform *cwmp.Inform) { ... cpe := app.GApp().CwmpTable().GetCwmpCpe(lastInform.Sn) cpe.CheckRegister(c.RealIP(), lastInform) cpe.UpdateStatus(lastInform) // 通知系统更新数据 cpe.NotifyDataUpdate(false) log.In ...

阅读全文...

tr069 协议中何时使用 basic auth 或者 http digest auth

由于没有在 TeamsACS 的 tr069 server 部分代码中没有找到 HTTP Digest Auth Middleware 的逻辑。 我开始怀疑我对 tr069 协议的 auth 部分理解有问题。所以查询了 tr069 协议文档。 参考: https://www.broadband-forum.org/download/TR-069_Amendment-1.pdf 第一版,不推荐 https://www.broadband-forum.org/technical/download/TR-069_Amendment-5.pdf 推荐看第五版,这部分说明跟第一版有差异。这个文档真是 ...

阅读全文...

tr069 server TeamsACS 中的 Basic Auth 与 HTTP Digest Auth

我在 TeamsACS tr069/server.go 中只找到了 BasicAuth middleware, 并没有 http digest auth (准确地说 auth_client.go 中有实现,但是 server 逻辑里没有). Basic Auth TeamsACS 中 basic auth 的实现很敷衍,并没有校验密码。有几种可能: 要么我代码没有看仔细,逻辑有遗漏。可以给 CPE 模拟器增加 BootStrap 事件等模拟通信,由后台生成账号/密码,并观察后续流程 要么 TeamsACS 作为开源版本,隐藏了部分实现 支持 TLS 的情况下,ACS 不需要实现 http d ...

阅读全文...

tr069 CPE 模拟器 genieacs-sim 默认通信流程解读

cpe 端模拟器 genieacs sim 的日志 > ./genieacs-sim --acs-url=http://127.0.0.1:2999 Simulator 000000 started Simulator 000000 listening for connection requests on http://127.0.0.1:53849/ acs 端日志 增加了部分 debug 日志: message 类型是 Inform Inform 消息的 Event 类型是 PERIODIC 第一次请求的 body 长度是 2066, 第二次请求的 body 长度是 0 Con ...

阅读全文...

swaggo 通过 tag 限制生成接口文档的范围

这个周都在写 swaggo 接口文档,起因是要迁移一个旧的 golang gin 后台接口服务,新的系统只需要用到部分原有系统的接口。 但是,为了预防未来可能功能扩展,还是想继续保留原有系统的接口文档,不做删除处理。 那么,在用 swaggo 生成接口文档的时候,就出现了问题。如何屏蔽掉不需要的接口文档? 看起来很简单,直接用 exclude 参数不就行了?实际测试,这个 exclude 参数只支持目录,不支持具体文件,虽然 帮助文档里写是支持具体文件,但是即便更新了最新版本的 swaggo,也是不生效。 后来发现新版本支持了 tags 来指定生成文档。这就满足需求了,而且 tag 控制精度比 ...

阅读全文...

tr069 事件类型 (event type)

Inform 类型的消息中,包含 Event 信息。 All communications and operations are performed in the scope of the provisioning session. The session is always started by the device (CPE) and begins with the transmission of an Inform message. 触发 provisioning session 的事件列表: Event List Bootstrap – when device contacts ...

阅读全文...

tr069 消息类型 (message type)

tr069 是基于 SOAP 的 RPC 协议。 message type 可以理解为每个 RPC 的方法名。 这里有趣的地方是,既然是远程调用,那么就存在两种情况: ACS 调用 CPE 的方法 CPE 调用 ACS 的方法 ACS 调用 CPE 的方法列表 GetPRCMethods: 获取 CPE 所支持的方法集合 GetParameterNames: Retrieve list of supported parameters from the device. GetParameterValues: Retrieve current value of the parameter(s ...

阅读全文...

TeamsACS 代码目录结构

粗略浏览一遍,大概了解每个模块的每个文件是实现什么功能的。可以 tree 一下结构,把每个文件的注释加上。 查看目录 排除 assets 子目录,因为下面的 js 文件太多。 tree -I assets 目录结构 . ├── Dockerfile ├── Dockerfile.local ├── License ├── Makefile // 里面的生成证书和部署方式可以借鉴 ├── README.md ├── assets // 前端代码 ├── app │   ├── app.go │   ├── constant.go │   ├── cwmp.go │   ├── cwmp_p ...

阅读全文...

tr069 协议中,acs 与 cpe 的完整通信过程

TR-069协议是一种用于远程管理设备、进行配置和故障排除的协议。它使用客户端/服务器模型,其中ACS(自动配置服务器)充当服务器,CPE(客户端设备)作为客户端。 之前刚接触 tr069 协议的时候,简单了解过 TR-069 协议中 CPE 与 ACS 的会话过程 。但是整体流程还是不够清晰,网上也没有完整的逻辑流程图。 向 ChatGPT 请教 tr069 协议中,acs 与 cpe 的完整通信过程 还是 AI 解释的更通俗易懂一些。 以下是TR-069协议中ACS与CPE之间的完整通信过程: 0. 前置条件 在 CPE 配置 ACS 的 URL 地址 设置连接周期 In ord ...

阅读全文...

一个简单问题快速区分 ChatGPT 4 与 3.5

今天在 V2EX 论坛上学到了一个有趣的技巧:如何一句话区分 ChatGPT 3.5 与 4。 目前我用到的大部分免费的 ChatGPT 套壳网站都是基于 ChatGPT 3.5 的,偶有标榜使用了 ChatGPT 4 接口的网站。即便是申明使用了 4 的接口,很多也是挂着羊头卖狗肉。比较 4 的接口成本太高了。 回归正题,直接看截图: 这个我一直在用的一个套壳站,果然一句话就露馅了,这就是典型的 ChatGPT 3.5 的回复。 对于 4 则是有逻辑性的分析过程: 问:小明 8 岁,他妹妹年龄是他的一半。小明 56 岁时,妹妹几岁 答:小明现在 8 岁,他的妹妹年龄是他的一半,因此妹 ...

阅读全文...

Rasa 中 JiebaTokenizer, LanguageModelFeaturizer 与 DIETClassifier 各自的作用及区别

虽然我已经 用 Rasa 实现了中文自动问答机器人功能,但是里面 pipeline 的配置,其实我完全没看明白各个组件起到的作用。我已经很认真地读了几遍官方文档关于各个组件的描述,英文/中文文档都看了不少,对我来说太晦涩了,无法理解。 但是这个项目除了要实现功能,还要做成 PPT 给合作方讲解,对方有深度学习的专家教授,这就更尴尬了。只能临时抱佛脚求助 ChatGPT,没想到 AI 给出的解释通俗易懂,真大哥也。 除了口头禅 “总之”,其他都挺好的。 rasa 中 DIETClassifier 的作用 在 Rasa 中,DIETClassifier 是一种用于意图分类和实体提取的深度学习模型。 ...

阅读全文...

对话机器人 rasa(六): 基于 websocket 的网页组件

由于要现场演示 Rasa 对话机器人的实际效果,感觉用 Rasa Shell 命令来演示不太正式。 还是用网页版 Rasa 组件来演示更直观一些,也容易理解。 再就是我想把对话场景制作成一段小视频,或 gif,放到 PPT 里给客户演示。这种情况,也是网页端更简单直观。 页面效果 但是官方组件在手机端体验不太好,底部发送按钮有遮拦,在 iphone 上按钮超出右侧屏幕,原因是宽度都是用的 px 写死。 rasa websocket 配置 打开配置文件 credentials.yml: 增加 socketio: user_message_evt: user_uttered bot_me ...

阅读全文...