|
@@ -0,0 +1,169 @@
|
|
|
|
|
+#include "MessageHandler.h"
|
|
|
|
|
+#include <Logging.h>
|
|
|
|
|
+#include <sstream>
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+namespace ToonBridge {
|
|
|
|
|
+namespace Toon {
|
|
|
|
|
+
|
|
|
|
|
+MessageHandler::MessageHandler(MQTT::MQTT& mqtt) :
|
|
|
|
|
+ m_mqtt(mqtt)
|
|
|
|
|
+{
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+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)
|
|
|
|
|
+{
|
|
|
|
|
+ MQTT::MQTTMessage message;
|
|
|
|
|
+ message.topic = "ToonBridge/PowerUsage";
|
|
|
|
|
+ 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)
|
|
|
|
|
+{
|
|
|
|
|
+ MQTT::MQTTMessage message;
|
|
|
|
|
+ message.topic = "ToonBridge/GasUsage";
|
|
|
|
|
+ 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)
|
|
|
|
|
+{
|
|
|
|
|
+ MQTT::MQTTMessage message;
|
|
|
|
|
+ message.topic = "ToonBridge/WaterUsage";
|
|
|
|
|
+ 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)
|
|
|
|
|
+{
|
|
|
|
|
+ MQTT::MQTTMessage message;
|
|
|
|
|
+ message.topic = "ToonBridge/ThermostatInfo";
|
|
|
|
|
+ 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)
|
|
|
|
|
+{
|
|
|
|
|
+ MQTT::MQTTMessage message;
|
|
|
|
|
+ message.topic = "ToonBridge/ThermostatStates";
|
|
|
|
|
+ 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
|