#if ARDUINO >= 100 #include "Arduino.h" #else #include "WProgram.h" #endif #ifdef __AVR_ATtiny85__ #include "TinyWireM.h" #define Wire TinyWireM #else #include #endif #include "ESP_httplib.h" #include "ESP8266WiFi.h" /**************************************************************************/ // Instantiates new ESP class /**************************************************************************/ ESP_HTTP::ESP_HTTP(){ } /**************************************************************************/ // Instantiates new ESP class /**************************************************************************/ boolean ESP_HTTP::begin(void){ header="" + stationName +""; // refresh HTML page header +=""; header +=""; css=""; css+=""; css+=""; css+=""; css+=""; css+=""; css+=""; body="
"; endHTML="
"; return true; } String ESP_HTTP::getStatus(Data data){ // Apply color coding status using data limits String dataclass; if (data.value > data.ul2){ if (data.invertLimits){ dataclass = "info"; } else { dataclass = "danger"; } } else if (data.value > data.ul1){ if (data.invertLimits){ dataclass = "success"; } else { dataclass = "warning"; } } else if (data.value < data.ll2){ if (data.invertLimits){ dataclass = "danger"; } else { dataclass = "info"; } } else if (data.value < data.ll1){ if (data.invertLimits){ dataclass = "warning"; } else { dataclass = "success"; } } else { dataclass = "success"; } return dataclass; } boolean ESP_HTTP::updatePage(DataSet dataset, String packet){ content = "
"; content += "
"; content += "

" + stationName + "

"; content += "

"; dataContent=""; for (int i=0; i < dataset.nData; i++){ if (dataset.data[i].name == "uptime"){ uptime = dataset.data[i].value; continue; } String dataclass=getStatus(dataset.data[i]); if (i==0) { dataContent += "" + " "; } else { dataContent += "" + " "; } } dataContent += "
MeasurementValue
" + dataset.data[i].name + "" + String(dataset.data[i].value) + " " + dataset.data[i].unit + "
" + dataset.data[i].name + "" + String(dataset.data[i].value) + " " + dataset.data[i].unit + "
"; dataContent += "
\ \ \
"; dataContent += "
"; dataContent += "
"; dataContent += ""; dataContent += "
"; dataContent += "
"; dataContent += "
"; dataContent += ""; dataContent += "
"; dataContent += "
"; dataContent += "
"; dataContent += ""; dataContent += "
"; dataContent += "
"; dataContent += ""; dataContent += "

"; buttons = "

JSON Data

"+ packet +"

"; buttons += "
\ \ \
"; buttons += "
"; buttons += "
"; buttons += ""; footer="
Hello from " + stationName + "
Station sensor: Version " + String(version) + "
Uptime: " + String(uptime) + " seconds
"; return true; } String ESP_HTTP::page(void){ String htmlpage = header + css + body + content + dataContent + buttons + jsonButton + endHTML + footer; return htmlpage; } /**************************************************************************/ // Instantiates new ESP class /**************************************************************************/ ESP_httplib::ESP_httplib(){ } /**************************************************************************/ // Instantiates new ESP class /**************************************************************************/ boolean ESP_httplib::begin(const char* ssid, const char* password) { pinMode(RESET_PIN, OUTPUT); digitalWrite(RESET_PIN, HIGH); pinMode(NOTIFY_PIN, OUTPUT); digitalWrite(NOTIFY_PIN, HIGH); http.begin(); // // Connect to WiFi WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Serial.begin(115200); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); // Print the IP address stationIP=WiFi.localIP().toString(); Serial.println(stationIP); // tStart = millis(); return true; } // float uptime(void){ // return 0.001 * ( millis() - tStart); // } void ESP_httplib::triggerActivityLED(void){ digitalWrite(NOTIFY_PIN, LOW); // turn the LED off by making the voltage LOW delay(10); digitalWrite(NOTIFY_PIN, HIGH); // turn the LED off by making the voltage LOW } void ESP_httplib::triggerReset(){ digitalWrite(RESET_PIN, LOW); // turn the LED off by making the voltage LOW } void ESP_httplib::formPacket(DataSet dataset){ String dataPacket = ""; for (int i=0; i < dataset.nData; i++){ dataPacket += "\"" + dataset.data[i].name + "\": { \"value\": " + String(dataset.data[i].value,3) + ", \"class\": \"" + http.getStatus(dataset.data[i]) + "\", \"unit\": \"" + dataset.data[i].unit + "\"}"; if (i != dataset.nData - 1){ dataPacket += ", "; } } String name = "\"name\": \"" + http.stationName + "\""; String address = "\"ip\": \"" + stationIP + "\""; String rssiPacket = "\"rssi\": " + String(WiFi.RSSI()); String network = "\"network\": { " + address + ", " + rssiPacket + "}"; packet = "{ " + name + ", " + network + ", \"data\" : {" + dataPacket + "} }"; }