Site Tools


冷启动文件

This is an old revision of the document!


慧飞 CTWing 设备数据工作流 — 冷启动文件

版本: 1.0 | 日期: 2026-08-15 | 用途: 服务器冷启动/重建/新人接手时,按此文件可完整恢复系统
服务器: 腾讯云轻量 lhins-1dai07vu | 公网IP: 82.156.85.124 | 域名: dev.mandolinwu.site(HTTPS)
系统: Ubuntu | 时区: Asia/Shanghai

1. 系统总览

设备(4G/NB/土壤) → AEP平台(iot.ctwing.cn) → 北向订阅(定源) → HTTP推送 → 本机Flask接收端(:13543)
                                                          ↓
                                                    SQLite(ctwing.db) → 每日09:00日报 → MySQL(huifei_daily) → 微信推送
                                                          ↓
                                                    H5查询工具(/ctwing/h5) 图表+分析报告+设备台账管理

所有服务 URL:

服务 地址
————
设备数据查询 H5 https://dev.mandolinwu.site/ctwing/h5
我的世界3D游戏 https://dev.mandolinwu.site/game/mc
佩奇丛林大冒险 https://dev.mandolinwu.site/game
Halo博客(曼陀林) http://82.156.85.124:8090(admin/mandolinwu)
NocoDB http://82.156.85.124:8080
RabbitMQ管理台 http://82.156.85.124:15672

2. 核心组件清单

