#pragma once #include "esp_err.h" #include "freertos/FreeRTOS.h" #include "freertos/event_groups.h" #include /* 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 */ esp_err_t mqtt_publisher_init(const char *sensor_id, const char *broker_uri, EventGroupHandle_t evt_group); /** 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);