weatherstation/firmware/influxdb.ino

202 lines
4.7 KiB
Arduino
Raw Normal View History

#include "config_user.h"
#if INFLUXDB_VERSION == 1
2022-05-22 16:35:10 +02:00
#include <ESP8266Influxdb.h> // https://github.com/hwwong/ESP8266Influxdb
Influxdb _influxdb(INFLUXDB_HOST, INFLUXDB_PORT);
void influxdb_begin() {
// Init variables to influxdb config - doesn't talk to database
_influxdb.opendb(INFLUXDB_DB, INFLUXDB_USER, INFLUXDB_PASS);
}
void pushToInfluxDB(String device, float sensorValues[]) {
uint8_t tries = 0;
boolean addComma = false;
String msg = "weather,device=" + device + " ";
if (!(isnan(sensorValues[SENSOR_TEMPERATURE])))
{
msg += "temperature=" + String(sensorValues[SENSOR_TEMPERATURE]);
addComma = true;
}
if (!(isnan(sensorValues[SENSOR_HUMIDITY])))
{
if (true == addComma)
msg += ",";
msg += "humidity=" + String(sensorValues[SENSOR_HUMIDITY]);
addComma = true;
}
if (!(isnan(sensorValues[SENSOR_LIGHT])))
{
if (true == addComma)
msg += ",";
msg += "light=" + String(sensorValues[SENSOR_LIGHT]);
addComma = true;
}
if (!(isnan(sensorValues[SENSOR_WINDSPEED])))
{
if (true == addComma)
msg += ",";
msg += "windspeed=" + String(sensorValues[SENSOR_WINDSPEED]);
addComma = true;
}
if (!(isnan(sensorValues[SENSOR_PRESSURE])))
{
if (true == addComma)
msg += ",";
msg += "pressure=" + String(sensorValues[SENSOR_PRESSURE]);
addComma = true;
}
if (!(isnan(sensorValues[SENSOR_BAT_VOLTAGE])))
{
if (true == addComma)
msg += ",";
msg += "batvoltage=" + String(sensorValues[SENSOR_BAT_VOLTAGE]);
addComma = true;
}
if (!(isnan(sensorValues[SENSOR_ESAVEMODE])))
{
if (true == addComma)
msg += ",";
msg += "esavemode=" + String(sensorValues[SENSOR_ESAVEMODE]);
addComma = true;
}
if (!(isnan(sensorValues[SENSOR_BATCHARGESTATE])))
{
if (true == addComma)
msg += ",";
msg += "batchargestate=" + String(sensorValues[SENSOR_BATCHARGESTATE]);
addComma = true;
}
#ifdef LOG_MILLIS_TO_INFLUXDB
if (true == addComma)
msg += ",";
msg += "timestamp=" + String(millis());
#endif
debug(msg);
do {
tries++;
_influxdb.write(msg);
} while (_influxdb.response() != DB_SUCCESS and tries < 5);
}
#elif INFLUXDB_VERSION == 2
2022-05-16 08:46:05 +02:00
2022-05-22 16:35:10 +02:00
#include <InfluxDbClient.h> // from bib manager
// Data point
Point sensor(DEVICE_NAME);
// Init variables to influxdb config - doesn't talk to database
InfluxDBClient client(INFLUXDB_URL, INFLUXDB_ORG, INFLUXDB_BUCKET, INFLUXDB_TOKEN);
void influxdb_begin() {
// Check server connection
if (client.validateConnection()) {
// success
#ifdef DEBUG
Serial.print("InfluxDB connect success\n");
#endif
} else {
// fail
#ifdef DEBUG
Serial.print("InfluxDB connect failed\n");
#endif
}
}
void pushToInfluxDB(String device, float sensorValues[]) {
2019-02-02 13:58:47 +01:00
if (!(isnan(sensorValues[SENSOR_TEMPERATURE])))
{
sensor.clearFields();
sensor.addField("temperature", sensorValues[SENSOR_TEMPERATURE]);
_writePoint();
2019-02-02 13:58:47 +01:00
}
if (!(isnan(sensorValues[SENSOR_HUMIDITY])))
{
sensor.clearFields();
sensor.addField("humidity", sensorValues[SENSOR_HUMIDITY]);
_writePoint();
2019-02-02 13:58:47 +01:00
}
if (!(isnan(sensorValues[SENSOR_LIGHT])))
{
sensor.clearFields();
sensor.addField("light", sensorValues[SENSOR_LIGHT]);
_writePoint();
2019-02-02 13:58:47 +01:00
}
if (!(isnan(sensorValues[SENSOR_WINDSPEED])))
{
sensor.clearFields();
sensor.addField("windspeed", sensorValues[SENSOR_WINDSPEED]);
_writePoint();
2019-02-02 13:58:47 +01:00
}
if (!(isnan(sensorValues[SENSOR_PRESSURE])))
{
sensor.clearFields();
sensor.addField("pressure", sensorValues[SENSOR_PRESSURE]);
_writePoint();
2019-02-02 13:58:47 +01:00
}
if (!(isnan(sensorValues[SENSOR_BAT_VOLTAGE])))
{
sensor.clearFields();
sensor.addField("batvoltage", sensorValues[SENSOR_BAT_VOLTAGE]);
_writePoint();
2019-02-02 13:58:47 +01:00
}
if (!(isnan(sensorValues[SENSOR_ESAVEMODE])))
{
sensor.clearFields();
sensor.addField("esavemode", sensorValues[SENSOR_ESAVEMODE]);
_writePoint();
2019-02-02 13:58:47 +01:00
}
if (!(isnan(sensorValues[SENSOR_BATCHARGESTATE])))
{
sensor.clearFields();
sensor.addField("batchargestate", sensorValues[SENSOR_BATCHARGESTATE]);
_writePoint();
2019-02-02 13:58:47 +01:00
}
#ifdef LOG_MILLIS_TO_INFLUXDB
sensor.clearFields();
sensor.addField("timestamp", millis());
_writePoint();
#endif
}
2019-01-27 16:29:58 +01:00
void _writePoint() {
// wait unitl ready
do {
#ifdef DEBUG
Serial.print("InfluxDB: waiting for write ready\n");
#endif
} while (client.canSendRequest() == false);
// Write point
if (!client.writePoint(sensor)) {
#ifdef DEBUG
Serial.print("InfluxDB write failed: ");
Serial.println(client.getLastErrorMessage());
Serial.print("\nErrorcode: ");
Serial.println(client.getLastStatusCode());
Serial.print("\n");
#endif
} else {
#ifdef DEBUG
Serial.print("InfluxDB write done\n");
#endif
}
2019-02-02 14:59:00 +01:00
}
2022-05-16 08:46:05 +02:00
#endif // influxdb version 2 check