feat: topic name for sensor update can now be set in terminal

This commit is contained in:
SylvanArnold
2025-04-29 16:59:06 +02:00
committed by Sylvan Arnold
parent 32618389d1
commit 6b75285228
3 changed files with 11 additions and 4 deletions

View File

@@ -14,12 +14,17 @@ McuMinINI write settings.ini WiFi pass "YOUR_PASSWORD"
### MQTT ### MQTT
Broker informations:
```shell ```shell
McuMinINI write settings.ini MQTT broker "BROKER_NAME" McuMinINI write settings.ini MQTT broker "BROKER_NAME"
McuMinINI write settings.ini MQTT user "USERNAME" McuMinINI write settings.ini MQTT user "USERNAME"
McuMinINI write settings.ini MQTT pass "PASSWORD" McuMinINI write settings.ini MQTT pass "PASSWORD"
``` ```
Topic name:
```shell
McuMinINI write settings.ini MQTT topic_sensor_update "<user>/<room>/<device>/update"
```
## Build ## Build
Project has `Debug`, `Release` and `Test` targets, using CMake Presets. Project has `Debug`, `Release` and `Test` targets, using CMake Presets.

View File

@@ -34,6 +34,7 @@
#define NVMC_MININI_KEY_MQTT_USER "user" /* string, username */ #define NVMC_MININI_KEY_MQTT_USER "user" /* string, username */
#define NVMC_MININI_KEY_MQTT_PASS "pass" /* string, password */ #define NVMC_MININI_KEY_MQTT_PASS "pass" /* string, password */
#define NVMC_MININI_KEY_MQTT_PUBLISH "publish" /* bool, if publishing */ #define NVMC_MININI_KEY_MQTT_PUBLISH "publish" /* bool, if publishing */
#define NVMC_TOPIC_NAME_SENSORS_UPDATE "topic_sensor_update" /*<user>/<room>/<device>/update*/
#endif #endif
#if PL_CONFIG_USE_NTP_CLIENT #if PL_CONFIG_USE_NTP_CLIENT

View File

