/*
|
|
|
|
RENTALITO
|
|
WEBSERVER MODULE
|
|
|
|
Copyright (C) 2016 by Xose Pérez <xose dot perez at gmail dot com>
|
|
|
|
*/
|
|
|
|
#include <WebSocketsServer.h>
|
|
#include <Hash.h>
|
|
#include <ArduinoJson.h>
|
|
|
|
WebSocketsServer webSocket = WebSocketsServer(81);
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// WEBSOCKETS
|
|
// -----------------------------------------------------------------------------
|
|
|
|
bool webSocketSend(char * payload) {
|
|
//DEBUG_MSG("[WEBSOCKET] Broadcasting '%s'\n", payload);
|
|
webSocket.broadcastTXT(payload);
|
|
}
|
|
|
|
bool webSocketSend(uint8_t num, char * payload) {
|
|
//DEBUG_MSG("[WEBSOCKET] Sending '%s' to #%d\n", payload, num);
|
|
webSocket.sendTXT(num, payload);
|
|
}
|
|
|
|
void webSocketStart(uint8_t num) {
|
|
|
|
char buffer[64];
|
|
sprintf(buffer, "%s %s", APP_NAME, APP_VERSION);
|
|
|
|
DynamicJsonBuffer jsonBuffer;
|
|
JsonObject& root = jsonBuffer.createObject();
|
|
|
|
root["app"] = buffer;
|
|
root["manufacturer"] = String(MANUFACTURER);
|
|
root["device"] = String(DEVICE);
|
|
root["hostname"] = getSetting("hostname", HOSTNAME);
|
|
root["network"] = getNetwork();
|
|
root["ip"] = getIP();
|
|
root["mqttStatus"] = mqttConnected() ? "1" : "0";
|
|
root["mqttServer"] = getSetting("mqttServer", MQTT_SERVER);
|
|
root["mqttPort"] = getSetting("mqttPort", String(MQTT_PORT));
|
|
root["mqttUser"] = getSetting("mqttUser");
|
|
root["mqttPassword"] = getSetting("mqttPassword");
|
|
root["mqttTopic"] = getSetting("mqttTopic", MQTT_TOPIC);
|
|
root["relayStatus"] = digitalRead(RELAY_PIN) == HIGH;
|
|
|
|
#if ENABLE_RF
|
|
root["rfChannel"] = getSetting("rfChannel", String(RF_CHANNEL));
|
|
root["rfDevice"] = getSetting("rfDevice", String(RF_DEVICE));
|
|
#endif
|
|
|
|
#if ENABLE_EMON
|
|
root["pwMainsVoltage"] = getSetting("pwMainsVoltage", String(EMON_MAINS_VOLTAGE));
|
|
root["pwCurrentRatio"] = getSetting("pwCurrentRatio", String(EMON_CURRENT_RATIO));
|
|
#endif
|
|
|
|
JsonArray& wifi = root.createNestedArray("wifi");
|
|
for (byte i=0; i<3; i++) {
|
|
JsonObject& network = wifi.createNestedObject();
|
|
network["ssid"] = getSetting("ssid" + String(i));
|
|
network["pass"] = getSetting("pass" + String(i));
|
|
}
|
|
|
|
String output;
|
|
root.printTo(output);
|
|
webSocket.sendTXT(num, (char *) output.c_str());
|
|
|
|
}
|
|
|
|
void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) {
|
|
|
|
switch(type) {
|
|
case WStype_DISCONNECTED:
|
|
DEBUG_MSG("[WEBSOCKET] #%u disconnected\n", num);
|
|
break;
|
|
case WStype_CONNECTED:
|
|
#if DEBUG_PORT
|
|
{
|
|
IPAddress ip = webSocket.remoteIP(num);
|
|
DEBUG_MSG("[WEBSOCKET] #%u connected, ip: %d.%d.%d.%d, url: %s\n", num, ip[0], ip[1], ip[2], ip[3], payload);
|
|
}
|
|
#endif
|
|
webSocketStart(num);
|
|
break;
|
|
case WStype_TEXT:
|
|
DEBUG_MSG("[WEBSOCKET] #%u sent: %s\n", num, payload);
|
|
break;
|
|
case WStype_BIN:
|
|
DEBUG_MSG("[WEBSOCKET] #%u sent binary length: %u\n", num, length);
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
void webSocketSetup() {
|
|
webSocket.begin();
|
|
webSocket.onEvent(webSocketEvent);
|
|
}
|
|
|
|
void webSocketLoop() {
|
|
webSocket.loop();
|
|
}
|