Ajout datalogger & ajustement des timers

This commit is contained in:
jfmartel 2020-10-30 07:54:04 -04:00
parent 8d1fa787e4
commit 0ae56e062c
4 changed files with 105 additions and 6 deletions

View File

@ -1,6 +1,88 @@
#include "ChaletDataLogger.h"
#include <QDateTime>
#include <QString>
CChaletDataLogger::CChaletDataLogger(QObject *parent) : QObject(parent)
{
bool create = false;
mChaletLogFile = new QFile(CHALET_LORA_DATA_LOG_FILENAME);
if(QFile::exists(CHALET_LORA_DATA_LOG_FILENAME) == false)
create = true;
if(mChaletLogFile->open(QIODevice::ReadWrite|QIODevice::Append/*|QIODevice::Text*/) == false)
{
delete mChaletLogFile;
mChaletLogFile = 0;
qDebug("Cannot open chalet LORA log file...");
return;
}
if(create)
{
qDebug("Creating new chalet LORA log file...");
QString Header("Date;Heure;Courant Batterie;Tension Batterie;Inverter;Wifi\n");
int bytes = mChaletLogFile->write(qPrintable(Header));
mChaletLogFile->flush();
}
// mChaletLogFile->close();
qDebug("Chalet LORA log file created successfully");
}
CChaletDataLogger::~CChaletDataLogger()
{
if(mChaletLogFile)
{
mChaletLogFile->close();
delete mChaletLogFile;
}
}
bool CChaletDataLogger::LogChaletLORAData(CChaletMainStatus *Data)
{
if(mChaletLogFile == 0)
{
qDebug("Invalid LORA log file handle");
return false;
}
// if(mChaletLogFile->open(QIODevice::ReadWrite|QIODevice::Append|QIODevice::Text) == false)
// {
// delete mChaletLogFile;
// mChaletLogFile = 0;
// qDebug("Cannot open chalet LORA log file...");
// return false;
// }
QString CSVData;// = QString("%1;%2;%3;%4;%5;%6\n").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd").arg(QDateTime::currentDateTime().toString("hh:mm:ss")).arg(Data->mBatteryCurrent).arg(Data->mBatteryVoltage).arg(Data->mInverterRelayStatus).arg(Data->mWiFiModuleStatus));
CSVData.clear();
CSVData.append(QDateTime::currentDateTime().toString("yyyy-MM-dd"));
CSVData.append(";");
CSVData.append(QDateTime::currentDateTime().toString("hh:mm:ss"));
CSVData.append(";");
CSVData.append(QString("%1;").arg(Data->mBatteryCurrent));
CSVData.append(QString("%1;").arg(Data->mBatteryVoltage));
if(Data->mInverterRelayStatus == 1)
CSVData.append(QString("ON;"));
else
CSVData.append(QString("OFF;"));
//CSVData.append(QString("%1;").arg(Data->mInverterRelayStatus));
if(Data->mWiFiModuleStatus == 0)
CSVData.append(QString("OFF\n"));
else
CSVData.append(QString("ON\n"));
// CSVData.append(QString("%1\n").arg(Data->mWiFiModuleStatus));
mChaletLogFile->write(qPrintable(CSVData));
mChaletLogFile->flush();
// mChaletLogFile->close();
return true;
}

View File

@ -2,16 +2,29 @@
#define CHALETDATALOGGER_H
#include <QObject>
#include <QFile>
#include "ChaletData.h"
//#define CHALET_LORA_DATA_LOG_FILENAME "./ChaletLogs/ChaletLora.csv"
#define CHALET_LORA_DATA_LOG_FILENAME "D:/Main/Chalet/LoraLogs/ChaletLora.csv"
class CChaletMainStatus;
class CChaletDataLogger : public QObject
{
Q_OBJECT
public:
explicit CChaletDataLogger(QObject *parent = 0);
~CChaletDataLogger();
bool LogChaletLORAData(CChaletMainStatus *Data);
QFile *mChaletLogFile;
signals:
public slots:
};
#endif // CHALETDATALOGGER_H
#endif // CHALETDATALOGGER_H

View File

@ -75,6 +75,8 @@ int CChaletLoraDevice::NewDeviceFrameReceived(int DeviceID, int DeviceAddress, i
qDebug("Current: %d",mChaletMainStatus.mBatteryCurrent);
qDebug("SOC: %d",mChaletMainStatus.mBatterySOC);
mChaletDataLogger.LogChaletLORAData(&mChaletMainStatus);
mBlynkInterface.UpdateChaletCurrent(mChaletMainStatus.mBatteryCurrent);
mBlynkInterface.UpdateChaletVoltage(mChaletMainStatus.mBatteryVoltage);
// mBlynkInterface.UpdateChaletWifiStatus((int)mChaletMainStatus.mInverterRelayStatus);
@ -86,7 +88,7 @@ int CChaletLoraDevice::NewDeviceFrameReceived(int DeviceID, int DeviceAddress, i
case CHALET_AC_POWER_STATE_STATUS_RESPONSE:
{
mChaletMainStatus.mInverterRelayStatus = Data[0];
CmdResponseReceived(CHALET_AC_POWER_SET_STATE_RESPONSE);
CmdResponseReceived(CHALET_AC_POWER_STATE_STATUS_REQUEST);
break;
}
case CHALET_AC_POWER_SET_STATE_RESPONSE:
@ -291,7 +293,7 @@ int CChaletLoraDevice::CmdResponseReceived(int CmdID)
if(mPendingNetworkMsgList.size() == 0) //If no message is left pending... schedule status request
{
ScheduleChaletStatusRequest();
mChaletStatusTimer->start(1000);//Next status request will be sent in 1000ms
mChaletStatusTimer->start(LORA_NORMAL_REQUEST_TIMEOUT);//Next status request will be sent within this timeout
}
else
{

View File

@ -10,12 +10,13 @@
#include "ChaletNetworkMessage.h"
#include <QList>
#include "BlynkCloudClient.h"
#include "ChaletDataLogger.h"
#define LORA_MAGIC_WORD 0xBAADCAFE
#define LORA_NORMAL_REQUEST_TIMEOUT 1000
#define LORA_NORMAL_REQUEST_TIMEOUT 3000
#define LORA_IMMEDIATE_REQUEST_TIMEOUT 300
#define LORA_RETRY_REQUEST_TIMEOUT 1000
#define LORA_RESPONSE_TIME_TIMEOUT 5000
#define LORA_RETRY_REQUEST_TIMEOUT 2000
#define LORA_RESPONSE_TIME_TIMEOUT 3000
#define LORA_CHALET_STATUS_POWER_RELAY_MASK 0x01
#define LORA_CHALET_STATUS_CUR_SENSOR_MASK 0x02
@ -39,6 +40,7 @@ public:
CChaletMainStatus mChaletMainStatus;
QList<CChaletNetworkMessage> mPendingNetworkMsgList;
CChaletDataLogger mChaletDataLogger;
int SendWiFiModuleSetState(bool State);
int SendInverterPowerRelayState(bool State);