#include "MessageHandler.h" #include 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