MessageHandler.cpp 4.0 KB

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