[Feature request] Full support for Environment telemetry #67

Closed
opened 2026-10-04 22:59:09 +02:00 by adam · 11 comments
Owner

One of the practical applications of Meshtastic is collecting environment telemetry. It would be great if PotatoMesh covers all environment data, supported by Meshtastic firmware. Here is the protobuf schema with all possible sensor fields.

As far as I can see (in Telemetry table in mesh.db) currently only temperature, pressure and humidity are supported by PotatoMesh.

One of the practical applications of Meshtastic is collecting environment telemetry. It would be great if PotatoMesh covers all environment data, supported by Meshtastic firmware. Here is the [protobuf schema](https://buf.build/meshtastic/protobufs/docs/master:meshtastic#meshtastic.EnvironmentMetrics) with all possible sensor fields. As far as I can see (in Telemetry table in mesh.db) currently only temperature, pressure and humidity are supported by PotatoMesh. <!-- github-sync-id:3526778842 -->
adam closed this issue 2026-10-04 22:59:09 +02:00
Author
Owner

I am only collecting what I know about. Thanks for sharing.

Curious which metrics you are missing? I can add more columns to the table but will there be any practical benefit if nobody actually feeds these cells?

Also, how do we display all available metrics on the dashboard? We pretty much exhaust the possible table width already.

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;
}

I have only seen the environmental sensors for temperature, humidity, and pressure on the radio but happy to extend it if you point me to some fields that are actually used. Certainly not soil moisture? 😛

I am only collecting what I know about. Thanks for sharing. Curious which metrics you are missing? I can add more columns to the table but will there be any practical benefit if nobody actually feeds these cells? Also, how do we display all available metrics on the dashboard? We pretty much exhaust the possible table width already. ``` 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; } ``` I have only seen the environmental sensors for temperature, humidity, and pressure on the radio but happy to extend it if you point me to some fields that are actually used. Certainly not soil moisture? 😛 <!-- github-comment-id:3416782897 -->
Author
Owner

That's what we got in Berlin.

Image

Out of 398 nodes, 6 have temperature, 4 have pressure, and 2 have humidity. I have not yet seen lux or wind or soil data.

That's what we got in Berlin. <img width="351" height="351" alt="Image" src="https://github.com/user-attachments/assets/8335e22c-6b9a-42bf-a36d-3054fe83b46a" /> Out of 398 nodes, 6 have temperature, 4 have pressure, and 2 have humidity. I have not yet seen lux or wind or soil data. <!-- github-comment-id:3418037032 -->
Author
Owner

Well, I'm a bit biased 😁 since I just converted my weather station to pass data to the mesh by protobuf encoding unsupported sensors. I have now rainfall, wind speed and wind direction and solar battery power, on the top of what you mentioned. Check the readme in my repo to see what I mean.

The trouble is that Meshtastic supports limited variety of sensors (mainly i2c) and this restricts the applications. That's why I figured out how to inject unsupported sensors' data (so long the firmware has such data type).

I could contribute to the potato-mesh ingestor part, since it's Python, but can't do anything about the web (Ruby) part.

Well, I'm a bit biased 😁 since I just converted my weather station to pass data to the mesh by protobuf encoding unsupported sensors. I have now rainfall, wind speed and wind direction and solar battery power, on the top of what you mentioned. Check the readme in [my repo](https://github.com/varna9000/micropython-meshtastic) to see what I mean. The trouble is that Meshtastic supports limited variety of sensors (mainly i2c) and this restricts the applications. That's why I figured out how to inject unsupported sensors' data (so long the firmware has such data type). I could contribute to the potato-mesh ingestor part, since it's Python, but can't do anything about the web (Ruby) part. <!-- github-comment-id:3418054286 -->
Author
Owner

I am only collecting what I know about. Thanks for sharing.

Curious which metrics you are missing? I can add more columns to the table but will there be any practical benefit if nobody actually feeds these cells?

Also, how do we display all available metrics on the dashboard? We pretty much exhaust the possible table width already.

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;
}

I have only seen the environmental sensors for temperature, humidity, and pressure on the radio but happy to extend it if you point me to some fields that are actually used. Certainly not soil moisture? 😛

Well, it could be visible in the popup on node click on the map only. You don't need to show it in the node list table. More importantly, the GET /api/telemetry would be a very nice endpoint for getting these sensor data for visualising (or storing) them somewhere else.

> I am only collecting what I know about. Thanks for sharing. > > Curious which metrics you are missing? I can add more columns to the table but will there be any practical benefit if nobody actually feeds these cells? > > Also, how do we display all available metrics on the dashboard? We pretty much exhaust the possible table width already. > > ``` > 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; > } > ``` > > I have only seen the environmental sensors for temperature, humidity, and pressure on the radio but happy to extend it if you point me to some fields that are actually used. Certainly not soil moisture? 😛 Well, it could be visible in the popup on node click on the map only. You don't need to show it in the node list table. More importantly, the GET /api/telemetry would be a very nice endpoint for getting these sensor data for visualising (or storing) them somewhere else. <!-- github-comment-id:3418057728 -->
Author
Owner

You can test #385 if you like and verify the data exists in database or /api/telemetry/${id}

It does not yet show in frontend but can create a subsequent patch if it works

You can test #385 if you like and verify the data exists in database or /api/telemetry/${id} It does not yet show in frontend but can create a subsequent patch if it works <!-- github-comment-id:3418266003 -->
Author
Owner

