/* I2C MODULE Copyright (C) 2017 by Xose PĂ©rez */ #if INFLUXDB_SUPPORT #include "ESPAsyncTCP.h" #include "SyncClient.h" bool _influxdb_enabled = false; SyncClient _influx_client; template bool influxDBSend(const char * topic, T payload) { if (!_influxdb_enabled) return true; if (!wifiConnected() || (WiFi.getMode() != WIFI_STA)) return true; DEBUG_MSG("[INFLUXDB] Sending\n"); _influx_client.setTimeout(2); if (!_influx_client.connect(getSetting("idbHost").c_str(), getSetting("idbPort", INFLUXDB_PORT).toInt())) { DEBUG_MSG("[INFLUXDB] Connection failed\n"); return false; } char data[128]; snprintf(data, sizeof(data), "%s,device=%s value=%s", topic, getSetting("hostname").c_str(), String(payload).c_str()); DEBUG_MSG("[INFLUXDB] Data: %s\n", data); char request[256]; snprintf(request, sizeof(request), "POST /write?db=%s&u=%s&p=%s HTTP/1.1\r\nHost: %s:%d\r\nContent-Length: %d\r\n\r\n%s", getSetting("idbDatabase").c_str(), getSetting("idbUsername").c_str(), getSetting("idbPassword").c_str(), getSetting("idbHost").c_str(), getSetting("idbPort", INFLUXDB_PORT).toInt(), strlen(data), data); if (_influx_client.printf(request) > 0) { while (_influx_client.connected() && _influx_client.available() == 0) delay(1); while (_influx_client.available()) _influx_client.read(); if (_influx_client.connected()) _influx_client.stop(); return true; } _influx_client.stop(); DEBUG_MSG("[INFLUXDB] Sent failed\n"); while (_influx_client.connected()) delay(0); return false; } bool influxdbEnabled() { return _influxdb_enabled; } void influxDBConfigure() { _influxdb_enabled = getSetting("idbHost").length() > 0; } void influxDBSetup() { influxDBConfigure(); } #endif