Files
esp-anchor/components/mqtt_publisher/include/mqtt_publisher.h
T

64 lines
2.4 KiB
C

#pragma once
#include "esp_err.h"
#include "freertos/FreeRTOS.h"
#include "freertos/event_groups.h"
#include <stdint.h>
/* Event bits set by the MQTT publisher into the shared event group */
#define MQTT_CONNECTED_BIT BIT0
#define MQTT_CALIBRATE_START BIT1
#define MQTT_CALIBRATE_STOP BIT2
#define MQTT_SELECTED_BIT BIT3
#define MQTT_DESELECTED_BIT BIT4
#define MQTT_FACTORY_RESET_BIT BIT5
#define MQTT_RECONFIGURE_SETTINGS_BIT BIT6
#define MQTT_OTA_BIT BIT7
/* Populated by handle_cmd() before MQTT_RECONFIGURE_SETTINGS_BIT is set.
* All fields are optional — empty string means "not provided, leave unchanged". */
typedef struct {
char ssid[32];
char password[64];
char mqtt_host[128];
uint16_t mqtt_port;
} mqtt_reconfigure_data_t;
/** Returns a pointer to the last parsed reconfigure payload. Valid only after
* MQTT_RECONFIGURE_SETTINGS_BIT fires; must be read before the next MQTT event. */
const mqtt_reconfigure_data_t *mqtt_publisher_get_reconfigure_data(void);
typedef struct {
char url[256];
char version[32];
} mqtt_ota_data_t;
/** Returns a pointer to the last parsed OTA payload. Valid only after
* MQTT_OTA_BIT fires; must be read before the next MQTT event. */
const mqtt_ota_data_t *mqtt_publisher_get_ota_data(void);
/** Publish OTA status to localiser/sensor/{id}/ota. Non-blocking (QoS 1). */
void mqtt_publisher_send_ota_status(const char *status, const char *version);
/**
* Initialise and connect the MQTT client.
*
* sensor_id — stable anchor ID string (e.g. "anchor_a1b2c3")
* broker_uri — e.g. "mqtt://192.168.1.100:1883"
* evt_group — FreeRTOS event group; publisher sets bits above on events
* version — firmware version string included in announce payload and version query responses
*/
esp_err_t mqtt_publisher_init(const char *sensor_id,
const char *broker_uri,
EventGroupHandle_t evt_group,
const char *version);
/** Publish an RSSI reading. Non-blocking (QoS 1). */
void mqtt_publisher_send_rssi(const char *tag_id, int8_t rssi);
/** Publish a parsed beacon reading with type, id, tx_power and rssi. Non-blocking (QoS 1). */
void mqtt_publisher_send_beacon(const char *type, const char *id, int8_t tx_power, int8_t rssi);
/** Publish the announce message (empty payload). */
void mqtt_publisher_announce(void);