From 3660b24e95057e4947f9ce8cc63ddec1474415f4 Mon Sep 17 00:00:00 2001 From: "Christian W. Zuckschwerdt" Date: Sat, 16 Jan 2016 16:59:11 +0100 Subject: [PATCH 1/3] rewrite LaCrosse TX output to data fields --- src/devices/lacrosse.c | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/src/devices/lacrosse.c b/src/devices/lacrosse.c index 301e9573..5c549936 100644 --- a/src/devices/lacrosse.c +++ b/src/devices/lacrosse.c @@ -44,6 +44,7 @@ #include "rtl_433.h" #include "util.h" +#include "data.h" #define LACROSSE_TX_BITLEN 44 #define LACROSSE_NYBBLE_CNT 11 @@ -62,8 +63,6 @@ static int lacrossetx_detect(uint8_t *pRow, uint8_t *msg_nybbles, int16_t rowlen int i; uint8_t rbyte_no, rbit_no, mnybble_no, mbit_no; uint8_t bit, checksum, parity_bit, parity = 0; - char time_str[LOCAL_TIME_BUFLEN]; - // Actual Packet should start with 0x0A and be 6 bytes // actual message is 44 bit, 11 x 4 bit nybbles. @@ -109,10 +108,11 @@ static int lacrossetx_detect(uint8_t *pRow, uint8_t *msg_nybbles, int16_t rowlen if (checksum == msg_nybbles[10] && (parity % 2 == 0)) { return 1; } else { - local_time_str(0, time_str); + if (debug_output) { fprintf(stdout, - "%s LaCrosse Checksum/Parity error: Comp. %d != Recv. %d, Parity %d\n", - time_str, checksum, msg_nybbles[10], parity); + "LaCrosse TX Checksum/Parity error: Comp. %d != Recv. %d, Parity %d\n", + checksum, msg_nybbles[10], parity); + } return 0; } } else { @@ -137,9 +137,10 @@ static int lacrossetx_callback(bitbuffer_t *bitbuffer) { uint8_t msg_nybbles[LACROSSE_NYBBLE_CNT]; uint8_t sensor_id, msg_type, msg_len, msg_parity, msg_checksum; int msg_value_int; - float msg_value = 0, temp_c = 0, temp_f = 0; + float msg_value = 0, temp_c = 0; time_t time_now; char time_str[LOCAL_TIME_BUFLEN]; + data_t *data; static float last_msg_value = 0.0; static uint8_t last_sensor_id = 0; @@ -179,18 +180,25 @@ static int lacrossetx_callback(bitbuffer_t *bitbuffer) { // message integrity. if (msg_nybbles[5] != msg_nybbles[8] || msg_nybbles[6] != msg_nybbles[9]) { + if (debug_output) { fprintf(stderr, - "%s LaCrosse TX Sensor %02x, type: %d: message value mismatch int(%3.1f) != %d?\n", - time_str, sensor_id, msg_type, msg_value, msg_value_int); + "LaCrosse TX Sensor %02x, type: %d: message value mismatch int(%3.1f) != %d?\n", + sensor_id, msg_type, msg_value, msg_value_int); + } } switch (msg_type) { case 0x00: temp_c = msg_value - 50.0; - temp_f = temp_c * 1.8 + 32; - printf("%s LaCrosse TX Sensor %02x: Temperature %3.1f C / %3.1f F\n", - time_str, sensor_id, temp_c, temp_f); events++; + + data = data_make("time", "", DATA_STRING, time_str, + "model", "", DATA_STRING, "LaCrosse TX Sensor", + "id", "", DATA_INT, sensor_id, + "temperature_C", "Temperature", DATA_FORMAT, "%.1f C", DATA_DOUBLE, temp_c, + NULL); + data_acquired_handler(data); + break; case 0x0E: @@ -217,6 +225,14 @@ static int lacrossetx_callback(bitbuffer_t *bitbuffer) { return events; } +static char *output_fields[] = { + "time", + "model", + "id", + "temperature_C", + NULL +}; + r_device lacrossetx = { .name = "LaCrosse TX Temperature / Humidity Sensor", .modulation = OOK_PULSE_PWM_RAW, @@ -227,4 +243,5 @@ r_device lacrossetx = { .json_callback = &lacrossetx_callback, .disabled = 0, .demod_arg = 0, // No Startbit removal + .fields = output_fields, }; From c8285f054ebd5c4991656f24d985dcad842c1db8 Mon Sep 17 00:00:00 2001 From: "Christian W. Zuckschwerdt" Date: Sat, 16 Jan 2016 23:12:00 +0100 Subject: [PATCH 2/3] adding data_make for humidity --- src/devices/lacrosse.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/devices/lacrosse.c b/src/devices/lacrosse.c index 5c549936..fb08ba60 100644 --- a/src/devices/lacrosse.c +++ b/src/devices/lacrosse.c @@ -190,20 +190,22 @@ static int lacrossetx_callback(bitbuffer_t *bitbuffer) { switch (msg_type) { case 0x00: temp_c = msg_value - 50.0; - events++; - data = data_make("time", "", DATA_STRING, time_str, "model", "", DATA_STRING, "LaCrosse TX Sensor", "id", "", DATA_INT, sensor_id, "temperature_C", "Temperature", DATA_FORMAT, "%.1f C", DATA_DOUBLE, temp_c, NULL); data_acquired_handler(data); - + events++; break; case 0x0E: - printf("%s LaCrosse TX Sensor %02x: Humidity %3.1f %%\n", - time_str, sensor_id, msg_value); + data = data_make("time", "", DATA_STRING, time_str, + "model", "", DATA_STRING, "LaCrosse TX Sensor", + "id", "", DATA_INT, sensor_id, + "humidity", "Humidity", DATA_FORMAT, "%.1f C", DATA_DOUBLE, msg_value, + NULL); + data_acquired_handler(data); events++; break; @@ -230,6 +232,7 @@ static char *output_fields[] = { "model", "id", "temperature_C", + "humidity", NULL }; From 770f59bcae524cd4ae3ce95042599dd5eb5ec002 Mon Sep 17 00:00:00 2001 From: "Christian W. Zuckschwerdt" Date: Sun, 17 Jan 2016 00:29:04 +0100 Subject: [PATCH 3/3] typo --- src/devices/lacrosse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/devices/lacrosse.c b/src/devices/lacrosse.c index fb08ba60..5291d6e6 100644 --- a/src/devices/lacrosse.c +++ b/src/devices/lacrosse.c @@ -203,7 +203,7 @@ static int lacrossetx_callback(bitbuffer_t *bitbuffer) { data = data_make("time", "", DATA_STRING, time_str, "model", "", DATA_STRING, "LaCrosse TX Sensor", "id", "", DATA_INT, sensor_id, - "humidity", "Humidity", DATA_FORMAT, "%.1f C", DATA_DOUBLE, msg_value, + "humidity", "Humidity", DATA_FORMAT, "%.1f %%", DATA_DOUBLE, msg_value, NULL); data_acquired_handler(data); events++;