Added MQTT

This commit is contained in:
2025-07-17 20:41:25 -06:00
parent abe63b0ae9
commit 5fd11369cc
5 changed files with 858 additions and 268 deletions

86
main/plant_mqtt.h Normal file
View File

@ -0,0 +1,86 @@
#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