mirror of
https://github.com/meshtastic/firmware.git
synced 2025-02-26 22:33:24 +00:00
Fix VEML7700Sensor readings and update protobuf and MQTT JSON
This commit is contained in:
parent
39336847ad
commit
77e76bc92b
src
mesh/generated/meshtastic
modules/Telemetry/Sensor
mqtt
@ -88,10 +88,8 @@ typedef struct _meshtastic_EnvironmentMetrics {
|
||||
float distance;
|
||||
/* VEML7700 high accuracy ambient light(Lux) digital 16-bit resolution sensor. */
|
||||
float lux;
|
||||
/* VEML7700 raw white light data digital 16-bit resolution sensor. */
|
||||
uint32_t white;
|
||||
/* VEML7700 raw ALS data digital 16-bit resolution sensor. */
|
||||
uint32_t ALS;
|
||||
/* VEML7700 high accuracy white light(irradiance) not calibrated digital 16-bit resolution sensor. */
|
||||
float white_lux;
|
||||
} meshtastic_EnvironmentMetrics;
|
||||
|
||||
/* Power Metrics (voltage / current / etc) */
|
||||
@ -173,12 +171,12 @@ extern "C" {
|
||||
|
||||
/* Initializer values for message structs */
|
||||
#define meshtastic_DeviceMetrics_init_default {0, 0, 0, 0, 0}
|
||||
#define meshtastic_EnvironmentMetrics_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||
#define meshtastic_EnvironmentMetrics_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||
#define meshtastic_PowerMetrics_init_default {0, 0, 0, 0, 0, 0}
|
||||
#define meshtastic_AirQualityMetrics_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||
#define meshtastic_Telemetry_init_default {0, 0, {meshtastic_DeviceMetrics_init_default}}
|
||||
#define meshtastic_DeviceMetrics_init_zero {0, 0, 0, 0, 0}
|
||||
#define meshtastic_EnvironmentMetrics_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||
#define meshtastic_EnvironmentMetrics_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||
#define meshtastic_PowerMetrics_init_zero {0, 0, 0, 0, 0, 0}
|
||||
#define meshtastic_AirQualityMetrics_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||
#define meshtastic_Telemetry_init_zero {0, 0, {meshtastic_DeviceMetrics_init_zero}}
|
||||
@ -198,8 +196,7 @@ extern "C" {
|
||||
#define meshtastic_EnvironmentMetrics_iaq_tag 7
|
||||
#define meshtastic_EnvironmentMetrics_distance_tag 8
|
||||
#define meshtastic_EnvironmentMetrics_lux_tag 9
|
||||
#define meshtastic_EnvironmentMetrics_white_tag 10
|
||||
#define meshtastic_EnvironmentMetrics_ALS_tag 11
|
||||
#define meshtastic_EnvironmentMetrics_white_lux_tag 10
|
||||
#define meshtastic_PowerMetrics_ch1_voltage_tag 1
|
||||
#define meshtastic_PowerMetrics_ch1_current_tag 2
|
||||
#define meshtastic_PowerMetrics_ch2_voltage_tag 3
|
||||
@ -244,8 +241,7 @@ X(a, STATIC, SINGULAR, FLOAT, current, 6) \
|
||||
X(a, STATIC, SINGULAR, UINT32, iaq, 7) \
|
||||
X(a, STATIC, SINGULAR, FLOAT, distance, 8) \
|
||||
X(a, STATIC, SINGULAR, FLOAT, lux, 9) \
|
||||
X(a, STATIC, SINGULAR, UINT32, white, 10) \
|
||||
X(a, STATIC, SINGULAR, UINT32, ALS, 11)
|
||||
X(a, STATIC, SINGULAR, FLOAT, white_lux, 10)
|
||||
#define meshtastic_EnvironmentMetrics_CALLBACK NULL
|
||||
#define meshtastic_EnvironmentMetrics_DEFAULT NULL
|
||||
|
||||
@ -305,7 +301,7 @@ extern const pb_msgdesc_t meshtastic_Telemetry_msg;
|
||||
#define MESHTASTIC_MESHTASTIC_TELEMETRY_PB_H_MAX_SIZE meshtastic_Telemetry_size
|
||||
#define meshtastic_AirQualityMetrics_size 72
|
||||
#define meshtastic_DeviceMetrics_size 27
|
||||
#define meshtastic_EnvironmentMetrics_size 56
|
||||
#define meshtastic_EnvironmentMetrics_size 49
|
||||
#define meshtastic_PowerMetrics_size 30
|
||||
#define meshtastic_Telemetry_size 79
|
||||
|
||||
|
@ -24,11 +24,38 @@ int32_t VEML7700Sensor::runOnce()
|
||||
|
||||
void VEML7700Sensor::setup() {}
|
||||
|
||||
/*!
|
||||
* @brief Copmute lux from ALS reading.
|
||||
* @param rawALS raw ALS register value
|
||||
* @param corrected if true, apply non-linear correction
|
||||
* @return lux value
|
||||
*/
|
||||
float VEML7700Sensor::computeLux(uint16_t rawALS, bool corrected) {
|
||||
float lux = getResolution() * rawALS;
|
||||
if (corrected)
|
||||
lux = (((6.0135e-13 * lux - 9.3924e-9) * lux + 8.1488e-5) * lux + 1.0023) *
|
||||
lux;
|
||||
return lux;
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief Determines resolution for current gain and integration time
|
||||
* settings.
|
||||
*/
|
||||
float VEML7700Sensor::getResolution(void) {
|
||||
return MAX_RES * (IT_MAX / veml7700.getIntegrationTimeValue()) *
|
||||
(GAIN_MAX / veml7700.getGainValue());
|
||||
}
|
||||
|
||||
bool VEML7700Sensor::getMetrics(meshtastic_Telemetry *measurement)
|
||||
{
|
||||
int16_t white;
|
||||
measurement->variant.environment_metrics.lux = veml7700.readLux(VEML_LUX_AUTO);
|
||||
measurement->variant.environment_metrics.white = veml7700.readWhite();
|
||||
measurement->variant.environment_metrics.ALS = veml7700.readALS();
|
||||
white = veml7700.readWhite(true);
|
||||
measurement->variant.environment_metrics.white_lux = computeLux(white, white > 100);
|
||||
LOG_INFO("white lux %f, als lux %f\n",
|
||||
measurement->variant.environment_metrics.white_lux,
|
||||
measurement->variant.environment_metrics.lux);
|
||||
|
||||
|
||||
return true;
|
||||
|
@ -5,7 +5,12 @@
|
||||
class VEML7700Sensor : public TelemetrySensor
|
||||
{
|
||||
private:
|
||||
const float MAX_RES = 0.0036;
|
||||
const float GAIN_MAX = 2;
|
||||
const float IT_MAX = 800;
|
||||
Adafruit_VEML7700 veml7700;
|
||||
float computeLux(uint16_t rawALS, bool corrected);
|
||||
float getResolution(void);
|
||||
|
||||
protected:
|
||||
virtual void setup() override;
|
||||
|
@ -665,8 +665,7 @@ std::string MQTT::meshPacketToJson(meshtastic_MeshPacket *mp)
|
||||
msgPayload["voltage"] = new JSONValue(decoded->variant.environment_metrics.voltage);
|
||||
msgPayload["current"] = new JSONValue(decoded->variant.environment_metrics.current);
|
||||
msgPayload["lux"] = new JSONValue(decoded->variant.environment_metrics.lux);
|
||||
msgPayload["white"] = new JSONValue((uint)decoded->variant.environment_metrics.white);
|
||||
msgPayload["ALS"] = new JSONValue((uint)decoded->variant.environment_metrics.ALS);
|
||||
msgPayload["white_lux"] = new JSONValue(decoded->variant.environment_metrics.white_lux);
|
||||
msgPayload["iaq"] = new JSONValue((uint)decoded->variant.environment_metrics.iaq);
|
||||
} else if (decoded->which_variant == meshtastic_Telemetry_power_metrics_tag) {
|
||||
msgPayload["voltage_ch1"] = new JSONValue(decoded->variant.power_metrics.ch1_voltage);
|
||||
|
Loading…
Reference in New Issue
Block a user