Site Tools


冷启动文件

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

冷启动文件 [2026/08/15 15:55] – CTWing设备数据工作流冷启动文件 172.17.0.1冷启动文件 [2026/08/15 16:40] (current) – 更名为曼陀林工作冷启动文件 172.17.0.1
Line 1: Line 1:
-======= 慧飞 CTWing 设备数据工作流 — 冷启动文件 ======= +该页面已更名为 **[[曼陀林工作冷启动文件]]**曼陀林平台完整冷启动文档
- +
- +
-> 版本: 1.0 | 日期: 2026-08-15 | 用途: 服务器冷启动/重建/新人接手时,按此文件可完整恢复系统 +
-> 服务器: 腾讯云轻量 lhins-1dai07vu | 公网IP: 82.156.85.124 | 域名: dev.mandolinwu.site(HTTPS) +
-> 系统: Ubuntu | 时区: Asia/Shanghai +
- +
---- +
- +
-====== 1. 系统总览 ====== +
- +
- +
-<code> +
-设备(4G/NB/土壤) → AEP平台(iot.ctwing.cn) → 北向订阅(定源) → HTTP推送 → 本机Flask接收端(:13543) +
-                                                          ↓ +
-                                                    SQLite(ctwing.db) → 每日09:00日报 → MySQL(huifei_daily) → 微信推送 +
-                                                          ↓ +
-                                                    H5查询工具(/ctwing/h5) 图表+分析报告+设备台账管理 +
-</code> +
- +
-**所有服务 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> +
-  code = "application:{AppKey}\ntimestamp:{毫秒时间戳}\n" + 参数行"名:值\n"(按key排序,空值参数也要!) + body + "\n" +
-  signature = Base64(HMAC-SHA1(key=AppSecret, msg=code)) +
-</code> +
-- 时间校准: GET /echo 的 x-ag-timestamp 头 +
-- 订阅管理API(aep_subscribe_north): +
-  - CreateSubscription: POST /subscription version=20181031202018 +
-  - DeleteSubscription: DELETE /subscription version=20181031202023 +
-  - 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. 常见运维命令 ====== +
- +
- +
-<code> +
-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  # 日报日志 +
-</code> +
- +
-====== 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页面+
  
 +~~DISCUSSION~~
冷启动文件.1786809324.txt.gz · Last modified: by 172.17.0.1