weatherstation/firmware/libraries/ESP8266_Influxdb/examples/Buckets/Buckets.ino
2022-09-16 09:20:19 +02:00

137 lines
4.1 KiB
C++

/**
* Buckets management Example code for InfluxDBClient library for Arduino
* Enter WiFi and InfluxDB parameters below
*
* This example supports only InfluxDB running from unsecure (http://...)
* For secure (https://...) or Influx Cloud 2 connection check SecureWrite example to
* see how connect using secured connection (https)
**/
#if defined(ESP32)
#include <WiFiMulti.h>
WiFiMulti wifiMulti;
#define DEVICE "ESP32"
#elif defined(ESP8266)
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti wifiMulti;
#define DEVICE "ESP8266"
#endif
#include <InfluxDbClient.h>
// WiFi AP SSID
#define WIFI_SSID "ssid"
// WiFi password
#define WIFI_PASSWORD "password"
// InfluxDB server url. Don't use localhost, always server name or ip address.
// E.g. http://192.168.1.48:8086 (In InfluxDB 2 UI -> Load Data -> Client Libraries),
#define INFLUXDB_URL "influxdb-url"
// InfluxDB 2 server or cloud API authentication token (Use: InfluxDB UI -> Load Data -> Tokens -> <select token>)
// This token must have all buckets permission
#define INFLUXDB_TOKEN "toked-id"
// InfluxDB 2 organization id (Use: InfluxDB UI -> Settings -> Profile -> <name under tile> )
#define INFLUXDB_ORG "org"
// Bucket name that doesn't exist in the db yet
#define INFLUXDB_BUCKET "test-bucket"
void setup() {
Serial.begin(74880);
// Connect WiFi
Serial.println("Connecting to " WIFI_SSID);
WiFi.mode(WIFI_STA);
wifiMulti.addAP(WIFI_SSID, WIFI_PASSWORD);
while (wifiMulti.run() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println();
}
// Creates client, bucket, writes data, verifies data and deletes bucket
void testClient() {
// InfluxDB client instance
InfluxDBClient client(INFLUXDB_URL, INFLUXDB_ORG, INFLUXDB_BUCKET, INFLUXDB_TOKEN);
// Check server connection
if (client.validateConnection()) {
Serial.print("Connected to InfluxDB: ");
Serial.println(client.getServerUrl());
} else {
Serial.print("InfluxDB connection failed: ");
Serial.println(client.getLastErrorMessage());
return;
}
// Get dedicated client for buckets management
BucketsClient buckets = client.getBucketsClient();
// Verify bucket does not exist, or delete it
if(buckets.checkBucketExists(INFLUXDB_BUCKET)) {
Serial.println("Bucket " INFLUXDB_BUCKET " already exists, deleting" );
// get reference
Bucket b = buckets.findBucket(INFLUXDB_BUCKET);
// Delete bucket
buckets.deleteBucket(b.getID());
}
// create a bucket with retention policy one month. Leave out or set zero to infinity
uint32_t monthSec = 30*24*3600;
Bucket b = buckets.createBucket(INFLUXDB_BUCKET, monthSec);
if(!b) {
// some error occurred
Serial.print("Bucket creating error: ");
Serial.println(buckets.getLastErrorMessage());
return;
}
Serial.print("Created bucket: ");
Serial.println(b.toString());
int numPoints = 10;
// Write some points
for(int i=0;i<numPoints;i++) {
Point point("test");
point.addTag("device_name", DEVICE);
point.addField("temperature", random(-20, 40) * 1.1f);
point.addField("humidity", random(10, 90));
if(!client.writePoint(point)) {
Serial.print("Write error: ");
Serial.println(client.getLastErrorMessage());
}
}
// verify written points
String query= "from(bucket: \"" INFLUXDB_BUCKET "\") |> range(start: -1h) |> pivot(rowKey:[\"_time\"],columnKey: [\"_field\"],valueColumn: \"_value\") |> count(column: \"humidity\")";
FluxQueryResult result = client.query(query);
// We expect one row
if(result.next()) {
// Get count value
FluxValue val = result.getValueByName("humidity");
if(val.getLong() != numPoints) {
Serial.print("Test failure, expected ");
Serial.print(numPoints);
Serial.print(" got ");
Serial.println(val.getLong());
} else {
Serial.println("Test successfull");
}
// Advance to the end
result.next();
} else {
Serial.print("Query error: ");
Serial.println(result.getError());
};
result.close();
buckets.deleteBucket(b.getID());
}
void loop() {
// Lets do an E2E test
// call a client test
testClient();
Serial.println("Stopping");
// Stop here, don't loop
while(1) delay(1);
}