@@ -37,8 +37,6 @@
#define TOPIC_NAME_BATTERY_POWER "homeassistant/sensor/powerwall_battery_now/state" #define TOPIC_NAME_BATTERY_POWER "homeassistant/sensor/powerwall_battery_now/state"
#define TOPIC_NAME_BATTERY_PERCENTAGE "homeassistant/sensor/powerwall_charge/state" #define TOPIC_NAME_BATTERY_PERCENTAGE "homeassistant/sensor/powerwall_charge/state"
#define TOPIC_NAME_CHARGER_CHARGING_POWER "home/charger/power" #define TOPIC_NAME_CHARGER_CHARGING_POWER "home/charger/power"
#elif MQTT_CLIENT_IS_SENSOR
#define TOPIC_NAME_SENSORS_UPDATE "sylvan/Home/PicoSensor/update" /*<user>/<room>/<device>/update*/
#endif #endif
typedef enum topic_ID_e { typedef enum topic_ID_e {
@@ -61,6 +59,7 @@ typedef enum topic_ID_e {
#define MQTT_DEFAULT_USER "user" #define MQTT_DEFAULT_USER "user"
#define MQTT_DEFAULT_PASS "password" #define MQTT_DEFAULT_PASS "password"
#define MQTT_DEFAULT_PUBLISH true #define MQTT_DEFAULT_PUBLISH true
#define DEFAULT_TOPIC_NAME_SENSORS_UPDATE "user/room/device/update" /*<user>/<room>/<device>/update*/
typedef struct mqtt_t { typedef struct mqtt_t {
mqtt_client_t *mqtt_client; /* lwIP MQTT client handle */ mqtt_client_t *mqtt_client; /* lwIP MQTT client handle */
@@ -69,6 +68,7 @@ typedef struct mqtt_t {
unsigned char client_id[32]; /* client ID used for connection: each client should have a unique ID */ unsigned char client_id[32]; /* client ID used for connection: each client should have a unique ID */
unsigned char client_user[32]; /* client user name used for connection */ unsigned char client_user[32]; /* client user name used for connection */
unsigned char client_pass[96]; /* client user password */ unsigned char client_pass[96]; /* client user password */
unsigned char sensors_update_topic[64]; /* topic name for sensor updates */
topic_ID_e in_pub_ID; /* incoming published ID, set in the incoming_publish_cb and used in the incoming_data_cb */ topic_ID_e in_pub_ID; /* incoming published ID, set in the incoming_publish_cb and used in the incoming_data_cb */
/* configuration settings */ /* configuration settings */
bool doLogging; /* if it shall write log messages */ bool doLogging; /* if it shall write log messages */
@@ -119,7 +119,7 @@ int MqttClient_Publish_SensorValues(float temperature, float humidity) {
McuUtility_strcatNumFloat(buf, sizeof(buf), humidity, 2); McuUtility_strcatNumFloat(buf, sizeof(buf), humidity, 2);
McuUtility_strcat(buf, sizeof(buf), (unsigned char*)"}}"); McuUtility_strcat(buf, sizeof(buf), (unsigned char*)"}}");
res = mqtt_publish(mqtt.mqtt_client, TOPIC_NAME_SENSORS_UPDATE, buf, strlen(buf), qos, retain, mqtt_publish_request_cb, NULL); res = mqtt_publish(mqtt.mqtt_client, mqtt.sensors_update_topic, buf, strlen(buf), qos, retain, mqtt_publish_request_cb, NULL);
if (res != ERR_OK) { if (res != ERR_OK) {
McuLog_error("Failed sensor values mqtt_publish: %d", res); McuLog_error("Failed sensor values mqtt_publish: %d", res);
(void)MqttClient_Disconnect(); /* try disconnect and connect again */ (void)MqttClient_Disconnect(); /* try disconnect and connect again */
@@ -304,7 +304,7 @@ static void mqtt_incoming_publish_cb(void *arg, const char *topic, u32_t tot_len
} else if (McuUtility_strcmp(topic, TOPIC_NAME_CHARGER_CHARGING_POWER)==0) { } else if (McuUtility_strcmp(topic, TOPIC_NAME_CHARGER_CHARGING_POWER)==0) {
mqtt.in_pub_ID = Topic_ID_Charging_Power; mqtt.in_pub_ID = Topic_ID_Charging_Power;
#elif MQTT_CLIENT_IS_SENSOR #elif MQTT_CLIENT_IS_SENSOR
if (McuUtility_strcmp(topic, TOPIC_NAME_SENSORS_UPDATE)==0) { if (McuUtility_strcmp(topic, mqtt.sensors_update_topic)==0) {
mqtt.in_pub_ID = Topic_ID_Sensor_Update; mqtt.in_pub_ID = Topic_ID_Sensor_Update;
#endif #endif
} else { /* unknown */ } else { /* unknown */
@@ -405,6 +405,7 @@ uint8_t MqttClient_Connect(void) {
McuMinINI_ini_gets(NVMC_MININI_SECTION_MQTT, NVMC_MININI_KEY_MQTT_CLIENT, MQTT_DEFAULT_CLIENT, mqtt.client_id, sizeof(mqtt.client_id), NVMC_MININI_FILE_NAME); McuMinINI_ini_gets(NVMC_MININI_SECTION_MQTT, NVMC_MININI_KEY_MQTT_CLIENT, MQTT_DEFAULT_CLIENT, mqtt.client_id, sizeof(mqtt.client_id), NVMC_MININI_FILE_NAME);
McuMinINI_ini_gets(NVMC_MININI_SECTION_MQTT, NVMC_MININI_KEY_MQTT_USER, MQTT_DEFAULT_USER, mqtt.client_user, sizeof(mqtt.client_user), NVMC_MININI_FILE_NAME); McuMinINI_ini_gets(NVMC_MININI_SECTION_MQTT, NVMC_MININI_KEY_MQTT_USER, MQTT_DEFAULT_USER, mqtt.client_user, sizeof(mqtt.client_user), NVMC_MININI_FILE_NAME);
McuMinINI_ini_gets(NVMC_MININI_SECTION_MQTT, NVMC_MININI_KEY_MQTT_PASS, MQTT_DEFAULT_PASS, mqtt.client_pass, sizeof(mqtt.client_pass), NVMC_MININI_FILE_NAME); McuMinINI_ini_gets(NVMC_MININI_SECTION_MQTT, NVMC_MININI_KEY_MQTT_PASS, MQTT_DEFAULT_PASS, mqtt.client_pass, sizeof(mqtt.client_pass), NVMC_MININI_FILE_NAME);
McuMinINI_ini_gets(NVMC_MININI_SECTION_MQTT, NVMC_TOPIC_NAME_SENSORS_UPDATE, DEFAULT_TOPIC_NAME_SENSORS_UPDATE, mqtt.sensors_update_topic, sizeof(mqtt.sensors_update_topic), NVMC_MININI_FILE_NAME);
mqtt.doPublishing = McuMinINI_ini_getbool(NVMC_MININI_SECTION_MQTT, NVMC_MININI_KEY_MQTT_PASS, MQTT_DEFAULT_PUBLISH, NVMC_MININI_FILE_NAME); mqtt.doPublishing = McuMinINI_ini_getbool(NVMC_MININI_SECTION_MQTT, NVMC_MININI_KEY_MQTT_PASS, MQTT_DEFAULT_PUBLISH, NVMC_MININI_FILE_NAME);
#else #else
McuUtility_strcpy(mqtt.broker, sizeof(mqtt.broker), MQTT_DEFAULT_BROKER); McuUtility_strcpy(mqtt.broker, sizeof(mqtt.broker), MQTT_DEFAULT_BROKER);