{"id":15941463,"url":"https://github.com/carlkidcrypto/purpleair_data_logger","last_synced_at":"2026-02-16T06:04:04.230Z","repository":{"id":47645824,"uuid":"515830341","full_name":"carlkidcrypto/purpleair_data_logger","owner":"carlkidcrypto","description":"A logger that will query purple air sensor(s) for data.  That data can then be stored in a PostGreSQL database, CSV files, or SQLite3 databse.  Find this package on pypi: https://pypi.org/project/purpleair-data-logger/#history  You can grab your own sensor here: https://www2.purpleair.com/","archived":false,"fork":false,"pushed_at":"2026-02-03T04:41:21.000Z","size":6890,"stargazers_count":11,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-03T18:11:11.928Z","etag":null,"topics":["api","database","datalogger","grafana","logger","paa","postgresql","purpleair","purpleair-sensor","purpleairapi","purpleairdatalogger"],"latest_commit_sha":null,"homepage":"https://carlkidcrypto.github.io/purpleair_data_logger/html/index.html","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/carlkidcrypto.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-07-20T04:17:19.000Z","updated_at":"2026-02-03T04:41:23.000Z","dependencies_parsed_at":"2022-08-17T15:01:03.117Z","dependency_job_id":"148bc4f1-633a-465c-9aaf-edf48ceea095","html_url":"https://github.com/carlkidcrypto/purpleair_data_logger","commit_stats":null,"previous_names":["carlkid1499/purpleair_data_logger"],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/carlkidcrypto/purpleair_data_logger","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carlkidcrypto%2Fpurpleair_data_logger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carlkidcrypto%2Fpurpleair_data_logger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carlkidcrypto%2Fpurpleair_data_logger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carlkidcrypto%2Fpurpleair_data_logger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/carlkidcrypto","download_url":"https://codeload.github.com/carlkidcrypto/purpleair_data_logger/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carlkidcrypto%2Fpurpleair_data_logger/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29501379,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-16T05:57:17.024Z","status":"ssl_error","status_checked_at":"2026-02-16T05:56:49.929Z","response_time":115,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["api","database","datalogger","grafana","logger","paa","postgresql","purpleair","purpleair-sensor","purpleairapi","purpleairdatalogger"],"created_at":"2024-10-07T07:04:29.876Z","updated_at":"2026-02-16T06:04:04.224Z","avatar_url":"https://github.com/carlkidcrypto.png","language":"Python","funding_links":["https://www.buymeacoffee.com/carlkidcrypto"],"categories":[],"sub_categories":[],"readme":"# Purple Air Data Logger(s) (PADLs)\n\nA set of data logger(s) that will query purple air sensor(s) for data. That data will then be ingested into a TimeScaleDB PostGreSQL database, CSV files, or a SQLite3 database. To use these tools a PurpleAPI key is required. You can get API keys by sending an email to `contact@purpleair.com` with a first and last name to assign them to.\n\n| [![Behave Tests](https://github.com/carlkidcrypto/purpleair_data_logger/actions/workflows/behave_tests.yml/badge.svg?branch=main)](https://github.com/carlkidcrypto/purpleair_data_logger/actions/workflows/behave_tests.yml) | [![PyPI Distributions](https://github.com/carlkidcrypto/purpleair_data_logger/actions/workflows/build_and_publish_to_pypi.yml/badge.svg?branch=main)](https://github.com/carlkidcrypto/purpleair_data_logger/actions/workflows/build_and_publish_to_pypi.yml) | [![TestPyPI Distributions](https://github.com/carlkidcrypto/purpleair_data_logger/actions/workflows/build_and_publish_to_test_pypi.yml/badge.svg?branch=main)](https://github.com/carlkidcrypto/purpleair_data_logger/actions/workflows/build_and_publish_to_test_pypi.yml) | [![Black](https://github.com/carlkidcrypto/purpleair_data_logger/actions/workflows/black.yml/badge.svg)](https://github.com/carlkidcrypto/purpleair_data_logger/actions/workflows/black.yml) |\n| --------------- | --------------- | --------------- | --------------- |\n\n| [![Pull Request Sphinx Docs Check](https://github.com/carlkidcrypto/purpleair_data_logger/actions/workflows/sphinx_build.yml/badge.svg)](https://github.com/carlkidcrypto/purpleair_data_logger/actions/workflows/sphinx_build.yml) | [![pages-build-deployment](https://github.com/carlkidcrypto/purpleair_data_logger/actions/workflows/pages/pages-build-deployment/badge.svg)](https://github.com/carlkidcrypto/purpleair_data_logger/actions/workflows/pages/pages-build-deployment) | [![CodeQL](https://github.com/carlkidcrypto/purpleair_data_logger/actions/workflows/github-code-scanning/codeql/badge.svg)](https://github.com/carlkidcrypto/purpleair_data_logger/actions/workflows/github-code-scanning/codeql) | [![total download count](https://img.shields.io/github/downloads/carlkidcrypto/purpleair_data_logger/total.svg?style=flat-square\u0026label=all%20downloads)](https://github.com/carlkidcrypto/purpleair_data_logger/releases) |\n| --------------- | --------------- | --------------- | --------------- |\n\n[![latest release download count](https://img.shields.io/github/downloads/carlkidcrypto/purpleair_data_logger/v1.4.1/total.svg?style=flat-square)](https://github.com/carlkidcrypto/purpleair_data_logger/releases/tag/v1.4.1) | | | |\n| --------------- | --------------- | --------------- | --------------- |\n\n## How to Support This Project\n\n\u003ca href=\"https://www.buymeacoffee.com/carlkidcrypto\" target=\"_blank\"\u003e\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/default-orange.png\" alt=\"Buy Me A Coffee\" height=\"41\" width=\"174\"\u003e\u003c/a\u003e\n\n## Installation\n\nYou can install the PurpleAir Data Logger via pip.\n\n```bash\npython3 -m pip install purpleair_data_logger\n```\n\nYou can install PurpleAir Data Logger by cloning down this repo.\n\n```bash\ngit clone https://github.com/carlkidcrypto/purpleair_data_logger.git\ncd purpleair_data_logger\npython3 -m pip install .\n```\n\n## Usage PurpleAirPSQLDataLogger.py\n\n```bash\nusage: PurpleAirPSQLDataLogger.py [-h] [-paa_read_key PAA_READ_KEY] [-paa_write_key PAA_WRITE_KEY] [-paa_single_sensor_request_json_file PAA_SINGLE_SENSOR_REQUEST_JSON_FILE]\n                                  [-paa_multiple_sensor_request_json_file PAA_MULTIPLE_SENSOR_REQUEST_JSON_FILE] [-paa_group_sensor_request_json_file PAA_GROUP_SENSOR_REQUEST_JSON_FILE]\n                                  [-paa_local_sensor_request_json_file PAA_LOCAL_SENSOR_REQUEST_JSON_FILE] [-db_drop_all_tables] -db_usr DB_USR [-db_host DB_HOST] -db DB [-db_port DB_PORT]\n                                  [-db_pwd DB_PWD]\n\nCollect data from PurpleAir sensors and insert into a database!\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -paa_read_key PAA_READ_KEY\n                        The PurpleAirAPI Read key\n  -paa_write_key PAA_WRITE_KEY\n                        The PurpleAirAPI write key\n  -paa_single_sensor_request_json_file PAA_SINGLE_SENSOR_REQUEST_JSON_FILE\n                        The path to a json file containing the parameters to send a single sensor request.\n  -paa_multiple_sensor_request_json_file PAA_MULTIPLE_SENSOR_REQUEST_JSON_FILE\n                        The path to a json file containing the parameters to send a multiple sensor request.\n  -paa_group_sensor_request_json_file PAA_GROUP_SENSOR_REQUEST_JSON_FILE\n                        The path to a json file containing the parameters to send a group sensor request.\n  -paa_local_sensor_request_json_file PAA_LOCAL_SENSOR_REQUEST_JSON_FILE\n                        The path to a json file containing the parameters to send a local sensor request.\n  -db_drop_all_tables   Set this flag if you wish to drop all tables before loading in new data. Useful if a database change has happened. Note: Make sure to provide a db_usr with DROP rights.\n                        WARNING: ALL COLLECTED DATA WILL BE LOST!\n  -db_usr DB_USR        The PSQL database user\n  -db_host DB_HOST      The PSQL database host\n  -db DB                The PSQL database name\n  -db_port DB_PORT      The PSQL database port number\n  -db_pwd DB_PWD        The PSQL database password\n```\n\nUsing it with single sensor requests...\n\n```bash\npython3 -m  purpleair_data_logger.PurpleAirPSQLDataLogger -db_usr USER -db_host localhost -db DB_NAME -db_port 5432 -db_pwd PASSWORD -paa_read_key 12345678-1234-1234-1234-123456789123 -paa_write_key 12345678-1234-1234-1234-123456789123 -paa_single_sensor_request_json_file PATH_TO_YOUR_FILE\n```\n\nUsing it with multiple sensor requests...\n\n```bash\npython3 -m  purpleair_data_logger.PurpleAirPSQLDataLogger -db_usr USER -db_host localhost -db DB_NAME -db_port 5432 -db_pwd PASSWORD -paa_read_key 12345678-1234-1234-1234-123456789123 -paa_write_key 12345678-1234-1234-1234-123456789123 -paa_multiple_sensor_request_json_file PATH_TO_YOUR_FILE\n```\n\n### High Level Design\n\n![PAA_Data_Logger_Software_Stack.drawio.png](/diagrams/PAA_Data_Logger_Software_Stack.drawio.png)\n\n### Getting Started\n\n1. Grab and install Postgresql for your platform. \u003chttps://www.postgresql.org/download/\u003e\n2. Create two database users. One for Grafana with select only privileges. The other for the data logger with only insert/create privileges. \u003chttps://medium.com/coding-blocks/creating-user-database-and-adding-access-on-postgresql-8bfcd2f4a91e\u003e, \u003chttps://www.techonthenet.com/postgresql/grant_revoke.php\u003e\n3. Install and configure TimescaleDB. \u003chttps://docs.timescale.com/install/latest/self-hosted/\u003e\n4. Install and configure Grafana. \u003chttps://grafana.com/docs/grafana/latest/setup-grafana/installation/\u003e\n5. Import into your local Grafana instance the dashboard file found [here](./grafana_dashboards/PurpleAirAPI%20(PAA)%20Data%20Logger%20Grafana%20Dashboard-1660355898051.json)\n\n## Usage PurpleAirCSVDataLogger.py\n\n```bash\nusage: PurpleAirCSVDataLogger.py [-h] [-paa_read_key PAA_READ_KEY] [-paa_write_key PAA_WRITE_KEY] [-paa_single_sensor_request_json_file PAA_SINGLE_SENSOR_REQUEST_JSON_FILE]\n                                 [-paa_multiple_sensor_request_json_file PAA_MULTIPLE_SENSOR_REQUEST_JSON_FILE] [-paa_group_sensor_request_json_file PAA_GROUP_SENSOR_REQUEST_JSON_FILE]\n                                 [-paa_local_sensor_request_json_file PAA_LOCAL_SENSOR_REQUEST_JSON_FILE] -save_file_path SAVE_FILE_PATH\n\nCollect data from PurpleAir sensors and store it in CSV files!\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -paa_read_key PAA_READ_KEY\n                        The PurpleAirAPI Read key\n  -paa_write_key PAA_WRITE_KEY\n                        The PurpleAirAPI write key\n  -paa_single_sensor_request_json_file PAA_SINGLE_SENSOR_REQUEST_JSON_FILE\n                        The path to a json file containing the parameters to send a single sensor request.\n  -paa_multiple_sensor_request_json_file PAA_MULTIPLE_SENSOR_REQUEST_JSON_FILE\n                        The path to a json file containing the parameters to send a multiple sensor request.\n  -paa_group_sensor_request_json_file PAA_GROUP_SENSOR_REQUEST_JSON_FILE\n                        The path to a json file containing the parameters to send a group sensor request.\n  -paa_local_sensor_request_json_file PAA_LOCAL_SENSOR_REQUEST_JSON_FILE\n                        The path to a json file containing the parameters to send a local sensor request.\n  -save_file_path SAVE_FILE_PATH\n                        The path to save CSV files in.\n```\n\nUsing it with single sensor requests...\n\n```bash\npython3 -m  purpleair_data_logger.PurpleAirCSVDataLogger -save_file_path SAVE_FILE_PATH -paa_read_key 12345678-1234-1234-1234-123456789123 -paa_write_key 12345678-1234-1234-1234-123456789123 -paa_single_sensor_request_json_file PATH_TO_YOUR_FILE\n```\n\nUsing it with multiple sensor requests...\n\n```bash\npython3 -m  purpleair_data_logger.PurpleAirCSVDataLogger -save_file_path SAVE_FILE_PATH -paa_read_key 12345678-1234-1234-1234-123456789123 -paa_write_key 12345678-1234-1234-1234-123456789123 -paa_multiple_sensor_request_json_file PATH_TO_YOUR_FILE\n```\n\n## Usage PurpleAirSQLiteDataLogger.py\n\n```bash\nusage: PurpleAirSQLiteDataLogger.py [-h] [-paa_read_key PAA_READ_KEY] [-paa_write_key PAA_WRITE_KEY] [-paa_single_sensor_request_json_file PAA_SINGLE_SENSOR_REQUEST_JSON_FILE]\n                                    [-paa_multiple_sensor_request_json_file PAA_MULTIPLE_SENSOR_REQUEST_JSON_FILE] [-paa_group_sensor_request_json_file PAA_GROUP_SENSOR_REQUEST_JSON_FILE]\n                                    [-paa_local_sensor_request_json_file PAA_LOCAL_SENSOR_REQUEST_JSON_FILE] -db_name DB_NAME\n\nCollect data from PurpleAir sensors and store it a SQLite3 database file!\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -paa_read_key PAA_READ_KEY\n                        The PurpleAirAPI Read key\n  -paa_write_key PAA_WRITE_KEY\n                        The PurpleAirAPI write key\n  -paa_single_sensor_request_json_file PAA_SINGLE_SENSOR_REQUEST_JSON_FILE\n                        The path to a json file containing the parameters to send a single sensor request.\n  -paa_multiple_sensor_request_json_file PAA_MULTIPLE_SENSOR_REQUEST_JSON_FILE\n                        The path to a json file containing the parameters to send a multiple sensor request.\n  -paa_group_sensor_request_json_file PAA_GROUP_SENSOR_REQUEST_JSON_FILE\n                        The path to a json file containing the parameters to send a group sensor request.\n  -paa_local_sensor_request_json_file PAA_LOCAL_SENSOR_REQUEST_JSON_FILE\n                        The path to a json file containing the parameters to send a local sensor request.\n  -db_name DB_NAME      The path and name for the SQLite3 database file! i.e database_name.db\n```\n\nUsing it with single sensor requests...\n\n```bash\npython3 -m  purpleair_data_logger.PurpleAirSQLiteDataLogger -db_name DB_NAME -paa_read_key 12345678-1234-1234-1234-123456789123 -paa_write_key 12345678-1234-1234-1234-123456789123 -paa_single_sensor_request_json_file PATH_TO_YOUR_FILE\n```\n\nUsing it with multiple sensor requests...\n\n```bash\npython3 -m  purpleair_data_logger.PurpleAirSQLiteDataLogger -db_name DB_NAME -paa_read_key 12345678-1234-1234-1234-123456789123 -paa_write_key 12345678-1234-1234-1234-123456789123 -paa_multiple_sensor_request_json_file PATH_TO_YOUR_FILE\n```\n\n## Sample JSON Configuration File(s)\n\nThe following sample json configuration files can be used with any of the data loggers.\n\n### PAA Single Sensor Request Example\n\nOut of the parameters in the file below \"sensor_index\" is required. The others are all optional according to PurpleAirAPI (PAA) documentation. If a field is not being used, mark it 'null' without the single quotes.\n\nSee this [file](./sample_json_config_files/sample_single_sensor_request_json_file.json) for an example.\n\n\u003e Note: `poll_interval_seconds` is also required. It can not be lower than `60`. This is a custom field not defined by the PAA documentation.\n\u003e Note: Refer to the PurpleAirAPI (PAA) documentation for more information. \u003chttps://api.purpleair.com/#api-sensors-get-sensor-data\u003e\n\n### PAA Multiple Sensor Request Example\n\nOut of the parameters in the file below \"fields\" is required. The others are all optional according to PurpleAirAPI (PAA) documentation. If a field is not being used, mark it 'null' without the single quotes.\n\nSee this [file](./sample_json_config_files/sample_multiple_sensor_request_json_file.json) for an example.\n\n\u003e Note: `poll_interval_seconds` is also required. It can not be lower than `60`. This is a custom field not defined by the PAA documentation.\n\u003e Note: Refer to the PurpleAirAPI (PAA) documentation for more information. \u003chttps://api.purpleair.com/#api-sensors-get-sensors-data\u003e\n\nThe below snippet is taken From the PurpleAirAPI (PAA) documentation:\n\n```plain text\n  Field Type Description\n  fields String\n  The 'Fields' parameter specifies which 'sensor data fields' to include in the response. It is a comma separated list with one or more of the following:\n\n  Station information and status fields:\n  name, icon, model, hardware, location_type, private, latitude, longitude, altitude, position_rating, led_brightness, firmware_version, firmware_upgrade, rssi, uptime, pa_latency, memory, last_seen, last_modified, date_created, channel_state, channel_flags, channel_flags_manual, channel_flags_auto, confidence, confidence_manual, confidence_auto\n\n  Environmental fields:\n  humidity, humidity_a, humidity_b, temperature, temperature_a, temperature_b, pressure, pressure_a, pressure_b\n\n  Miscellaneous fields:\n  voc, voc_a, voc_b, ozone1, analog_input\n\n  PM1.0 fields:\n  pm1.0, pm1.0_a, pm1.0_b, pm1.0_atm, pm1.0_atm_a, pm1.0_atm_b, pm1.0_cf_1, pm1.0_cf_1_a, pm1.0_cf_1_b\n\n  PM2.5 fields:\n  pm2.5_alt, pm2.5_alt_a, pm2.5_alt_b, pm2.5, pm2.5_a, pm2.5_b, pm2.5_atm, pm2.5_atm_a, pm2.5_atm_b, pm2.5_cf_1, pm2.5_cf_1_a, pm2.5_cf_1_b\n\n  PM2.5 pseudo (simple running) average fields:\n  pm2.5_10minute, pm2.5_10minute_a, pm2.5_10minute_b, pm2.5_30minute, pm2.5_30minute_a, pm2.5_30minute_b, pm2.5_60minute, pm2.5_60minute_a, pm2.5_60minute_b, pm2.5_6hour, pm2.5_6hour_a, pm2.5_6hour_b, pm2.5_24hour, pm2.5_24hour_a, pm2.5_24hour_b, pm2.5_1week, pm2.5_1week_a, pm2.5_1week_b\n\n  PM10.0 fields:\n  pm10.0, pm10.0_a, pm10.0_b, pm10.0_atm, pm10.0_atm_a, pm10.0_atm_b, pm10.0_cf_1, pm10.0_cf_1_a, pm10.0_cf_1_b\n\n  Visibility fields:\n  scattering_coefficient, scattering_coefficient_a, scattering_coefficient_b, deciviews, deciviews_a, deciviews_b, visual_range, visual_range_a, visual_range_b\n\n  Particle count fields:\n  0.3_um_count, 0.3_um_count_a, 0.3_um_count_b, 0.5_um_count, 0.5_um_count_a, 0.5_um_count_b, 1.0_um_count, 1.0_um_count_a, 1.0_um_count_b, 2.5_um_count, 2.5_um_count_a, 2.5_um_count_b, 5.0_um_count, 5.0_um_count_a, 5.0_um_count_b, 10.0_um_count 10.0_um_count_a, 10.0_um_count_b\n\n  ThingSpeak fields, used to retrieve data from api.thingspeak.com:\n  primary_id_a, primary_key_a, secondary_id_a, secondary_key_a, primary_id_b, primary_key_b, secondary_id_b, secondary_key_b\n\n  For field descriptions, please see the 'sensor data fields'. section.\n\n  location_type optional Number\n  The location_type of the sensors.\n  Possible values are: 0 = Outside or 1 = Inside.\n\n  read_keys optional String\n  A read_key is required for private devices. It is separate to the api_key and each sensor has its own read_key. Submit multiple keys by separating them with a comma (,) character for example: key-one,key-two,key-three.\n\n  show_only optional String\n  A comma (,) separated list of sensor_index values. When provided, the results are limited only to the sensors included in this list.\n\n  modified_since optional long\n  The modified_since parameter causes only sensors modified after the provided time stamp to be included in the results. Using the time_stamp value from a previous call (recommended) will limit results to those with new values since the last request. Using a value of 0 will match sensors modified at any time.\n\n  max_age optional Integer\n  Filter results to only include sensors modified or updated within the last number of seconds. Using a value of 0 will match sensors of any age.\n\n  Default value: 604800\n\n  nwlng optional Number\n  A north west longitude for the bounding box.\n\n  Use a bounding box to limit the sensors returned to a specific geographic area. The bounding box is defined by two points, a north west latitude/longitude and a south east latitude/longitude.\n\n  nwlat optional Number\n  A north west latitude for the bounding box.\n\n  selng optional Number\n  A south east longitude for the bounding box.\n\n  selat optional Number\n  A south east latitude for the bounding box.\n```\n\n### PAA Group Sensor Request Example\n\nOut of the parameters in the file below `sensor_group_name`, `add_sensors_to_group`, and `sensor_index_list` are custom settings not\ndefined in the official PAA documentation. These three setting help drive the `group` request feature.\n\n`sensor_group_name` - This will be the name assigned to your group. If it doesn't exist already, it will be created.\nOtherwise, the first group matching the name will be used.\n\n`add_sensors_to_group` - If true, adds the sensors in the `sensor_index_list`. If false, `sensor_index_list` is ignored.\n\n`sensor_index_list` -  A list of sensor indexes that will be added to your group if they don't already exist.\n\nThe rest of the settings are official PAA settings. They are the same as the [### PAA Multiple Sensor Request Example](#paa-multiple-sensor-request-example). Refer above for details.\n\n\u003e Note: `poll_interval_seconds` is also required. It can not be lower than `60`. This is a custom field not defined by the PAA documentation.\n\nSee this [file](./sample_json_config_files/sample_group_sensor_request_json_file.json) for an example.\n\n### PAA Local Sensor Request Example\n\nOut of the parameters in the file below all are custom settings and are required.\n\n`sensor_ip_list` - A string list of IPv4 addresses with no CIDR.\n\n`poll_interval_seconds` - The poll interval to get information from local sensors on the network.\n\nSee this [file](./sample_json_config_files/sample_local_sensor_request_json_file.json) for an example.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarlkidcrypto%2Fpurpleair_data_logger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcarlkidcrypto%2Fpurpleair_data_logger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarlkidcrypto%2Fpurpleair_data_logger/lists"}