86 lines
2.9 KiB
C
86 lines
2.9 KiB
C
#ifndef PLANT_MQTT_H
|
|
#define PLANT_MQTT_H
|
|
|
|
#include "esp_err.h"
|
|
#include <stdbool.h>
|
|
|
|
// 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
|