/* I2C MODULE Copyright (C) 2017 by Xose PĂ©rez */ #if INFLUXDB_SUPPORT #include "ESPAsyncTCP.h" #include "SyncClient.h" bool _idb_enabled = false; SyncClient _idb_client; // ----------------------------------------------------------------------------- void _idbWebSocketOnSend(JsonObject& root) { root["idbVisible"] = 1; root["idbHost"] = getSetting("idbHost"); root["idbPort"] = getSetting("idbPort", INFLUXDB_PORT).toInt(); root["idbDatabase"] = getSetting("idbDatabase"); root["idbUsername"] = getSetting("idbUsername"); root["idbPassword"] = getSetting("idbPassword"); } void _idbConfigure() { _idb_enabled = getSetting("idbHost").length() > 0; } // ----------------------------------------------------------------------------- template bool idbSend(const char * topic, T payload) { if (!_idb_enabled) return true; if (!wifiConnected() || (WiFi.getMode() != WIFI_STA)) return true; DEBUG_MSG("[INFLUXDB] Sending\n"); _idb_client.setTimeout(2); if (!_idb_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 (_idb_client.printf(request) > 0) { while (_idb_client.connected() && _idb_client.available() == 0) delay(1); while (_idb_client.available()) _idb_client.read(); if (_idb_client.connected()) _idb_client.stop(); return true; } _idb_client.stop(); DEBUG_MSG("[INFLUXDB] Sent failed\n"); while (_idb_client.connected()) delay(0); return false; } bool idbEnabled() { return _idb_enabled; } void idbSetup() { _idbConfigure(); #if WEB_SUPPORT wsOnSendRegister(_idbWebSocketOnSend); wsOnAfterParseRegister(_idbConfigure); #endif } #endif