From ba8f4b0ec9ad1769137474d4cb578393ac81a55f Mon Sep 17 00:00:00 2001 From: Marek Hobler Date: Fri, 11 Feb 2022 23:38:44 +0100 Subject: [PATCH] Publish water usage in liters in MQTT --- cc1101.c | 3 +-- everblu_meters.c | 26 +++++++++++++++++++------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/cc1101.c b/cc1101.c index a3dac21..798d121 100644 --- a/cc1101.c +++ b/cc1101.c @@ -681,11 +681,10 @@ struct tmeter_data get_meter_data(void) meter_data_size=decode_4bitpbit_serial(rxBuffer, rxBuffer_size,meter_data); // show_in_hex(meter_data,meter_data_size); sdata = parse_meter_report(meter_data,meter_data_size); - return sdata; } else { echo_debug(debug_out,"TMO on REC\r\n"); } - return; + return sdata; } diff --git a/everblu_meters.c b/everblu_meters.c index 560111b..017a4c4 100644 --- a/everblu_meters.c +++ b/everblu_meters.c @@ -6,9 +6,12 @@ #define MQTT_HOST "localhost" #define MQTT_PORT 1883 +#define MQTT_USER "homeassistant" +#define MQTT_PASS "PASS" + + #define MQTT_KEEP_ALIVE 60 #define MQTT_MSG_MAX_SIZE 512 -#define MQTT_TOPIC_NUM 3 #include @@ -25,7 +28,7 @@ void my_message_callback(struct mosquitto *mosq, void *userdata, const struct mo if(message->payloadlen){ printf("%s %s", message->topic, (char *)message->payload); }else{ - printf("%s (null)\n", message->topic); + //printf("%s (null)\n", message->topic); } fflush(stdout); } @@ -34,7 +37,7 @@ void my_connect_callback(struct mosquitto *mosq, void *userdata, int result) { if(!result){ /* Subscribe to broker information topics on successful connect. */ - mosquitto_subscribe(mosq, NULL, "CCYY ", 2); + mosquitto_subscribe(mosq, NULL, "WaterUsage ", 2); }else{ 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. */ printf("%s\n", str); + } @@ -72,11 +76,16 @@ int main(int argc, char *argv[]) struct tmeter_data meter_data; struct mosquitto *mosq = NULL; 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(); mosq = mosquitto_new(NULL, true, NULL); if(!mosq){ - printf("ERROR: Create MQTT client failed..\n"); + fprintf(stderr, "ERROR: Create MQTT client failed..\n"); mosquitto_lib_cleanup(); return 1; } @@ -87,6 +96,7 @@ int main(int argc, char *argv[]) mosquitto_message_callback_set(mosq, my_message_callback); mosquitto_subscribe_callback_set(mosq, my_subscribe_callback); + mosquitto_username_pw_set(mosq, MQTT_USER, MQTT_PASS); //Connect to MQTT server if(mosquitto_connect(mosq, MQTT_HOST, MQTT_PORT, MQTT_KEEP_ALIVE)){ @@ -101,13 +111,15 @@ int main(int argc, char *argv[]) return 1; } - - //mosquitto_publish(mosq,NULL,"CCYY ",strlen(buff)+1,buff,0,0); - IO_init(); 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); + mosquitto_publish(mosq, NULL, mqtt_topic, strlen(buff),buff,0,false); + mosquitto_destroy(mosq); mosquitto_lib_cleanup();