10 const uint8_t data_type = adv_data[0];
11 const auto *data = &adv_data[1];
14 if (adv_data.size() != 14)
17 const uint8_t temp_sign = (data[1] >> 7) & 1;
18 const float temp_val = (data[1] & 0x7F) + (data[2] / 100.0f);
19 const float temperature = temp_sign == 0 ? temp_val : -1 * temp_val;
21 const float humidity = data[0] * 0.5f;
26 const float battery_voltage =
encode_uint16(data[11], data[12]) / 1000.0f;
35 sqrtf(acceleration_x * acceleration_x + acceleration_y * acceleration_y + acceleration_z * acceleration_z);
41 if (adv_data.size() != 24)
45 const float humidity =
encode_uint16(data[2], data[3]) / 400.0f;
51 const uint16_t power_info =
encode_uint16(data[12], data[13]);
52 const float battery_voltage = ((power_info >> 5) + 1600.0f) / 1000.0f;
53 const float tx_power = ((power_info & 0x1F) * 2.0f) - 40.0f;
55 const float movement_counter = float(data[14]);
56 const float measurement_sequence_number = float(
encode_uint16(data[15], data[16]));
59 result.
humidity = data[2] == 0xFF && data[3] == 0xFF ? NAN : humidity;
61 result.
acceleration_x = data[6] == 0xFF && data[7] == 0xFF ? NAN : acceleration_x;
62 result.
acceleration_y = data[8] == 0xFF && data[9] == 0xFF ? NAN : acceleration_y;
63 result.
acceleration_z = data[10] == 0xFF && data[11] == 0xFF ? NAN : acceleration_z;
64 if ((data[6] != 0xFF || data[7] != 0xFF) && (data[8] != 0xFF || data[9] != 0xFF) &&
65 (data[10] != 0xFF || data[11] != 0xFF)) {
67 sqrtf(acceleration_x * acceleration_x + acceleration_y * acceleration_y + acceleration_z * acceleration_z);
71 result.
battery_voltage = (power_info >> 5) == 0x7FF ? NAN : battery_voltage;
72 result.
tx_power = (power_info & 0x1F) == 0x1F ? NAN : tx_power;
100 if (!res.has_value())
103 char addr_buf[MAC_ADDRESS_PRETTY_BUFFER_SIZE];
104 ESP_LOGD(TAG,
"Got RuuviTag (%s):", device.
address_str_to(addr_buf));
106 if (res->humidity.has_value()) {
107 ESP_LOGD(TAG,
" Humidity: %.2f%%", *res->humidity);
109 if (res->temperature.has_value()) {
110 ESP_LOGD(TAG,
" Temperature: %.2f°C", *res->temperature);
112 if (res->pressure.has_value()) {
113 ESP_LOGD(TAG,
" Pressure: %.2fhPa", *res->pressure);
115 if (res->acceleration.has_value()) {
116 ESP_LOGD(TAG,
" Acceleration: %.3fG", *res->acceleration);
118 if (res->acceleration_x.has_value()) {
119 ESP_LOGD(TAG,
" Acceleration X: %.3fG", *res->acceleration_x);
121 if (res->acceleration_y.has_value()) {
122 ESP_LOGD(TAG,
" Acceleration Y: %.3fG", *res->acceleration_y);
124 if (res->acceleration_z.has_value()) {
125 ESP_LOGD(TAG,
" Acceleration Z: %.3fG", *res->acceleration_z);
127 if (res->battery_voltage.has_value()) {
128 ESP_LOGD(TAG,
" Battery Voltage: %.3fV", *res->battery_voltage);
130 if (res->tx_power.has_value()) {
131 ESP_LOGD(TAG,
" TX Power: %.0fdBm", *res->tx_power);
133 if (res->movement_counter.has_value()) {
134 ESP_LOGD(TAG,
" Movement Counter: %.0f", *res->movement_counter);
136 if (res->measurement_sequence_number.has_value()) {
137 ESP_LOGD(TAG,
" Measurement Sequence Number: %.0f", *res->measurement_sequence_number);