influxdb v1 query opzetten lukt niet.

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • bucovaina89
  • Registratie: Juli 2010
  • Laatst online: 09-06 08:51
Ik probeer mijn ESP8266 een query te laten doen op mijn influxdb server die de P1 waardes van onze digitale meter bij houdt. Ik doe ergens iets mis want ik krijg een error boodschap op de OLED:
code:
1
{"error"}:"type error 1:1-1:7: undefined identifier \"select\""}


Ik vermoed dat ik iets mis doe bij het opzetten van de query maar weet niet meteen wat. Het zit hem volgens mij al bij [mono]select[/code]. Ik heb al [mono]SELECT[/code] geprobeerd en de backslash escaping en de quotes uit CURRENT_ELECTRICITY_USAGE gehaald, maar hetzelfde probleem.
code:
1
String query = "select \"CURRENT_ELECTRICITY_USAGE\" from \"P1 values\" GROUP BY * ORDER BY DESC LIMIT 1";


Meer context:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
...
...
...

#define INFLUXDB_URL "http://10.10.10.3:8086"
#define INFLUXDB_DB_NAME "elektriciteit"

...
...
...


InfluxDBClient client(INFLUXDB_URL, INFLUXDB_DB_NAME);
void loop()
{
  /*
   * The database elektriciteit has a measurement "P1 values". That measurement has the following structure:
   * time,CURRENT_ELECTRICITY_DELIVERY,CURRENT_ELECTRICITY_USAGE,DEVICE_TYPE,ELECTRICITY_DELIVERED_TARIFF_1,ELECTRICITY_DELIVERED_TARIFF_2,ELECTRICITY_USED_TARIFF_1,ELECTRICITY_USED_TARIFF_2,INSTANTANEOUS_ACTIVE_POWER_L1_NEGATIVE,INSTANTANEOUS_ACTIVE_POWER_L1_POSITIVE,INSTANTANEOUS_CURRENT_L1
   * 
   * So the query last value of P1 to get electricity usage would look like this
   * select "CURRENT_ELECTRICITY_USAGE" from "P1 values" GROUP BY * ORDER BY DESC LIMIT 1
  */

String query = "select \"CURRENT_ELECTRICITY_USAGE\" from \"P1 values\" GROUP BY * ORDER BY DESC LIMIT 1";

FluxQueryResult result = client.query(query);

if(result.getError() != "") {
  display.clearDisplay();
  display.setCursor(0,0);
  display.println(result.getError());
  display.display();
}
delay(1 * 1000);
}


Hij geraakt in ieder geval geconnecteerd op de influx database server. Ik heb eerder een andere error gekregen dat er iets niet juist stond van influx-enabled. Dat had ik veranderd en tijdens herstarten zei de oled dat hij niet op de server geconnecteerd geraakte. Toen de server herstart was plots weer wel, maar kreeg ik natuurlijk deze error te zien.

[ Voor 4% gewijzigd door bucovaina89 op 27-01-2022 07:27 ]


Acties:
  • 0 Henk 'm!

  • bucovaina89
  • Registratie: Juli 2010
  • Laatst online: 09-06 08:51
Wacht, ik heb een flauw vermoeden dat ik gewoon niet de juiste query language gebruik.

https://github.com/tobias...basic-code-for-influxdb-1
InfluxDB 2 and InfluxDB 1.7+ (with enabled flux) uses Flux to process and query data.
Er wordt verwezen naar hier:
https://www.influxdata.com/products/flux/

Probeer ik toevallig InfluxQL te gebruiken waar ik Flux moet gebruiken?

Acties:
  • 0 Henk 'm!

  • Jesse-
  • Registratie: Oktober 2015
  • Laatst online: 04-07 15:28
bucovaina89 schreef op donderdag 27 januari 2022 @ 07:34:
Wacht, ik heb een flauw vermoeden dat ik gewoon niet de juiste query language gebruik.

https://github.com/tobias...basic-code-for-influxdb-1

[...]


Er wordt verwezen naar hier:
https://www.influxdata.com/products/flux/

Probeer ik toevallig InfluxQL te gebruiken waar ik Flux moet gebruiken?
Welke versie is je InfluxDB? Als het 2.0 of hoger is gebruik je inderdaad de verkeerde query language.

Acties:
  • 0 Henk 'm!

  • bucovaina89
  • Registratie: Juli 2010
  • Laatst online: 09-06 08:51
Ik zit nu even niet thuis maar het is een 1.8 als ik me niet vergis. Iig geen 2.0 want daarmee kreeg ik mijn ESP8266 niet aan de praat.

Acties:
  • 0 Henk 'm!

  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 23:33

SA007

Moderator Tweaking
Move naar DEV, dit heeft niks met de esp8266 zelf te maken.

Acties:
  • 0 Henk 'm!

  • bucovaina89
  • Registratie: Juli 2010
  • Laatst online: 09-06 08:51
OK, ik denk dat ik een halve stap verder ben geraakt. Met onderstaande code wordt er op z'n minst al geen error meer gegooid. Dat is al beter dan ervoor.

code:
1
2
3
 String query = "from(bucket: \"elektriciteit\") |> range(start: -1h) |> filter(fn: (r) => r._measurement == \"P1\ values\" and r._field == \"CURRENT_ELEKTRICITY_USAGE\"";
 query += "and r.device == \"ESP32\")";
 query += "|> max()";


Nu nog een waarde eruit halen en op de OLED krijgen en dan ben ik blij 8)

Acties:
  • 0 Henk 'm!

  • bucovaina89
  • Registratie: Juli 2010
  • Laatst online: 09-06 08:51
't is een gevecht geweest maar het laatste probleem was een data type mismatch. Ik zag heel de tijd '0' als waarde. SHOW FIELD KEYS ON "elektriciteit" gaf aan dat ik een float in tabel value terug kreeg, maar er blijkt niet direct een methode te zijn om een float terug te krijgen. Dus dan maar getRawValue() gebruikt en dat dan in een String gezet.

code:
1
2
3
  String query = "from(bucket: \"elektriciteit\") |> range(start: -1m) |> filter(fn: (r) => r._measurement == \"cv\" and r._field == \"value\"";
  query += "and r.host == \"stats\")";
  query += "|> last()";
Pagina: 1