Publish water usage in liters in MQTT

This commit is contained in:
Marek Hobler 2022-02-11 23:38:44 +01:00
parent 2db71059f6
commit ba8f4b0ec9
2 changed files with 20 additions and 9 deletions

View File

@ -681,11 +681,10 @@ struct tmeter_data get_meter_data(void)
meter_data_size=decode_4bitpbit_serial(rxBuffer, rxBuffer_size,meter_data); meter_data_size=decode_4bitpbit_serial(rxBuffer, rxBuffer_size,meter_data);
// show_in_hex(meter_data,meter_data_size); // show_in_hex(meter_data,meter_data_size);
sdata = parse_meter_report(meter_data,meter_data_size); sdata = parse_meter_report(meter_data,meter_data_size);
return sdata;
} }
else else
{ {
echo_debug(debug_out,"TMO on REC\r\n"); echo_debug(debug_out,"TMO on REC\r\n");
} }
return; return sdata;
} }

View File

@ -6,9 +6,12 @@
#define MQTT_HOST "localhost" #define MQTT_HOST "localhost"
#define MQTT_PORT 1883 #define MQTT_PORT 1883
#define MQTT_USER "homeassistant"
#define MQTT_PASS "PASS"
#define MQTT_KEEP_ALIVE 60 #define MQTT_KEEP_ALIVE 60
#define MQTT_MSG_MAX_SIZE 512 #define MQTT_MSG_MAX_SIZE 512
#define MQTT_TOPIC_NUM 3
#include <stdio.h> #include <stdio.h>
@ -25,7 +28,7 @@ void my_message_callback(struct mosquitto *mosq, void *userdata, const struct mo
if(message->payloadlen){ if(message->payloadlen){
printf("%s %s", message->topic, (char *)message->payload); printf("%s %s", message->topic, (char *)message->payload);
}else{ }else{
printf("%s (null)\n", message->topic); //printf("%s (null)\n", message->topic);
} }
fflush(stdout); fflush(stdout);
} }
@ -34,7 +37,7 @@ void my_connect_callback(struct mosquitto *mosq, void *userdata, int result)
{ {
if(!result){ if(!result){
/* Subscribe to broker information topics on successful connect. */ /* Subscribe to broker information topics on successful connect. */
mosquitto_subscribe(mosq, NULL, "CCYY ", 2); mosquitto_subscribe(mosq, NULL, "WaterUsage ", 2);
}else{ }else{
fprintf(stderr, "Connect failed\n"); fprintf(stderr, "Connect failed\n");
} }
@ -54,6 +57,7 @@ void my_log_callback(struct mosquitto *mosq, void *userdata, int level, const ch
{ {
/* Pring all log messages regardless of level. */ /* Pring all log messages regardless of level. */
printf("%s\n", str); printf("%s\n", str);
} }
@ -72,11 +76,16 @@ int main(int argc, char *argv[])
struct tmeter_data meter_data; struct tmeter_data meter_data;
struct mosquitto *mosq = NULL; struct mosquitto *mosq = NULL;
char buff[MQTT_MSG_MAX_SIZE]; char buff[MQTT_MSG_MAX_SIZE];
char meter_id[12];
char mqtt_topic[64];
sprintf(meter_id, "%i_%i", METER_YEAR, METER_SERIAL);
mosquitto_lib_init(); mosquitto_lib_init();
mosq = mosquitto_new(NULL, true, NULL); mosq = mosquitto_new(NULL, true, NULL);
if(!mosq){ if(!mosq){
printf("ERROR: Create MQTT client failed..\n"); fprintf(stderr, "ERROR: Create MQTT client failed..\n");
mosquitto_lib_cleanup(); mosquitto_lib_cleanup();
return 1; return 1;
} }
@ -87,6 +96,7 @@ int main(int argc, char *argv[])
mosquitto_message_callback_set(mosq, my_message_callback); mosquitto_message_callback_set(mosq, my_message_callback);
mosquitto_subscribe_callback_set(mosq, my_subscribe_callback); mosquitto_subscribe_callback_set(mosq, my_subscribe_callback);
mosquitto_username_pw_set(mosq, MQTT_USER, MQTT_PASS);
//Connect to MQTT server //Connect to MQTT server
if(mosquitto_connect(mosq, MQTT_HOST, MQTT_PORT, MQTT_KEEP_ALIVE)){ if(mosquitto_connect(mosq, MQTT_HOST, MQTT_PORT, MQTT_KEEP_ALIVE)){
@ -101,13 +111,15 @@ int main(int argc, char *argv[])
return 1; return 1;
} }
//mosquitto_publish(mosq,NULL,"CCYY ",strlen(buff)+1,buff,0,0);
IO_init(); IO_init();
meter_data = get_meter_data(); meter_data = get_meter_data();
sprintf(buff, "%d", meter_data.liters);
sprintf(mqtt_topic, "homeassistant/sensor/cyblemeter_%s/state", meter_id);
printf("Liters: %i\n", meter_data.liters); printf("Liters: %i\n", meter_data.liters);
mosquitto_publish(mosq, NULL, mqtt_topic, strlen(buff),buff,0,false);
mosquitto_destroy(mosq); mosquitto_destroy(mosq);
mosquitto_lib_cleanup(); mosquitto_lib_cleanup();