新增米家环境监控模块 (采集/聚合/历史/前端 EnvView) + CI 挂载米家凭证目录并自动应用迁移
Docker Build and Push / build-image (push) Successful in 6m54s
Docker Build and Push / build-image (push) Successful in 6m54s
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE `MihomeAccount` (
|
||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||
`key` VARCHAR(191) NOT NULL DEFAULT 'default',
|
||||
`userId` VARCHAR(191) NOT NULL DEFAULT '',
|
||||
`status` VARCHAR(191) NOT NULL DEFAULT 'unknown',
|
||||
`lastError` VARCHAR(191) NOT NULL DEFAULT '',
|
||||
`updatedAt` DATETIME(3) NOT NULL,
|
||||
|
||||
UNIQUE INDEX `MihomeAccount_key_key`(`key`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `MihomeHome` (
|
||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||
`homeId` VARCHAR(191) NOT NULL,
|
||||
`name` VARCHAR(191) NOT NULL,
|
||||
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
|
||||
UNIQUE INDEX `MihomeHome_homeId_key`(`homeId`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `MihomeDevice` (
|
||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||
`did` VARCHAR(191) NOT NULL,
|
||||
`homeId` VARCHAR(191) NOT NULL,
|
||||
`model` VARCHAR(191) NOT NULL,
|
||||
`name` VARCHAR(191) NOT NULL,
|
||||
`alias` VARCHAR(191) NULL,
|
||||
`tempSiid` INTEGER NOT NULL,
|
||||
`tempPiid` INTEGER NOT NULL,
|
||||
`humSiid` INTEGER NOT NULL,
|
||||
`humPiid` INTEGER NOT NULL,
|
||||
`battSiid` INTEGER NOT NULL,
|
||||
`battPiid` INTEGER NOT NULL,
|
||||
`battery` INTEGER NULL,
|
||||
`batteryAt` DATETIME(3) NULL,
|
||||
`enabled` BOOLEAN NOT NULL DEFAULT true,
|
||||
`lastSyncAt` DATETIME(3) NULL,
|
||||
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
|
||||
UNIQUE INDEX `MihomeDevice_did_key`(`did`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `MihomeEnvSample` (
|
||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||
`deviceId` INTEGER NOT NULL,
|
||||
`date` DATETIME(3) NOT NULL,
|
||||
`temperature` DOUBLE NULL,
|
||||
`humidity` DOUBLE NULL,
|
||||
`temperatureAvg` DOUBLE NULL,
|
||||
`humidityAvg` DOUBLE NULL,
|
||||
`temperatureMin` DOUBLE NULL,
|
||||
`temperatureMax` DOUBLE NULL,
|
||||
`humidityMin` DOUBLE NULL,
|
||||
`humidityMax` DOUBLE NULL,
|
||||
`origin` VARCHAR(191) NOT NULL DEFAULT 'live',
|
||||
`sampledAt` DATETIME(3) NULL,
|
||||
`raw` JSON NULL,
|
||||
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
|
||||
INDEX `MihomeEnvSample_deviceId_date_idx`(`deviceId`, `date`),
|
||||
UNIQUE INDEX `MihomeEnvSample_deviceId_date_key`(`deviceId`, `date`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `MihomeEnvHour` (
|
||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||
`deviceId` INTEGER NOT NULL,
|
||||
`hour` DATETIME(3) NOT NULL,
|
||||
`temperatureAvg` DOUBLE NULL,
|
||||
`humidityAvg` DOUBLE NULL,
|
||||
`raw` JSON NULL,
|
||||
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
|
||||
INDEX `MihomeEnvHour_deviceId_hour_idx`(`deviceId`, `hour`),
|
||||
UNIQUE INDEX `MihomeEnvHour_deviceId_hour_key`(`deviceId`, `hour`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `MihomeDevice` ADD CONSTRAINT `MihomeDevice_homeId_fkey` FOREIGN KEY (`homeId`) REFERENCES `MihomeHome`(`homeId`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `MihomeEnvSample` ADD CONSTRAINT `MihomeEnvSample_deviceId_fkey` FOREIGN KEY (`deviceId`) REFERENCES `MihomeDevice`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `MihomeEnvHour` ADD CONSTRAINT `MihomeEnvHour_deviceId_fkey` FOREIGN KEY (`deviceId`) REFERENCES `MihomeDevice`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
@@ -200,3 +200,85 @@ model OilPriceHistory {
|
||||
}
|
||||
|
||||
|
||||
// ==================== 环境监控:米家 ====================
|
||||
|
||||
// 米家授权状态 (DiskCache 存凭证, 本表只存状态/错误供前端展示)
|
||||
model MihomeAccount {
|
||||
id Int @id @default(autoincrement())
|
||||
key String @unique @default("default")
|
||||
userId String @default("")
|
||||
status String @default("unknown") // ok | pending | expired
|
||||
lastError String @default("")
|
||||
updatedAt DateTime @updatedAt
|
||||
}
|
||||
|
||||
model MihomeHome {
|
||||
id Int @id @default(autoincrement())
|
||||
homeId String @unique
|
||||
name String
|
||||
createdAt DateTime @default(now())
|
||||
devices MihomeDevice[]
|
||||
}
|
||||
|
||||
model MihomeDevice {
|
||||
id Int @id @default(autoincrement())
|
||||
did String @unique
|
||||
homeId String
|
||||
home MihomeHome @relation(fields: [homeId], references: [homeId])
|
||||
model String
|
||||
name String
|
||||
alias String? // 用户别名, 仅本应用展示
|
||||
tempSiid Int
|
||||
tempPiid Int
|
||||
humSiid Int
|
||||
humPiid Int
|
||||
battSiid Int // 电池电量属性 (炎米 3.1003 / 青萍 2.3)
|
||||
battPiid Int
|
||||
battery Int? // 最近一次电量 (每天读一次, 标题展示用)
|
||||
batteryAt DateTime? // 电量读取时间 (当天缓存, 不频繁更新)
|
||||
enabled Boolean @default(true)
|
||||
lastSyncAt DateTime?
|
||||
createdAt DateTime @default(now())
|
||||
samples MihomeEnvSample[]
|
||||
hours MihomeEnvHour[]
|
||||
}
|
||||
|
||||
// 日档: 月视图(逐日)数据源; unique (deviceId, date) 防重
|
||||
model MihomeEnvSample {
|
||||
id Int @id @default(autoincrement())
|
||||
deviceId Int
|
||||
device MihomeDevice @relation(fields: [deviceId], references: [id], onDelete: Cascade)
|
||||
date DateTime // 采样日 (Asia/Shanghai 当日 00:00 存 UTC)
|
||||
temperature Float? // 当日最后一次实时值 (或 vendor hour 均值)
|
||||
humidity Float?
|
||||
temperatureAvg Float? // 当日均值 (由小时档聚合, 或 vendor_hour)
|
||||
humidityAvg Float?
|
||||
temperatureMin Float? // 当日最低
|
||||
temperatureMax Float? // 当日最高
|
||||
humidityMin Float?
|
||||
humidityMax Float?
|
||||
origin String @default("live") // live | vendor_history | backfill
|
||||
sampledAt DateTime?
|
||||
raw Json?
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
@@unique([deviceId, date])
|
||||
@@index([deviceId, date])
|
||||
}
|
||||
|
||||
// 小时档: 当天视图(逐小时)数据源; unique (deviceId, hour) 防重
|
||||
model MihomeEnvHour {
|
||||
id Int @id @default(autoincrement())
|
||||
deviceId Int
|
||||
device MihomeDevice @relation(fields: [deviceId], references: [id], onDelete: Cascade)
|
||||
hour DateTime // Asia/Shanghai 整点 (存 UTC)
|
||||
temperatureAvg Float? // 该小时均值 (live 采样点, 或 vendor_hour)
|
||||
humidityAvg Float?
|
||||
raw Json?
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
@@unique([deviceId, hour])
|
||||
@@index([deviceId, hour])
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user