Files
ToonBridge/Toon/MessageHandler.cpp
T
2020-06-22 09:44:05 +02:00

185 lines
4.0 KiB
C++

#include "MessageHandler.h"
#include <sstream>
namespace ToonBridge {
namespace Toon {
MessageHandler::MessageHandler(MQTT::MQTT& mqtt, const std::string& mqttTopic) :
m_mqtt(mqtt),
m_mqttTopic(mqttTopic)
{
}
MessageHandler::~MessageHandler()
{
}
void MessageHandler::HandleMessage(const std::string& message)
{
nlohmann::json data = nlohmann::json::parse(message);
auto updateDataSet = data["updateDataSet"];
if (updateDataSet.contains("powerUsage"))
HandlePowerUsageMessage(updateDataSet["powerUsage"]);
if (updateDataSet.contains("gasUsage"))
HandleGasUsageMessage(updateDataSet["gasUsage"]);
if (updateDataSet.contains("waterUsage"))
HandleWaterUsageMessage(updateDataSet["waterUsage"]);
if (updateDataSet.contains("thermostatInfo"))
HandleThermostatInfoMessage(updateDataSet["thermostatInfo"]);
if (updateDataSet.contains("thermostatStates"))
HandleThermostatStatesMessage(updateDataSet["thermostatStates"]);
m_signal.emit(data["timeToLiveSeconds"]);
}
size_t MessageHandler::Connect(TTLCallbackMethod function)
{
return m_signal.connect(function);
}
void MessageHandler::Disconnect(size_t connection)
{
m_signal.disconnect(connection);
}
void MessageHandler::HandlePowerUsageMessage(const nlohmann::json& data)
{
std::stringstream ss;
ss << m_mqttTopic << "/PowerUsage";
MQTT::MQTTMessage message;
message.topic = ss.str();
message.payload = data.dump();
m_mqtt.Send(message);
/*
{"value":419,
"dayCost":1.21,
"valueProduced":0,
"valueSolar":0,
"maxSolar":0,
"avgValue":493.92,
"avgDayValue":11854.00,
"avgProduValue":0,
"meterReading":5528208,
"meterReadingLow":6886191,
"meterReadingProdu":2,
"meterReadingLowProdu":87,
"dayUsage":5268,
"dayLowUsage":2860,
"isSmart":1,
"lowestDayValue":301,
"solarProducedToday":0,
"lastUpdatedFromDisplay":1591801516233}
*/
}
void MessageHandler::HandleGasUsageMessage(const nlohmann::json& data)
{
std::stringstream ss;
ss << m_mqttTopic << "/GasUsage";
MQTT::MQTTMessage message;
message.topic = ss.str();
message.payload = data.dump();
m_mqtt.Send(message);
/*
{"value":0,
"dayCost":0.32,
"avgValue":26.48,
"meterReading":2613589,
"avgDayValue":635.43,
"dayUsage":389,
"isSmart":1,
"lastUpdatedFromDisplay":1591801517950}
*/
}
void MessageHandler::HandleWaterUsageMessage(const nlohmann::json& data)
{
std::stringstream ss;
ss << m_mqttTopic << "/WaterUsage";
MQTT::MQTTMessage message;
message.topic = ss.str();
message.payload = data.dump();
m_mqtt.Send(message);
/*
{"installed":0,
"value":0,
"dayCost":0,
"dayUsage":0,
"meterReading":0,
"isSmart":0,
"lastUpdatedFromDisplay":1591801517802}
*/
}
void MessageHandler::HandleThermostatInfoMessage(const nlohmann::json& data)
{
std::stringstream ss;
ss << m_mqttTopic << "/ThermostatInfo";
MQTT::MQTTMessage message;
message.topic = ss.str();
message.payload = data.dump();
m_mqtt.Send(message);
/*
{"currentSetpoint":1750,
"currentDisplayTemp":2100,
"programState":0,
"activeState":1,
"nextProgram":-1,
"nextState":-1,
"nextTime":0,
"nextSetpoint":0,
"hasBoilerFault":0,
"errorFound":255,
"boilerModuleConnected":1,
"realSetpoint":1750,
"burnerInfo":"0",
"otCommError":"0",
"currentModulationLevel":0,
"haveOTBoiler":1,
"lastUpdatedFromDisplay":1591801515921,
"setByLoadShifting":0}
*/
}
void MessageHandler::HandleThermostatStatesMessage(const nlohmann::json& data)
{
std::stringstream ss;
ss << m_mqttTopic << "/ThermostatStates";
MQTT::MQTTMessage message;
message.topic = ss.str();
message.payload = data.dump();
m_mqtt.Send(message);
/*
thermostatStates
{"currentSetpoint":1750,
"currentDisplayTemp":2100,
"programState":0,
"activeState":1,
"nextProgram":-1,
"nextState":-1,
"nextTime":0,
"nextSetpoint":0,
"hasBoilerFault":0,
"errorFound":255,
"boilerModuleConnected":1,
"realSetpoint":1750,
"burnerInfo":"0",
"otCommError":"0",
"currentModulationLevel":0,
"haveOTBoiler":1,
"lastUpdatedFromDisplay":1591801515921,
"setByLoadShifting":0}
*/
}
} // namespace Toon
} // namespace ToonBridge