首页 / 文档中心 / 宠物喂食器(ODM 案例) / 数据存储与设备状态说明

数据存储与设备状态说明

宠物喂食器(ODM 案例) · 设计文档

迅思维智能宠物喂食器 - 数据存储与设备状态说明

版本:v1.1.0
日期:2024-04-14


🏗️ 系统架构概览

┌─────────────────────────────────────────────────────────────────┐
│                         用户手机                                 │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │                      手机 App                            │   │
│  │  • 用户交互界面                                          │   │
│  │  • 本地数据缓存(SQLite / SharedPreferences)            │   │
│  │  • 调用服务器 API                                         │   │
│  └─────────────────────────────────────────────────────────┘   │
└──────────────────────────┬────────────────────────────────────┘
                           │ HTTP/MQTT
                           ▼
┌─────────────────────────────────────────────────────────────────┐
│                        云端服务器                                │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │                      服务器                              │   │
│  │  • 用户数据管理(账户、宠物、家庭)                       │   │
│  │  • 设备管理(绑定、状态监控)                             │   │
│  │  • 喂食计划存储与下发                                     │   │
│  │  • 消息推送                                              │   │
│  │  • 数据库(MySQL/PostgreSQL + Redis)                   │   │
│  └─────────────────────────────────────────────────────────┘   │
└──────────────────────────┬────────────────────────────────────┘
                           │ MQTT / HTTP
                           ▼
┌─────────────────────────────────────────────────────────────────┐
│                       喂食器设备                                 │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │                     设备固件                              │   │
│  │  • 本地存储(喂食计划、WiFi配置)                         │   │
│  │  • 定时执行喂食(离线也执行)                             │   │
│  │  • 状态上报                                              │   │
│  │  • Flash 存储(~1MB)                                    │   │
│  └─────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────┘

📊 三层数据存储对照表

数据类型 手机App 服务器 设备固件 说明
喂食计划 🟡缓存 🔴存储 🔴存储 核心数据,三端同步
WiFi配置 - - 🔴存储 设备联网凭证
设备基础配置 🟡缓存 🔴存储 🔴存储 名称、开关等
宠物信息 🟡缓存 🔴存储 🟡缓存 App显示用
用户账户 🟡缓存 🔴存储 - 无关设备
家庭成员 🟡缓存 🔴存储 - 纯云端数据
消息记录 🟡缓存 🔴存储 - App显示用
相册照片/视频 🟡缓存 🔴存储 - CDN存储
喂食记录 🟡缓存 🔴存储 🔴存储 最近N条本地
设备实时状态 🟡缓存 🔴存储 🔴存储 在线/电量/粮量
用户设置 🟡缓存 🔴存储 🟡缓存 App配置

🔴 = 必须存储 | 🟡 = 缓存/可选 | - = 不需要


🔴 设备固件层(喂食器硬件)

存储内容

数据 大小 说明
喂食计划 ~2KB 最多20条计划
WiFi配置 ~100B SSID + 加密密码
设备配置 ~500B 名称、默认出粮量等
喂食记录 ~80KB 最近1000条
设备状态 ~100B 在线/离线/电量/粮量

核心职责

  • ✅ 定时执行喂食(设备离线也执行!)
  • ✅ 本地存储喂食计划
  • ✅ 上报设备状态到服务器
  • ✅ 响应服务器指令(设备在线时)
  • ✅ 断网后自动重连

离线行为

设备离线时:
┌─────────────────────────────────────────┐
│  喂食计划到期 → 本地执行 → 出粮 ✅       │
│  用户App手动喂食 → 指令发不出去 → 失败 ❌ │
│  设备重新联网 → 自动同步计划 → 正常 ✅   │
└─────────────────────────────────────────┘

🟡 App层(手机端)

存储内容(本地缓存)

数据 存储方式 说明
用户Token SharedPreferences 登录凭证
喂食计划列表 SQLite 离线显示
宠物列表 SQLite 离线显示
设备状态 SQLite 上次同步的状态
消息记录 SQLite 最近100条
用户设置 SharedPreferences App偏好

核心职责

  • ✅ 用户交互界面
  • ✅ 缓存服务器数据(加速加载、离线可看)
  • ✅ 调用服务器API
  • ✅ 显示设备状态(来自缓存,非实时)

离线行为

App离线时:
┌─────────────────────────────────────────┐
│  打开App → 显示本地缓存数据 ✅          │
│  添加喂食计划 → 保存到本地 + 待同步队列  │
│  设备离线标记 → 显示灰色/离线状态 ✅     │
│  手动喂食 → 提示"设备离线" ❌           │
└─────────────────────────────────────────┘

🔴 服务器层(云端)

存储内容

数据 数据库 说明
用户账户 users 手机号、密码Hash、Token
设备信息 devices SN、名称、绑定状态
喂食计划 feeding_plans 全部计划
宠物信息 pets 宠物档案
家庭成员 family_members 家庭关系
消息记录 messages 通知消息
相册 media 照片/视频元数据
喂食记录 feeding_logs 历史记录
用户设置 user_settings 通知开关等

核心职责

  • ✅ 数据存储(唯一真实来源)
  • ✅ 业务逻辑处理
  • ✅ 设备状态管理
  • ✅ 喂食计划下发到设备
  • ✅ 消息推送

⚡ 操作分类(三端视角)

✅ 设备离线也能执行的操作

