| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- const db = require('../config/db');
- const logger = require('../logger');
- class Device {
- // 插入新设备
- static insert(device_id, status, last_seen, first_online_time, last_online_time, ip_address, callback) {
- const sql = `
- INSERT INTO devices (device_id, status, last_seen, first_online_time, last_online_time, ip_address)
- VALUES (?, ?, ?, ?, ?, ?)
- `;
- logger.info(`插入新设备: ${device_id}`);
- const devicesSql = `/* 原有SQL语句保持不变 */`;
-
- db.query(devicesSql, [device_id, status, last_seen, first_online_time, last_online_time, ip_address], (err, result) => {
- if (err) {
- logger.error('插入新设备失败:', err);
- return callback(err);
- }
-
- // 新增relay_state表插入(初始化默认房间信息)
- const relaySql = `
- INSERT INTO relay_state
- (device_id, state, temperature, timestamp, room_number, room_name)
- VALUES (?, 'off', NULL, ?, '默认房间号', '默认房间')
- `;
- db.query(relaySql, [device_id, last_seen], (relayErr) => {
- if (relayErr) logger.error('初始化继电器状态失败:', relayErr);
- });
- callback(null, result);
- });
- }
- // 更新设备上线状态
- static updateOnlineStatus(device_id, status, last_seen, first_online_time, last_online_time, ip_address, callback) {
- logger.info(`更新设备 ${device_id} 在线状态`);
- const sql = `
- UPDATE devices
- SET
- status = ?,
- last_seen = ?,
- first_online_time = ?,
- last_online_time = ?,
- ip_address = ?
- WHERE device_id = ?
- `;
- db.query(sql, [status, last_seen, first_online_time, last_online_time, ip_address, device_id], callback);
- }
- // 更新设备下线状态
- static updateOfflineStatus(device_id, status, last_seen, last_offline_time, callback) {
- const sql = `
- UPDATE devices
- SET
- status = ?,
- last_seen = ?,
- last_offline_time = ?
- WHERE device_id = ?
- `;
- db.query(sql, [status, last_seen, last_offline_time, device_id], callback);
- }
- // 修改updateTemperature方法参数处理
- static updateTemperature(device_id, temperature, upload_time, room_number, room_name, callback = () => {}) {
- logger.info(`更新设备温度: 设备ID=${device_id}, 温度=${temperature}`);
- const sql = `
- UPDATE devices
- SET temperature = ?, upload_time = ?
- WHERE device_id = ?
- `;
- db.query(sql, [temperature, upload_time, device_id], (err, results) => {
- if (err) {
- logger.error(`更新设备温度失败: 设备ID=${device_id}, 错误: ${err}`);
- return callback(err);
- }
-
- // 新增relay_state插入(添加默认回调)
- const relaySql = `
- INSERT INTO relay_state
- (device_id, temperature, timestamp, room_number, room_name)
- VALUES (?, ?, ?, ?, ?)
- `;
- db.query(relaySql, [device_id, temperature, upload_time, room_number, room_name], (relayErr) => {
- if (relayErr) {
- logger.error(`温度记录失败: ${device_id}`);
- }
- callback(null, results); // 确保在此处调用回调
- });
- });
- }
- // 只更新开关状态和开关状态时间
- static updateSwitchStatus(device_id, switch_status, switch_status_time, callback) {
- logger.info(`更新设备开关状态: 设备ID=${device_id}, 状态=${switch_status}`);
- const sql = `
- UPDATE devices
- SET switch_status = ?, switch_status_time = ?
- WHERE device_id = ?
- `;
- db.query(sql, [switch_status, switch_status_time, device_id], (err, results) => {
- if (err) {
- logger.error(`更新设备开关状态失败: 设备ID=${device_id}, 错误: ${err}`);
- return callback(err);
- }
-
- // 新增relay_state更新
- const relaySql = `
- UPDATE relay_state
- SET switch_status = ?, update_time = ?
- WHERE device_id = ?
- `;
- db.query(relaySql, [switch_status, switch_status_time, device_id], (relayErr) => {
- if (relayErr) {
- logger.error(`更新继电器状态失败: ${device_id}`);
- }
- });
- logger.debug(`设备开关状态更新成功: 设备ID=${device_id}`);
- callback(null, results);
- });
- }
- static updateTemperature(device_id, temperature, upload_time, callback) {
- logger.info(`更新设备温度: 设备ID=${device_id}, 温度=${temperature}`);
- const sql = `
- UPDATE devices
- SET temperature = ?, upload_time = ?
- WHERE device_id = ?
- `;
- db.query(sql, [temperature, upload_time, device_id], (err, results) => {
- if (err) {
- logger.error(`更新设备温度失败: 设备ID=${device_id}, 错误: ${err}`);
- return callback(err);
- }
-
- // 新增relay_state更新
- const relaySql = `
- UPDATE relay_state
- SET temperature = ?, update_time = ?
- WHERE device_id = ?
- `;
- db.query(relaySql, [temperature, upload_time, device_id], (relayErr) => {
- if (relayErr) {
- logger.error(`更新温度记录失败: ${device_id}`);
- }
- });
- logger.debug(`设备温度更新成功: 设备ID=${device_id}`);
- callback(null, results);
- });
- }
- // 只更新高低电平状态和高低电平状态时间
- static updateLevelStatus(device_id, level_status, level_status_time, callback) {
- const sql = `
- UPDATE devices
- SET level_status = ?, level_status_time = ?
- WHERE device_id = ?
- `;
- db.query(sql, [level_status, level_status_time, device_id], callback);
- }
- // 例如 getDeviceById 方法
- static getDeviceById(device_id, callback) {
- const sql = `
- SELECT * FROM devices
- WHERE device_id = ?
- `;
- db.query(sql, [device_id], (err, results) => {
- if (err) {
- console.error('Error fetching device:', err);
- return callback(err);
- }
- const device = results.length > 0? results[0] : null;
- callback(null, device);
- });
- }
- // 建议添加数据库连接检查
- static getDeviceById(device_id, callback) {
- if (!db) {
- console.error('Database connection is not initialized');
- return callback(new Error('Database connection is not initialized'));
- }
- const sql = `
- SELECT * FROM devices
- WHERE device_id = ?
- `;
- db.query(sql, [device_id], (err, results) => {
- if (err) {
- console.error('Error fetching device:', err);
- return callback(err);
- }
- const device = results.length > 0? results[0] : null;
- callback(null, device);
- });
- }
- static async getDeviceStatus(device_id) {
- return new Promise((resolve, reject) => {
- this.getDeviceById(device_id, (err, device) => {
- if (err) return reject(err);
- resolve({
- status: device?.status || 'offline',
- temperature: device?.temperature || 0,
- switch_status: device?.switch_status || 'off'
- });
- });
- });
- }
- }
- module.exports = Device;
|