/* THINGSPEAK MODULE Copyright (C) 2018 by Xose PĂ©rez */ #if THINGSPEAK_SUPPORT #include bool _tspk_enabled = false; WiFiClientSecure _tspk_client; char * _tspk_queue[0]; // ----------------------------------------------------------------------------- void _tspkWebSocketOnSend(JsonObject& root) { root["tspkVisible"] = 1; root["tspkEnabled"] = getSetting("idbEnabled", THINGSPEAK_ENABLED).toInt() == 1; JsonArray& relays = root.createNestedArray("tspkRelays"); for (byte i=0; i 0) { --id; char payload[3]; itoa(status ? 1 : 0, payload, 10); if (_tspk_queue[id]) free(_tspk_queue[id]); _tspk_queue[id] = strdup(payload); if (!enqueue) tspkFlush(); } } bool tspkSendMeasurement(unsigned char index, char * payload, bool enqueue) { if (!_tspk_enabled) return true; unsigned char id = getSetting("tspkMagnitude", index, 0).toInt(); if (id > 0) { --id; if (_tspk_queue[id]) free(_tspk_queue[id]); _tspk_queue[id] = strdup(payload); if (!enqueue) tspkFlush(); } } bool tspkFlush() { if (!_tspk_enabled) return true; if (!wifiConnected() || (WiFi.getMode() != WIFI_STA)) return true; String data; // Walk the fields for (unsigned char id=0; id<8; id++) { if (_tspk_queue[id]) { if (data.length() > 0) data = data + String("&"); data = data + String("field") + String(id+1) + String("=") + String(_tspk_queue[id]); free(_tspk_queue[id]); } } // POST data if any if (data.length() > 0) { data = data + String("&api_key=") + getSetting("tspkKey"); _tspkPost(data); } } bool tspkEnabled() { return _tspk_enabled; } void tspkSetup() { _tspkConfigure(); #if WEB_SUPPORT wsOnSendRegister(_tspkWebSocketOnSend); wsOnAfterParseRegister(_tspkConfigure); #endif } #endif