MessageHandler.cpp 4.2 KB

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