##### Usage ##### :: $ luftdatenpumpe --help Usage: luftdatenpumpe networks [--network=] luftdatenpumpe stations --network= [options] [--target=]... luftdatenpumpe readings --network= [options] [--target=]... [--timespan=] luftdatenpumpe database --network= [--target=]... [--create-views] [--grant-user=] [--drop-data] [--drop-tables] [--drop-database] luftdatenpumpe grafana --network= --kind= --name= [--variables=] [--fields=] luftdatenpumpe --version luftdatenpumpe (-h | --help) Options: --network= Which sensor network/database to use. Inquire available networks by running "luftdatenpumpe networks". --source= Data source, either "api" or "file://" [default: api]. --country= Filter data by given country codes, comma-separated. --station= Filter data by given location ids, comma-separated. --sensor= Filter data by given sensor ids, comma-separated. --sensor-type= Filter data by given sensor types, comma-separated. --timespan= Filter readings by time range, only for SOS API (e.g. IRCELINE). --reverse-geocode Compute geographic address using the Nominatim reverse geocoder --target= Data output target --target-fieldmap= Field name mapping for "json+flex" target --disable-nominatim-cache Disable Nominatim reverse geocoder cache --progress Show progress bar --version Show version information --dry-run Skip publishing to MQTT bus --debug Enable debug messages -h --help Show this screen Network list: # Display list of supported sensor networks luftdatenpumpe networks Acquire stations (LDI): # Display metadata for given countries in JSON format luftdatenpumpe stations --network=ldi --country=BE,NL,LU # Display metadata for given stations in JSON format, with reverse geocoding luftdatenpumpe stations --network=ldi --station=49,1033 --reverse-geocode Acquire readings (LDI): # Display measurement readings for specific station identifiers. luftdatenpumpe readings --network=ldi --station=49,1033 --reverse-geocode # Display measurement readings for specific sensor identifiers. luftdatenpumpe readings --network=ldi --sensor=417 Acquire stations and readings (IRCELINE): luftdatenpumpe stations --network=irceline luftdatenpumpe readings --network=irceline --station=1030,1751 --reverse-geocode Acquire stations and readings (OpenAQ): luftdatenpumpe stations --network=openaq luftdatenpumpe readings --network=openaq --country=IN,PK Heads up: From now on, let's pretend we always want to operate on data coming from the sensor network "luftdaten.info", which is identified by "--network=ldi". To make this more convenient, we use an environment variable to signal this to subsequent invocations of "luftdatenpumpe" by running:: export LDP_NETWORK=ldi Getting started: # Display metadata for given stations in JSON format, with reverse geocoding luftdatenpumpe stations --station=49,1033 --reverse-geocode --target=json+stream://sys.stderr Convert stations into format suitable for Grafana: # Display list of stations in JSON format made of value/text items, suitable for use as a Grafana JSON data source luftdatenpumpe stations --station=49,1033 --reverse-geocode --target=json.grafana.vt+stream://sys.stdout # Display list of stations in JSON format made of key/name items, suitable for use as a mapping in Panodata Map Panel luftdatenpumpe stations --station=49,1033 --reverse-geocode --target=json.grafana.kn+stream://sys.stdout Write stations into / read stations from RDBMS database: # Store list of stations and metadata into RDBMS database (PostgreSQL) luftdatenpumpe stations --station=49,1033 --reverse-geocode --target=postgresql://luftdatenpumpe@localhost/weatherbase # Read station information from RDBMS database (PostgreSQL) and format for Panodata Map Panel luftdatenpumpe stations --source=postgresql://luftdatenpumpe@localhost/weatherbase --target=json.grafana.kn+stream://sys.stdout Live data examples (InfluxDB): # Store into InfluxDB running on "localhost" luftdatenpumpe readings --station=49,1033 --target=influxdb://localhost/luftdaten_info # Store into InfluxDB, with UDP luftdatenpumpe readings --station=49,1033 --target=udp+influxdb://localhost:4445/luftdaten_info # Store into InfluxDB, with authentication luftdatenpumpe readings --station=49,1033 --target=influxdb://luftdatenpumpe@localhost/luftdaten_info LDI CSV archive data examples (InfluxDB): # Mirror archive of luftdaten.info, limiting to 2015 only wget --mirror --continue --no-host-directories --directory-prefix=/var/spool/archive.luftdaten.info --accept-regex='2015' http://archive.luftdaten.info/ # Ingest station information from CSV archive files, store into PostgreSQL luftdatenpumpe stations --network=ldi --source=file:///var/spool/archive.luftdaten.info --target=postgresql://luftdatenpumpe@localhost/weatherbase --reverse-geocode --progress # Ingest readings from CSV archive files, store into InfluxDB luftdatenpumpe readings --network=ldi --source=file:///var/spool/archive.luftdaten.info --target=influxdb://luftdatenpumpe@localhost/luftdaten_info --progress # Ingest most early readings luftdatenpumpe readings --network=ldi --source=file:///var/spool/archive.luftdaten.info/2015-10-* # Ingest most early PMS sensors luftdatenpumpe readings --network=ldi --source=file:///var/spool/archive.luftdaten.info/2017-1*/*pms*.csv Live data examples (MQTT): # Publish data to topic "luftdaten.info" at MQTT broker running on "localhost" luftdatenpumpe readings --station=49,1033 --target=mqtt://localhost/luftdaten.info # MQTT publishing, with authentication luftdatenpumpe readings --station=49,1033 --target=mqtt://username:password@localhost/luftdaten.info Combined examples: # Write stations to STDERR and PostgreSQL luftdatenpumpe stations --station=49,1033 --target=json+stream://sys.stderr --target=postgresql://luftdatenpumpe@localhost/weatherbase # Write readings to STDERR, MQTT, and InfluxDB luftdatenpumpe readings --station=49,1033 --target=json+stream://sys.stderr --target=mqtt://localhost/luftdaten.info --target=influxdb://luftdatenpumpe@localhost/luftdaten_info