Beispiel #1
0
// Acurite 609 Temperature and Humidity Sensor
// 5 byte messages
// II ST TT HH CC
// II - ID byte, changes at each power up
// S - Status bitmask, normally 0x2,
//     0xa - battery low (bit 0x80)
// TTT - Temp in Celsius * 10, 12 bit with complement.
// HH - Humidity
// CC - Checksum
//
// @todo - see if the 3rd nybble is battery/status
//
static int acurite_th_callback(bitbuffer_t *bitbuf) {
    uint8_t *bb = NULL;
    int cksum, battery_low, valid = 0;
    float tempc;
    uint8_t humidity, id, status;
    data_t *data;

    local_time_str(0, time_str);

    for (uint16_t brow = 0; brow < bitbuf->num_rows; ++brow) {
        if (bitbuf->bits_per_row[brow] != 40) {
	    continue;
	}

	bb = bitbuf->bb[brow];

	cksum = (bb[0] + bb[1] + bb[2] + bb[3]);

	if (cksum == 0 || ((cksum & 0xff) != bb[4])) {
	    continue;
	}

	tempc = acurite_th_temperature(bb);
	id = bb[0];
	status = (bb[1] & 0xf0) >> 4;
	battery_low = status & 0x8;
	humidity = bb[3];

	data = data_make(
		     "time",		"",		DATA_STRING,	time_str,
		     "model",		"",		DATA_STRING,	"Acurite 609TXC Sensor",
		     "id",		"",		DATA_INT,	id,
		     "battery",		"",		DATA_STRING,	battery_low ? "LOW" : "OK",
		     "status",		"",		DATA_INT,	status,
		     "temperature_C", 	"Temperature",	DATA_FORMAT,	"%.1f C", DATA_DOUBLE, tempc,
		     "humidity",        "Humidity",	DATA_INT,	humidity,
		     NULL);

	data_acquired_handler(data);
	valid++;
    }

    if (valid)
        return 1;

    return 0;
}
Beispiel #2
0
// @tdodo - determine which Acurite temp/humidity
// sensors this acutally decodes
static int acurite_th_callback(bitbuffer_t *bitbuffer) {
	bitrow_t *bb = bitbuffer->bb;
    uint8_t *buf = NULL;
    int i;
    for(i = 0; i < BITBUF_ROWS; i++){
	if(acurite_th_detect(bb[i])){
            buf = bb[i];
            break;
        }
    }
    if(buf){
        fprintf(stdout, "Temperature event:\n");
        fprintf(stdout, "protocol      = Acurite Temp&Humidity\n");
        fprintf(stdout, "temp          = %.1f°C\n", acurite_th_temperature(buf));
        fprintf(stdout, "humidity      = %d%%\n\n", buf[3]);
        return 1;
    }

    return 0;
}