操作 App(手机) 服务器 设备固件 说明
查看喂食计划 🟡本地缓存 ✅处理 - 显示缓存数据
查看宠物列表 🟡本地缓存 ✅处理 - 显示缓存数据
查看设备状态 🟡本地缓存 ✅处理 - 显示上次状态,非实时
查看历史消息 🟡本地缓存 ✅处理 - 显示缓存消息
添加喂食计划 🟡本地+待同步 ✅存储 ❌未收到 设备联网后才执行
编辑喂食计划 🟡本地+待同步 ✅存储 ❌未更新 同上
删除喂食计划 🟡本地删除 ✅删除 ❌未删除 同上
添加宠物 🟡本地缓存 ✅存储 🟡同步后缓存 设备联网后同步
家庭成员管理 ✅纯云端 ✅处理 - 不涉及设备
查看用户设置 🟡本地缓存 ✅处理 - 显示缓存

❌ 必须设备在线才能执行的操作

操作 App(手机) 服务器 设备固件 离线结果
手动喂食 ✅发送指令 ✅转发 ✅执行 ❌失败
设备绑定 ✅配网页面 ✅处理 ✅响应 ❌失败
设备解绑 ✅发送请求 ✅处理 ✅确认 ❌失败
实时监控视频 ✅显示画面 ✅转发 ✅推流 ❌失败
语音对讲 ✅通话界面 ✅转发 ✅接收 ❌失败
固件升级 ✅下载固件 ✅提供 ✅接收安装 ❌失败
查看实时状态 🟡请求→等待 ✅查询 ✅上报 ❌超时

⏳ 设备离线时的数据同步时序

用户添加喂食计划(设备离线):
──────────────────────────────────────────────────────────

[App]                    [服务器]                 [设备]
  │                          │                       │
  │  1.点击"添加计划"         │                       │
  │─────────────────────────→│                       │
  │                          │                       │
  │  2.保存到云端数据库        │                       │
  │ ─────────────────────────→                       │
  │                          │                       │
  │  3.返回"添加成功"          │                       │
  │←─────────────────────────│                       │
  │                          │                       │
  │  4.存入本地待同步队列      │                       │
  │  (等待设备上线)            │                       │
  │                          │                       │
  │                          │     5.设备上线         │
  │                          │←───────────────────────│
  │                          │                       │
  │                          │  6.下发喂食计划         │
  │                          │───────────────────────│
  │                          │                       │
  │                          │     7.设备本地存储      │
  │                          │←───────────────────────│
  │                          │                       │
  │  8.App刷新 → 显示最新计划  │                       │
  │←─────────────────────────│                       │
  │                          │                       │

🔄 数据同步策略

设备 → 服务器(上报)

数据 触发时机 离线处理
设备状态 定时30秒/变化时 本地记录,联网补传
喂食记录 喂食完成后 本地缓存,联网同步
设备告警 触发时 本地记录,联网补传
心跳 定时60秒 -

服务器 → 设备(下发)

数据 触发时机 离线处理
喂食计划 添加/修改时 存入队列,联网下发
设备配置 修改时 存入队列,联网下发
固件推送 用户触发 设备在线时下载

App ↔ 服务器

数据 App缓存策略 说明
喂食计划 SQLite存储 离线可查看
宠物列表 SQLite存储 离线可查看
设备状态 SQLite存储 非实时
消息记录 SQLite存储 最近100条

📋 接口对应三端职责

接口 App职责 服务器职责 设备职责
/api/feeding/list 显示缓存 存储+返回 -
/api/feeding/add 发起请求 存储+下发 接收+存储
/api/feeding/update 发起请求 更新+下发 更新本地
/api/feeding/delete 发起请求 删除+通知 删除本地
/api/feeding/manual 发起请求 转发指令 执行
/api/device/detail 显示缓存 查询+返回 -
/api/device/bind 配网引导 验证+绑定 响应配网
/api/album/capture 发起请求 保存文件 执行抓拍
/api/message/list 显示缓存 返回消息 -

📝 开发注意事项

App开发

  1. 离线状态感知 - 设备离线时,App应显示"离线"标签
  2. 本地缓存更新 - 操作成功后,乐观更新本地缓存
  3. 同步队列 - 离线操作存入队列,联网后自动同步
  4. 状态刷新 - 设备上线后,App应主动刷新数据

服务器开发

  1. 消息推送 - 设备状态变化时,通过MQTT推送
  2. 计划下发 - 喂食计划变更时,立即下发到设备
  3. 离线补偿 - 设备重新连接时,发送离线期间的变化
  4. 冲突处理 - 设备本地时间和服务器时间冲突,以设备为准

设备固件开发

  1. 本地存储 - 使用Flash存储喂食计划,支持断电保存
  2. 定时执行 - RTC时钟控制,即使断网也按时喂食
  3. 状态上报 - 联网时定时上报状态到服务器
  4. 自动重连 - 断网后自动重连,接收离线期间的下发数据

版本历史:
- v1.1.0 - 2024-04-14:增加三层架构对照表,明确区分App/服务器/设备固件
- v1.0.0 - 2024-04-13:初始版本

这份文档没解决你的问题?联系我们,技术工程师直接对接。

询价咨询

填写这几项,我们 1 个工作日内回传报价与方案

点「生成询价邮件」会打开你的邮件客户端,正文已自动填好;电脑没配邮件客户端,就点「复制内容」粘到网页邮箱发送,收件人 sunshiyang@xstrive.com。