Skip to content

数据模型与存储职责 ​

三种标识 ​

标识来源与示例使用位置
productId / ProductKey产品模板ID,如p_relay_4ch、p_env_sensorProduct主键、MQTT第二段、设备Username;不是产品名称
Device.id后端逻辑UUIDHTTP devices/:id、共享、配置、OTA、Influx标签deviceId
physicalId固件稳定物理标识,如无冒号大写MACMQTT ClientId与Topic第三段、联合唯一定位

手机BLE deviceId可能是系统临时地址/UUID,不是以上逻辑ID。Product.id + Device.physicalId联合唯一;不要把网页设备UUID填入MQTT ClientId。

PostgreSQL ​

以yunstack-backend/src/database/prisma/schema.prisma为字段权威,SQL迁移还包含Prisma模型不能完整表达的检查/部分唯一索引。

表/模型职责与重要约束
user、role、permission及关联当前账号启用状态、角色与权限字典;旧Token不固定保存可永久使用的权限
product、device、device_log产品物模型、设备secret/owner/影子/固件版本/在线时间、日志
device_factory_identity、device_setup_identity、device_claim_session出厂与设置凭据、认领票据哈希、有效期与消费状态;不通过普通详情返回密钥
device_share、device_share_invite单设备分享、拥有者快照、单次24小时邀请;解绑或撤权不复活旧授权
device_runtime当前owner快照、epoch、bootId、phase、pendingClear和capabilities
device_binding_transition归属转换nonce、旧/新epoch、期限和状态;断电后可恢复握手
device_configuration每deviceId+scope一行:revision、desired、reported、accepted/appliedRevision、syncStatus、pendingMsgId、规则ID高水位
firmware、ota_task哈希、芯片/硬件兼容、任务拥有者快照、进度、重试与期限;每设备最多一个活跃OTA任务
organization、room与家庭成员/邀请保留历史结构;当前家庭入口停用,家庭成员关系不授予设备权限

设备解绑保留设备记录与遥测,撤销共享、旧票据和运行归属。删除设备与解绑不是同一个操作。数据库初始化、已有库迁移和seed影响见数据库操作。

Redis与InfluxDB ​

Redis的auth:session:<sid>提供七天不滑动的会话撤销依据,device:online:<Device.id>用于在线TTL;设备服务记录保留约120秒,35秒占用防止并发短期操作;自动查询观察记录同样有期限。TTL不是持久业务配置备份。Redis丢失会话会要求重新登录,不靠旧JWT自行恢复。

InfluxService使用配置的org/bucket;设备测量写入measurement device_properties,以device_id标签定位逻辑Device.id、property标签区分属性,字段类型保持数值/布尔/字符串,不将缺失传感器伪造为零。历史接口仅允许物模型中的只读数值测量;时间范围最多31天,<=1天使用5分钟均值,<=7天1小时,其余6小时。历史为空还可能是Influx未配置或查询失败,应结合日志判断;不能只看在线状态。

NVS保存在板上,与这三种服务相互独立。断网时规则继续在设备运行;云端删除配置只有设备接收后才影响本地执行。