MiFaZhan
|
e98f8561f7
|
fix(deploy): nginx 上游运行期重新解析 + 就绪探针;内存上限按 8C/32G 重新分配
mirror-to-gitee / mirror (push) Successful in 9s
问题:容器重建换 IP 后,网关与 admin-ui 仍往旧 IP 打,/openapi 与 /api
整片 502,必须手动重启 nginx 容器才恢复(2026-11-03 实机踩到)。
编排
- admin-svr / openapi / admin-ui / docs 增加 healthcheck
- admin-ui、gateway、nginx 改 depends_on: condition: service_healthy,
保证 nginx 启动时后端已就绪
- 新增 deploy/compose.memlimit.yml(原来只存在于某台演示机上):
全套上限 8.5G、实测常驻 2G,留给同机其它服务 20G+;
MySQL buffer pool 128M→768M、max_connections 151→300
nginx
- gateway / admin-ui / iotlcm.conf 示例 统一改 resolver 127.0.0.11 valid=10s
+ upstream zone/resolve:运行期跟随 IP 变化,不必重启(实测 6s 内自愈)
|
2026-11-03 10:40:48 +08:00 |
|
MiFaZhan
|
70749bea7a
|
docs: README 手册入口改为公网地址(open.5iot.com:5051)
mirror-to-gitee / mirror (push) Has been cancelled
使用手册(Web / 小程序)、部署手册、OpenAPI 合同、共享 Token 全部指向
在线文档站,附文档源码位置(docs/)与自建实例的 8019 访问方式。
|
2026-11-03 09:30:23 +08:00 |
|
MiFaZhan
|
fd42b5976e
|
docs: 重写 README(用户视角,含手册跳转)+ 去掉「开源版」措辞 + 单端口入口 5051
mirror-to-gitee / mirror (push) Successful in 4s
trigger-jenkins-oss / trigger (push) Successful in 0s
README
- 标题去掉「(开源版)」:对使用者就是 iotLCM
- 新增「文档」表:使用手册(Web 端 / 小程序端)、部署手册、OpenAPI 合同、
共享 Token 接口,全部指向仓内 docs/ 路径;并给出部署后的文档站地址
- 补功能概览、服务构成(带镜像 tag)、从源码构建、版本与镜像、许可
去措辞
- Gitee 建仓描述同步去掉「(开源版)」
单端口入口(新增,对外默认 5051)
- deploy/config/gateway/nginx.conf:/ → 管理端、/docs/ → 文档站、
/openapi/ 与 /route/open/ → openapi
- compose 增加 gateway 服务(profile with-gateway),端口由 GATEWAY_PORT 控制
实测:/ 200、/docs/ 200(含静态资源)、/api/agent/dept/list 200、
/api/system/auth/login 返回后端真实 JSON
- nginx profile 的 80 端口改为可配 NGINX_HTTP_PORT(文档早有提及但 compose 写死)
- 部署手册概览页修正过期内容(schema 单文件、服务清单补全)、optional 增单端口入口段
v1.0.4
|
2026-11-02 14:57:57 +08:00 |
|
MiFaZhan
|
a7c15cf891
|
chore: 移除一次性探测/清理工作流(Gitee 删除需 projects 权限,API 侧 403)
mirror-to-gitee / mirror (push) Successful in 4s
|
2026-11-02 14:25:34 +08:00 |
|
MiFaZhan
|
2548976f73
|
chore: 探测 Gitee 删除端点(一次性)
mirror-to-gitee / mirror (push) Successful in 5s
|
2026-11-02 14:24:18 +08:00 |
|
如是 & 技小云
|
17c839daac
|
fix(deploy): Mock 通道凭据对齐挡板默认值
mirror-to-gitee / mirror (push) Successful in 5s
schema/init.sql 里 sim_yd_mock_v5 通道的 app_key/app_secret 仍是内网挡板的老值(100059999270000006 / 老口令),与开源版挡板 onelink-mock 的默认凭据(demo_appid / demo_password,见 onelink-mock/internal/service/store.go 的 defaultStore())不一致,导致 chan 侧向挡板换 Token 失败。
改为挡板当前实际默认值,并在注释里标注取值来源。
|
2026-11-02 14:23:03 +08:00 |
|
MiFaZhan
|
f76e988689
|
chore: 清理工作流改为 artifact 回报(Gitea 无日志读取 API)
mirror-to-gitee / mirror (push) Successful in 7s
|
2026-11-02 14:22:00 +08:00 |
|
MiFaZhan
|
1634d27a43
|
chore: 一次性清理工作流(删除 Gitee 侧 12 个已并入单仓的旧仓)
mirror-to-gitee / mirror (push) Successful in 5s
删除后会再删掉本文件。
|
2026-11-02 14:20:13 +08:00 |
|
MiFaZhan
|
42d12d905a
|
chore: 小程序线(app)固定 v1.0.2,不跟随平台 tag
mirror-to-gitee / mirror (push) Successful in 5s
版本号与功能一一对应:小程序线功能停在 v1.0.2,镜像 tag 也停在 v1.0.2,
平台后续发 v1.0.5 时它不动。
- deploy/docker-compose.yml:app-server / app-web 两行回退 v1.0.2
- Makefile:IMAGE_MAP 增加第 5 列「固定版本」,app 两行填 v1.0.2,
本地构建与 CI 行为一致
- 根 README:新增「小程序线是独立版本线」说明
- app/README.md:标注本目录对应 v1.0.2,不跟随平台 tag
- 文档:deploy/README 版本表、build-image 的 tag 表与说明、
offline / prerequisites / configuration 示例 tag 全部回退 v1.0.2
CI 侧由 Jenkins 流水线的 PIN 表(app|v1.0.2)保证:tag 构建自动跳过 app,
需要重建时单独触发 SERVICES=app VERSION=v1.0.2。
|
2026-11-02 14:11:13 +08:00 |
|
MiFaZhan
|
89a15c4fca
|
chore: make help 只列命令,不再多印配置行
mirror-to-gitee / mirror (push) Successful in 4s
|
2026-11-02 13:59:47 +08:00 |
|
MiFaZhan
|
34669c9e1f
|
chore: 镜像校验覆盖 tag 集合
mirror-to-gitee / mirror (push) Successful in 4s
推送后除比对 main 的 sha,还比对本地与 Gitee 端的 tag 集合,
不一致即判失败(Gitee 限流时容易出现“推送成功但 tag 丢失”)。
|
2026-11-02 13:55:45 +08:00 |
|
MiFaZhan
|
12512b06ff
|
fix: 单仓后统一版本号与访问地址说明
mirror-to-gitee / mirror (push) Successful in 4s
trigger-jenkins-oss / trigger (push) Successful in 0s
- 编排与文档里的 app 镜像 tag 由 v1.0.2 统一为 v1.0.4(单仓一个发布版本,
v1.0.4 包含 app 线,不再保留源仓的历史 tag 差异)
- deploy/README.md、docs/deploy/install.md 明确业务端口默认只绑 127.0.0.1,
并给出对外访问的两种做法(with-nginx profile / 改绑定)
- mirror-to-gitee 增加推送后校验:远端 main 与本地不一致则判失败
|
2026-11-02 13:40:26 +08:00 |
|
MiFaZhan
|
f7cab5ad5c
|
chore: 整合为单仓 iotlcm(12 个仓 → 1 个仓)
mirror-to-gitee / mirror (push) Successful in 14s
把原来 12 个独立仓合并为单仓多服务结构,各仓完整提交历史通过
read-tree 并入保留(137 个提交,blame 可追溯)。
目录:
admin-svr/ admin-ui/ app/{server,app}/ openapi/ worker-svr/
upstream-chan/ upstream-proxy/ sms/ bot/ docs/ onelink-mock/ deploy/
同时:
- 新增根 README(目录说明、快速开始、源码构建、镜像发布、许可)
- 新增根 Makefile(make build / test / images / docs)
- 新增根 .gitattributes / .gitignore,删掉 12 份重复的 Apache LICENSE
(admin-ui/ 与 app/app/ 的 MIT 上游许可保留)
- 各服务的 .gitea/workflows 收敛到仓根:trigger-jenkins.yml(tag 构建全部
服务)+ mirror-to-gitee.yml(自动建 Gitee 仓后镜像)
- 文档内跨仓绝对链接改为仓内相对路径;部署/构建文档改为单仓路径
|
2026-11-02 13:35:58 +08:00 |
|
MiFaZhan
|
2923c78755
|
chore: 并入 iotlcm-worker-svr 历史到 worker-svr/(原提交 96f0f4e)
|
2026-11-02 13:28:03 +08:00 |
|
MiFaZhan
|
6de2e503cc
|
chore: 并入 iotlcm-upstream-proxy 历史到 upstream-proxy/(原提交 44209ec)
|
2026-11-02 13:28:02 +08:00 |
|
MiFaZhan
|
9c9f6c2a29
|
chore: 并入 iotlcm-upstream-chan 历史到 upstream-chan/(原提交 1e74497)
|
2026-11-02 13:28:02 +08:00 |
|
MiFaZhan
|
691b792391
|
chore: 并入 iotlcm-sms 历史到 sms/(原提交 1d38bc4)
|
2026-11-02 13:28:02 +08:00 |
|
MiFaZhan
|
b10b8cfc51
|
chore: 并入 iotlcm-openapi 历史到 openapi/(原提交 3b05d5a)
|
2026-11-02 13:28:02 +08:00 |
|
MiFaZhan
|
c3c1f09ebd
|
chore: 并入 iotlcm-onelink-mock 历史到 onelink-mock/(原提交 f398595)
|
2026-11-02 13:28:02 +08:00 |
|
MiFaZhan
|
029f81fb1c
|
chore: 并入 iotlcm-docs 历史到 docs/(原提交 947e22e)
|
2026-11-02 13:28:01 +08:00 |
|
MiFaZhan
|
fa1f96e942
|
chore: 并入 iotlcm-deploy 历史到 deploy/(原提交 eb97c53)
|
2026-11-02 13:28:00 +08:00 |
|
MiFaZhan
|
05014446c3
|
chore: 并入 iotlcm-bot 历史到 bot/(原提交 31dbc1d)
|
2026-11-02 13:28:00 +08:00 |
|
MiFaZhan
|
226495365e
|
chore: 并入 iotlcm-app 历史到 app/(原提交 f40bda9)
|
2026-11-02 13:28:00 +08:00 |
|
MiFaZhan
|
03ef151f5b
|
chore: 并入 iotlcm-admin-ui 历史到 admin-ui/(原提交 f305eab)
|
2026-11-02 13:27:59 +08:00 |
|
MiFaZhan
|
193f7393c0
|
chore: 并入 iotlcm-admin-svr 历史到 admin-svr/(原提交 49818c6)
|
2026-11-02 13:27:59 +08:00 |
|
MiFaZhan
|
976980a3f5
|
chore: 初始化 iotlcm 单仓(开源版)
|
2026-11-02 13:27:59 +08:00 |
|
MiFaZhan
|
eb97c5300a
|
fix: 修复代理转发端口缺失与 mock 通道未实例化
测试反馈两个问题:
1. 代理转发地址只写了服务名 upstream-chan,未带端口 → 默认连 80 端口被拒。
改为 upstream-chan:8110。已核对其它服务(admin-svr / openapi / app-server /
worker-svr)的上游地址均带端口,只有 upstream-proxy 这一处遗漏。
2. 直连 8110 查询报「通道未实例化」。根因在种子数据的 is_normal:
该字段语义是 0=正常、1=异常(chan 侧 CanCreateInstance 只在 *IsNormal==0 时
创建实例;NULL 也不合格)。mock 通道原来写的 1,因此实例从未创建。
改为 0。注意内网演示环境种子同样是 1,属开源版修正。
种子的 ON DUPLICATE KEY UPDATE 已包含 is_normal,老库重跑该段即可修复。
已验证(清空 data 目录从零启动):
- t_sim_channels 中 channel_yd_mock 的 is_normal=0
- chan 日志出现 Create channel instance success, chanKey: channel_yd_mock
- 日志无 abnormal / 未实例化 相关记录
|
2026-10-30 17:44:02 +08:00 |
|
MiFaZhan
|
01d1e39c34
|
fix: docs 镜像改回 v1.0.4(修复已并入该版本,不新增版本号)
版本号与功能一一对应,这是开源发布版本,修复不能自造新版本号。
- iotlcm-docs 的 git tag v1.0.4 前移到含 nginx 修复的提交(947e22e)
- 镜像 iotlcm/iotlcm:iotlcm-docs-v1.0.4 用修复版覆盖(现 digest 8ae5b646)
- 删除临时产生的 git tag v1.0.5 与镜像 tag iotlcm-docs-v1.0.5
- 本仓 docs 镜像 tag 从 v1.0.5 改回 v1.0.4
实测重新拉取 v1.0.4 后:/ 302、/docs/ 200、/docs/manual/web/ 200、核心 CSS 200。
|
2026-10-30 13:39:20 +08:00 |
|
MiFaZhan
|
a8a5537c69
|
ci: 镜像到 Gitee 增加退避重试与每日兜底
Gitee 在推送密集时返回 429 Pending queue overflowed / 408 Authorization server
timeout,属服务端限流,原实现一次失败即终止。
- 推送改为最多 5 次退避重试(30s/60s/90s/120s)
- 增加每日定时兜底(18:30 UTC = 次日 02:30 北京时间),
避免某次推送失败后长期不同步
|
2026-10-30 13:20:32 +08:00 |
|
MiFaZhan
|
f3985950cc
|
ci: 镜像到 Gitee 增加退避重试与每日兜底
Gitee 在推送密集时返回 429 Pending queue overflowed / 408 Authorization server
timeout,属服务端限流,原实现一次失败即终止。
- 推送改为最多 5 次退避重试(30s/60s/90s/120s)
- 增加每日定时兜底(18:30 UTC = 次日 02:30 北京时间),
避免某次推送失败后长期不同步
|
2026-10-30 13:20:31 +08:00 |
|
MiFaZhan
|
947e22e3b9
|
ci: 镜像到 Gitee 增加退避重试与每日兜底
Gitee 在推送密集时返回 429 Pending queue overflowed / 408 Authorization server
timeout,属服务端限流,原实现一次失败即终止。
- 推送改为最多 5 次退避重试(30s/60s/90s/120s)
- 增加每日定时兜底(18:30 UTC = 次日 02:30 北京时间),
避免某次推送失败后长期不同步
|
2026-10-30 13:20:30 +08:00 |
|
MiFaZhan
|
31dbc1d910
|
ci: 镜像到 Gitee 增加退避重试与每日兜底
Gitee 在推送密集时返回 429 Pending queue overflowed / 408 Authorization server
timeout,属服务端限流,原实现一次失败即终止。
- 推送改为最多 5 次退避重试(30s/60s/90s/120s)
- 增加每日定时兜底(18:30 UTC = 次日 02:30 北京时间),
避免某次推送失败后长期不同步
|
2026-10-30 13:20:00 +08:00 |
|
MiFaZhan
|
1d38bc4226
|
ci: 镜像到 Gitee 增加退避重试与每日兜底
Gitee 在推送密集时返回 429 Pending queue overflowed / 408 Authorization server
timeout,属服务端限流,原实现一次失败即终止。
- 推送改为最多 5 次退避重试(30s/60s/90s/120s)
- 增加每日定时兜底(18:30 UTC = 次日 02:30 北京时间),
避免某次推送失败后长期不同步
|
2026-10-30 13:19:59 +08:00 |
|
MiFaZhan
|
f40bda99a8
|
ci: 镜像到 Gitee 增加退避重试与每日兜底
Gitee 在推送密集时返回 429 Pending queue overflowed / 408 Authorization server
timeout,属服务端限流,原实现一次失败即终止。
- 推送改为最多 5 次退避重试(30s/60s/90s/120s)
- 增加每日定时兜底(18:30 UTC = 次日 02:30 北京时间),
避免某次推送失败后长期不同步
|
2026-10-30 13:19:58 +08:00 |
|
MiFaZhan
|
44209ecaaf
|
ci: 镜像到 Gitee 增加退避重试与每日兜底
Gitee 在推送密集时返回 429 Pending queue overflowed / 408 Authorization server
timeout,属服务端限流,原实现一次失败即终止。
- 推送改为最多 5 次退避重试(30s/60s/90s/120s)
- 增加每日定时兜底(18:30 UTC = 次日 02:30 北京时间),
避免某次推送失败后长期不同步
|
2026-10-30 13:19:57 +08:00 |
|
MiFaZhan
|
1e74497728
|
ci: 镜像到 Gitee 增加退避重试与每日兜底
Gitee 在推送密集时返回 429 Pending queue overflowed / 408 Authorization server
timeout,属服务端限流,原实现一次失败即终止。
- 推送改为最多 5 次退避重试(30s/60s/90s/120s)
- 增加每日定时兜底(18:30 UTC = 次日 02:30 北京时间),
避免某次推送失败后长期不同步
|
2026-10-30 13:19:56 +08:00 |
|
MiFaZhan
|
96f0f4eacd
|
ci: 镜像到 Gitee 增加退避重试与每日兜底
Gitee 在推送密集时返回 429 Pending queue overflowed / 408 Authorization server
timeout,属服务端限流,原实现一次失败即终止。
- 推送改为最多 5 次退避重试(30s/60s/90s/120s)
- 增加每日定时兜底(18:30 UTC = 次日 02:30 北京时间),
避免某次推送失败后长期不同步
|
2026-10-30 13:19:55 +08:00 |
|
MiFaZhan
|
3b05d5a73a
|
ci: 镜像到 Gitee 增加退避重试与每日兜底
Gitee 在推送密集时返回 429 Pending queue overflowed / 408 Authorization server
timeout,属服务端限流,原实现一次失败即终止。
- 推送改为最多 5 次退避重试(30s/60s/90s/120s)
- 增加每日定时兜底(18:30 UTC = 次日 02:30 北京时间),
避免某次推送失败后长期不同步
|
2026-10-30 13:19:53 +08:00 |
|
MiFaZhan
|
f305eab7d6
|
ci: 镜像到 Gitee 增加退避重试与每日兜底
Gitee 在推送密集时返回 429 Pending queue overflowed / 408 Authorization server
timeout,属服务端限流,原实现一次失败即终止。
- 推送改为最多 5 次退避重试(30s/60s/90s/120s)
- 增加每日定时兜底(18:30 UTC = 次日 02:30 北京时间),
避免某次推送失败后长期不同步
|
2026-10-30 13:19:52 +08:00 |
|
MiFaZhan
|
49818c6dbe
|
ci: 镜像到 Gitee 增加退避重试与每日兜底
Gitee 在推送密集时返回 429 Pending queue overflowed / 408 Authorization server
timeout,属服务端限流,原实现一次失败即终止。
- 推送改为最多 5 次退避重试(30s/60s/90s/120s)
- 增加每日定时兜底(18:30 UTC = 次日 02:30 北京时间),
避免某次推送失败后长期不同步
|
2026-10-30 13:19:51 +08:00 |
|
MiFaZhan
|
6b5fb707c2
|
fix: docs 镜像升级到 v1.0.5,修复文档站白屏
测试反馈:访问文档站白屏、点击无反应。
根因:VitePress 配置 base: '/docs/',构建产物里资源引用是绝对路径 /docs/assets/xxx,
而 dist 目录是平铺的;镜像里的 nginx.conf 从根路径服务,/docs/assets/* 全部 404。
(此前修过同一问题,v1.0.4 同步代码时被覆盖回旧配置。)
上游已在 iotlcm-docs 修 nginx.conf(alias 剥前缀 + / -> /docs/ 重定向)并打 v1.0.5,
镜像 iotlcm-docs-v1.0.5 已由 tag 推送自动构建入库。
本仓把 docs 镜像 tag 从 v1.0.4 升到 v1.0.5。
实测:/ 302、/docs/ 200、/docs/manual/web/ 200、核心 CSS 200。
|
2026-10-30 13:19:18 +08:00 |
|
MiFaZhan
|
eeeb6572ba
|
fix: nginx 在 /docs/ 下服务产物,修复白屏
VitePress 配置 base: '/docs/',构建出的 HTML 里资源引用是绝对路径 /docs/assets/xxx;
而 dist 目录是平铺的(index.html、assets/ 直接在根)。原 nginx.conf 从根路径服务,
/docs/assets/* 全部 404 → 页面能打开但 JS/CSS 加载失败,白屏、点击无反应。
改为用 alias 把 /docs/ 前缀剥掉再落到产物目录,并加 / -> /docs/ 的 302,
避免直接访问根路径白屏。
实测(本地构建镜像后):/docs/ 200、/docs/manual/web/ 200、/docs/openapi/ 200、
核心 CSS 资源 200;/ 返回 302。
|
2026-10-30 13:11:58 +08:00 |
|
MiFaZhan
|
56e930c7d0
|
docs: 初始化脚本注释去掉内部环境措辞(仅注释,不影响执行)
schema/init.sql 两处「照预演」的注释改为直述授权范围,避免出现内部环境字样。
SQL 语句本身未改动。
|
2026-10-30 11:50:19 +08:00 |
|
MiFaZhan
|
644cbe164d
|
docs: 修复 crud-style 模板 README 的悬空引用
MEMORY.md 已从开源仓移除,README 仍要求「必须同步阅读 MEMORY.md」并列出其内容。
改为直接用「常见踩坑」小节承载这些纠错要点,目录树中同步去掉 MEMORY.md 条目。
|
2026-10-30 11:50:18 +08:00 |
|
MiFaZhan
|
dfeb5e8d13
|
docs: 删除 fullsync/supply 的内部记录,修复 README 悬空链接
- 删除 internal/fullsync/supply/README.md:后半段「预演门禁与回退记录」含内网
Compose 目录(/home/xjzl/...)、两个镜像 sha256、内部挂载路径与 origin/main 引用,
属内网部署记录,不应公开;前半段为内部实现说明,一并移除(代码包注释已足够)
- README:移除指向已删文件 SIM_STATUS_RUN_ACCOUNTING.md 的链接,
改为直述 simStatusQueueSync.redisKeyPrefix 的用途
- README:移除指向已删文件 docs/角色权限任务切换.md 的链接,部署顺序改为直述要求
- go build ./... 通过
|
2026-10-30 11:50:17 +08:00 |
|
MiFaZhan
|
5b039393dc
|
docs: 移除开发过程文档,开源版文档统一见文档站
- vue/aaa.md(临时草稿,实为 Vue 代码片段,扩展名误写成 .md)
- vue/apps/web-antd/src/template/iotlcm-crud-style/MEMORY.md(内部迁移实战记忆与踩坑记录,含本机绝对路径)
文档站:https://git.5iot.com/iotlcm-public/iotlcm-docs
|
2026-10-30 11:43:53 +08:00 |
|
MiFaZhan
|
f38f15dd7e
|
docs: 移除开发过程文档,开源版文档统一见文档站
- AGENTS.md(内部 agent 协作规范与 GoFrame/Vben 开发约定,含内部项目概述)
文档站:https://git.5iot.com/iotlcm-public/iotlcm-docs
|
2026-10-30 11:43:20 +08:00 |
|
MiFaZhan
|
ce0db55e36
|
docs: 移除开发过程文档,开源版文档统一见文档站
- docs/superpowers/plans/2026-07-13-sqlite-generated-cards.md(SQLite 挡板改造实施计划,含任务分解与勾选清单)
保留 docs/deploy.md(面向使用者的部署说明)。
文档站:https://git.5iot.com/iotlcm-public/iotlcm-docs
|
2026-10-30 11:43:10 +08:00 |
|
MiFaZhan
|
6ed0691134
|
docs: 移除开发过程文档,开源版文档统一见文档站
- docs/apika-shared-token-integration.md(Apika 共享 Token 通道对接说明)
- docs/mingqian-integration.md(明千 v3 三方接入操作手册,含本地工作区路径与部署步骤)
- docs/mobile-public-token-integration.md(移动公共 Token 通道配置与签名说明)
- docs/telecom-v3-apn-integration.md(电信 V3 APN 状态与开停适配,含内部回退记录)
- docs/plans/channel-template-model-design.md(通道模板模型设计方案)
- docs/plans/telecom-v3-integration-and-switch.md(电信 v1/v3 切换与回退方案,含开发库现状)
- docs/scripts/query_sim_card_status.sh、docs/scripts/query_sim_session.sh(内部联调脚本)
- docs/sql/*.sql(共享模板迁移与种子 SQL)
保留 docs/config/*.json 通道模板样例(已脱敏,对使用者有参考价值)。
文档站:https://git.5iot.com/iotlcm-public/iotlcm-docs
|
2026-10-30 11:42:38 +08:00 |
|
MiFaZhan
|
e6ea61380a
|
docs: 移除开发过程文档,开源版文档统一见文档站
- docs/角色权限任务切换.md(管理后端与 Worker 的角色权限任务切换上线顺序、回滚与验收)
- SIM_STATUS_RUN_ACCOUNTING.md(卡状态同步 Run 计数收尾语义与上线步骤)
文档站:https://git.5iot.com/iotlcm-public/iotlcm-docs
|
2026-10-30 11:42:28 +08:00 |
|