MqttClient.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #include <MiLightClient.h>
  2. #include <Settings.h>
  3. #include <PubSubClient.h>
  4. #include <WiFiClient.h>
  5. #include <MiLightRadioConfig.h>
  6. #ifndef MQTT_CONNECTION_ATTEMPT_FREQUENCY
  7. #define MQTT_CONNECTION_ATTEMPT_FREQUENCY 5000
  8. #endif
  9. #ifndef MQTT_PACKET_CHUNK_SIZE
  10. #define MQTT_PACKET_CHUNK_SIZE 128
  11. #endif
  12. #ifndef _MQTT_CLIENT_H
  13. #define _MQTT_CLIENT_H
  14. class MqttClient {
  15. public:
  16. using OnConnectFn = std::function<void()>;
  17. MqttClient(Settings& settings, MiLightClient*& milightClient);
  18. ~MqttClient();
  19. void begin();
  20. void handleClient();
  21. void reconnect();
  22. void sendUpdate(const MiLightRemoteConfig& remoteConfig, uint16_t deviceId, uint16_t groupId, const char* update);
  23. void sendState(const MiLightRemoteConfig& remoteConfig, uint16_t deviceId, uint16_t groupId, const char* update);
  24. void send(const char* topic, const char* message, const bool retain = false);
  25. void onConnect(OnConnectFn fn);
  26. String bindTopicString(const String& topicPattern, const BulbId& bulbId);
  27. private:
  28. WiFiClient tcpClient;
  29. PubSubClient mqttClient;
  30. MiLightClient*& milightClient;
  31. Settings& settings;
  32. char* domain;
  33. unsigned long lastConnectAttempt;
  34. OnConnectFn onConnectFn;
  35. bool connected;
  36. void sendBirthMessage();
  37. bool connect();
  38. void subscribe();
  39. void publishCallback(char* topic, byte* payload, int length);
  40. void publish(
  41. const String& topic,
  42. const MiLightRemoteConfig& remoteConfig,
  43. uint16_t deviceId,
  44. uint16_t groupId,
  45. const char* update,
  46. const bool retain = false
  47. );
  48. String generateConnectionStatusMessage(const char* status);
  49. };
  50. #endif