组件 位置 说明
——————
Flask接收端 ~/projects/ctwing-2/receiver_server.py 接收AEP推送+解析入库+H5 API+游戏
systemd服务 ctwing-receiver 端口13543,开机自启
MQ消费端 ~/projects/ctwing-2/mq_consumer.py RabbitMQ订阅消费(备用通道)
systemd服务 mq_consumer 备用通道消费
AEP SDK ~/projects/ctwing-2/aep_sdk/ 官方Python SDK(用户提供313302_sdk包)
AEP API客户端 ~/projects/ctwing-2/aep_api.py 订阅管理(增删设备定源)
SQLite ~/projects/ctwing-2/data/ctwing.db device_data + monitored_devices台账
日报脚本 ~/projects/ctwing-2/db_writer.py + ~/.hermes/scripts/ctwing_daily.sh 09:00聚合写MySQL+微信推送
Caddy /etc/caddy/Caddyfile 80端口反代 /ctwing/*、/game* → 13543;dev.mandolinwu.site HTTPS
RabbitMQ Docker容器 rabbitmq 5672(AMQP)/15672(管理台),vhost=ctwing
MySQL Docker容器 huifei-mysql 127.0.0.1:3306,库 huifei_daily(日报)+halo(博客)
二维码 /home/ubuntu/qrcodes/ 微信扫码访问用

cron定时任务: b3b717e6550f 每天09:00 设备日报(no_agent,先db_writer写MySQL再hermes send推送微信)

3. AEP 开放平台接入(关键!)

凭证(存 ~/.hermes/.env,权限600)

产品 产品ID MasterKey变量 协议
————–————–——
4G智慧球阀 17080670 AEP_VALVE_MASTER_KEY MQTT
NB智慧球阀 17070058 AEP_NB_MASTER_KEY LWM2M
土壤墒情气象站 17197695 AEP_MASTER_KEY 其他

- 应用凭证(共用): AEP_APP_KEY=IQsPnFznnO7, AEP_APP_SECRET=dbwgP7q7IM - 租户ID: 2000455438(=API域名前缀)

API 接入

- 域名: `https://2000455438.api.ctwing.cn`(租户ID.api.ctwing.cn) - 签名算法(血泪教训,不是MD5!):

  code = "application:{AppKey}\ntimestamp:{毫秒时间戳}\n" + 参数行"名:值\n"(按key排序,空值参数也要!) + body + "\n"
  signature = Base64(HMAC-SHA1(key=AppSecret, msg=code))

- 时间校准: GET /echo 的 x-ag-timestamp 头 - 订阅管理API(aep_subscribe_north):

  1. CreateSubscription: POST /subscription version=20181031202018
  2. DeleteSubscription: DELETE /subscription version=20181031202023
  3. GetSubscriptionsList: GET /subscribes version=20220624163719

- AEP deviceId = 产品ID + SN(如 17080670+863304082793730) - 定源语义: subLevel 1=产品级(不用!) 2=设备级(用这个) 3=分组级

设备管理原则(用户明确要求)

- 添加设备 → 创建该设备的设备级订阅 - 删除设备 → 删除该设备的订阅 - 禁止产品级订阅(会把全产品设备数据都拉过来) - 删除只允许动 subUrl=http://82.156.85.124:13543/ctwing/receive 的订阅,其他目的地(旧云函数/合作方)绝不删除

4. 设备数据解析(AEP直推格式)

AEP推送信封: `{“deviceId”:“…”,“payload”:{“APPdata”:“<base64>”}}` - APPdata base64解码(latin-1) → 内含SN(18位) + JSON数据体(cmd/bat/csq/mtemp/mcu_press/charge等) - 设备类型按deviceId前缀: 17080670=valve 17070058=nb_valve 17197695=soil - 解析函数: receiver_server.py 的 parse_aep_payload()

5. H5 设备管理工具

- 页面: /ctwing/h5 | API: /ctwing/api/manage(台账) /data(图表数据) /report(分析报告) - 台账表: monitored_devices(sn, name, device_type, product, aep_subscribed, aep_device_id, sub_id) - 功能: 添加/删除设备(自动同步AEP定源) + 4图(电压/信号/温度/压力) + 一键分析报告(HTML下载) - 纯前端Canvas绘图,零外部依赖

6. 日报流程(每天09:00)

1. cron b3b717e6550f 触发 ~/.hermes/scripts/ctwing_daily.sh 2. db_writer.py: SQLite(昨日08:30~今日08:29的meas数据) → MySQL huifei_daily.daily_reports 3. hermes send 微信推送日报+Excel附件 4. 日报窗口: 昨日08:30 ~ 今日08:29

7. 常见运维命令

sudo systemctl restart ctwing-receiver   # 重启接收端
sudo systemctl restart mq_consumer       # 重启MQ消费端
sudo systemctl restart caddy             # 重启反代
sudo caddy reload --config /etc/caddy/Caddyfile
docker ps                                # 查看容器(rabbitmq/huifei-mysql/nocodb/halo)
tail -f ~/projects/ctwing-2/data/cron.log  # 日报日志

8. 排障速查

症状 排查
————
数据没流入 curl http://localhost:13543/ctwing/health;看AEP订阅列表(GetSubscriptionsList)是否还在
添加设备报“deviceId不属于该productId” 该SN未在AEP产品里注册,先到AEP控制台注册设备
微信打不开链接 https://dev.mandolinwu.site 域名地址;二维码在 /home/ubuntu/qrcodes/
日报无数据 检查设备是否上报;cron b3b717e6550f 状态;cron.log
AEP签名401 时间戳偏差>5分钟?用/echo校准;参数含空值?签名要包含全部参数

9. 冷启动恢复步骤

1. 装 Docker + 启动容器(rabbitmq/huifei-mysql/nocodb/halo) 2. 装 python3-venv + pip install flask pika pymysql;恢复 ~/projects/ctwing-2 代码与 data/ctwing.db 3. systemd: ctwing-receiver + mq_consumer 启用 4. Caddy 配置(80+443) + 防火墙放行 80/443/13543/8080/8090/5672 5. cron 建 b3b717e6550f(每天09:00) 6. 验证: /ctwing/health → AEP订阅列表 → 等数据入库 → H5页面

冷启动文件.1786809324.txt.gz · Last modified: by 172.17.0.1