191 lines
4.0 KiB
C++
191 lines
4.0 KiB
C++
#include "MessageHandler.h"
|
|
#include <Logging.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);
|
|
|
|
if (data.contains("code"))
|
|
{
|
|
if (data["code"] == 510)
|
|
m_signal.emit();
|
|
return;
|
|
}
|
|
|
|
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"]);
|
|
}
|
|
|
|
size_t MessageHandler::Connect(ReconnectCallbackMethod 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
|