Dingen tellen in Grafana - Hoe Node-Red gebruiken om de "Group by TAG" nuttig te maken in Influxdb

ADS-B Grafana: Maak lijsten van types, calsigns en meer

Laatst liep ik tegen een beperking van Influxdb met Grafana aan. Ik heb een Influxdb die ik voer met data van mijn ADS-B ontvanger. Deze feed bevat gegevens zoals
Reg: PH-AOA
Type: A332
Wat ik wilde doen is het aantal UNIEKE Airbus A330-203's tellen.

Het einddoel

TIEN pings op PH-AOE A332 moet worden geteld als ÉÉN A320-203 en Geen tien!

Om dat te doen moet je een query maken met "GROUP BY". Dat is gemakkelijk genoeg. Nu komt het probleem: Je kunt geen "GROUP BY" doen in Influxdb die twee waarden verbindt. Je kunt dat alleen doen met een TAG.

Influxdb query - Group by tag: actype

De query ziet er als volgt uit:

SELECT count(distinct("Reg")) FROM "mesg" WHERE $imeFilter GROUP BY time(1d), "actype"

We hebben een TAG nodig om deze items te groeperen

Deze tag "actype" bestaat niet in de datafeed, dus moet hij worden aangemaakt. Ik gebruik node red al om de feed te verzamelen en te organiseren, dus het is logisch om het daar aan te maken.

Node-Red lost het op

De ADS-B ontvanger op de Pi produceert de JSON-feed die er na wat knutselen als volgt uitziet:

Hoe voeg je een TAG-waarde toe voor Influxdb met een Node-Red function node

 

msg.payload=[msg.payload,{tag:waarde}];

 

Voorbeeld

Om twee tags toe te voegen:

  • Voeg de tag "icao24" toe vanuit de payload "msg.payload.Icao"
  • Voeg de tag "actype" toe vanuit de payload "msg.payload.Mdl"

Doe dit:

msg.payload=[msg.payload,{icao24:msg.payload.Icao},{actype:msg.payload.Mdl}];
return msg

 

Je kunt nu de volgende query doen in Grafana:

SELECT count(distinct("Reg")) FROM "mesg" WHERE $imeFilter GROUP BY time(1d), "actype"

Het resultaat is een geaggregeerde lijst van vliegtuigtypes van unieke registraties over een periode van één dag.

0
Zou graag je gedachten willen weten, s.v.p. laat een reactie achter.x