MessageHandler.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. #include "MessageHandler.h"
  2. #include <Logging.h>
  3. #include <sstream>
  4. namespace ToonBridge {
  5. namespace Toon {
  6. MessageHandler::MessageHandler(MQTT::MQTT& mqtt, const std::string& mqttTopic) :
  7. m_mqtt(mqtt),
  8. m_mqttTopic(mqttTopic)
  9. {
  10. }
  11. MessageHandler::~MessageHandler()
  12. {
  13. }
  14. void MessageHandler::HandleMessage(const std::string& message)
  15. {
  16. std::stringstream ss;
  17. ss << "Message Received: " << message << std::endl;
  18. Logging::Log(Logging::Severity::Info, ss.str());
  19. nlohmann::json data = nlohmann::json::parse(message);
  20. if (data.contains("code"))
  21. {
  22. if (data["code"] == 510)
  23. m_signal.emit();
  24. return;
  25. }
  26. auto updateDataSet = data["updateDataSet"];
  27. if (updateDataSet.contains("powerUsage"))
  28. HandlePowerUsageMessage(updateDataSet["powerUsage"]);
  29. if (updateDataSet.contains("gasUsage"))
  30. HandleGasUsageMessage(updateDataSet["gasUsage"]);
  31. if (updateDataSet.contains("waterUsage"))
  32. HandleWaterUsageMessage(updateDataSet["waterUsage"]);
  33. if (updateDataSet.contains("thermostatInfo"))
  34. HandleThermostatInfoMessage(updateDataSet["thermostatInfo"]);
  35. if (updateDataSet.contains("thermostatStates"))
  36. HandleThermostatStatesMessage(updateDataSet["thermostatStates"]);
  37. }
  38. size_t MessageHandler::Connect(ReconnectCallbackMethod function)
  39. {
  40. return m_signal.connect(function);
  41. }
  42. void MessageHandler::Disconnect(size_t connection)
  43. {
  44. m_signal.disconnect(connection);
  45. }
  46. void MessageHandler::HandlePowerUsageMessage(const nlohmann::json& data)
  47. {
  48. std::stringstream ss;
  49. ss << m_mqttTopic << "/PowerUsage";
  50. MQTT::MQTTMessage message;
  51. message.topic = ss.str();
  52. message.payload = data.dump();
  53. m_mqtt.Send(message);
  54. /*
  55. {"value":419,
  56. "dayCost":1.21,
  57. "valueProduced":0,
  58. "valueSolar":0,
  59. "maxSolar":0,
  60. "avgValue":493.92,
  61. "avgDayValue":11854.00,
  62. "avgProduValue":0,
  63. "meterReading":5528208,
  64. "meterReadingLow":6886191,
  65. "meterReadingProdu":2,
  66. "meterReadingLowProdu":87,
  67. "dayUsage":5268,
  68. "dayLowUsage":2860,
  69. "isSmart":1,
  70. "lowestDayValue":301,
  71. "solarProducedToday":0,
  72. "lastUpdatedFromDisplay":1591801516233}
  73. */
  74. }
  75. void MessageHandler::HandleGasUsageMessage(const nlohmann::json& data)
  76. {
  77. std::stringstream ss;
  78. ss << m_mqttTopic << "/GasUsage";
  79. MQTT::MQTTMessage message;
  80. message.topic = ss.str();
  81. message.payload = data.dump();
  82. m_mqtt.Send(message);
  83. /*
  84. {"value":0,
  85. "dayCost":0.32,
  86. "avgValue":26.48,
  87. "meterReading":2613589,
  88. "avgDayValue":635.43,
  89. "dayUsage":389,
  90. "isSmart":1,
  91. "lastUpdatedFromDisplay":1591801517950}
  92. */
  93. }
  94. void MessageHandler::HandleWaterUsageMessage(const nlohmann::json& data)
  95. {
  96. std::stringstream ss;
  97. ss << m_mqttTopic << "/WaterUsage";
  98. MQTT::MQTTMessage message;
  99. message.topic = ss.str();
  100. message.payload = data.dump();
  101. m_mqtt.Send(message);
  102. /*
  103. {"installed":0,
  104. "value":0,
  105. "dayCost":0,
  106. "dayUsage":0,
  107. "meterReading":0,
  108. "isSmart":0,
  109. "lastUpdatedFromDisplay":1591801517802}
  110. */
  111. }
  112. void MessageHandler::HandleThermostatInfoMessage(const nlohmann::json& data)
  113. {
  114. std::stringstream ss;
  115. ss << m_mqttTopic << "/ThermostatInfo";
  116. MQTT::MQTTMessage message;
  117. message.topic = ss.str();
  118. message.payload = data.dump();
  119. m_mqtt.Send(message);
  120. /*
  121. {"currentSetpoint":1750,
  122. "currentDisplayTemp":2100,
  123. "programState":0,
  124. "activeState":1,
  125. "nextProgram":-1,
  126. "nextState":-1,
  127. "nextTime":0,
  128. "nextSetpoint":0,
  129. "hasBoilerFault":0,
  130. "errorFound":255,
  131. "boilerModuleConnected":1,
  132. "realSetpoint":1750,
  133. "burnerInfo":"0",
  134. "otCommError":"0",
  135. "currentModulationLevel":0,
  136. "haveOTBoiler":1,
  137. "lastUpdatedFromDisplay":1591801515921,
  138. "setByLoadShifting":0}
  139. */
  140. }
  141. void MessageHandler::HandleThermostatStatesMessage(const nlohmann::json& data)
  142. {
  143. std::stringstream ss;
  144. ss << m_mqttTopic << "/ThermostatStates";
  145. MQTT::MQTTMessage message;
  146. message.topic = ss.str();
  147. message.payload = data.dump();
  148. m_mqtt.Send(message);
  149. /*
  150. thermostatStates
  151. {"currentSetpoint":1750,
  152. "currentDisplayTemp":2100,
  153. "programState":0,
  154. "activeState":1,
  155. "nextProgram":-1,
  156. "nextState":-1,
  157. "nextTime":0,
  158. "nextSetpoint":0,
  159. "hasBoilerFault":0,
  160. "errorFound":255,
  161. "boilerModuleConnected":1,
  162. "realSetpoint":1750,
  163. "burnerInfo":"0",
  164. "otCommError":"0",
  165. "currentModulationLevel":0,
  166. "haveOTBoiler":1,
  167. "lastUpdatedFromDisplay":1591801515921,
  168. "setByLoadShifting":0}
  169. */
  170. }
  171. } // namespace Toon
  172. } // namespace ToonBridge