Files
nonye/back/schema.sql
2025-07-17 23:13:04 +08:00

868 lines
39 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ----------------------------
-- 部门表
-- ----------------------------
CREATE TABLE IF NOT EXISTS department (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE, -- 部门名称
manager_id INTEGER, -- 部门经理ID
description TEXT, -- 部门描述
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (manager_id) REFERENCES user(id)
);
-- ----------------------------
-- 用户表(密码改为明文存储,不加密)
-- ----------------------------
CREATE TABLE IF NOT EXISTS user (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL, -- 用户名(唯一)
password TEXT NOT NULL, -- 密码(明文存储,不加密)
real_name TEXT, -- 真实姓名
email TEXT UNIQUE, -- 邮箱(唯一)
phone TEXT, -- 联系电话
department_id INTEGER, -- 所属部门(外键)
position TEXT, -- 职位/职务
permission_level TEXT NOT NULL, -- 权限级别(Admin/Supervisor/Operator)
hire_date DATE, -- 入职日期
status TEXT DEFAULT 'Active', -- 状态(Active/Inactive)
linked_devices INTEGER DEFAULT 0, -- 关联设备数量
last_login TIMESTAMP, -- 最后登录时间
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 创建时间
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 更新时间
CHECK (permission_level IN ('Admin', 'Supervisor', 'Operator')),
CHECK (status IN ('Active', 'Inactive')),
FOREIGN KEY (department_id) REFERENCES department(id)
);
-- 创建更新触发器自动更新updated_at字段
CREATE TRIGGER IF NOT EXISTS update_user_timestamp
AFTER UPDATE ON user
FOR EACH ROW
BEGIN
UPDATE user SET updated_at = CURRENT_TIMESTAMP WHERE id = OLD.id;
END;
-- ----------------------------
-- 插入管理员用户(使用正确的权限级别格式)
-- ----------------------------
INSERT INTO user (username, password, real_name, email, permission_level, status)
VALUES ('root', 'root', 'root', '397088740@qq.com', 'Admin', 'Active')
ON CONFLICT(username) DO NOTHING;
-- ----------------------------
-- 用户设备关联表(新增)
-- ----------------------------
CREATE TABLE IF NOT EXISTS user_device (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
device_id INTEGER NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES user(id),
FOREIGN KEY (device_id) REFERENCES device(id)
);
-- ----------------------------
-- 设备表
-- ----------------------------
CREATE TABLE IF NOT EXISTS device (
id INTEGER PRIMARY KEY AUTOINCREMENT,
device_name TEXT NOT NULL,
device_code TEXT UNIQUE NOT NULL,
status TEXT NOT NULL,
operator TEXT, -- 操作人员
fault_description TEXT, -- 故障描述
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- ----------------------------
-- 温湿度数据表
-- ----------------------------
CREATE TABLE IF NOT EXISTS temperature_data (
id INTEGER PRIMARY KEY AUTOINCREMENT,
device_id INTEGER NOT NULL,
temperature REAL NOT NULL,
humidity REAL NOT NULL,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
ph REAL, -- pH值实数类型
light_intensity INTEGER, -- 光照强度整数单位Lux
FOREIGN KEY (device_id) REFERENCES device (id)
);
-- ----------------------------
-- 插入部门数据
-- ----------------------------
INSERT INTO department (name, manager_id, description) VALUES
('IT部', 1, '负责公司信息技术管理'),
('销售部', 2, '负责产品销售'),
('技术部', 3, '负责技术研发'),
('生产部', NULL, '负责产品生产'),
('运维部', NULL, '负责设备维护')
ON CONFLICT(name) DO NOTHING;
-- ----------------------------
-- 操作日志表
-- ----------------------------
CREATE TABLE IF NOT EXISTS operation_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER,
type TEXT NOT NULL,
message TEXT NOT NULL,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES user(id)
);
-- ----------------------------
-- 插入设备数据
-- ----------------------------
INSERT INTO device (device_name, device_code, status, operator, fault_description)
VALUES
('设备A', 'DEV-A', 'normal', 'root', NULL),
('设备B', 'DEV-B', 'warning', 'root', '温度过高'),
('设备C', 'DEV-C', 'fault', 'root', '传感器故障'),
('设备D', 'DEV-D', 'normal', 'root', NULL),
('设备E', 'DEV-E', 'Offline', 'root', NULL),
('中心设备', 'CENTER-DEV', 'normal', 'root', NULL),
('设备F', 'DEV-F', 'normal', 'root', NULL)
ON CONFLICT(device_code) DO NOTHING;
-- ----------------------------
-- 插入温湿度数据设备A示例包含ph和光照
-- ----------------------------
INSERT INTO temperature_data (device_id, temperature, humidity, timestamp, ph, light_intensity) VALUES
(1, 22.0, 60, '2025-05-26 00:00:00', 6.5, 2000),
(1, 21.8, 59, '2025-05-26 01:00:00', 6.4, 1900),
(1, 21.5, 58, '2025-05-26 02:00:00', 6.3, 1800),
(1, 21.2, 57, '2025-05-26 03:00:00', 6.2, 1700),
(1, 21.0, 56, '2025-05-26 04:00:00', 6.1, 1600),
(1, 20.8, 55, '2025-05-26 05:00:00', 6.0, 1500),
(1, 21.2, 56, '2025-05-26 06:00:00', 6.2, 1800),
(1, 22.5, 58, '2025-05-26 07:00:00', 6.5, 2200),
(1, 24.0, 60, '2025-05-26 08:00:00', 6.8, 2500),
(1, 25.5, 62, '2025-05-26 09:00:00', 7.0, 2800),
(1, 26.8, 63, '2025-05-26 10:00:00', 7.2, 3000),
(1, 27.5, 62, '2025-05-26 11:00:00', 7.1, 3200),
(1, 28.0, 60, '2025-05-26 12:00:00', 7.0, 3500),
(1, 27.8, 58, '2025-05-26 13:00:00', 6.9, 3300),
(1, 27.2, 56, '2025-05-26 14:00:00', 6.8, 3000),
(1, 26.5, 55, '2025-05-26 15:00:00', 6.7, 2800),
(1, 25.5, 56, '2025-05-26 16:00:00', 6.6, 2500),
(1, 24.5, 58, '2025-05-26 17:00:00', 6.5, 2200),
(1, 23.5, 60, '2025-05-26 18:00:00', 6.4, 2000),
(1, 22.8, 61, '2025-05-26 19:00:00', 6.3, 1800),
(1, 22.0, 60, '2025-05-26 20:00:00', 6.2, 1700),
(1, 21.5, 59, '2025-05-26 21:00:00', 6.1, 1600),
(1, 21.2, 58, '2025-05-26 22:00:00', 6.0, 1500),
(1, 21.0, 57, '2025-05-26 23:00:00', 6.0, 1400),
(1, 21.2, 58, '2025-05-27 00:00:00', 6.2, 1800),
(1, 21.5, 59, '2025-05-27 01:00:00', 6.3, 1900),
(1, 21.8, 60, '2025-05-27 02:00:00', 6.4, 2000),
(1, 22.0, 61, '2025-05-27 03:00:00', 6.5, 2100),
(1, 22.5, 62, '2025-05-27 04:00:00', 6.6, 2200),
(1, 23.0, 63, '2025-05-27 05:00:00', 6.7, 2300),
(1, 24.0, 62, '2025-05-27 06:00:00', 6.8, 2500),
(1, 25.5, 60, '2025-05-27 07:00:00', 6.9, 2800),
(1, 27.0, 58, '2025-05-27 08:00:00', 7.0, 3000),
(1, 28.5, 55, '2025-05-27 09:00:00', 7.1, 3200),
(1, 30.0, 52, '2025-05-27 10:00:00', 7.2, 3500),
(1, 31.0, 50, '2025-05-27 11:00:00', 7.1, 3300),
(1, 31.5, 48, '2025-05-27 12:00:00', 7.0, 3000),
(1, 31.0, 47, '2025-05-27 13:00:00', 6.9, 2800),
(1, 30.0, 48, '2025-05-27 14:00:00', 6.8, 2500),
(1, 29.0, 50, '2025-05-27 15:00:00', 6.7, 2200),
(1, 28.0, 52, '2025-05-27 16:00:00', 6.6, 2000),
(1, 26.5, 55, '2025-05-27 17:00:00', 6.5, 1800),
(1, 25.0, 58, '2025-05-27 18:00:00', 6.4, 1600),
(1, 23.5, 60, '2025-05-27 19:00:00', 6.3, 1500),
(1, 22.0, 61, '2025-05-27 20:00:00', 6.2, 1400),
(1, 21.5, 60, '2025-05-27 21:00:00', 6.1, 1300),
(1, 21.2, 59, '2025-05-27 22:00:00', 6.0, 1200),
(1, 21.0, 58, '2025-05-27 23:00:00', 6.0, 1100);
-- 设备BID=2警告设备第二日15时高温异常
INSERT INTO temperature_data (device_id, temperature, humidity, timestamp, ph, light_intensity) VALUES
(2, 26.5, 55, '2025-05-26 15:00:00', 6.8, 2500),
(2, 37.0, 55, '2025-05-27 15:00:00', 5.5, 3000),
(2, 28.0, 58, '2025-05-27 16:00:00', 6.5, 2800);
-- 设备CID=3故障设备第二日15时低温+低湿异常)
INSERT INTO temperature_data (device_id, temperature, humidity, timestamp, ph, light_intensity) VALUES
(3, 26.5, 55, '2025-05-26 15:00:00', 6.7, 2500),
(3, 16.0, 28, '2025-05-27 15:00:00', 5.0, 2000),
(3, 22.0, 58, '2025-05-27 16:00:00', 6.5, 2500);
-- 设备DID=4复制设备A的数据包含ph和光照
INSERT INTO temperature_data (device_id, temperature, humidity, timestamp, ph, light_intensity)
SELECT 4, temperature, humidity, timestamp, ph, light_intensity
FROM temperature_data
WHERE device_id = 1;
-- 中心设备ID=6正常数据部分
INSERT INTO temperature_data (device_id, temperature, humidity, timestamp, ph, light_intensity) VALUES
(6, 24.0, 54, '2025-05-26 16:00:00', 6.5, 2000),
(6, 24.2, 54, '2025-05-26 17:00:00', 6.5, 2100),
(6, 23.8, 55, '2025-05-26 18:00:00', 6.4, 1900),
(6, 23.5, 55, '2025-05-26 19:00:00', 6.4, 1800),
(6, 23.2, 55, '2025-05-26 20:00:00', 6.3, 1700),
(6, 23.0, 55, '2025-05-26 21:00:00', 6.3, 1600),
(6, 22.8, 55, '2025-05-26 22:00:00', 6.2, 1500),
(6, 22.5, 55, '2025-05-26 23:00:00', 6.2, 1400),
(6, 22.8, 55, '2025-05-27 00:00:00', 6.3, 1500),
(6, 23.0, 55, '2025-05-27 01:00:00', 6.3, 1600),
(6, 23.2, 55, '2025-05-27 02:00:00', 6.4, 1700),
(6, 23.5, 55, '2025-05-27 03:00:00', 6.4, 1800),
(6, 23.8, 55, '2025-05-27 04:00:00', 6.5, 1900),
(6, 24.0, 54, '2025-05-27 05:00:00', 6.5, 2000),
(6, 24.2, 54, '2025-05-27 06:00:00', 6.6, 2100),
(6, 24.5, 54, '2025-05-27 07:00:00', 6.6, 2200),
(6, 25.0, 53, '2025-05-27 08:00:00', 6.7, 2300),
(6, 25.5, 53, '2025-05-27 09:00:00', 6.8, 2400),
(6, 26.0, 53, '2025-05-27 10:00:00', 6.8, 2500),
(6, 26.5, 52, '2025-05-27 11:00:00', 6.9, 2600),
(6, 27.0, 52, '2025-05-27 12:00:00', 7.0, 2700),
(6, 26.8, 52, '2025-05-27 13:00:00', 6.9, 2600),
(6, 26.5, 52, '2025-05-27 14:00:00', 6.9, 2500),
(6, 26.0, 52, '2025-05-27 15:00:00', 6.8, 2400),
(6, 25.5, 53, '2025-05-27 16:00:00', 6.7, 2300),
(6, 25.0, 53, '2025-05-27 17:00:00', 6.7, 2200),
(6, 24.5, 54, '2025-05-27 18:00:00', 6.6, 2100),
(6, 24.2, 54, '2025-05-27 19:00:00', 6.6, 2000),
(6, 24.0, 54, '2025-05-27 20:00:00', 6.5, 1900),
(6, 23.8, 54, '2025-05-27 21:00:00', 6.5, 1800),
(6, 23.5, 55, '2025-05-27 22:00:00', 6.4, 1700),
(6, 23.2, 55, '2025-05-27 23:00:00', 6.4, 1600);
-- 设备FID=7正常数据部分
INSERT INTO temperature_data (device_id, temperature, humidity, timestamp, ph, light_intensity) VALUES
(7, 22.0, 60, '2025-05-26 00:00:00', 6.5, 2000),
(7, 21.8, 59, '2025-05-26 01:00:00', 6.4, 1900),
(7, 21.5, 58, '2025-05-26 02:00:00', 6.3, 1800),
(7, 21.2, 57, '2025-05-26 03:00:00', 6.2, 1700),
(7, 21.0, 56, '2025-05-26 04:00:00', 6.1, 1600),
(7, 20.8, 55, '2025-05-26 05:00:00', 6.0, 1500),
(7, 21.2, 56, '2025-05-26 06:00:00', 6.2, 1800),
(7, 22.5, 58, '2025-05-26 07:00:00', 6.5, 2200),
(7, 24.0, 60, '2025-05-26 08:00:00', 6.8, 2500),
(7, 25.5, 62, '2025-05-26 09:00:00', 7.0, 2800),
(7, 26.8, 63, '2025-05-26 10:00:00', 7.2, 3000),
(7, 27.5, 62, '2025-05-26 11:00:00', 7.1, 3200),
(7, 28.0, 60, '2025-05-26 12:00:00', 7.0, 3500),
(7, 27.8, 58, '2025-05-26 13:00:00', 6.9, 3300),
(7, 27.2, 56, '2025-05-26 14:00:00', 6.8, 3000),
(7, 26.5, 55, '2025-05-26 15:00:00', 6.7, 2800),
(7, 25.5, 56, '2025-05-26 16:00:00', 6.6, 2500),
(7, 24.5, 58, '2025-05-26 17:00:00', 6.5, 2200),
(7, 23.5, 60, '2025-05-26 18:00:00', 6.4, 2000),
(7, 22.8, 61, '2025-05-26 19:00:00', 6.3, 1800),
(7, 22.0, 60, '2025-05-26 20:00:00', 6.2, 1700),
(7, 21.5, 59, '2025-05-26 21:00:00', 6.1, 1600),
(7, 21.2, 58, '2025-05-26 22:00:00', 6.0, 1500),
(7, 21.0, 57, '2025-05-26 23:00:00', 6.0, 1400),
(7, 21.2, 58, '2025-05-27 00:00:00', 6.2, 1800),
(7, 21.5, 59, '2025-05-27 01:00:00', 6.3, 1900),
(7, 21.8, 60, '2025-05-27 02:00:00', 6.4, 2000),
(7, 22.0, 61, '2025-05-27 03:00:00', 6.5, 2100),
(7, 22.5, 62, '2025-05-27 04:00:00', 6.6, 2200),
(7, 23.0, 63, '2025-05-27 05:00:00', 6.7, 2300),
(7, 24.0, 62, '2025-05-27 06:00:00', 6.8, 2500),
(7, 25.5, 60, '2025-05-27 07:00:00', 6.9, 2800),
(7, 27.0, 58, '2025-05-27 08:00:00', 7.0, 3000),
(7, 28.5, 55, '2025-05-27 09:00:00', 7.1, 3200),
(7, 30.0, 52, '2025-05-27 10:00:00', 7.2, 3500),
(7, 31.0, 50, '2025-05-27 11:00:00', 7.1, 3300),
(7, 31.5, 48, '2025-05-27 12:00:00', 7.0, 3000),
(7, 31.0, 47, '2025-05-27 13:00:00', 6.9, 2800),
(7, 30.0, 48, '2025-05-27 14:00:00', 6.8, 2500),
(7, 29.0, 50, '2025-05-27 15:00:00', 6.7, 2200),
(7, 28.0, 52, '2025-05-27 16:00:00', 6.6, 2000),
(7, 26.5, 55, '2025-05-27 17:00:00', 6.5, 1800),
(7, 25.0, 58, '2025-05-27 18:00:00', 6.4, 1600),
(7, 23.5, 60, '2025-05-27 19:00:00', 6.3, 1500),
(7, 22.0, 61, '2025-05-27 20:00:00', 6.2, 1400),
(7, 21.5, 60, '2025-05-27 21:00:00', 6.1, 1300),
(7, 21.2, 59, '2025-05-27 22:00:00', 6.0, 1200),
(7, 21.0, 58, '2025-05-27 23:00:00', 6.0, 1100);
-- ----------------------------
-- 索引优化
-- ----------------------------
CREATE INDEX IF NOT EXISTS idx_user_permission ON user(permission_level);
CREATE INDEX IF NOT EXISTS idx_user_status ON user(status);
CREATE INDEX IF NOT EXISTS idx_user_department ON user(department_id);
CREATE INDEX IF NOT EXISTS idx_user_hire_date ON user(hire_date DESC);
CREATE INDEX IF NOT EXISTS idx_user_device_user ON user_device(user_id);
CREATE INDEX IF NOT EXISTS idx_user_device_device ON user_device(device_id);
CREATE INDEX IF NOT EXISTS idx_device_status ON device(status);
-- ----------------------------
-- 设备B、C除特殊时刻外复制设备A的数据
-- ----------------------------
-- 删除设备B的非特殊时刻数据
DELETE FROM temperature_data
WHERE device_id = 2
AND timestamp NOT IN ('2025-05-26 15:00:00', '2025-05-27 15:00:00', '2025-05-27 16:00:00');
-- 删除设备C的非特殊时刻数据
DELETE FROM temperature_data
WHERE device_id = 3
AND timestamp NOT IN ('2025-05-26 15:00:00', '2025-05-27 15:00:00', '2025-05-27 16:00:00');
-- 设备B复制设备A的数据非特殊时刻
INSERT INTO temperature_data (device_id, temperature, humidity, timestamp, ph, light_intensity)
SELECT 2, temperature, humidity, timestamp, ph, light_intensity
FROM temperature_data
WHERE device_id = 1
AND timestamp NOT IN ('2025-05-26 15:00:00', '2025-05-27 15:00:00', '2025-05-27 16:00:00');
-- 设备C复制设备A的数据非特殊时刻
INSERT INTO temperature_data (device_id, temperature, humidity, timestamp, ph, light_intensity)
SELECT 3, temperature, humidity, timestamp, ph, light_intensity
FROM temperature_data
WHERE device_id = 1
AND timestamp NOT IN ('2025-05-26 15:00:00', '2025-05-27 15:00:00', '2025-05-27 16:00:00');
CREATE TABLE IF NOT EXISTS notification_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
fault_id INTEGER NOT NULL,
recipient TEXT NOT NULL,
content TEXT NOT NULL,
send_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
status TEXT DEFAULT 'success', -- success/failure
FOREIGN KEY (fault_id) REFERENCES device (id)
);
-- ----------------------------
-- 添加历史数据前2天和后2天每小时一个数据点
-- ----------------------------
-- 设备AID=1添加前2天和后2天数据
WITH hour_sequence AS (
-- 生成24小时序列0-23点
SELECT 0 AS hour UNION ALL
SELECT hour + 1 FROM hour_sequence WHERE hour < 23
), date_range AS (
-- 生成日期范围前2天、前1天、今日、后1天、后2天
SELECT DATE('2025-05-27', '-2 days') AS date UNION ALL
SELECT DATE('2025-05-27', '-1 days') UNION ALL
SELECT DATE('2025-05-27') UNION ALL
SELECT DATE('2025-05-27', '+1 days') UNION ALL
SELECT DATE('2025-05-27', '+2 days')
)
INSERT INTO temperature_data (device_id, temperature, humidity, timestamp, ph, light_intensity)
SELECT
1,
25.0 + (h.hour - 12) * 0.1, -- 温度25℃基础值每小时波动±1.2℃
60.0 + (h.hour - 12) * 0.2, -- 湿度60%基础值每小时波动±2.4%
datetime(d.date, '00:00:00') + (h.hour || ':00:00') AS timestamp,
6.8 + 0.05 * (h.hour - 12), -- PH值6.8基础值范围6.0-7.6
500 + (h.hour - 12) * 50 -- 光照强度500基础值每小时波动±600
FROM date_range d
CROSS JOIN hour_sequence h
WHERE d.date BETWEEN DATE('2025-05-27', '-2 days') AND DATE('2025-05-27', '+2 days');
-- 设备BID=2添加前2天和后2天数据基础值与波动幅度调整
WITH hour_sequence AS (
SELECT 0 AS hour UNION ALL
SELECT hour + 1 FROM hour_sequence WHERE hour < 23
), date_range AS (
SELECT DATE('2025-05-27', '-2 days') AS date UNION ALL
SELECT DATE('2025-05-27', '-1 days') UNION ALL
SELECT DATE('2025-05-27') UNION ALL
SELECT DATE('2025-05-27', '+1 days') UNION ALL
SELECT DATE('2025-05-27', '+2 days')
)
INSERT INTO temperature_data (device_id, temperature, humidity, timestamp, ph, light_intensity)
SELECT
2,
26.5 + (h.hour - 12) * 0.15, -- 温度26.5℃基础值
55.0 + (h.hour - 12) * 0.25, -- 湿度55%基础值
datetime(d.date, '00:00:00') + (h.hour || ':00:00') AS timestamp,
7.2 + 0.04 * (h.hour - 12), -- PH值7.2基础值
400 + (h.hour - 12) * 60 -- 光照强度400基础值
FROM date_range d
CROSS JOIN hour_sequence h
WHERE d.date BETWEEN DATE('2025-05-27', '-2 days') AND DATE('2025-05-27', '+2 days');
-- 设备CID=3添加前2天和后2天数据不同设备特性
WITH hour_sequence AS (
SELECT 0 AS hour UNION ALL
SELECT hour + 1 FROM hour_sequence WHERE hour < 23
), date_range AS (
SELECT DATE('2025-05-27', '-2 days') AS date UNION ALL
SELECT DATE('2025-05-27', '-1 days') UNION ALL
SELECT DATE('2025-05-27') UNION ALL
SELECT DATE('2025-05-27', '+1 days') UNION ALL
SELECT DATE('2025-05-27', '+2 days')
)
INSERT INTO temperature_data (device_id, temperature, humidity, timestamp, ph, light_intensity)
SELECT
3,
24.0 + (h.hour - 12) * 0.08, -- 温度24℃基础值
65.0 + (h.hour - 12) * 0.18, -- 湿度65%基础值
datetime(d.date, '00:00:00') + (h.hour || ':00:00') AS timestamp,
6.5 + 0.06 * (h.hour - 12), -- PH值6.5基础值
600 + (h.hour - 12) * 40 -- 光照强度600基础值
FROM date_range d
CROSS JOIN hour_sequence h
WHERE d.date BETWEEN DATE('2025-05-27', '-2 days') AND DATE('2025-05-27', '+2 days');
-- 设备DID=4添加前2天和后2天数据
WITH hour_sequence AS (
SELECT 0 AS hour UNION ALL
SELECT hour + 1 FROM hour_sequence WHERE hour < 23
), date_range AS (
SELECT DATE('2025-05-27', '-2 days') AS date UNION ALL
SELECT DATE('2025-05-27', '-1 days') UNION ALL
SELECT DATE('2025-05-27') UNION ALL
SELECT DATE('2025-05-27', '+1 days') UNION ALL
SELECT DATE('2025-05-27', '+2 days')
)
INSERT INTO temperature_data (device_id, temperature, humidity, timestamp, ph, light_intensity)
SELECT
4,
27.0 + (h.hour - 12) * 0.12, -- 温度27℃基础值
58.0 + (h.hour - 12) * 0.22, -- 湿度58%基础值
datetime(d.date, '00:00:00') + (h.hour || ':00:00') AS timestamp,
7.0 + 0.05 * (h.hour - 12), -- PH值7.0基础值
450 + (h.hour - 12) * 55 -- 光照强度450基础值
FROM date_range d
CROSS JOIN hour_sequence h
WHERE d.date BETWEEN DATE('2025-05-27', '-2 days') AND DATE('2025-05-27', '+2 days');
-- 中心设备ID=6添加前2天和后2天数据
WITH hour_sequence AS (
SELECT 0 AS hour UNION ALL
SELECT hour + 1 FROM hour_sequence WHERE hour < 23
), date_range AS (
SELECT DATE('2025-05-27', '-2 days') AS date UNION ALL
SELECT DATE('2025-05-27', '-1 days') UNION ALL
SELECT DATE('2025-05-27') UNION ALL
SELECT DATE('2025-05-27', '+1 days') UNION ALL
SELECT DATE('2025-05-27', '+2 days')
)
INSERT INTO temperature_data (device_id, temperature, humidity, timestamp, ph, light_intensity)
SELECT
6,
25.5 + (h.hour - 12) * 0.09, -- 温度25.5℃基础值(中心设备)
62.0 + (h.hour - 12) * 0.19, -- 湿度62%基础值
datetime(d.date, '00:00:00') + (h.hour || ':00:00') AS timestamp,
6.9 + 0.05 * (h.hour - 12), -- PH值6.9基础值
550 + (h.hour - 12) * 45 -- 光照强度550基础值
FROM date_range d
CROSS JOIN hour_sequence h
WHERE d.date BETWEEN DATE('2025-05-27', '-2 days') AND DATE('2025-05-27', '+2 days');
-- 设备FID=7添加前2天和后2天数据
WITH hour_sequence AS (
SELECT 0 AS hour UNION ALL
SELECT hour + 1 FROM hour_sequence WHERE hour < 23
), date_range AS (
SELECT DATE('2025-05-27', '-2 days') AS date UNION ALL
SELECT DATE('2025-05-27', '-1 days') UNION ALL
SELECT DATE('2025-05-27') UNION ALL
SELECT DATE('2025-05-27', '+1 days') UNION ALL
SELECT DATE('2025-05-27', '+2 days')
)
INSERT INTO temperature_data (device_id, temperature, humidity, timestamp, ph, light_intensity)
SELECT
7,
23.5 + (h.hour - 12) * 0.14, -- 温度23.5℃基础值
68.0 + (h.hour - 12) * 0.24, -- 湿度68%基础值
datetime(d.date, '00:00:00') + (h.hour || ':00:00') AS timestamp,
6.7 + 0.07 * (h.hour - 12), -- PH值6.7基础值
350 + (h.hour - 12) * 65 -- 光照强度350基础值
FROM date_range d
CROSS JOIN hour_sequence h
WHERE d.date BETWEEN DATE('2025-05-27', '-2 days') AND DATE('2025-05-27', '+2 days');
-- ----------------------------
-- 操作日志数据
-- ----------------------------
-- 添加用户创建日志
INSERT INTO operation_log (user_id, type, message) VALUES
(1, 'USER_CREATE', '创建用户 admin'),
(1, 'USER_CREATE', '创建用户 supervisor'),
(1, 'USER_CREATE', '创建用户 operator1'),
(1, 'USER_CREATE', '创建用户 operator2');
-- 添加用户更新日志
INSERT INTO operation_log (user_id, type, message) VALUES
(1, 'USER_UPDATE', '更新用户 admin 的联系方式'),
(2, 'USER_UPDATE', '更新用户 supervisor 的权限级别'),
(3, 'USER_UPDATE', '更新用户 operator1 的状态为 Inactive');
-- 添加用户删除日志
INSERT INTO operation_log (user_id, type, message) VALUES
(1, 'USER_DELETE', '删除用户 test_user'),
(2, 'USER_DELETE', '删除用户 temp_user');
-- 添加设备操作日志
INSERT INTO operation_log (user_id, type, message) VALUES
(1, 'DEVICE_MANAGE', '添加新设备 环境监测仪A'),
(2, 'DEVICE_MANAGE', '修改设备 环境监测仪B 的状态为警告'),
(3, 'DEVICE_MANAGE', '删除设备 环境监测仪C');
-- 添加数据查看日志
INSERT INTO operation_log (user_id, type, message) VALUES
(1, 'DATA_VIEW', '查看设备A的温湿度数据'),
(2, 'DATA_VIEW', '查看设备B的温湿度数据'),
(3, 'DATA_VIEW', '查看所有设备的故障记录'),
(4, 'DATA_VIEW', '导出2025年5月的温湿度数据报表');
-- 添加权限变更日志
INSERT INTO operation_log (user_id, type, message) VALUES
(1, 'PERMISSION_CHANGE', '将用户 supervisor 的权限提升为管理员'),
(1, 'PERMISSION_CHANGE', '将用户 operator1 的权限调整为主管'),
(2, 'PERMISSION_CHANGE', '将用户 operator2 的权限调整为操作员');
-- 添加系统操作日志
INSERT INTO operation_log (user_id, type, message) VALUES
(1, 'SYSTEM_OPERATION', '系统备份完成'),
(1, 'SYSTEM_OPERATION', '数据库优化执行完毕'),
(2, 'SYSTEM_OPERATION', '服务器状态检查完成'),
(3, 'SYSTEM_OPERATION', '数据同步任务启动');
-- ----------------------------
-- 湿度记录表
-- ----------------------------
DROP TABLE IF EXISTS soil_moisture;
CREATE TABLE soil_moisture (
id INTEGER PRIMARY KEY AUTOINCREMENT,
record_date TEXT NOT NULL UNIQUE,
moisture REAL NOT NULL
);
INSERT INTO soil_moisture (record_date, moisture) VALUES
('6.10', 55.0),
('6.11', 60.5),
('6.12', 80.0),
('6.13', 75.5),
('6.14', 65.0),
('6.15', 50.5),
('6.16', 90.0);
-- 删除已存在的表(如果需要)
DROP TABLE IF EXISTS sensor_data;
-- 创建新表,包含 temperature, humidity, pH 和 status 字段
CREATE TABLE sensor_data (
id INTEGER PRIMARY KEY AUTOINCREMENT,
record_time TEXT NOT NULL UNIQUE, -- 时间戳作为唯一记录标识
temperature REAL NOT NULL, -- 温度
humidity REAL NOT NULL, -- 湿度
ph REAL NOT NULL, -- pH 值
status TEXT NOT NULL -- 状态normal/warning/abnormal 等)
);
-- 插入数据
INSERT INTO sensor_data (record_time, temperature, humidity, ph, status) VALUES
('2025-06-02 00:00:00', 18.1, 94.0, 6.6, 'normal'),
('2025-06-02 00:20:00', 18.7, 92.9, 6.7, 'normal'),
('2025-06-02 00:40:00', 19.3, 91.1, 6.8, 'normal'),
('2025-06-02 01:00:00', 18.6, 84.1, 6.7, 'normal'),
('2025-06-02 01:20:00', 18.6, 89.9, 6.8, 'normal'),
('2025-06-02 01:40:00', 19.7, 88.3, 6.7, 'normal'),
('2025-06-02 02:00:00', 18.5, 87.4, 6.6, 'normal'),
('2025-06-02 02:20:00', 20.8, 87.6, 6.7, 'normal'),
('2025-06-02 02:40:00', 19.2, 88.4, 6.7, 'normal'),
('2025-06-02 03:00:00', 19.5, 84.5, 6.7, 'normal'),
('2025-06-02 03:20:00', 20.7, 86.0, 6.6, 'normal'),
('2025-06-02 03:40:00', 19.4, 90.4, 6.7, 'normal'),
('2025-06-02 04:00:00', 21.6, 84.1, 6.7, 'normal'),
('2025-06-02 04:20:00', 21.4, 82.9, 6.6, 'normal'),
('2025-06-02 04:40:00', 22.6, 82.3, 6.6, 'normal'),
('2025-06-02 05:00:00', 22.7, 84.6, 6.8, 'normal'),
('2025-06-02 05:20:00', 23.9, 79.4, 6.8, 'normal'),
('2025-06-02 05:40:00', 22.9, 82.6, 6.6, 'normal'),
('2025-06-02 06:00:00', 24.7, 79.3, 6.7, 'normal'),
('2025-06-02 06:20:00', 24.5, 78.6, 6.6, 'normal'),
('2025-06-02 06:40:00', 24.5, 80.5, 6.7, 'normal'),
('2025-06-02 07:00:00', 25.5, 81.8, 6.6, 'normal'),
('2025-06-02 07:20:00', 25.2, 76.7, 6.7, 'normal'),
('2025-06-02 07:40:00', 25.7, 76.5, 6.8, 'normal'),
('2025-06-02 08:00:00', 26.1, 71.2, 6.8, 'normal'),
('2025-06-02 08:20:00', 27.1, 73.5, 6.7, 'normal'),
('2025-06-02 08:40:00', 27.2, 76.5, 6.6, 'normal'),
('2025-06-02 09:00:00', 25.9, 75.5, 6.5, 'normal'),
('2025-06-02 09:20:00', 29.0, 72.0, 6.8, 'normal'),
('2025-06-02 09:40:00', 29.5, 73.4, 6.7, 'normal'),
('2025-06-02 10:00:00', 27.9, 75.2, 6.8, 'normal'),
('2025-06-02 10:20:00', 29.3, 72.3, 6.7, 'normal'),
('2025-06-02 10:40:00', 29.2, 73.2, 6.6, 'normal'),
('2025-06-02 11:00:00', 28.6, 69.7, 6.7, 'normal'),
('2025-06-02 11:20:00', 28.8, 73.3, 6.7, 'normal'),
('2025-06-02 11:40:00', 29.9, 71.4, 6.6, 'normal'),
('2025-06-02 12:00:00', 27.8, 70.0, 6.6, 'normal'),
('2025-06-02 12:20:00', 29.7, 70.6, 6.9, 'normal'),
('2025-06-02 12:40:00', 30.0, 74.5, 6.7, 'normal'),
('2025-06-02 13:00:00', 28.4, 68.8, 6.7, 'normal'),
('2025-06-02 13:20:00', 35.5, 73.6, 6.8, 'high_temp'),
('2025-06-02 13:40:00', 29.2, 74.2, 6.5, 'normal'),
('2025-06-02 14:00:00', 29.3, 70.7, 6.7, 'normal'),
('2025-06-02 14:20:00', 28.1, 77.2, 6.5, 'normal'),
('2025-06-02 14:40:00', 27.1, 76.7, 6.9, 'normal'),
('2025-06-02 15:00:00', 27.3, 70.7, 6.6, 'normal'),
('2025-06-02 15:20:00', 25.5, 72.1, 6.5, 'normal'),
('2025-06-02 15:40:00', 26.3, 74.3, 6.5, 'normal'),
('2025-06-02 16:00:00', 27.1, 74.3, 6.7, 'normal'),
('2025-06-02 16:20:00', 25.5, 77.3, 6.7, 'normal'),
('2025-06-02 16:40:00', 26.1, 78.2, 6.6, 'normal'),
('2025-06-02 17:00:00', 27.0, 77.7, 6.6, 'normal'),
('2025-06-02 17:20:00', 24.5, 82.8, 6.9, 'normal'),
('2025-06-02 17:40:00', 24.8, 80.3, 6.7, 'normal'),
('2025-06-02 18:00:00', 22.8, 85.1, 6.9, 'normal'),
('2025-06-02 18:20:00', 24.4, 80.7, 6.5, 'normal'),
('2025-06-02 18:40:00', 23.9, 84.9, 6.7, 'normal'),
('2025-06-02 19:00:00', 22.2, 90.9, 6.8, 'normal'),
('2025-06-02 19:20:00', 21.6, 81.7, 6.8, 'normal'),
('2025-06-02 19:40:00', 21.6, 85.8, 6.6, 'normal'),
('2025-06-02 20:00:00', 20.6, 86.8, 6.8, 'normal'),
('2025-06-02 20:20:00', 21.6, 82.7, 6.6, 'normal'),
('2025-06-02 20:40:00', 21.7, 87.4, 6.8, 'normal'),
('2025-06-02 21:00:00', 20.6, 91.5, 6.7, 'normal'),
('2025-06-02 21:20:00', 18.8, 85.5, 6.7, 'normal'),
('2025-06-02 21:40:00', 21.2, 88.2, 6.6, 'normal'),
('2025-06-02 22:00:00', 20.1, 90.8, 6.7, 'normal'),
('2025-06-02 22:20:00', 19.7, 88.7, 6.8, 'normal'),
('2025-06-02 22:40:00', 18.1, 86.2, 6.8, 'normal'),
('2025-06-02 23:00:00', 19.1, 89.3, 6.7, 'normal'),
('2025-06-02 23:20:00', 19.2, 87.3, 6.6, 'normal'),
('2025-06-02 23:40:00', 19.2, 84.0, 6.8, 'normal'),
('2025-06-03 00:00:00', 19.6, 88.9, 6.9, 'normal'),
('2025-06-03 00:20:00', 18.5, 88.4, 6.7, 'normal'),
('2025-06-03 00:40:00', 18.8, 85.9, 6.4, 'normal'),
('2025-06-03 01:00:00', 18.7, 92.6, 6.5, 'normal'),
('2025-06-03 01:20:00', 19.3, 90.2, 6.5, 'normal'),
('2025-06-03 01:40:00', 18.1, 93.9, 6.6, 'normal'),
('2025-06-03 02:00:00', 20.6, 90.8, 6.5, 'normal'),
('2025-06-03 02:20:00', 20.4, 92.1, 6.7, 'normal'),
('2025-06-03 02:40:00', 20.9, 88.9, 6.5, 'normal'),
('2025-06-03 03:00:00', 20.5, 86.7, 6.7, 'normal'),
('2025-06-03 03:20:00', 21.1, 83.9, 6.5, 'normal'),
('2025-06-03 03:40:00', 20.9, 85.6, 6.6, 'normal'),
('2025-06-03 04:00:00', 22.9, 85.1, 6.5, 'normal'),
('2025-06-03 04:20:00', 21.0, 86.8, 6.4, 'normal'),
('2025-06-03 04:40:00', 21.3, 85.2, 6.6, 'normal'),
('2025-06-03 05:00:00', 22.7, 85.9, 6.5, 'normal'),
('2025-06-03 05:20:00', 23.4, 82.9, 6.5, 'normal'),
('2025-06-03 05:40:00', 25.6, 82.9, 6.4, 'normal'),
('2025-06-03 06:00:00', 25.0, 80.0, 6.6, 'normal'),
('2025-06-03 06:20:00', 25.0, 79.1, 6.6, 'normal'),
('2025-06-03 06:40:00', 24.3, 76.9, 6.5, 'normal'),
('2025-06-03 07:00:00', 24.6, 77.6, 6.5, 'normal'),
('2025-06-03 07:20:00', 25.1, 79.7, 6.5, 'normal'),
('2025-06-03 07:40:00', 26.9, 72.3, 6.6, 'normal'),
('2025-06-03 08:00:00', 27.4, 80.2, 6.4, 'normal'),
('2025-06-03 08:20:00', 27.7, 73.3, 6.6, 'normal'),
('2025-06-03 08:40:00', 26.6, 71.3, 6.5, 'normal'),
('2025-06-03 09:00:00', 26.5, 70.5, 6.6, 'normal'),
('2025-06-03 09:20:00', 28.0, 72.0, 6.6, 'normal'),
('2025-06-03 09:40:00', 28.6, 77.2, 6.5, 'normal'),
('2025-06-03 10:00:00', 28.6, 73.7, 6.5, 'normal'),
('2025-06-03 10:20:00', 29.3, 68.1, 6.5, 'normal'),
('2025-06-03 10:40:00', 29.5, 68.4, 6.5, 'normal'),
('2025-06-03 11:00:00', 30.0, 70.1, 6.4, 'normal'),
('2025-06-03 11:20:00', 29.7, 71.1, 6.4, 'normal'),
('2025-06-03 11:40:00', 27.8, 72.8, 6.5, 'normal'),
('2025-06-03 12:00:00', 28.6, 77.5, 6.6, 'normal'),
('2025-06-03 12:20:00', 28.9, 69.1, 6.6, 'normal'),
('2025-06-03 12:40:00', 30.5, 72.2, 6.6, 'normal'),
('2025-06-03 13:00:00', 28.4, 71.4, 6.5, 'normal'),
('2025-06-03 13:20:00', 28.6, 74.5, 6.5, 'normal'),
('2025-06-03 13:40:00', 28.5, 73.7, 6.5, 'normal'),
('2025-06-03 14:00:00', 29.0, 70.1, 6.7, 'normal'),
('2025-06-03 14:20:00', 28.0, 67.9, 6.6, 'normal'),
('2025-06-03 14:40:00', 28.2, 75.2, 6.6, 'normal'),
('2025-06-03 15:00:00', 26.6, 70.1, 6.6, 'normal'),
('2025-06-03 15:20:00', 27.4, 73.8, 6.4, 'normal'),
('2025-06-03 15:40:00', 27.9, 77.3, 6.4, 'normal'),
('2025-06-03 16:00:00', 27.1, 72.4, 6.6, 'normal'),
('2025-06-03 16:20:00', 26.1, 75.9, 6.6, 'normal'),
('2025-06-03 16:40:00', 26.5, 75.8, 6.6, 'normal'),
('2025-06-03 17:00:00', 26.1, 85.7, 6.4, 'normal'),
('2025-06-03 17:20:00', 25.3, 78.8, 6.5, 'normal'),
('2025-06-03 17:40:00', 25.1, 76.0, 6.3, 'normal'),
('2025-06-03 18:00:00', 25.0, 79.9, 6.5, 'normal'),
('2025-06-03 18:20:00', 23.1, 79.3, 6.7, 'normal'),
('2025-06-03 18:40:00', 22.8, 88.0, 6.6, 'normal'),
('2025-06-03 19:00:00', 23.4, 78.7, 6.6, 'normal'),
('2025-06-03 19:20:00', 23.8, 80.1, 6.6, 'normal'),
('2025-06-03 19:40:00', 21.9, 88.2, 6.5, 'normal'),
('2025-06-03 20:00:00', 20.8, 85.9, 6.4, 'normal'),
('2025-06-03 20:20:00', 22.2, 87.2, 6.5, 'normal'),
('2025-06-03 20:40:00', 20.7, 91.3, 6.5, 'normal'),
('2025-06-03 21:00:00', 20.3, 92.8, 6.6, 'normal'),
('2025-06-03 21:20:00', 18.4, 91.3, 6.6, 'normal'),
('2025-06-03 21:40:00', 19.9, 85.6, 6.4, 'normal'),
('2025-06-03 22:00:00', 20.3, 88.0, 6.6, 'normal'),
('2025-06-03 22:20:00', 18.8, 91.4, 6.5, 'normal'),
('2025-06-03 22:40:00', 20.1, 94.8, 6.5, 'normal'),
('2025-06-03 23:00:00', 18.5, 87.2, 6.6, 'normal'),
('2025-06-03 23:20:00', 18.7, 87.5, 6.9, 'normal'),
('2025-06-03 23:40:00', 18.4, 93.0, 6.8, 'normal'),
('2025-06-04 00:00:00', 18.5, 88.4, 6.3, 'normal'),
('2025-06-04 00:20:00', 18.0, 87.5, 6.1, 'normal'),
('2025-06-04 00:40:00', 19.0, 91.2, 6.2, 'normal'),
('2025-06-04 01:00:00', 19.0, 90.2, 6.1, 'normal'),
('2025-06-04 01:20:00', 19.2, 89.2, 6.0, 'normal'),
('2025-06-04 01:40:00', 19.8, 85.4, 6.1, 'normal'),
('2025-06-04 02:00:00', 18.5, 85.0, 6.0, 'normal'),
('2025-06-04 02:20:00', 20.4, 88.6, 6.2, 'normal'),
('2025-06-04 02:40:00', 20.8, 90.5, 6.1, 'normal'),
('2025-06-04 03:00:00', 20.5, 85.7, 6.0, 'normal'),
('2025-06-04 03:20:00', 21.4, 90.7, 5.9, 'normal'),
('2025-06-04 03:40:00', 21.2, 90.9, 6.0, 'normal'),
('2025-06-04 04:00:00', 23.1, 87.2, 5.9, 'normal'),
('2025-06-04 04:20:00', 22.9, 80.6, 6.0, 'normal'),
('2025-06-04 04:40:00', 23.1, 83.8, 6.4, 'normal'),
('2025-06-04 05:00:00', 21.8, 88.7, 6.3, 'normal'),
('2025-06-04 05:20:00', 23.3, 79.1, 6.0, 'normal'),
('2025-06-04 05:40:00', 24.3, 82.9, 6.1, 'normal'),
('2025-06-04 06:00:00', 24.9, 77.0,6.5, 'normal'),
('2025-06-04 06:20:00', 24.6, 80.9, 6.2, 'normal'),
('2025-06-04 06:40:00', 26.6, 82.1, 6.0, 'normal'),
('2025-06-04 07:00:00', 25.8, 76.0, 6.1, 'normal'),
('2025-06-04 07:20:00', 25.4, 74.6, 6.3, 'normal'),
('2025-06-04 07:40:00', 25.8, 75.3, 6.2, 'normal'),
('2025-06-04 08:00:00', 27.1, 75.1, 6.0, 'normal'),
('2025-06-04 08:20:00', 27.7, 74.0, 5.9, 'normal'),
('2025-06-04 08:40:00', 27.9, 79.7, 6.0, 'normal'),
('2025-06-04 09:00:00', 27.6, 73.6, 5.9, 'normal'),
('2025-06-04 09:20:00', 28.9, 72.8, 6.3, 'normal'),
('2025-06-04 09:40:00', 27.1, 69.1, 6.2, 'normal'),
('2025-06-04 10:00:00', 28.1, 69.3, 6.1, 'normal'),
('2025-06-04 10:20:00', 28.9, 71.4, 6.1, 'normal'),
('2025-06-04 10:40:00', 29.6, 66.5, 6.0, 'normal'),
('2025-06-04 11:00:00', 29.4, 73.3, 6.2, 'normal'),
('2025-06-04 11:20:00', 28.3, 72.5, 6.0, 'normal'),
('2025-06-04 11:40:00', 30.1, 71.3, 5.9, 'normal'),
('2025-06-04 12:00:00', 30.4, 72.2, 6.0, 'normal'),
('2025-06-04 12:20:00', 30.6, 67.9, 6.1, 'normal'),
('2025-06-04 12:40:00', 29.4, 71.0, 6.2, 'normal'),
('2025-06-04 13:00:00', 30.8, 66.1, 6.1, 'normal'),
('2025-06-04 13:20:00', 29.4, 70.7, 6.1, 'normal'),
('2025-06-04 13:40:00', 29.0, 69.3, 6.0, 'normal'),
('2025-06-04 14:00:00', 28.6, 74.9, 6.2, 'normal'),
('2025-06-04 14:20:00', 27.7, 74.5, 6.3, 'normal'),
('2025-06-04 14:40:00', 27.8, 73.7, 6.2, 'normal'),
('2025-06-04 15:00:00', 27.8, 74.9, 6.1, 'normal'),
('2025-06-04 15:20:00', 27.1, 73.4, 6.1, 'normal'),
('2025-06-04 15:40:00', 27.1, 76.1, 6.3, 'normal'),
('2025-06-04 16:00:00', 24.9, 79.5, 6.0, 'normal'),
('2025-06-04 16:20:00', 27.1, 77.3, 6.1, 'normal'),
('2025-06-04 16:40:00', 24.5, 78.8, 6.0, 'normal'),
('2025-06-04 17:00:00', 25.7, 78.7, 6.1, 'normal'),
('2025-06-04 17:20:00', 25.2, 75.7, 5.9, 'normal'),
('2025-06-04 17:40:00', 24.5, 89.9, 6.2, 'normal'),
('2025-06-04 18:00:00', 23.7, 82.4, 6.1, 'normal'),
('2025-06-04 18:20:00', 24.5, 81.8, 6.0, 'normal'),
('2025-06-04 18:40:00', 23.8, 83.5, 6.1, 'normal'),
('2025-06-04 19:00:00', 23.5, 80.8, 6.3, 'normal'),
('2025-06-04 19:20:00', 22.0, 82.8, 5.9, 'normal'),
('2025-06-04 19:40:00', 22.9, 83.9, 6.1, 'normal'),
('2025-06-04 20:00:00', 20.9, 83.3, 6.3, 'normal'),
('2025-06-04 20:20:00', 21.5, 87.8, 6.0, 'normal'),
('2025-06-04 20:40:00', 20.1, 80.9, 5.9, 'normal'),
('2025-06-04 21:00:00', 21.3, 86.1, 6.3, 'normal'),
('2025-06-04 21:20:00', 19.6, 86.5, 6.0, 'normal'),
('2025-06-04 21:40:00', 21.0, 89.2, 6.2, 'normal'),
('2025-06-04 22:00:00', 18.5, 91.1, 6.1, 'normal'),
('2025-06-04 22:20:00', 18.6, 85.7, 6.2, 'normal'),
('2025-06-04 22:40:00', 19.3, 94.5, 6.1, 'normal'),
('2025-06-04 23:00:00', 19.5, 88.2, 6.1, 'normal'),
('2025-06-04 23:20:00', 20.4, 89.4, 5.8, 'normal'),
('2025-06-04 23:40:00', 19.3, 90.0, 6.0, 'normal'),
('2025-06-05 00:00:00', 19.8, 90.9, 5.9, 'normal'),
('2025-06-05 00:20:00', 18.4, 95.4, 6.0, 'normal'),
('2025-06-05 00:40:00', 19.1, 92.9, 5.9, 'normal'),
('2025-06-05 01:00:00', 18.7, 86.4, 5.7, 'normal'),
('2025-06-05 01:20:00', 19.4, 88.3, 6.0, 'normal'),
('2025-06-05 01:40:00', 19.8, 85.4, 5.8, 'normal'),
('2025-06-05 02:00:00', 19.4, 91.3, 6.0, 'normal'),
('2025-06-05 02:20:00', 20.5, 89.8, 5.9, 'normal'),
('2025-06-05 02:40:00', 21.0, 91.3, 5.9, 'normal'),
('2025-06-05 03:00:00', 19.1, 90.6, 6.0, 'normal'),
('2025-06-05 03:20:00', 20.0, 88.3, 5.9, 'normal'),
('2025-06-05 03:40:00', 20.7, 89.6, 5.8, 'normal'),
('2025-06-05 04:00:00', 21.3, 83.0, 5.9, 'normal'),
('2025-06-05 04:20:00', 22.1, 88.7, 6.1, 'normal'),
('2025-06-05 04:40:00', 22.6, 84.3, 6.1, 'normal'),
('2025-06-05 05:00:00', 22.0, 86.9, 5.8, 'normal'),
('2025-06-05 05:20:00', 23.1, 78.4, 5.8, 'normal'),
('2025-06-05 05:40:00', 23.2, 78.8, 6.0, 'normal'),
('2025-06-05 06:00:00', 25.1, 74.7, 5.8, 'normal'),
('2025-06-05 06:20:00', 24.5, 83.4, 5.9, 'normal'),
('2025-06-05 06:40:00', 24.5, 81.0, 5.8, 'normal'),
('2025-06-05 07:00:00', 26.1, 77.9, 6.0, 'normal'),
('2025-06-05 07:20:00', 25.4, 77.9, 5.9, 'normal'),
('2025-06-05 07:40:00', 25.0, 76.6, 6.5, 'normal'),
('2025-06-05 08:00:00', 26.4, 74.0, 5.9, 'normal'),
('2025-06-05 08:20:00', 26.5, 79.2, 6.2, 'normal'),
('2025-06-05 08:40:00', 20.2, 68.6, 5.9, 'low_temp'),
('2025-06-05 09:00:00', 28.0, 67.9, 5.9, 'normal'),
('2025-06-05 09:20:00', 28.2, 79.6, 6.0, 'normal'),
('2025-06-05 09:40:00', 28.5, 72.5, 6.0, 'normal'),
('2025-06-05 10:00:00', 30.4, 71.4, 5.8, 'normal'),
('2025-06-05 10:20:00', 28.4, 75.3, 6.1, 'normal'),
('2025-06-05 10:40:00', 27.0, 70.7, 6.1, 'normal'),
('2025-06-05 11:00:00', 28.6, 71.8, 6.0, 'normal'),
('2025-06-05 11:20:00', 28.7, 71.6, 6.0, 'normal'),
('2025-06-05 11:40:00', 29.5, 66.9, 6.1, 'normal'),
('2025-06-05 12:00:00', 30.0, 68.7, 6.0, 'normal'),
('2025-06-05 12:20:00', 29.4, 74.6, 5.8, 'normal'),
('2025-06-05 12:40:00', 27.5, 72.8, 6.1, 'normal'),
('2025-06-05 13:00:00', 28.7, 71.9, 6.0, 'normal'),
('2025-06-05 13:20:00', 28.7, 73.3, 6.2, 'normal'),
('2025-06-05 13:40:00', 27.7, 73.4, 6.6, 'normal'),
('2025-06-05 14:00:00', 29.2, 77.1, 5.9, 'normal'),
('2025-06-05 14:20:00', 28.0, 70.3, 5.9, 'normal'),
('2025-06-05 14:40:00', 27.3, 76.9, 6.5, 'normal'),
('2025-06-05 15:00:00', 27.7, 73.6, 6.3, 'normal'),
('2025-06-05 15:20:00', 26.7, 70.4, 6.8, 'normal'),
('2025-06-05 15:40:00', 27.1, 76.4, 6.9, 'normal'),
('2025-06-05 16:00:00', 27.3, 72.6, 6.6, 'normal'),
('2025-06-05 16:20:00', 26.2, 80.9, 5.9, 'normal'),
('2025-06-05 16:40:00', 25.1, 77.0, 6.2, 'normal'),
('2025-06-05 17:00:00', 24.4, 79.6, 5.8, 'normal'),
('2025-06-05 17:20:00', 25.3, 78.0, 6.4, 'normal'),
('2025-06-05 17:40:00', 24.0, 78.0, 6.2, 'normal'),
('2025-06-05 18:00:00', 24.0, 81.5, 6.3, 'normal'),
('2025-06-05 18:20:00', 23.2, 82.9, 6.3, 'normal'),
('2025-06-05 18:40:00', 23.0, 83.6, 5.8, 'normal'),
('2025-06-05 19:00:00', 23.8, 81.0, 6.0, 'normal'),
('2025-06-05 19:20:00', 21.9, 84.2, 5.7, 'normal'),
('2025-06-05 19:40:00', 22.1, 88.0, 6.8, 'normal'),
('2025-06-05 20:00:00', 20.9, 79.5, 6.9, 'normal'),
('2025-06-05 20:20:00', 21.0, 82.6, 6.3, 'normal'),
('2025-06-05 20:40:00', 20.7, 88.5, 6.2, 'normal'),
('2025-06-05 21:00:00', 20.4, 90.6, 5.9, 'normal'),
('2025-06-05 21:20:00', 20.3, 82.6, 5.8, 'normal'),
('2025-06-05 21:40:00', 19.3, 87.0, 5.9, 'normal'),
('2025-06-05 22:00:00', 19.7, 88.6, 6.6, 'normal'),
('2025-06-05 22:20:00', 20.9, 84.1, 6.5, 'normal'),
('2025-06-05 22:40:00', 18.9, 85.7, 6.8, 'normal'),
('2025-06-05 23:00:00', 20.0, 87.4, 6.9, 'normal'),
('2025-06-05 23:20:00', 21.0, 84.4, 6.7, 'normal'),
('2025-06-05 23:40:00', 19.1, 87.9, 6.8, 'normal'),
('2025-06-06 00:00:00', 20.4, 100.0, 6.4, 'normal'),
('2025-06-06 00:20:00', 18.3, 95.1, 6.2, 'normal'),
('2025-06-06 00:40:00', 20.4, 90.6, 6.3, 'normal'),
('2025-06-06 01:00:00', 19.7, 85.8, 6.2, 'normal'),
('2025-06-06 01:20:00', 20.6, 85.0, 6.5, 'normal'),
('2025-06-06 01:40:00', 19.1, 87.1, 6.3, 'normal'),
('2025-06-06 02:00:00', 20.1, 87.6, 6.3, 'normal'),
('2025-06-06 02:20:00', 19.3, 84.9, 6.4, 'normal'),
('2025-06-06 02:40:00', 20.2, 85.1, 6.6, 'normal'),
('2025-06-06 03:00:00', 19.4, 83.8, 6.4, 'normal'),
('2025-06-06 03:20:00', 21.1, 85.9, 6.2, 'normal'),
('2025-06-06 03:40:00', 20.8, 88.5, 6.4, 'normal'),
('2025-06-06 04:00:00', 21.3, 89.7, 6.5, 'normal'),
('2025-06-06 04:20:00', 22.9, 77.1, 6.3, 'normal'),
('2025-06-06 04:40:00', 20.7, 86.3, 6.6, 'normal');