- ameliorations diverses

This commit is contained in:
2025-09-28 21:25:04 +02:00
parent c850b24704
commit 0d359ee997
3 changed files with 97 additions and 74 deletions

View File

@@ -15,7 +15,7 @@
#include <QHttpServerResponse>
#include "pws2mqtt.h"
#include "mqtt.h"
//#include "version.h"
#include "version.h"
#include <curl/curl.h>
#include <sys/types.h>
#include <sys/select.h>
@@ -43,6 +43,12 @@ int main(int argc, char *argv[])
debug(DEBUGMACRO, "QcoreApplication", DEBUG);
QCoreApplication a(argc, argv);
if (strcmp(argv[1], "v"))
{
//debug(DEBUGMACRO, "version : " + version, DEBUG);
printf ("Version : %s", version.c_str());
exit(0);
}
notify ("Météo" "Program starting");
// Enable logging to journald
qputenv("QT_FORCE_STDERR_LOGGING", QByteArray("0"));
@@ -62,13 +68,11 @@ int main(int argc, char *argv[])
mqttClient->qmqttClient->unsubscribe(mqttClient->topic);
mqttClient->qmqttClient->disconnectFromHost();
debug(DEBUGMACRO, "exiting", DEBUG);
notify ("Météo" "Program exiting");
notify ("Program exiting", "low");
//Closing http server
}
QString addValue(QByteArray value)
/*QString addValue(QByteArray value)
{
bool ok;
QString str;
@@ -76,13 +80,13 @@ QString addValue(QByteArray value)
value.toFloat(&ok);
if (ok)
{
str = (value);
str = (value);
}else
{
str = ("\"" + value + "\"" );
str = ("\"" + value + "\"" );
}
return str;
}
}*/
void debug(QString debugHeader, QString msg, uint8_t level, QByteArray property)
{

View File

@@ -83,7 +83,8 @@ void Pws2mqtt::init()
httpServer->route("/query", [this](const QHttpServerRequest &request)
{
QByteArray data;
QList<std::pair<QString, QString>> queryList = request.query().queryItems();
QList<std::pair<QString, QString>> queryList = request.query().queryItems();
//QTextStream result(&data);
if (queryList.isEmpty())
@@ -122,21 +123,23 @@ void Pws2mqtt::parseData(QList<std::pair<QString, QString>> queryList)
QString jsonString = "{";
bool propertyFlag = false;
bool deviceFlag = false;
QString spaceFlag = "";
// QString topic;
QString deviceString = "\"device\": {\"ieeeAddress\": \"" + mqttClient->macAddress + "\", \"type\": \"" + mqttClient->type + "\", \"powerSource\": \"Battery\"";
QString notif = "";
double propertyValue;
double propertyValue = 0;
QStringList priorityList {"", "min", "low", "default", "High", "urgent"};
quint8 priority = 2;
QPair <QByteArray, QByteArray> winddir = {"", 0};
debug(DEBUGMACRO, "looping list of query", DEBUG);
for (QPair<QString, QString> pair : queryList)
{
debug(DEBUGMACRO, pair.first + " = " + pair.second, DEBUG);
QByteArray name = pair.first.toLatin1();
QByteArray value = pair.second.toLatin1();
if (this->deviceProperties.contains(pair.first))
if (this->deviceProperties.contains(name))
{
if(deviceFlag == false)
{
@@ -145,7 +148,7 @@ void Pws2mqtt::parseData(QList<std::pair<QString, QString>> queryList)
{
deviceString.append(", ");
}
deviceString += "\"" + pair.first + "\": ";
deviceString += "\"" + name + "\": ";
deviceString += pair.second;
}else
{
@@ -156,111 +159,127 @@ void Pws2mqtt::parseData(QList<std::pair<QString, QString>> queryList)
{
jsonString.append(", ");
}
jsonString.append("\"" + pair.first + "\": ");
jsonString.append("\"" + name + "\": ");
jsonString.append(pair.second);
//mqttClient->end_message(topic, jsonString);
if (pair.first == "tempf")
if (name == "tempf")
{
propertyValue = fahrenheitToCelsius(pair.second.toFloat());
if (compare (propertyList[pair.first.toLatin1()], propertyValue, 0.5))
static QTime timeTemp;
propertyValue = round(fahrenheitToCelsius(pair.second.toFloat()));
if (compare (propertyList[name], propertyValue, 1) and timeTemp > QTime::currentTime().addSecs(300))
{
notif += spaceFlag + formatNotifString (pair, QByteArray::number(qPow(propertyValue, 1.0)));
notif += formatNotifString (name, QByteArray::number(qPow(propertyValue, 1.0)));
debug (DEBUGMACRO, "Notif = #" + notif + "#", DEBUG);
propertyList[pair.first.toLatin1()] = propertyValue;
propertyList[name] = propertyValue;
timeTemp = timeTemp.currentTime();
}
}else if (pair.first == "humidity")
}else if (name == "humidity")
{
propertyValue = pair.second.toFloat();
if (compare (propertyList[pair.first.toLatin1()], propertyValue, 3))
if (compare (propertyList[name], propertyValue, 3))
{
notif += spaceFlag + formatNotifString (pair, pair.second.toLatin1());
notif += formatNotifString (name, value);
debug (DEBUGMACRO, "Notif = #" + notif + "#", DEBUG);
}
}else if (pair.first == "windchillf")
}else if (name == "windchillf")
{
propertyValue = fahrenheitToCelsius(pair.second.toFloat());
if (compare (propertyList[pair.first.toLatin1()], propertyValue, 0.2))
static QTime timeWindchill;
propertyValue = round(fahrenheitToCelsius(pair.second.toFloat()));
if (compare (propertyList[name], propertyValue, 1) and timeWindchill > QTime::currentTime().addSecs(300))
{
notif += spaceFlag + formatNotifString (pair, QByteArray::number(qPow(propertyValue, 1.0)));
notif += formatNotifString (name, QByteArray::number(qPow(propertyValue, 1.0)));
debug (DEBUGMACRO, "Notif = #" + notif + "#", DEBUG);
timeWindchill = timeWindchill.currentTime();
}
}else if (pair.first == "winddir")
}else if (name == "winddir")
{
propertyValue = pair.second.toFloat();
if (compare (propertyList[pair.first.toLatin1()], propertyValue, 90))
winddir.first = name;
winddir.second = value;
}else if (name == "windspeedmph")
{
propertyValue = round(mphTokmh(pair.second.toFloat()));
if (compare (propertyList[name], propertyValue, 5))
{
notif += spaceFlag + formatNotifString (pair, pair.second.toLatin1());
debug (DEBUGMACRO, "Notif = #" + notif + "#", DEBUG);
if (propertyValue > 10)
{
priority = setPriority (priority, 2);
notif += formatNotifString (name, QByteArray::number(propertyValue));
notif += formatNotifString (winddir.first, winddir.second);
debug (DEBUGMACRO, "Notif = #" + notif + "#", DEBUG);
if (propertyValue > 30)
priority = setPriority (priority, 4);
if (propertyValue > 50)
priority = setPriority (priority, 5);
debug (DEBUGMACRO, "Notif = #" + notif + "#", DEBUG);
}
}
}else if (pair.first == "windspeedmph")
}else if (name == "windgustmph")
{
propertyValue = mphTokmh(pair.second.toFloat());
if (compare (propertyList[pair.first.toLatin1()], propertyValue, 10))
propertyValue = round(mphTokmh(pair.second.toFloat()));
if (compare (propertyList[name], propertyValue, 5) and propertyValue > 20)
{
notif += spaceFlag + formatNotifString (pair, QByteArray::number(round(propertyValue)));
if (propertyValue > 30)
priority = setPriority (priority, 4);
if (propertyValue > 50)
priority = setPriority (priority, 5);
debug (DEBUGMACRO, "Notif = #" + notif + "#", DEBUG);
}
}else if (pair.first == "windgustmph")
{
propertyValue = mphTokmh(pair.second.toFloat());
if (compare (propertyList[pair.first.toLatin1()], propertyValue, 5) and propertyValue > 20)
{
notif += spaceFlag + formatNotifString (pair, QByteArray::number(round(propertyValue)));
notif += formatNotifString (name, QByteArray::number(propertyValue));
if (propertyValue > 40)
priority = setPriority (priority, 4);
if (propertyValue > 60)
priority = setPriority (priority, 5);
debug (DEBUGMACRO, "Notif = #" + notif + "#", DEBUG);
}
}else if (pair.first == "rainin")
}else if (name == "rainin")
{
static qfloat16 ecart;
propertyValue = pair.second.toFloat();
if (compare (propertyList[pair.first.toLatin1()], propertyValue, 0.01))
if (propertyValue == 0)
{
notif += spaceFlag + formatNotifString (pair, pair.second.toLatin1());
ecart = 0;
}else
{
ecart = 0.01;
}
if (compare (propertyList[name], propertyValue, ecart))
{
notif += formatNotifString (name, value);
priority = setPriority (priority, 4);
debug (DEBUGMACRO, "Notif = #" + notif + "#", DEBUG);
}
}else if (pair.first == "baromin")
}else if (name == "baromin")
{
propertyValue = tohPa(pair.second.toFloat());
pressureVariation(propertyValue);
if (compare (propertyList[pair.first.toLatin1()], propertyValue, 100))
/*if (compare (propertyList[name], propertyValue, 100))
{
notif += spaceFlag + formatNotifString (pair, QByteArray::number(propertyValue));
notif += formatNotifString (name, QByteArray::number(propertyValue));
debug (DEBUGMACRO, "Notif = #" + notif + "#", DEBUG);
}
}else if (pair.first == "UV")
}*/
}else if (name == "UV")
{
static QTime timeUV;
propertyValue = pair.second.toFloat();
if (compare (propertyList[pair.first.toLatin1()], propertyValue, 1))
if (compare (propertyList[name], propertyValue, 1) and timeUV > QTime::currentTime().addSecs(300))
{
notif += spaceFlag + formatNotifString (pair, pair.second.toLatin1());
if (propertyValue > 3)
priority = setPriority (priority, 5);
notif += formatNotifString (name, value);
if (propertyValue == 5 )
priority = setPriority (priority, 3);
if (propertyValue >= 6 )
priority = setPriority (priority, 4);
debug (DEBUGMACRO, "Notif = #" + notif + "#", DEBUG);
timeUV = timeUV.currentTime();
}
}else if (pair.first == "lowbat")
}else if (name == "lowbat")
{
static QTime time;
if (pair.second.toInt() == 1 and time > QTime::currentTime().addSecs(3600))
static QTime timeLowBat;
if (pair.second.toInt() == 0 and timeLowBat > QTime::currentTime().addSecs(3600))
{
notif += spaceFlag + formatNotifString (pair, "");
notif += formatNotifString (name, "");
debug (DEBUGMACRO, "Notif = #" + notif + "#", DEBUG);
priority = setPriority (priority, 4);
time = time.currentTime();
timeLowBat = timeLowBat.currentTime();
}
}
}
propertyList[pair.first.toLatin1()] = propertyValue;
if (!notif.isEmpty())
{
spaceFlag = " ";
}
propertyList[name] = propertyValue;
}
if (!jsonString.isEmpty())
{
@@ -388,9 +407,9 @@ bool compare (qfloat16 value, qfloat16 currentValue, qfloat16 ecart)
}
}
QString formatNotifString (QPair <QString, QString> pair, QByteArray value)
QString formatNotifString (QByteArray name, QByteArray value)
{
return "- " + propertyName[pair.first.toLatin1()].first + " : " + value + propertyName[pair.first.toLatin1()].second;
return "- " + propertyName[name].first + " : " + value + propertyName[name].second + " \n";
}
void notify(QString notif, QString priority)

View File

@@ -23,7 +23,7 @@
#define DEBUGMACRO QString(__FILE__) + ": " + QString::number(__LINE__) + " -> " + QString(Q_FUNC_INFO)
void debug(QString debugHeader, QString msg, uint8_t level=ALL, QByteArray value="");
QString addValue(QByteArray value);
//QString addValue(QByteArray value);
class Pws2mqtt : public QObject
{
@@ -51,7 +51,7 @@ class Pws2mqtt : public QObject
double fahrenheitToCelsius(double fahrenheit);
qfloat16 tohPa(qfloat16 value);
bool compare (qfloat16 value, qfloat16 testValue, qfloat16 ecart = 0.5);
QString formatNotifString (QPair<QString, QString> pair, QByteArray value);
QString formatNotifString (QByteArray name, QByteArray value);
qfloat16 mphTokmh (qfloat16 value);
void notify (QString notif, QString priority = "low");
quint8 setPriority (quint8 currentPriority, quint8 newPriority);