syntax = "proto3"; package meshtastic; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "TelemetryProtos"; option java_package = "com.geeksville.mesh"; option swift_prefix = ""; /* * Key native device metrics such as battery level */ message DeviceMetrics { /* * 0-100 (>100 means powered) */ optional uint32 battery_level = 1; /* * Voltage measured */ optional float voltage = 2; /* * Utilization for the current channel, including well formed TX, RX and malformed RX (aka noise). */ optional float channel_utilization = 3; /* * Percent of airtime for transmission used within the last hour. */ optional float air_util_tx = 4; /* * How long the device has been running since the last reboot (in seconds) */ optional uint32 uptime_seconds = 5; } /* * Weather station or other environmental metrics */ message EnvironmentMetrics { /* * Temperature measured */ optional float temperature = 1; /* * Relative humidity percent measured */ optional float relative_humidity = 2; /* * Barometric pressure in hPA measured */ optional float barometric_pressure = 3; /* * Gas resistance in MOhm measured */ optional float gas_resistance = 4; /* * Voltage measured (To be depreciated in favor of PowerMetrics in Meshtastic 3.x) */ optional float voltage = 5; /* * Current measured (To be depreciated in favor of PowerMetrics in Meshtastic 3.x) */ optional float current = 6; /* * relative scale IAQ value as measured by Bosch BME680 . value 0-500. * Belongs to Air Quality but is not particle but VOC measurement. Other VOC values can also be put in here. */ optional uint32 iaq = 7; /* * RCWL9620 Doppler Radar Distance Sensor, used for water level detection. Float value in mm. */ optional float distance = 8; /* * VEML7700 high accuracy ambient light(Lux) digital 16-bit resolution sensor. */ optional float lux = 9; /* * VEML7700 high accuracy white light(irradiance) not calibrated digital 16-bit resolution sensor. */ optional float white_lux = 10; /* * Infrared lux */ optional float ir_lux = 11; /* * Ultraviolet lux */ optional float uv_lux = 12; /* * Wind direction in degrees * 0 degrees = North, 90 = East, etc... */ optional uint32 wind_direction = 13; /* * Wind speed in m/s */ optional float wind_speed = 14; /* * Weight in KG */ optional float weight = 15; /* * Wind gust in m/s */ optional float wind_gust = 16; /* * Wind lull in m/s */ optional float wind_lull = 17; /* * Radiation in µR/h */ optional float radiation = 18; /* * Rainfall in the last hour in mm */ optional float rainfall_1h = 19; /* * Rainfall in the last 24 hours in mm */ optional float rainfall_24h = 20; /* * Soil moisture measured (% 1-100) */ optional uint32 soil_moisture = 21; /* * Soil temperature measured (*C) */ optional float soil_temperature = 22; } /* * Power Metrics (voltage / current / etc) */ message PowerMetrics { /* * Voltage (Ch1) */ optional float ch1_voltage = 1; /* * Current (Ch1) */ optional float ch1_current = 2; /* * Voltage (Ch2) */ optional float ch2_voltage = 3; /* * Current (Ch2) */ optional float ch2_current = 4; /* * Voltage (Ch3) */ optional float ch3_voltage = 5; /* * Current (Ch3) */ optional float ch3_current = 6; /* * Voltage (Ch4) */ optional float ch4_voltage = 7; /* * Current (Ch4) */ optional float ch4_current = 8; /* * Voltage (Ch5) */ optional float ch5_voltage = 9; /* * Current (Ch5) */ optional float ch5_current = 10; /* * Voltage (Ch6) */ optional float ch6_voltage = 11; /* * Current (Ch6) */ optional float ch6_current = 12; /* * Voltage (Ch7) */ optional float ch7_voltage = 13; /* * Current (Ch7) */ optional float ch7_current = 14; /* * Voltage (Ch8) */ optional float ch8_voltage = 15; /* * Current (Ch8) */ optional float ch8_current = 16; } /* * Air quality metrics */ message AirQualityMetrics { /* * Concentration Units Standard PM1.0 in ug/m3 */ optional uint32 pm10_standard = 1; /* * Concentration Units Standard PM2.5 in ug/m3 */ optional uint32 pm25_standard = 2; /* * Concentration Units Standard PM10.0 in ug/m3 */ optional uint32 pm100_standard = 3; /* * Concentration Units Environmental PM1.0 in ug/m3 */ optional uint32 pm10_environmental = 4; /* * Concentration Units Environmental PM2.5 in ug/m3 */ optional uint32 pm25_environmental = 5; /* * Concentration Units Environmental PM10.0 in ug/m3 */ optional uint32 pm100_environmental = 6; /* * 0.3um Particle Count in #/0.1l */ optional uint32 particles_03um = 7; /* * 0.5um Particle Count in #/0.1l */ optional uint32 particles_05um = 8; /* * 1.0um Particle Count in #/0.1l */ optional uint32 particles_10um = 9; /* * 2.5um Particle Count in #/0.1l */ optional uint32 particles_25um = 10; /* * 5.0um Particle Count in #/0.1l */ optional uint32 particles_50um = 11; /* * 10.0um Particle Count in #/0.1l */ optional uint32 particles_100um = 12; /* * CO2 concentration in ppm */ optional uint32 co2 = 13; /* * CO2 sensor temperature in degC */ optional float co2_temperature = 14; /* * CO2 sensor relative humidity in % */ optional float co2_humidity = 15; /* * Formaldehyde sensor formaldehyde concentration in ppb */ optional float form_formaldehyde = 16; /* * Formaldehyde sensor relative humidity in %RH */ optional float form_humidity = 17; /* * Formaldehyde sensor temperature in degrees Celsius */ optional float form_temperature = 18; /* * Concentration Units Standard PM4.0 in ug/m3 */ optional uint32 pm40_standard = 19; /* * 4.0um Particle Count in #/0.1l */ optional uint32 particles_40um = 20; /* * PM Sensor Temperature */ optional float pm_temperature = 21; /* * PM Sensor humidity */ optional float pm_humidity = 22; /* * PM Sensor VOC Index */ optional float pm_voc_idx = 23; /* * PM Sensor NOx Index */ optional float pm_nox_idx = 24; /* * Typical Particle Size in um */ optional float particles_tps = 25; } /* * Local device mesh statistics */ message LocalStats { /* * How long the device has been running since the last reboot (in seconds) */ uint32 uptime_seconds = 1; /* * Utilization for the current channel, including well formed TX, RX and malformed RX (aka noise). */ float channel_utilization = 2; /* * Percent of airtime for transmission used within the last hour. */ float air_util_tx = 3; /* * Number of packets sent */ uint32 num_packets_tx = 4; /* * Number of packets received (both good and bad) */ uint32 num_packets_rx = 5; /* * Number of packets received that are malformed or violate the protocol */ uint32 num_packets_rx_bad = 6; /* * Number of nodes online (in the past 2 hours) */ uint32 num_online_nodes = 7; /* * Number of nodes total */ uint32 num_total_nodes = 8; /* * Number of received packets that were duplicates (due to multiple nodes relaying). * If this number is high, there are nodes in the mesh relaying packets when it's unnecessary, for example due to the ROUTER/REPEATER role. */ uint32 num_rx_dupe = 9; /* * Number of packets we transmitted that were a relay for others (not originating from ourselves). */ uint32 num_tx_relay = 10; /* * Number of times we canceled a packet to be relayed, because someone else did it before us. * This will always be zero for ROUTERs/REPEATERs. If this number is high, some other node(s) is/are relaying faster than you. */ uint32 num_tx_relay_canceled = 11; /* * Number of bytes used in the heap */ uint32 heap_total_bytes = 12; /* * Number of bytes free in the heap */ uint32 heap_free_bytes = 13; } /* * Health telemetry metrics */ message HealthMetrics { /* * Heart rate (beats per minute) */ optional uint32 heart_bpm = 1; /* * SpO2 (blood oxygen saturation) level */ optional uint32 spO2 = 2; /* * Body temperature in degrees Celsius */ optional float temperature = 3; } /* * Linux host metrics */ message HostMetrics { /* * Host system uptime */ uint32 uptime_seconds = 1; /* * Host system free memory */ uint64 freemem_bytes = 2; /* * Host system disk space free for / */ uint64 diskfree1_bytes = 3; /* * Secondary system disk space free */ optional uint64 diskfree2_bytes = 4; /* * Tertiary disk space free */ optional uint64 diskfree3_bytes = 5; /* * Host system one minute load in 1/100ths */ uint32 load1 = 6; /* * Host system five minute load in 1/100ths */ uint32 load5 = 7; /* * Host system fifteen minute load in 1/100ths */ uint32 load15 = 8; /* * Optional User-provided string for arbitrary host system information * that doesn't make sense as a dedicated entry. */ optional string user_string = 9; } /* * Types of Measurements the telemetry module is equipped to handle */ message Telemetry { /* * Seconds since 1970 - or 0 for unknown/unset */ fixed32 time = 1; oneof variant { /* * Key native device metrics such as battery level */ DeviceMetrics device_metrics = 2; /* * Weather station or other environmental metrics */ EnvironmentMetrics environment_metrics = 3; /* * Air quality metrics */ AirQualityMetrics air_quality_metrics = 4; /* * Power Metrics */ PowerMetrics power_metrics = 5; /* * Local device mesh statistics */ LocalStats local_stats = 6; /* * Health telemetry metrics */ HealthMetrics health_metrics = 7; /* * Linux host metrics */ HostMetrics host_metrics = 8; } } /* * Supported I2C Sensors for telemetry in Meshtastic */ enum TelemetrySensorType { /* * No external telemetry sensor explicitly set */ SENSOR_UNSET = 0; /* * High accuracy temperature, pressure, humidity */ BME280 = 1; /* * High accuracy temperature, pressure, humidity, and air resistance */ BME680 = 2; /* * Very high accuracy temperature */ MCP9808 = 3; /* * Moderate accuracy current and voltage */ INA260 = 4; /* * Moderate accuracy current and voltage */ INA219 = 5; /* * High accuracy temperature and pressure */ BMP280 = 6; /* * High accuracy temperature and humidity */ SHTC3 = 7; /* * High accuracy pressure */ LPS22 = 8; /* * 3-Axis magnetic sensor */ QMC6310 = 9; /* * 6-Axis inertial measurement sensor */ QMI8658 = 10; /* * 3-Axis magnetic sensor */ QMC5883L = 11; /* * High accuracy temperature and humidity */ SHT31 = 12; /* * PM2.5 air quality sensor */ PMSA003I = 13; /* * INA3221 3 Channel Voltage / Current Sensor */ INA3221 = 14; /* * BMP085/BMP180 High accuracy temperature and pressure (older Version of BMP280) */ BMP085 = 15; /* * RCWL-9620 Doppler Radar Distance Sensor, used for water level detection */ RCWL9620 = 16; /* * Sensirion High accuracy temperature and humidity */ SHT4X = 17; /* * VEML7700 high accuracy ambient light(Lux) digital 16-bit resolution sensor. */ VEML7700 = 18; /* * MLX90632 non-contact IR temperature sensor. */ MLX90632 = 19; /* * TI OPT3001 Ambient Light Sensor */ OPT3001 = 20; /* * Lite On LTR-390UV-01 UV Light Sensor */ LTR390UV = 21; /* * AMS TSL25911FN RGB Light Sensor */ TSL25911FN = 22; /* * AHT10 Integrated temperature and humidity sensor */ AHT10 = 23; /* * DFRobot Lark Weather station (temperature, humidity, pressure, wind speed and direction) */ DFROBOT_LARK = 24; /* * NAU7802 Scale Chip or compatible */ NAU7802 = 25; /* * BMP3XX High accuracy temperature and pressure */ BMP3XX = 26; /* * ICM-20948 9-Axis digital motion processor */ ICM20948 = 27; /* * MAX17048 1S lipo battery sensor (voltage, state of charge, time to go) */ MAX17048 = 28; /* * Custom I2C sensor implementation based on https://github.com/meshtastic/i2c-sensor */ CUSTOM_SENSOR = 29; /* * MAX30102 Pulse Oximeter and Heart-Rate Sensor */ MAX30102 = 30; /* * MLX90614 non-contact IR temperature sensor */ MLX90614 = 31; /* * SCD40/SCD41 CO2, humidity, temperature sensor */ SCD4X = 32; /* * ClimateGuard RadSens, radiation, Geiger-Muller Tube */ RADSENS = 33; /* * High accuracy current and voltage */ INA226 = 34; /* * DFRobot Gravity tipping bucket rain gauge */ DFROBOT_RAIN = 35; /* * Infineon DPS310 High accuracy pressure and temperature */ DPS310 = 36; /* * RAKWireless RAK12035 Soil Moisture Sensor Module */ RAK12035 = 37; /* * MAX17261 lipo battery gauge */ MAX17261 = 38; /* * PCT2075 Temperature Sensor */ PCT2075 = 39; /* * ADS1X15 ADC */ ADS1X15 = 40; /* * ADS1X15 ADC_ALT */ ADS1X15_ALT = 41; /* * Sensirion SFA30 Formaldehyde sensor */ SFA30 = 42; /* * SEN5X PM SENSORS */ SEN5X = 43; } /* * NAU7802 Telemetry configuration, for saving to flash */ message Nau7802Config { /* * The offset setting for the NAU7802 */ int32 zeroOffset = 1; /* * The calibration factor for the NAU7802 */ float calibrationFactor = 2; }