{"id":21649526,"url":"https://github.com/sumkincpp/tft-feather-prometheus","last_synced_at":"2026-05-03T22:33:58.662Z","repository":{"id":264483381,"uuid":"893503310","full_name":"sumkincpp/tft-feather-prometheus","owner":"sumkincpp","description":"TFT Feather Prometheus Exporter for BME680 and SCD41","archived":false,"fork":false,"pushed_at":"2024-11-24T16:08:44.000Z","size":18,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-26T07:27:02.043Z","etag":null,"topics":["bme680","circuitpython","prometheus","prometheus-exporter","scd41"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sumkincpp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-24T16:04:31.000Z","updated_at":"2024-11-24T16:11:09.000Z","dependencies_parsed_at":"2024-11-24T17:19:01.753Z","dependency_job_id":"040affdc-5f17-45f0-b213-22c0deaff3e3","html_url":"https://github.com/sumkincpp/tft-feather-prometheus","commit_stats":null,"previous_names":["sumkincpp/tft-feather-prometheus"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sumkincpp/tft-feather-prometheus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumkincpp%2Ftft-feather-prometheus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumkincpp%2Ftft-feather-prometheus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumkincpp%2Ftft-feather-prometheus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumkincpp%2Ftft-feather-prometheus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sumkincpp","download_url":"https://codeload.github.com/sumkincpp/tft-feather-prometheus/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumkincpp%2Ftft-feather-prometheus/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32587819,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T22:12:39.696Z","status":"ssl_error","status_checked_at":"2026-05-03T22:09:10.534Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bme680","circuitpython","prometheus","prometheus-exporter","scd41"],"created_at":"2024-11-25T07:32:00.671Z","updated_at":"2026-05-03T22:33:58.645Z","avatar_url":"https://github.com/sumkincpp.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TFT Feather Prometheus Exporter for BME680 and SCD41\r\n\r\nThis is a simple [CirtcuitPython](https://circuitpython.org/) project that reads data from a BME680 and SCD41 sensor and exposes the metrics data as prometheus endpoint.\r\n\r\n- Board used: Adafruit Feather ESP32-S3 TFT with ESP32S3\r\n- Sensors: BME680, SCD41\r\n\r\n\u003e Note: I had not checked what happens if you don't have display. I think it may work without problems.\r\n\r\n## Features\r\n\r\n- Hot-pluggable I2C Sensors: remove or add sensors without restarting the service\r\n- I2C Senso Auto-Discovery: every 360 seconds, the sensor list is re-discovered\r\n- Watchdog timer: restarts after 15 seconds if freezes\r\n- WiFi Auto-Reconnect (supervisor is reloaded)\r\n- Sensor error detection\r\n- Prometheus metrics (`\u003cIP\u003e/metrics`)\r\n- Supported sensorts: BME680 (0x77), SCD4x (0x62)\r\n\r\nTFT Display shows IP address, Temperature, Humidity and Pressure.\r\n\r\n## Usage\r\n\r\nCreate `_secrets.py` with your WiFi credentials\r\n\r\n```python\r\nsecrets = {\r\n    'ssid' : 'XXXXX',\r\n    'password' : 'YYYYY',\r\n}\r\n```\r\n\r\nCreate a virtual environment and install `circup` (CircuitPython package manager)\r\n\r\n\u003e NOTE: Use [astral-sh/uv](https://github.com/astral-sh/uv) to create the virtual environment.\r\n\u003e \r\n\u003e NOTE: If you don't do this, you will certainly end up messing up your system python installation.\r\n\r\n```bash\r\n\u003e uv venv --seed\r\n\u003e source .venv/bin/activate # Linux/macOS\r\n\u003e .venv\\Scripts\\activate # Windows\r\n\u003e pip install circup\r\n```\r\n\r\nConnect your esp32 and install dependencies to the board.\r\n\r\n```bash\r\n\u003e circup install --auto\r\n'adafruit_bitmap_font' is already installed.\r\n'adafruit_bme680' is already installed.\r\n'adafruit_bus_device' is already installed.\r\n'adafruit_display_text' is already installed.\r\n'adafruit_httpserver' is already installed.\r\n'adafruit_ntp' is already installed.\r\n'adafruit_scd4x' is already installed.\r\nInstalled 'adafruit_ticks'.\r\n```\r\n\r\nCopy the files to the board volume.\r\n\r\nLinux/maOS X (Update the mount point before running!)\r\n\r\n```bash\r\n\u003e cp -r *.py bmeTFT.bmp roundedHeavy-26.bdf /Volumes/CIRCUITPY/\r\n```\r\n\r\nWindows (Update the drive letter before running!)\r\n\r\n```bash\r\n\u003e for %f in (*.py bmeTFT.bmp roundedHeavy-26.bdf) do copy %f D:\\\r\n```\r\n\r\nIf you develop the code, you can also install same packages to you virtual environment.\r\n\r\n```bash\r\nuv pip install -r requirements.txt\r\n```\r\n\r\n## Prometheus Metrics\r\n\r\nMetrics data is available at `\u003cIP\u003e/metrics`\r\n\r\n### Example of sensor data\r\n\r\nExample of metrics data\r\n\r\n```\r\nsensor_temperature_celsius{sensor_type=\"bme680\"} 26.261\r\n# HELP sensor_humidity_percent Relative humidity in percent\r\n# TYPE sensor_humidity_percent gauge\r\nsensor_humidity_percent{sensor_type=\"bme680\"} 47.443\r\n# HELP sensor_pressure_hpa Pressure in hectopascal\r\n# TYPE sensor_pressure_hpa gauge\r\nsensor_pressure_hpa{sensor_type=\"bme680\"} 1010.372\r\n# HELP sensor_gas_ohms Gas resistance in ohms\r\n# TYPE sensor_gas_ohms gauge\r\nsensor_gas_ohms{sensor_type=\"bme680\"} 107925.000\r\n# HELP last_measurement_time Last measurement time\r\n# TYPE last_measurement_time gauge\r\nlast_measurement_time{sensor_type=\"bme680\"} 22.990\r\n# HELP sensor_co2_ppm CO2 in parts per million\r\n# TYPE sensor_co2_ppm gauge\r\n```\r\n\r\nwhen failed\r\n\r\n```\r\n# HELP sensor_is_error Error reading sensor\r\n# TYPE sensor_is_error gauge\r\nsensor_is_error{sensor_type=\"bme680\"} 1.000\r\n# HELP last_measurement_time Last measurement time\r\n# TYPE last_measurement_time gauge\r\nlast_measurement_time{sensor_type=\"bme680\"} 84.529\r\n```\r\n\r\n## Links\r\n\r\nHere are the links reformatted with descriptions:\r\n\r\n* [uv](https://github.com/astral-sh/uv) - An extremely fast Python package installer and resolver\r\n* [circup](https://github.com/adafruit/circup) - A command line tool for managing CircuitPython libraries\r\n* [SCD4X Library Documentation](https://docs.circuitpython.org/projects/scd4x/en/latest/)\r\n* [BME680 Library Documentation](https://docs.circuitpython.org/projects/bme680/en/latest/)\r\n* [BME680 Library Source](https://github.com/adafruit/Adafruit_CircuitPython_BME680)\r\n* [Adafruit SCD-40 and SCD-41](https://learn.adafruit.com/adafruit-scd-40-and-scd-41/python-circuitpython) - tutorial","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsumkincpp%2Ftft-feather-prometheus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsumkincpp%2Ftft-feather-prometheus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsumkincpp%2Ftft-feather-prometheus/lists"}