#ifndef PLANT_MQTT_H #define PLANT_MQTT_H #include "esp_err.h" #include // MQTT Configuration - These can be overridden by Kconfig #ifndef CONFIG_MQTT_BROKER_URL #define CONFIG_MQTT_BROKER_URL "mqtt://192.168.4.56:1883" #endif #ifndef CONFIG_MQTT_USERNAME #define CONFIG_MQTT_USERNAME "esp32" #endif #ifndef CONFIG_MQTT_PASSWORD #define CONFIG_MQTT_PASSWORD "esp32-plant" #endif #ifndef MQTT_CLIENT_ID #define MQTT_CLIENT_ID "plant_watering_esp32" #endif #define MQTT_KEEPALIVE 60 #define MQTT_QOS_0 0 #define MQTT_QOS_1 1 #define MQTT_RETAIN 1 #define MQTT_NO_RETAIN 0 // MQTT Topics #define TOPIC_STATUS "plant_watering/status" #define TOPIC_MOISTURE_1 "plant_watering/moisture/1" #define TOPIC_MOISTURE_2 "plant_watering/moisture/2" #define TOPIC_PUMP_1_CMD "plant_watering/pump/1/set" #define TOPIC_PUMP_2_CMD "plant_watering/pump/2/set" #define TOPIC_PUMP_1_STATE "plant_watering/pump/1/state" #define TOPIC_PUMP_2_STATE "plant_watering/pump/2/state" #define TOPIC_CONFIG "plant_watering/config" #define TOPIC_WATERING_STATS "plant_watering/stats" #define TOPIC_LAST_WILL "plant_watering/status" // Status messages #define STATUS_ONLINE "online" #define STATUS_OFFLINE "offline" // MQTT States typedef enum { MQTT_STATE_DISCONNECTED, MQTT_STATE_CONNECTING, MQTT_STATE_CONNECTED, MQTT_STATE_ERROR } mqtt_state_t; // Callbacks typedef void (*mqtt_connected_callback_t)(void); typedef void (*mqtt_disconnected_callback_t)(void); typedef void (*mqtt_data_callback_t)(const char* topic, const char* data, int data_len); // MQTT client functions esp_err_t mqtt_client_init(void); esp_err_t mqtt_client_start(void); esp_err_t mqtt_client_stop(void); esp_err_t mqtt_client_publish(const char* topic, const char* data, int qos, int retain); esp_err_t mqtt_client_subscribe(const char* topic, int qos); esp_err_t mqtt_client_unsubscribe(const char* topic); bool mqtt_client_is_connected(void); mqtt_state_t mqtt_client_get_state(void); // Callback registration void mqtt_client_register_callbacks(mqtt_connected_callback_t on_connected, mqtt_disconnected_callback_t on_disconnected, mqtt_data_callback_t on_data); // Configuration management esp_err_t mqtt_client_set_broker_url(const char* url); esp_err_t mqtt_client_set_credentials(const char* username, const char* password); esp_err_t mqtt_client_get_config(char* url, size_t url_len, char* username, size_t username_len, char* password, size_t password_len); // Utility functions for common publishes esp_err_t mqtt_publish_status(const char* status); esp_err_t mqtt_publish_moisture(int sensor_id, int value); esp_err_t mqtt_publish_pump_state(int pump_id, bool state); #endif // PLANT_MQTT_H