async-httpd-data-collector
Note: This is an older university project and is not actively maintained. It works as-is, but is not extensively tested.
A Python library that acts as an asynchronous gateway between IoT sensor devices and InfluxDB. It fetches JSON readings from a device (like a NodeMCU/ESP8266) over HTTP, parses them, and stores them as time-series data. You can then query the data back as pandas DataFrames.
Started as a university project to get hands-on with async Python,
asyncio, aiohttp, and time-series databases. The hardware side runs on
an arduino-air-state-server -
a NodeMCU board with air quality sensors (MQ135, BMP180, DHT22, DS18B20)
that exposes readings at an HTTP endpoint.
Installation
pip install async-httpd-data-collector
Quick Start
from ahttpdc.read.database_interface import DatabaseInterface
# define which sensors and parameters to track
sensors = {
'bmp180': ['altitude', 'pressure', 'seaLevelPressure', 'temperature'],
'mq135': ['aceton', 'alcohol', 'co', 'co2', 'nh4', 'toulen'],
'ds18b20': ['temperature'],
'dht22': ['humidity', 'temperature'],
}
# connect to InfluxDB and the device
interface = DatabaseInterface(
sensors,
db_host='localhost',
db_port=8086,
db_token='your-influxdb-token',
db_org='your-org',
db_bucket='your-bucket',
srv_ip='192.168.1.100', # device IP
srv_port=80,
handle='circumstances', # HTTP endpoint on the device
)
# start the background daemon - fetches and stores data continuously
interface.daemon.enable()
# query the last 30 days of data as a DataFrame
df = interface.query_historical('-30d')
print(df.head())
# stop the daemon when done
interface.daemon.disable()
How It Works
NodeMCU device async-httpd-data-collector InfluxDB
(sensors) (storage)
| |
|--- HTTP GET /circumstances --> AsyncFetcher |
| | |
| JSONInfluxParser |
| | |
| AsyncCollector --------> |
| |
| AsyncQuery <-------- |
| | |
| DataParser |
| | |
| pandas DataFrame |
The DatabaseInterface is the main entry point. It manages two things:
- DataDaemon - a background process (via
multiprocessing) that periodically fetches sensor data from the device and stores it in InfluxDB. - AsyncQuery - queries InfluxDB and returns results as pandas DataFrames with local timezone-adjusted timestamps.
Querying
# latest reading
df = interface.query_latest()
# last 3 hours
df = interface.query_historical('-3h')
# specific time range
df = interface.query_historical('2024-05-16T00:00:00Z', '2024-05-21T00:00:00Z')
# custom Flux query
df = interface.query_custom_sync('from(bucket:"my-bucket") |> range(start: -1d) |> last()')
Related Projects
- arduino-air-state-server - the NodeMCU firmware that collects sensor readings and serves them over HTTP
- air-quality-data-analysis - Jupyter notebooks with data analysis (heatmaps, correlations, anomaly detection) and SARIMAX time-series forecasting on the collected data
To the only God, be honour and glory for ever and ever.
Metadata
Release files for async-httpd-data-collector 2.0.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| async_httpd_data_collector-2.0.6.tar.gz | 52.9 kB | Without provenance | Details for async_httpd_data_collector-2.0.6.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| async_httpd_data_collector-2.0.6-py3-none-any.whl | Python 3 | none | any | Details for async_httpd_data_collector-2.0.6-py3-none-any.whl |
Total release size: 90.7 kB
Release files / async_httpd_data_collector-2.0.6.tar.gz
| Download URL | async_httpd_data_collector-2.0.6.tar.gz |
|---|---|
| Size | 52.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
87967879b58ec1d16f1a0a042f3b7570e788d3d7cf1e85e9769f1315e8fc3772
|
|
BLAKE2b-256 checksum How to use checksums |
02dc11786b5d9b38b7310299e97f1c1966a293e1010a43926c49ccc0c7ccca2d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.8
|
Release files / async_httpd_data_collector-2.0.6-py3-none-any.whl
| Download URL | async_httpd_data_collector-2.0.6-py3-none-any.whl |
|---|---|
| Size | 37.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b80962d7eb5558b924765688ccabac3648aba16ecd24c504605d553e8513fc37
|
|
BLAKE2b-256 checksum How to use checksums |
bc68d8ed27948f554b0314026071551cc1ce32727c76e710ee41db9a82a61cef
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.8
|
Security for async-httpd-data-collector 2.0.6
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.