tijmenvandenbrink / enviroplus_exporter Goto Github PK
View Code? Open in Web Editor NEWPrometheus exporter for enviroplus module by Pimoroni
License: MIT License
Prometheus exporter for enviroplus module by Pimoroni
License: MIT License
Any chance you can add an option to support the EnviroPhat board? Yes, old, crusty and deprecated, but there's a few still out there.
would it be possible to run this program but also have the data uploaded to sensor.community at the same time, as the basic enviro-plus library does/is built to do? I imagine the answer is "yes of course its possible". but as a programming noob, I guess the more appropriate question would be would it be really difficult to make it do that? And if I wanted to try to take that project on, might you have any tips on how to do it?
Hi! is there anyway to compensate the temperature manually?
I bought a heat dissipator but even so the temperature increases 10C
I'm running the current master branch of the enviroplus_exporter on a Pi4
The enviroplus exporter is successfully running as a use that is a member of the following groups
4(adm),5(tty),20(dialout),29(audio),44(video),46(plugdev),100(users),105(input),109(netdev),999(spi),998(i2c),997(gpio)
which should give access to the following devices
crw-rw---- 1 root i2c 89, 1 May 7 12:44 /dev/i2c-1
crw-rw---- 1 root dialout 204, 64 May 7 12:44 /dev/ttyAMA0
crw-rw---- 1 root gpio 245, 0 May 7 12:44 /dev/gpiomem
I've configured systems to mask the serial device to not conflict/confuse the exporter
systemctl mask [email protected]
Prometheus is successfully scraping data from the Raspberry Pi - the service is advertised by consul and Prometheus is picking up the service and importing data.
if I curl http://localhost:8000/metrics,
I get a full set of results and metrics,
however when consul is offering out the data to prometheus I'm missing metrics and only get the following:
HTTP GET http://localhost:8000/metrics: 200 OK Output: m of nh3 measurements
nh3_measurements_created 1.6519238929121718e+09
pm1_measurements_bucket{le="0.0"} 293.0
pm1_measurements_bucket{le="5.0"} 1730.0
pm1_measurements_bucket{le="10.0"} 1730.0
pm1_measurements_bucket{le="15.0"} 1730.0
pm1_measurements_bucket{le="20.0"} 1730.0
pm1_measurements_bucket{le="25.0"} 1730.0
pm1_measurements_bucket{le="30.0"} 1730.0
pm1_measurements_bucket{le="35.0"} 1730.0
pm1_measurements_bucket{le="40.0"} 1730.0
pm1_measurements_bucket{le="45.0"} 1730.0
pm1_measurements_bucket{le="50.0"} 1730.0
pm1_measurements_bucket{le="55.0"} 1730.0
pm1_measurements_bucket{le="60.0"} 1730.0
pm1_measurements_bucket{le="65.0"} 1730.0
pm1_measurements_bucket{le="70.0"} 1730.0
pm1_measurements_bucket{le="75.0"} 1730.0
pm1_measurements_bucket{le="80.0"} 1730.0
pm1_measurements_bucket{le="85.0"} 1730.0
pm1_measurements_bucket{le="90.0"} 1730.0
pm1_measurements_bucket{le="95.0"} 1730.0
pm1_measurements_bucket{le="100.0"} 1730.0
pm1_measurements_bucket{le="+Inf"} 1730.0
pm1_measurements_count 1730.0
pm1_measurements_sum 1510.0
pm1_measurements_created 1.6519238929124079e+09
pm25_measurements_bucket{le="0.0"} 471.0
pm25_measurements_bucket{le="5.0"} 1730.0
pm25_measurements_bucket{le="10.0"} 1730.0
pm25_measurements_bucket{le="15.0"} 1730.0
pm25_measurements_bucket{le="20.0"} 1730.0
pm25_measurements_bucket{le="25.0"} 1730.0
pm25_measurements_bucket{le="30.0"} 1730.0
pm25_measurements_bucket{le="35.0"} 1730.0
pm25_measurements_bucket{le="40.0"} 1730.0
pm25_measurements_bucket{le="45.0"} 1730.0
pm25_measurements_bucket{le="50.0"} 1730.0
pm25_measurements_bucket{le="55.0"} 1730.0
pm25_measurements_bucket{le="60.0"} 1730.0
pm25_measurements_bucket{le="65.0"} 1730.0
pm25_measurements_bucket{le="70.0"} 1730.0
pm25_measurements_bucket{le="75.0"} 1730.0
pm25_measurements_bucket{le="80.0"} 1730.0
pm25_measurements_bucket{le="85.0"} 1730.0
pm25_measurements_bucket{le="90.0"} 1730.0
pm25_measurements_bucket{le="95.0"} 1730.0
pm25_measurements_bucket{le="100.0"} 1730.0
pm25_measurements_bucket{le="+Inf"} 1730.0
pm25_measurements_count 1730.0
pm25_measurements_sum 1495.0
pm25_measurements_created 1.6519238929126346e+09
pm10_measurements_bucket{le="0.0"} 1356.0
pm10_measurements_bucket{le="5.0"} 1730.0
pm10_measurements_bucket{le="10.0"} 1730.0
pm10_measurements_bucket{le="15.0"} 1730.0
pm10_measurements_bucket{le="20.0"} 1730.0
pm10_measurements_bucket{le="25.0"} 1730.0
pm10_measurements_bucket{le="30.0"} 1730.0
pm10_measurements_bucket{le="35.0"} 1730.0
pm10_measurements_bucket{le="40.0"} 1730.0
pm10_measurements_bucket{le="45.0"} 1730.0
pm10_measurements_bucket{le="50.0"} 1730.0
pm10_measurements_bucket{le="55.0"} 1730.0
pm10_measurements_bucket{le="60.0"} 1730.0
pm10_measurements_bucket{le="65.0"} 1730.0
pm10_measurements_bucket{le="70.0"} 1730.0
pm10_measurements_bucket{le="75.0"} 1730.0
pm10_measurements_bucket{le="80.0"} 1730.0
pm10_measurements_bucket{le="85.0"} 1730.0
pm10_measurements_bucket{le="90.0"} 1730.0
pm10_measurements_bucket{le="95.0"} 1730.0
pm10_measurements_bucket{le="100.0"} 1730.0
pm10_measurements_bucket{le="+Inf"} 1730.0
pm10_measurements_count 1730.0
pm10_measurements_sum 603.0
pm10_measurements_created 1.6519238929128149e+09
I'm unclear why I would not see a full set of metrics when the localhost:8000/metrics URL is being offered by consul
Thanks alot for this great project, i am currently implementing 10x in a factory to measure pollution and this is helping us alot as we can control the HVAC much better in real time and i tried to go with the MQTT way, but your ways is fantastic. There is one thing i see that is missing and would benefit alot is that the enviro+ board has a sound sensor, and with that i could also log "sound pollution". Can you or someone add that to the script to pull the sound. Again thanks!!! :)
Hello,
When running the exporter, I noticed on a ZeroW it's pretty much pegging the CPU at 50% all the time. Looking at your code I can see that you're trying to gather the sensor data in a really tight loop. For my needs this isn't necessary, so I added a 10s sleep which cuts the CPU usage to essentially zero (~2% when gathering). Prometheus is only scraping every 10s anyway, so updating the sensor data more often isn't necessary.
It would be nice if this was an option, so that we can reduce CPU usage when we don't need the most up-to-date sensor data on every metrics poll.
Alternatively adding a 1s sleep in may be enough to limit CPU usage while still providing up-to-date data - it's unlikely anyone (sensible) is running Prometheus with a sub-second scrape interval.
On https://grafana.com/grafana/dashboards/11605 you got a location of city hard-coded in PM10 (on Enviro Dashboard -> Particles -> Edit -> C (description of entry being pm10_{{location}} (dust, pollen, mould spores)) you might wanna change it to [[location]]
This is the error I'm getting. Just started happening out of the blue yesterday. Did a fresh install and still getting the same errors.
Mar 3 10:11:25 raspberrypi systemd[1]: Started Enviroplus-exporter service.
Mar 3 10:11:33 raspberrypi python3[476]: Traceback (most recent call last):
Mar 3 10:11:33 raspberrypi python3[476]: File "/usr/src/enviroplus_exporter/enviroplus_exporter.py", line 29, in
Mar 3 10:11:33 raspberrypi python3[476]: ltr559 = LTR559()
Mar 3 10:11:33 raspberrypi python3[476]: File "/home/pi/.local/lib/python3.7/site-packages/ltr559/init.py", line 212, in init
Mar 3 10:11:33 raspberrypi python3[476]: BitField('ALS', 0x0F)
Mar 3 10:11:33 raspberrypi python3[476]: File "/home/pi/.local/lib/python3.7/site-packages/i2cdevice/init.py", line 166, in init
Mar 3 10:11:33 raspberrypi python3[476]: self._i2c = smbus.SMBus(1)
Mar 3 10:11:33 raspberrypi python3[476]: FileNotFoundError: [Errno 2] No such file or directory
Mar 3 10:11:33 raspberrypi systemd[1]: enviroplus-exporter.service: Main process exited, code=exited, status=1/FAILURE
Mar 3 10:11:33 raspberrypi systemd[1]: enviroplus-exporter.service: Failed with result 'exit-code'.
Hello,
the sensor is delivering the raw values in kohm. Is there a forumular for the conversion?
https://www.sgxsensortech.com/content/uploads/2015/02/1143_Datasheet-MiCS-6814-rev-8.pdf
The Datasheet gives me only some basic values.
If there is a valid formular, how will this then be calculated? Query in Grafana?
Best regards razzor
Hi, have You plan to add prometheus push?
Because now I need have for raspberry public IP if I want to access for data by prometeus.
I want to mesure air quality in my town on my walk throw the city and send data to server. Find best places for runing..
I think easy way send data to public server and prometeus as for this from this server in middle.
I'm running the current master branch of the enviroplus_exporter on a Pi4
The enviroplus exporter is successfully running as a use that is a member of the following groups
4(adm),5(tty),20(dialout),29(audio),44(video),46(plugdev),100(users),105(input),109(netdev),999(spi),998(i2c),997(gpio)
which should give access to the following devices
crw-rw---- 1 root i2c 89, 1 May 7 12:44 /dev/i2c-1
crw-rw---- 1 root dialout 204, 64 May 7 12:44 /dev/ttyAMA0
crw-rw---- 1 root gpio 245, 0 May 7 12:44 /dev/gpiomem
I've configured systems to mask the serial device to not conflict/confuse the exporter
systemctl mask [email protected]
Prometheus is successfully scraping data from the Raspberry Pi - the service is advertised by consul and Prometheus is picking up the service and importing data.
if I view the host directly on 8000/metrics I see what looks like a full set of metrics
python_gc_objects_collected_total{generation="0"} 204.0
python_gc_objects_collected_total{generation="1"} 280.0
python_gc_objects_collected_total{generation="2"} 0.0
python_gc_objects_uncollectable_total{generation="0"} 0.0
python_gc_objects_uncollectable_total{generation="1"} 0.0
python_gc_objects_uncollectable_total{generation="2"} 0.0
python_gc_collections_total{generation="0"} 137.0
python_gc_collections_total{generation="1"} 12.0
python_gc_collections_total{generation="2"} 1.0
python_info{implementation="CPython",major="3",minor="9",patchlevel="2",version="3.9.2"} 1.0
process_virtual_memory_bytes 8.2972672e+07
process_resident_memory_bytes 3.6417536e+07
process_start_time_seconds 1.65192388739e+09
process_cpu_seconds_total 18.23
process_open_fds 17.0
process_max_fds 1024.0
temperature 35.98381768334932
pressure 1022.3256846924709
humidity 15.286055765417066
oxidising 24667.86708135538
reducing 449435.89743589784
NH3 413333.33333333355
lux 42.724
proximity 0.0
PM1 1.0
PM25 2.0
PM10 2.0
cpu_temperature 49.173
battery_voltage 0.0
battery_percentage 0.0
oxidising_measurements_bucket{le="0.0"} 0.0
oxidising_measurements_bucket{le="10000.0"} 0.0
oxidising_measurements_bucket{le="15000.0"} 95.0
oxidising_measurements_bucket{le="20000.0"} 377.0
oxidising_measurements_bucket{le="25000.0"} 1200.0
oxidising_measurements_bucket{le="30000.0"} 1200.0
oxidising_measurements_bucket{le="35000.0"} 1200.0
oxidising_measurements_bucket{le="40000.0"} 1200.0
oxidising_measurements_bucket{le="45000.0"} 1200.0
oxidising_measurements_bucket{le="50000.0"} 1200.0
oxidising_measurements_bucket{le="55000.0"} 1200.0
oxidising_measurements_bucket{le="60000.0"} 1200.0
oxidising_measurements_bucket{le="65000.0"} 1200.0
oxidising_measurements_bucket{le="70000.0"} 1200.0
oxidising_measurements_bucket{le="75000.0"} 1200.0
oxidising_measurements_bucket{le="80000.0"} 1200.0
oxidising_measurements_bucket{le="85000.0"} 1200.0
oxidising_measurements_bucket{le="90000.0"} 1200.0
oxidising_measurements_bucket{le="100000.0"} 1200.0
oxidising_measurements_bucket{le="+Inf"} 1201.0
oxidising_measurements_count 1201.0
oxidising_measurements_sum 2.5425092426756132e+07
oxidising_measurements_created 1.6519238929116244e+09
reducing_measurements_bucket{le="0.0"} 0.0
reducing_measurements_bucket{le="100000.0"} 0.0
reducing_measurements_bucket{le="200000.0"} 0.0
reducing_measurements_bucket{le="300000.0"} 0.0
reducing_measurements_bucket{le="400000.0"} 0.0
reducing_measurements_bucket{le="500000.0"} 1200.0
reducing_measurements_bucket{le="600000.0"} 1200.0
reducing_measurements_bucket{le="700000.0"} 1200.0
reducing_measurements_bucket{le="800000.0"} 1200.0
reducing_measurements_bucket{le="900000.0"} 1200.0
reducing_measurements_bucket{le="1e+06"} 1200.0
reducing_measurements_bucket{le="1.1e+06"} 1200.0
reducing_measurements_bucket{le="1.2e+06"} 1200.0
reducing_measurements_bucket{le="1.3e+06"} 1200.0
reducing_measurements_bucket{le="1.4e+06"} 1200.0
reducing_measurements_bucket{le="1.5e+06"} 1200.0
reducing_measurements_bucket{le="+Inf"} 1201.0
reducing_measurements_count 1201.0
reducing_measurements_sum 5.713870752145402e+08
reducing_measurements_created 1.6519238929118214e+09
nh3_measurements_bucket{le="0.0"} 0.0
nh3_measurements_bucket{le="10000.0"} 0.0
nh3_measurements_bucket{le="110000.0"} 0.0
nh3_measurements_bucket{le="210000.0"} 0.0
nh3_measurements_bucket{le="310000.0"} 0.0
nh3_measurements_bucket{le="410000.0"} 353.0
nh3_measurements_bucket{le="510000.0"} 1200.0
nh3_measurements_bucket{le="610000.0"} 1200.0
nh3_measurements_bucket{le="710000.0"} 1200.0
nh3_measurements_bucket{le="810000.0"} 1200.0
nh3_measurements_bucket{le="910000.0"} 1200.0
nh3_measurements_bucket{le="1.01e+06"} 1200.0
nh3_measurements_bucket{le="1.11e+06"} 1200.0
nh3_measurements_bucket{le="1.21e+06"} 1200.0
nh3_measurements_bucket{le="1.31e+06"} 1200.0
nh3_measurements_bucket{le="1.41e+06"} 1200.0
nh3_measurements_bucket{le="1.51e+06"} 1200.0
nh3_measurements_bucket{le="1.61e+06"} 1200.0
nh3_measurements_bucket{le="1.71e+06"} 1200.0
nh3_measurements_bucket{le="1.81e+06"} 1200.0
nh3_measurements_bucket{le="1.91e+06"} 1200.0
nh3_measurements_bucket{le="2e+06"} 1200.0
nh3_measurements_bucket{le="+Inf"} 1201.0
nh3_measurements_count 1201.0
nh3_measurements_sum 4.9675200238341254e+08
nh3_measurements_created 1.6519238929121718e+09
pm1_measurements_bucket{le="0.0"} 183.0
pm1_measurements_bucket{le="5.0"} 1199.0
pm1_measurements_bucket{le="10.0"} 1199.0
pm1_measurements_bucket{le="15.0"} 1199.0
pm1_measurements_bucket{le="20.0"} 1199.0
pm1_measurements_bucket{le="25.0"} 1199.0
pm1_measurements_bucket{le="30.0"} 1199.0
pm1_measurements_bucket{le="35.0"} 1199.0
pm1_measurements_bucket{le="40.0"} 1199.0
pm1_measurements_bucket{le="45.0"} 1199.0
pm1_measurements_bucket{le="50.0"} 1199.0
pm1_measurements_bucket{le="55.0"} 1199.0
pm1_measurements_bucket{le="60.0"} 1199.0
pm1_measurements_bucket{le="65.0"} 1199.0
pm1_measurements_bucket{le="70.0"} 1199.0
pm1_measurements_bucket{le="75.0"} 1199.0
pm1_measurements_bucket{le="80.0"} 1199.0
pm1_measurements_bucket{le="85.0"} 1199.0
pm1_measurements_bucket{le="90.0"} 1199.0
pm1_measurements_bucket{le="95.0"} 1199.0
pm1_measurements_bucket{le="100.0"} 1199.0
pm1_measurements_bucket{le="+Inf"} 1199.0
pm1_measurements_count 1199.0
pm1_measurements_sum 1062.0
pm1_measurements_created 1.6519238929124079e+09
pm25_measurements_bucket{le="0.0"} 294.0
pm25_measurements_bucket{le="5.0"} 1199.0
pm25_measurements_bucket{le="10.0"} 1199.0
pm25_measurements_bucket{le="15.0"} 1199.0
pm25_measurements_bucket{le="20.0"} 1199.0
pm25_measurements_bucket{le="25.0"} 1199.0
pm25_measurements_bucket{le="30.0"} 1199.0
pm25_measurements_bucket{le="35.0"} 1199.0
pm25_measurements_bucket{le="40.0"} 1199.0
pm25_measurements_bucket{le="45.0"} 1199.0
pm25_measurements_bucket{le="50.0"} 1199.0
pm25_measurements_bucket{le="55.0"} 1199.0
pm25_measurements_bucket{le="60.0"} 1199.0
pm25_measurements_bucket{le="65.0"} 1199.0
pm25_measurements_bucket{le="70.0"} 1199.0
pm25_measurements_bucket{le="75.0"} 1199.0
pm25_measurements_bucket{le="80.0"} 1199.0
pm25_measurements_bucket{le="85.0"} 1199.0
pm25_measurements_bucket{le="90.0"} 1199.0
pm25_measurements_bucket{le="95.0"} 1199.0
pm25_measurements_bucket{le="100.0"} 1199.0
pm25_measurements_bucket{le="+Inf"} 1199.0
pm25_measurements_count 1199.0
pm25_measurements_sum 1114.0
pm25_measurements_created 1.6519238929126346e+09
pm10_measurements_bucket{le="0.0"} 921.0
pm10_measurements_bucket{le="5.0"} 1199.0
pm10_measurements_bucket{le="10.0"} 1199.0
pm10_measurements_bucket{le="15.0"} 1199.0
pm10_measurements_bucket{le="20.0"} 1199.0
pm10_measurements_bucket{le="25.0"} 1199.0
pm10_measurements_bucket{le="30.0"} 1199.0
pm10_measurements_bucket{le="35.0"} 1199.0
pm10_measurements_bucket{le="40.0"} 1199.0
pm10_measurements_bucket{le="45.0"} 1199.0
pm10_measurements_bucket{le="50.0"} 1199.0
pm10_measurements_bucket{le="55.0"} 1199.0
pm10_measurements_bucket{le="60.0"} 1199.0
pm10_measurements_bucket{le="65.0"} 1199.0
pm10_measurements_bucket{le="70.0"} 1199.0
pm10_measurements_bucket{le="75.0"} 1199.0
pm10_measurements_bucket{le="80.0"} 1199.0
pm10_measurements_bucket{le="85.0"} 1199.0
pm10_measurements_bucket{le="90.0"} 1199.0
pm10_measurements_bucket{le="95.0"} 1199.0
pm10_measurements_bucket{le="100.0"} 1199.0
pm10_measurements_bucket{le="+Inf"} 1199.0
pm10_measurements_count 1199.0
pm10_measurements_sum 429.0
pm10_measurements_created 1.6519238929128149e+09
however, if I look at what consul is advertising to prometheus (and therefore prometheus scapes) I see the following, which is basically only the pm device stats.
HTTP GET http://localhost:8000/metrics: 200 OK Output: am of nh3 measurements
nh3_measurements_created 1.6519238929121718e+09
pm1_measurements_bucket{le="0.0"} 183.0
pm1_measurements_bucket{le="5.0"} 1179.0
pm1_measurements_bucket{le="10.0"} 1179.0
pm1_measurements_bucket{le="15.0"} 1179.0
pm1_measurements_bucket{le="20.0"} 1179.0
pm1_measurements_bucket{le="25.0"} 1179.0
pm1_measurements_bucket{le="30.0"} 1179.0
pm1_measurements_bucket{le="35.0"} 1179.0
pm1_measurements_bucket{le="40.0"} 1179.0
pm1_measurements_bucket{le="45.0"} 1179.0
pm1_measurements_bucket{le="50.0"} 1179.0
pm1_measurements_bucket{le="55.0"} 1179.0
pm1_measurements_bucket{le="60.0"} 1179.0
pm1_measurements_bucket{le="65.0"} 1179.0
pm1_measurements_bucket{le="70.0"} 1179.0
pm1_measurements_bucket{le="75.0"} 1179.0
pm1_measurements_bucket{le="80.0"} 1179.0
pm1_measurements_bucket{le="85.0"} 1179.0
pm1_measurements_bucket{le="90.0"} 1179.0
pm1_measurements_bucket{le="95.0"} 1179.0
pm1_measurements_bucket{le="100.0"} 1179.0
pm1_measurements_bucket{le="+Inf"} 1179.0
pm1_measurements_count 1179.0
pm1_measurements_sum 1042.0
pm1_measurements_created 1.6519238929124079e+09
pm25_measurements_bucket{le="0.0"} 294.0
pm25_measurements_bucket{le="5.0"} 1179.0
pm25_measurements_bucket{le="10.0"} 1179.0
pm25_measurements_bucket{le="15.0"} 1179.0
pm25_measurements_bucket{le="20.0"} 1179.0
pm25_measurements_bucket{le="25.0"} 1179.0
pm25_measurements_bucket{le="30.0"} 1179.0
pm25_measurements_bucket{le="35.0"} 1179.0
pm25_measurements_bucket{le="40.0"} 1179.0
pm25_measurements_bucket{le="45.0"} 1179.0
pm25_measurements_bucket{le="50.0"} 1179.0
pm25_measurements_bucket{le="55.0"} 1179.0
pm25_measurements_bucket{le="60.0"} 1179.0
pm25_measurements_bucket{le="65.0"} 1179.0
pm25_measurements_bucket{le="70.0"} 1179.0
pm25_measurements_bucket{le="75.0"} 1179.0
pm25_measurements_bucket{le="80.0"} 1179.0
pm25_measurements_bucket{le="85.0"} 1179.0
pm25_measurements_bucket{le="90.0"} 1179.0
pm25_measurements_bucket{le="95.0"} 1179.0
pm25_measurements_bucket{le="100.0"} 1179.0
pm25_measurements_bucket{le="+Inf"} 1179.0
pm25_measurements_count 1179.0
pm25_measurements_sum 1094.0
pm25_measurements_created 1.6519238929126346e+09
pm10_measurements_bucket{le="0.0"} 915.0
pm10_measurements_bucket{le="5.0"} 1179.0
pm10_measurements_bucket{le="10.0"} 1179.0
pm10_measurements_bucket{le="15.0"} 1179.0
pm10_measurements_bucket{le="20.0"} 1179.0
pm10_measurements_bucket{le="25.0"} 1179.0
pm10_measurements_bucket{le="30.0"} 1179.0
pm10_measurements_bucket{le="35.0"} 1179.0
pm10_measurements_bucket{le="40.0"} 1179.0
pm10_measurements_bucket{le="45.0"} 1179.0
pm10_measurements_bucket{le="50.0"} 1179.0
pm10_measurements_bucket{le="55.0"} 1179.0
pm10_measurements_bucket{le="60.0"} 1179.0
pm10_measurements_bucket{le="65.0"} 1179.0
pm10_measurements_bucket{le="70.0"} 1179.0
pm10_measurements_bucket{le="75.0"} 1179.0
pm10_measurements_bucket{le="80.0"} 1179.0
pm10_measurements_bucket{le="85.0"} 1179.0
pm10_measurements_bucket{le="90.0"} 1179.0
pm10_measurements_bucket{le="95.0"} 1179.0
pm10_measurements_bucket{le="100.0"} 1179.0
pm10_measurements_bucket{le="+Inf"} 1179.0
pm10_measurements_count 1179.0
pm10_measurements_sum 415.0
pm10_measurements_created 1.6519238929128149e+09
When I check this, the health check to get the data from consul, is http://localhost:8000/metrics however if I query the fqdn http://fqdn:8000/metrics - I get the full set.
I can verify this on the actual host using curl, eg: curl http://localhost:8000/metrics v curl http://fqdn:8000/metrics
what is the difference between referencing the fqdn / localhost to node_exporter, I couldn't see anything in the code that would impact this behaviour.
it's easy for me to work around this with consul to just specify the health check as fqdn rather than localhost, but by default the health check is localhost (which does make sense as the exporter is running 'locally'
Can you add code to have the exporter provide the temperature as Fahrenheit? I know the conversion itself is a simply math problem, but I just don't yet understand python well enough to successfully incorporate that in to a modification of your code. ...for that matter, perhaps also build in other conversions for other parameters, to allow for options in your (wonderful!) Grafana dashboard??
Forgive me if this is not the venue for sharing this comment, but I'm new to the GitHub world - and in fact, new to the python and sensor world as well! Any guidance is more than welcome!
Missing in the instructions is that you need to install the prometheus_client
i use
"pip install prometheus_client"
I don't have the PMS5003 particulate matter sensor so I'm not able to add support for it at the moment.
Running the image published on GHCR works fine on an RPi4, but not an RPi5, where it fails with "exec: file format error".
I'm assuming that's because the python interpreter isn't compatible with the newer ARMv8.2 CPU. This is a bit weird because it'd assume it's a superset of the ARMv8 on the RPi4, but I'm not an expert.
Either way, building and pushing my own image using your Dockerfile works just fine, so I can only assume it's due to it picking up a later version of the base image, or maybe one of the libraries if they have C components.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.