Fork of the espurna firmware for `mhsw` switches
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

107 lines
3.2 KiB

/*
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();
}