MessageHandler.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. #include "MessageHandler.h"
  2. #include <Logging.h>
  3. #include <sstream>
  4. namespace ToonBridge {
  5. namespace Toon {
  6. MessageHandler::MessageHandler(MQTT::MQTT& mqtt) :
  7. m_mqtt(mqtt)
  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. MQTT::MQTTMessage message;
  40. message.topic = "ToonBridge/PowerUsage";
  41. message.payload = data.dump();
  42. m_mqtt.Send(message);
  43. /*
  44. {"value":419,
  45. "dayCost":1.21,
  46. "valueProduced":0,
  47. "valueSolar":0,
  48. "maxSolar":0,
  49. "avgValue":493.92,
  50. "avgDayValue":11854.00,
  51. "avgProduValue":0,
  52. "meterReading":5528208,
  53. "meterReadingLow":6886191,
  54. "meterReadingProdu":2,
  55. "meterReadingLowProdu":87,
  56. "dayUsage":5268,
  57. "dayLowUsage":2860,
  58. "isSmart":1,
  59. "lowestDayValue":301,
  60. "solarProducedToday":0,
  61. "lastUpdatedFromDisplay":1591801516233}
  62. */
  63. }
  64. void MessageHandler::HandleGasUsageMessage(const nlohmann::json& data)
  65. {
  66. MQTT::MQTTMessage message;
  67. message.topic = "ToonBridge/GasUsage";
  68. message.payload = data.dump();
  69. m_mqtt.Send(message);
  70. /*
  71. {"value":0,
  72. "dayCost":0.32,
  73. "avgValue":26.48,
  74. "meterReading":2613589,
  75. "avgDayValue":635.43,
  76. "dayUsage":389,
  77. "isSmart":1,
  78. "lastUpdatedFromDisplay":1591801517950}
  79. */
  80. }
  81. void MessageHandler::HandleWaterUsageMessage(const nlohmann::json& data)
  82. {
  83. MQTT::MQTTMessage message;
  84. message.topic = "ToonBridge/WaterUsage";
  85. message.payload = data.dump();
  86. m_mqtt.Send(message);
  87. /*
  88. {"installed":0,
  89. "value":0,
  90. "dayCost":0,
  91. "dayUsage":0,
  92. "meterReading":0,
  93. "isSmart":0,
  94. "lastUpdatedFromDisplay":1591801517802}
  95. */
  96. }
  97. void MessageHandler::HandleThermostatInfoMessage(const nlohmann::json& data)
  98. {
  99. MQTT::MQTTMessage message;
  100. message.topic = "ToonBridge/ThermostatInfo";
  101. message.payload = data.dump();
  102. m_mqtt.Send(message);
  103. /*
  104. {"currentSetpoint":1750,
  105. "currentDisplayTemp":2100,
  106. "programState":0,
  107. "activeState":1,
  108. "nextProgram":-1,
  109. "nextState":-1,
  110. "nextTime":0,
  111. "nextSetpoint":0,
  112. "hasBoilerFault":0,
  113. "errorFound":255,
  114. "boilerModuleConnected":1,
  115. "realSetpoint":1750,
  116. "burnerInfo":"0",
  117. "otCommError":"0",
  118. "currentModulationLevel":0,
  119. "haveOTBoiler":1,
  120. "lastUpdatedFromDisplay":1591801515921,
  121. "setByLoadShifting":0}
  122. */
  123. }
  124. void MessageHandler::HandleThermostatStatesMessage(const nlohmann::json& data)
  125. {
  126. MQTT::MQTTMessage message;
  127. message.topic = "ToonBridge/ThermostatStates";
  128. message.payload = data.dump();
  129. m_mqtt.Send(message);
  130. /*
  131. thermostatStates
  132. {"currentSetpoint":1750,
  133. "currentDisplayTemp":2100,
  134. "programState":0,
  135. "activeState":1,
  136. "nextProgram":-1,
  137. "nextState":-1,
  138. "nextTime":0,
  139. "nextSetpoint":0,
  140. "hasBoilerFault":0,
  141. "errorFound":255,
  142. "boilerModuleConnected":1,
  143. "realSetpoint":1750,
  144. "burnerInfo":"0",
  145. "otCommError":"0",
  146. "currentModulationLevel":0,
  147. "haveOTBoiler":1,
  148. "lastUpdatedFromDisplay":1591801515921,
  149. "setByLoadShifting":0}
  150. */
  151. }
  152. } // namespace Toon
  153. } // namespace ToonBridge