MessageHandler.cpp 4.0 KB

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