{"id":21150792,"url":"https://github.com/cedargrovestudios/circuitpython_airqualitytools","last_synced_at":"2026-02-07T12:01:22.401Z","repository":{"id":139500663,"uuid":"554537881","full_name":"CedarGroveStudios/CircuitPython_AirQualityTools","owner":"CedarGroveStudios","description":"A collection of CircuitPython helpers used for the calculation of PM2.5 and CO2 air quality levels.","archived":false,"fork":false,"pushed_at":"2023-11-30T17:31:05.000Z","size":1741,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-26T02:40:00.601Z","etag":null,"topics":["air-quality","air-quality-index","aqi","circuitpython","circuitpython-community-bundle","iaq","indoor-air-quality","language-translator"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CedarGroveStudios.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2022-10-20T01:20:47.000Z","updated_at":"2025-07-18T21:19:58.000Z","dependencies_parsed_at":"2024-01-01T09:52:30.947Z","dependency_job_id":"7b3fe1dc-180e-4e3d-b644-f9a4b562b2db","html_url":"https://github.com/CedarGroveStudios/CircuitPython_AirQualityTools","commit_stats":{"total_commits":20,"total_committers":3,"mean_commits":6.666666666666667,"dds":0.09999999999999998,"last_synced_commit":"f502787c3e7df180dbafa45489ff49b71cff8190"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/CedarGroveStudios/CircuitPython_AirQualityTools","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CedarGroveStudios%2FCircuitPython_AirQualityTools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CedarGroveStudios%2FCircuitPython_AirQualityTools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CedarGroveStudios%2FCircuitPython_AirQualityTools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CedarGroveStudios%2FCircuitPython_AirQualityTools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CedarGroveStudios","download_url":"https://codeload.github.com/CedarGroveStudios/CircuitPython_AirQualityTools/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CedarGroveStudios%2FCircuitPython_AirQualityTools/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29194000,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T07:37:03.739Z","status":"ssl_error","status_checked_at":"2026-02-07T07:37:03.029Z","response_time":63,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["air-quality","air-quality-index","aqi","circuitpython","circuitpython-community-bundle","iaq","indoor-air-quality","language-translator"],"created_at":"2024-11-20T10:08:07.418Z","updated_at":"2026-02-07T12:01:22.368Z","avatar_url":"https://github.com/CedarGroveStudios.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Introduction\n============\n\n\n\n\n.. image:: https://img.shields.io/discord/327254708534116352.svg\n    :target: https://adafru.it/discord\n    :alt: Discord\n\n\n.. image:: https://github.com/CedarGroveStudios/CircuitPython_AirQualityTools/workflows/Build%20CI/badge.svg\n    :target: https://github.com/CedarGroveStudios/CircuitPython_AirQualityTools/actions\n    :alt: Build Status\n\n\n.. image:: https://img.shields.io/badge/code%20style-black-000000.svg\n    :target: https://github.com/psf/black\n    :alt: Code Style: Black\n\nA collection of CircuitPython helpers used for the calculation of PM2.5 and CO2 air quality levels.\n\n``CO2_IAQ`` calculates the Indoor Air Quality Index (IAQ) as derived from a CO2 ppm\nconcentration measurement. Returns a data valid flag, CO2 input concentration\nvalue, the RGB warning color integer value, and the corresponding US English\ndescription or warning.\n\n``PM25_AQI`` calculates EPA Air Quality Index (AQI) as derived from PM2.5\nparticulate concentration. Returns a data valid flag, calculated air quality\nindex, the RGB warning color integer value, and the corresponding US English\ndescription or warning.\n\n``Translate`` is a collection of description translators. English, Deutsch\n(German), Español (Spanish), Français (French), and Pirate are currently supported.\n\n.. image:: https://github.com/CedarGroveStudios/CircuitPython_AirQualityTools/blob/main/media/WARNING.jpg\n\nDependencies\n=============\nThis driver depends on:\n\n* `Adafruit CircuitPython \u003chttps://github.com/adafruit/circuitpython\u003e`_\n\nPlease ensure all dependencies are available on the CircuitPython filesystem.\nThis is easily achieved by downloading\n`the Adafruit library and driver bundle \u003chttps://circuitpython.org/libraries\u003e`_\nor individual libraries can be installed using\n`circup \u003chttps://github.com/adafruit/circup\u003e`_.\n\n\nInstalling to a Connected CircuitPython Device with Circup\n==========================================================\n\nMake sure that you have ``circup`` installed in your Python environment.\nInstall it with the following command if necessary:\n\n.. code-block:: shell\n\n    pip3 install circup\n\nWith ``circup`` installed and your CircuitPython device connected use the\nfollowing command to install:\n\n.. code-block:: shell\n\n    circup install cedargrove_airqualitytools\n\nOr the following command to update an existing version:\n\n.. code-block:: shell\n\n    circup update\n\nUsage Example\n=============\n\n.. code-block:: python\n\n    from cedargrove_airqualitytools.pm25_aqi import pm25_ppm_to_quality\n    from cedargrove_airqualitytools.co2_iaq import co2_ppm_to_quality\n    from cedargrove_airqualitytools.translate.english_to_francais import interpret\n\n    TRANSLATE = True  # Enable language translator\n\n    # Read some sensor values\n    PM25_CONCENTRATION = 10  # PM2.5 concentration of 10ppm; GOOD AQI\n    CO2_CONCENTRATION = 1450  # CO2 concentration of 1450ppm; POOR IAQ\n\n    # Calculate the quality and description\n    _, aqi_value, _, aqi_desc = pm25_ppm_to_quality(PM25_CONCENTRATION)\n    _, iaq_value, _, iaq_desc = co2_ppm_to_quality(CO2_CONCENTRATION)\n\n    # Print the AQI, description, and translation\n    print(f\"PM2.5 AQI = {aqi_value} : {aqi_desc}\")\n    print(interpret(TRANSLATE, aqi_desc))\n\n    # Print the IAQ, description, and translation\n    print(f\"CO2 IAQ = {iaq_value} : {iaq_desc}\")\n    print(interpret(TRANSLATE, iaq_desc))\n\n\n\nDocumentation\n=============\nAPI documentation for this library can be found on `Read the Docs \u003chttps://github.com/CedarGroveStudios/CircuitPython_AirQualityTools/blob/main/media/pseudo_rtd_cedargrove_airqualitytools.pdf/\u003e`_.\n\nFor information on building library documentation, please check out\n`this guide \u003chttps://learn.adafruit.com/creating-and-sharing-a-circuitpython-library/sharing-our-docs-on-readthedocs#sphinx-5-1\u003e`_.\n\nContributing\n============\n\nContributions are welcome! Please read our `Code of Conduct\n\u003chttps://github.com/CedarGroveStudios/CircuitPython_AirQualityTools/blob/HEAD/CODE_OF_CONDUCT.md\u003e`_\nbefore contributing to help this project stay welcoming.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcedargrovestudios%2Fcircuitpython_airqualitytools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcedargrovestudios%2Fcircuitpython_airqualitytools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcedargrovestudios%2Fcircuitpython_airqualitytools/lists"}