智能家居设备状态分析服务器
#include
int main(int argc, char *argv[]) { QCoreApplication a(argc, argv);
QTcpServer server;
if (!server.listen(QHostAddress::Any, 1234)) {
qDebug() << "Failed to start server:" << server.errorString();
return 1;
}
qDebug() << "Server started";
while (true) {
if (!server.waitForNewConnection(5000)) {
qDebug() << "No client connected";
continue;
}
QTcpSocket *clientSocket = server.nextPendingConnection();
qDebug() << "Client connected";
// 读取userid
QByteArray block = clientSocket->readAll();
QDataStream in(&block, QIODevice::ReadOnly);
int userid;
in >> userid;
// 连接数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("database.db");
if (!db.open()) {
qDebug() << "Failed to open database";
return 1;
}
// 查询最新的设备状态和值
QSqlQuery query;
query.prepare("SELECT device_name, value FROM Status WHERE uid = :uid ORDER BY sid DESC LIMIT 1");
query.bindValue(":uid", userid);
if (!query.exec()) {
qDebug() << "Failed to execute query:" << query.lastError().text();
db.close();
return 1;
}
if (query.next()) {
QString deviceName = query.value(0).toString();
QString value = query.value(1).toString();
// 分析设备状态和值,生成建议
QString suggestion;
if (deviceName.isEmpty()) {
suggestion = "设备名称为空";
} else if (deviceName == "空调" && value.toInt() < 24) {
suggestion = "空调温度过低,建议提高温度至26℃";
} else if (deviceName == "加湿器" && (value.toInt() < 40 || value.toInt() > 70)) {
suggestion = "加湿器湿度过高或过低,建议调整加湿器湿度";
} else {
suggestion = "无建议";
}
// 发送建议给客户端
QByteArray response;
QDataStream out(&response, QIODevice::WriteOnly);
out << suggestion;
clientSocket->write(response);
} else {
qDebug() << "No device status found";
}
clientSocket->disconnectFromHost();
qDebug() << "Client disconnected";
db.close();
}
return a.exec();
}
原文地址: http://www.cveoy.top/t/topic/fCb6 著作权归作者所有。请勿转载和采集!