I think it's working good. I can see the wind speed and wind direction on the web API point. Battery sensor is not connected yet, and it's not raining currently, but I assume those would work too. Thanks for the speedy action on this 👍

{
    "id": 956108613,
    "node_id": "!ea8f9638",
    "node_num": 3935278648,
    "from_id": "!ea8f9638",
    "to_id": "^all",
    "rx_time": 1760790150,
    "rx_iso": "2025-10-18T12:22:30Z",
    "telemetry_time": 1609546882,
    "channel": 0,
    "portnum": "TELEMETRY_APP",
    "hop_limit": null,
    "snr": 12.75,
    "rssi": -39,
    "bitfield": 0,
    "payload_b64": "DYK8718aEnW0XQo/HddBgEQNAmhnQWisAg==",
    "battery_level": null,
    "voltage": null,
    "channel_utilization": null,
    "air_util_tx": null,
    "uptime_seconds": null,
    "temperature": 14.462893,
    "relative_humidity": null,
    "barometric_pressure": 1026.0575,
    "gas_resistance": null,
    "current": null,
    "iaq": null,
    "distance": null,
    "lux": null,
    "white_lux": null,
    "ir_lux": null,
    "uv_lux": null,
    "wind_direction": 300,
    "wind_speed": 0.5404923,
    "weight": null,
    "wind_gust": null,
    "wind_lull": null,
    "radiation": null,
    "rainfall_1h": null,
    "rainfall_24h": null,
    "soil_moisture": null,
    "soil_temperature": null,
    "telemetry_time_iso": "2021-01-02T00:21:22Z"
}
I think it's working good. I can see the wind speed and wind direction on the web API point. Battery sensor is not connected yet, and it's not raining currently, but I assume those would work too. Thanks for the speedy action on this 👍 ``` { "id": 956108613, "node_id": "!ea8f9638", "node_num": 3935278648, "from_id": "!ea8f9638", "to_id": "^all", "rx_time": 1760790150, "rx_iso": "2025-10-18T12:22:30Z", "telemetry_time": 1609546882, "channel": 0, "portnum": "TELEMETRY_APP", "hop_limit": null, "snr": 12.75, "rssi": -39, "bitfield": 0, "payload_b64": "DYK8718aEnW0XQo/HddBgEQNAmhnQWisAg==", "battery_level": null, "voltage": null, "channel_utilization": null, "air_util_tx": null, "uptime_seconds": null, "temperature": 14.462893, "relative_humidity": null, "barometric_pressure": 1026.0575, "gas_resistance": null, "current": null, "iaq": null, "distance": null, "lux": null, "white_lux": null, "ir_lux": null, "uv_lux": null, "wind_direction": 300, "wind_speed": 0.5404923, "weight": null, "wind_gust": null, "wind_lull": null, "radiation": null, "rainfall_1h": null, "rainfall_24h": null, "soil_moisture": null, "soil_temperature": null, "telemetry_time_iso": "2021-01-02T00:21:22Z" } ``` <!-- github-comment-id:3418401205 -->
Author
Owner

That is so cool!

Which weather station are you using if I may ask? I also have a Meshtastic node on a Raspberry Pi, maybe I look into that!

I want to broadcast soil moisture over the Mesh ;-)

That is so cool! Which weather station are you using if I may ask? I also have a Meshtastic node on a Raspberry Pi, maybe I look into that! I want to broadcast soil moisture over the Mesh ;-) <!-- github-comment-id:3418425065 -->
Author
Owner

Reopening for frontend support.

Reopening for frontend support. <!-- github-comment-id:3418425660 -->
Author
Owner

That is so cool!

Which weather station are you using if I may ask? I also have a Meshtastic node on a Raspberry Pi, maybe I look into that!

I want to broadcast soil moisture over the Mesh ;-)

It's a custom one I made, running micropython code. The sensors are from Aliexpress. I have adapted the Raspberry Pi weather station tutorial python code, to work on the Pico with micropython.

Image
Image

> That is so cool! > > Which weather station are you using if I may ask? I also have a Meshtastic node on a Raspberry Pi, maybe I look into that! > > I want to broadcast soil moisture over the Mesh ;-) It's a custom one I made, running micropython code. The sensors are from Aliexpress. I have adapted the [Raspberry Pi weather station tutorial python code,](https://projects.raspberrypi.org/en/projects/build-your-own-weather-station) to work on the Pico with micropython. ![Image](https://github.com/user-attachments/assets/deb40284-6492-49ae-9051-dd683fe59d76) ![Image](https://github.com/user-attachments/assets/dcf13199-9070-4fd4-aa84-ecc52a1242bb) <!-- github-comment-id:3418444728 -->
Author
Owner

@varna9000 please take a look at #387 - will draft a release if this works out for you

@varna9000 please take a look at #387 - will draft a release if this works out for you <!-- github-comment-id:3419519437 -->
Author
Owner

@varna9000 please take a look at #387 - will draft a release if this works out for you

Looks good!

Image
> [@varna9000](https://github.com/varna9000) please take a look at [#387](https://github.com/l5yth/potato-mesh/pull/387) - will draft a release if this works out for you Looks good! <img width="199" height="155" alt="Image" src="https://github.com/user-attachments/assets/11ba52b5-8f77-47a9-89c7-9963e90ea6bb" /> <!-- github-comment-id:3419544733 -->
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: adam/potato-mesh#67