Ya realizamos la instalación de InfluxDB por lo que ahora crearemos una BBDD.
En este caso, usaremos los datos que nos proporciona OpenWeather, por ejemplo, para una población.
Dicha opción es gratuita, pero debemos realizar un registro para usar la API que veremos mas adelante ya que tiene limitaciones de acceso.
Por ahora, accederemos a InfluxDB como ya vimos en otra entrada y crearemos la BBDD y su respectiva retención de datos y política de indexación:
CREATE DATABASE weather
USE weather
CREATE RETENTION POLICY "30_days" ON "weather" DURATION 30d REPLICATION 1 DEFAULT;
CREATE RETENTION POLICY "6_months" ON "weather" DURATION 26w REPLICATION 1;
CREATE RETENTION POLICY "infinite" ON "weather" DURATION INF REPLICATION 1;
CREATE CONTINUOUS QUERY "cq_10m" ON "weather" BEGIN SELECT mean(*) INTO "lowres_arc.efficiency" FROM "arc.efficiency" GROUP BY time(10m) END
CREATE CONTINUOUS QUERY "cq_smartmeter_hourly" ON "weather" RESAMPLE EVERY 15m BEGIN SELECT min(*), max(*), spread(*) INTO "6_months"."smartmeter_hourly" FROM "30_days"."smartmeter" GROUP BY time(1h),* END
CREATE CONTINUOUS QUERY "cq_smartmeter_daily" ON "weather" RESAMPLE EVERY 1h BEGIN SELECT min(*), max(*), spread(*) INTO "infinite"."smartmeter_daily" FROM "30_days"."smartmeter" GROUP BY time(1d),* END
CREATE CONTINUOUS QUERY "cq_weather_daily" ON "weather" RESAMPLE EVERY 1h BEGIN SELECT min(*), max(*), mean(*) INTO "infinite"."weather_daily" FROM "30_days"."weather" GROUP BY time(1d),* END
exit
Ahora, crearemos un script para recopilar los datos:
INFLUXDB='10.0.1.71'
ID=''
API=''
TEMP=$(curl -ks "http://api.openweathermap.org/data/2.5/weather?id=${ID}&lang=en&units=metric&APPID=${API}" | jq -r '.main.temp')
TIME="$(date +"%d%m%Y%H%M%S")"
curl -i -XPOST "http://${INFLUXDB}:8086/write?db=weather" --data-binary "weather,weather=KNY TEMP=${TEMP}" --user "admin:123456"
y activaremos un crontab cada minuto para recopilar los datos:
* * * * * /scripts/weather.sh
En este punto, ya veremos los datos en la misma BBDD por lo que vamos a mostrar los últimos 15 datos ingestados en la BBDD llamada weather.
> select last(*) from weather
name: weather
time last_TEMP
---- ---------
1715671562820755936 18.4