868 lines
		
	
	
		
			39 KiB
		
	
	
	
		
			SQL
		
	
	
	
	
	
			
		
		
	
	
			868 lines
		
	
	
		
			39 KiB
		
	
	
	
		
			SQL
		
	
	
	
	
	
| 
 | ||
| -- ----------------------------
 | ||
| -- 部门表
 | ||
| -- ----------------------------
 | ||
| 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);
 | ||
| 
 | ||
| -- 设备B(ID=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);
 | ||
| 
 | ||
| -- 设备C(ID=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);
 | ||
| 
 | ||
| -- 设备D(ID=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);
 | ||
| 
 | ||
| -- 设备F(ID=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天,每小时一个数据点)
 | ||
| -- ----------------------------
 | ||
| 
 | ||
| -- 设备A(ID=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');
 | ||
| 
 | ||
| 
 | ||
| -- 设备B(ID=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');
 | ||
| 
 | ||
| 
 | ||
| -- 设备C(ID=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');
 | ||
| 
 | ||
| 
 | ||
| -- 设备D(ID=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');
 | ||
| 
 | ||
| 
 | ||
| -- 设备F(ID=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'); | 
