| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- #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
|