Toon posts:

ESP2866 / Influxdb / batched writing

Pagina: 1
Acties:

  • bucovaina89
  • Registratie: Juli 2010
  • Laatst online: 02-02 14:16
Ik ben een beginner in MCU's :)

Ik probeer mijn metingen gebatched naar mijn influxdb server te sturen waar ik per 10 metingen een "push" over de wifi van 10 metingen wil doen om de WiFi en de HDD's van de NAS wat te sparen. Ik reserveer een buffer voor max 50 metingen om mogelijks signal loss wat af te vangen.

Om een of andere manier blijft mijn ESP2866 doodleuk elke meting direct over de wife te gooien. Ik doe hoogstwaarschijnlijk iets mis maar ik zie niet wat.

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <InfluxDb.h>

#include <OneWire.h>
#include <DallasTemperature.h>
#include <ESP8266WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>

#if defined(ESP8266)
  #include <ESP8266WiFi.h>
  #include <ESP8266WiFiMulti.h>
#elif defined(ESP32)
  #include <WiFi.h>
  #include <WiFiMulti.h>
#endif

#define ONE_WIRE_BUS 2
#define INFLUXDB_URL "http://10.10.10.10:8087"
#define INFLUXDB_DB_NAME "buffered"

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

const char* ssid     = "blah";
const char* password = "Nothing_Here";

DeviceAddress tempDeviceAddress;

InfluxDBClient client(INFLUXDB_URL, INFLUXDB_DB_NAME);

void setup(void)                  
{
  Serial.begin(38400);
  sensors.begin();
  WiFi.begin(ssid, password);             // Connect to the network
  Serial.print("Connecting to ");
  Serial.print(ssid); Serial.println(" ...");

  int i = 0;
  while (WiFi.status() != WL_CONNECTED) { // Wait for the Wi-Fi to connect
    delay(1500);
    Serial.print(++i); Serial.print(' ');
  }

  Serial.println('\n');
  Serial.println("Connection established!");
  Serial.print("IP address:\t");
  Serial.println(WiFi.localIP());
  configTzTime("Europe/Brussels", "0.be.pool.ntp.org", "server 2.be.pool.ntp.org");

  WiFiUDP ntpUDP;  
  NTPClient timeClient(ntpUDP, "pool.ntp.org");  

  // Enable lines batching per 10
  client.setWriteOptions(WriteOptions().batchSize(10)); // Set batch size to 10 points
  client.setWriteOptions(WriteOptions().bufferSize(50)); // Allow for 5 failed push attempts
  // Set tags

}

void loop()
{
  sensors.requestTemperatures(); // Send the command to get temperature readings 
  
  // Define data point with measurement name 'device_status`
  Point pointDevice("Testing_buffered_writes");

  
//pointDevice.addTag("TESTING", "ESP8266");
  // Add data
  
  pointDevice.addField("TEST SENSOR", sensors.getTempCByIndex(0));
  Serial.print("Committing data to database: "),
  Serial.print(INFLUXDB_DB_NAME);
  Serial.println(", measurement: Testing_buffered_writes");
  client.writePoint(pointDevice);  
  
  delay(5000);
}

  • bucovaina89
  • Registratie: Juli 2010
  • Laatst online: 02-02 14:16
ah wacht, ik zag net dit:
code:
1
// Must be called before calling any method initiating a connection to server.


hier:
https://cadlab.io/project...src/InfluxDbClient.h/nojs

Dus zet ik de lijn ervoor:
code:
1
2
3
  client.setWriteOptions(WriteOptions().batchSize(10));

InfluxDBClient client(INFLUXDB_URL, INFLUXDB_DB_NAME);


en faalt dat uiteraard:
code:
1
2
exit status 1
'client' does not name a type; did you mean 'Client'?


Hoe zet ik dan client.setWriteOptions(WriteOptions().batchSize(10)); vòòr dat er een databaseconnectie wordt gemaakt?

  • bucovaina89
  • Registratie: Juli 2010
  • Laatst online: 02-02 14:16
Ook hier lees ik iets dat me in de war brengt

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
// Write first point to the buffer
// Buffered write always returns `true`
client.writePoint(point1);
// Write second point to the buffer
client.writePoint(point2);
..
// Write ninth point to the buffer
client.writePoint(point9);
// Writing tenth point will cause flushing buffer and returns actual write result.
if(!client.writePoint(point10)) {
    Serial.print("InfluxDB write failed: ");
    Serial.println(client.getLastErrorMessage());
}


Ik gebruik in de void loop() gewoon 1 variabele: client.writePoint(pointDevice);. Geen array of zo, of bedoelen ze gewoon met point(10) de 10e iteratie?

In ieder geval, bij mij werkt het niet gebatchet. Alle metingen komen door maar dus 1 voor 1.


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee