mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-09 01:09:51 +03:00
1.9.0 web - new implementation
This commit is contained in:
19
tools/webfilesbuilder/gulp.js
Normal file
19
tools/webfilesbuilder/gulp.js
Normal file
@@ -0,0 +1,19 @@
|
||||
/* eslint-disable no-path-concat */
|
||||
|
||||
'use strict';
|
||||
|
||||
var path = require('path');
|
||||
process.env.NODE_PATH = (process.env.NODE_PATH || '').split(path.delimiter)
|
||||
.filter((p) => p).concat(__dirname + '/node_modules').join(path.delimiter);
|
||||
require('module')._initPaths(); // eslint-disable-line no-underscore-dangle
|
||||
|
||||
require('gulp');
|
||||
require('gulp-concat');
|
||||
require('gulp/bin/gulp.js');
|
||||
require('fs');
|
||||
require('gulp-gzip');
|
||||
require('gulp-flatmap');
|
||||
require('path');
|
||||
require('gulp-htmlmin');
|
||||
require('gulp-uglify');
|
||||
require('pump');
|
||||
9
tools/webfilesbuilder/gulp.meta.js
Normal file
9
tools/webfilesbuilder/gulp.meta.js
Normal file
@@ -0,0 +1,9 @@
|
||||
'use strict';
|
||||
|
||||
module.exports = function () {
|
||||
return {
|
||||
packages: ['gulp-concat', 'gulp-htmlmin', 'gulp-flatmap', 'gulp-gzip', 'gulp-uglify', 'fs', 'path', 'pump'],
|
||||
deployFiles: ['gulpfile.js'],
|
||||
take: 'last-line'
|
||||
};
|
||||
};
|
||||
232
tools/webfilesbuilder/gulpfile.js
Normal file
232
tools/webfilesbuilder/gulpfile.js
Normal file
@@ -0,0 +1,232 @@
|
||||
var gulp = require('gulp');
|
||||
var fs = require('fs');
|
||||
var concat = require('gulp-concat');
|
||||
var gzip = require('gulp-gzip');
|
||||
var flatmap = require('gulp-flatmap');
|
||||
var path = require('path');
|
||||
var htmlmin = require('gulp-htmlmin');
|
||||
var uglify = require('gulp-uglify');
|
||||
var pump = require('pump');
|
||||
|
||||
|
||||
gulp.task('myespjs-concat', function () {
|
||||
return gulp.src(['../../src/websrc/myesp.js', '../../src/custom.js'])
|
||||
.pipe(concat({
|
||||
path: 'myesp.js',
|
||||
stat: {
|
||||
mode: 0666
|
||||
}
|
||||
}))
|
||||
.pipe(gulp.dest('../../src/websrc/temp/js'))
|
||||
});
|
||||
|
||||
gulp.task('myespjsminify', ["myespjs-concat"], function (cb) {
|
||||
pump([
|
||||
gulp.src('../../src/websrc/temp/js/myesp.js'),
|
||||
uglify(),
|
||||
gulp.dest('../../src/websrc/temp/js/ugly'),
|
||||
],
|
||||
cb
|
||||
);
|
||||
});
|
||||
|
||||
gulp.task("myespjsgz", ["myespjsminify"], function () {
|
||||
return gulp.src("../../src/websrc/temp/js/ugly/myesp.js")
|
||||
.pipe(gzip({
|
||||
append: true
|
||||
}))
|
||||
.pipe(gulp.dest('../../src/websrc/temp/gzipped/js'));
|
||||
});
|
||||
|
||||
gulp.task('myespjsgzh', ["myespjsgz"], function () {
|
||||
var source = "../../src/websrc/temp/gzipped/js/" + "myesp.js.gz";
|
||||
var destination = "../../src/webh/" + "myesp.js.gz.h";
|
||||
|
||||
var wstream = fs.createWriteStream(destination);
|
||||
wstream.on('error', function (err) {
|
||||
console.log(err);
|
||||
});
|
||||
|
||||
var data = fs.readFileSync(source);
|
||||
|
||||
wstream.write('#define myesp_js_gz_len ' + data.length + '\n');
|
||||
wstream.write('const uint8_t myesp_js_gz[] PROGMEM = {')
|
||||
|
||||
for (i = 0; i < data.length; i++) {
|
||||
if (i % 1000 == 0) wstream.write("\n");
|
||||
wstream.write('0x' + ('00' + data[i].toString(16)).slice(-2));
|
||||
if (i < data.length - 1) wstream.write(',');
|
||||
}
|
||||
|
||||
wstream.write('\n};')
|
||||
wstream.end();
|
||||
});
|
||||
|
||||
gulp.task("scripts", ["scripts-concat"], function () {
|
||||
|
||||
var source = "../../src/websrc/temp/gzipped/js/" + "required.js.gz";
|
||||
var destination = "../../src/webh/" + "required.js.gz.h";
|
||||
|
||||
var wstream = fs.createWriteStream(destination);
|
||||
wstream.on('error', function (err) {
|
||||
console.log(err);
|
||||
});
|
||||
|
||||
var data = fs.readFileSync(source);
|
||||
|
||||
wstream.write('#define required_js_gz_len ' + data.length + '\n');
|
||||
wstream.write('const uint8_t required_js_gz[] PROGMEM = {')
|
||||
|
||||
for (i = 0; i < data.length; i++) {
|
||||
if (i % 1000 == 0) wstream.write("\n");
|
||||
wstream.write('0x' + ('00' + data[i].toString(16)).slice(-2));
|
||||
if (i < data.length - 1) wstream.write(',');
|
||||
}
|
||||
|
||||
wstream.write('\n};')
|
||||
wstream.end();
|
||||
|
||||
});
|
||||
|
||||
gulp.task('scripts-concat', ["myespjsgzh"], function () {
|
||||
return gulp.src(['../../src/websrc/3rdparty/js/jquery-1.12.4.min.js', '../../src/websrc/3rdparty/js/bootstrap-3.3.7.min.js', '../../src/websrc/3rdparty/js/footable-3.1.6.min.js'])
|
||||
.pipe(concat({
|
||||
path: 'required.js',
|
||||
stat: {
|
||||
mode: 0666
|
||||
}
|
||||
}))
|
||||
.pipe(gulp.dest('../../src/websrc/temp/js/'))
|
||||
.pipe(gzip({
|
||||
append: true
|
||||
}))
|
||||
.pipe(gulp.dest('../../src/websrc/temp/gzipped/js/'));
|
||||
});
|
||||
|
||||
gulp.task('styles-concat', function () {
|
||||
return gulp.src(['../../src/websrc/3rdparty/css/bootstrap-3.3.7.min.css', '../../src/websrc/3rdparty/css/footable.bootstrap-3.1.6.min.css', '../../src/websrc/3rdparty/css/sidebar.css'])
|
||||
.pipe(concat({
|
||||
path: 'required.css',
|
||||
stat: {
|
||||
mode: 0666
|
||||
}
|
||||
}))
|
||||
.pipe(gulp.dest('../../src/websrc/temp/css/'))
|
||||
.pipe(gzip({
|
||||
append: true
|
||||
}))
|
||||
.pipe(gulp.dest('../../src/websrc/temp/gzipped/css/'));
|
||||
});
|
||||
|
||||
gulp.task("styles", ["styles-concat"], function () {
|
||||
|
||||
var source = "../../src/websrc/temp/gzipped/css/" + "required.css.gz";
|
||||
var destination = "../../src/webh/" + "required.css.gz.h";
|
||||
|
||||
var wstream = fs.createWriteStream(destination);
|
||||
wstream.on('error', function (err) {
|
||||
console.log(err);
|
||||
});
|
||||
|
||||
var data = fs.readFileSync(source);
|
||||
|
||||
wstream.write('#define required_css_gz_len ' + data.length + '\n');
|
||||
wstream.write('const uint8_t required_css_gz[] PROGMEM = {')
|
||||
|
||||
for (i = 0; i < data.length; i++) {
|
||||
if (i % 1000 == 0) wstream.write("\n");
|
||||
wstream.write('0x' + ('00' + data[i].toString(16)).slice(-2));
|
||||
if (i < data.length - 1) wstream.write(',');
|
||||
}
|
||||
|
||||
wstream.write('\n};')
|
||||
wstream.end();
|
||||
|
||||
});
|
||||
|
||||
gulp.task("fontgz", function () {
|
||||
return gulp.src("../../src/websrc/3rdparty/fonts/*.*")
|
||||
.pipe(gulp.dest("../../src/websrc/temp/fonts/"))
|
||||
.pipe(gzip({
|
||||
append: true
|
||||
}))
|
||||
.pipe(gulp.dest('../../src/websrc/temp/gzipped/fonts/'));
|
||||
});
|
||||
|
||||
gulp.task("fonts", ["fontgz"], function () {
|
||||
return gulp.src("../../src/websrc/temp/gzipped/fonts/*.*")
|
||||
.pipe(flatmap(function (stream, file) {
|
||||
var filename = path.basename(file.path);
|
||||
var wstream = fs.createWriteStream("../../src/webh/" + filename + ".h");
|
||||
wstream.on("error", function (err) {
|
||||
gutil.log(err);
|
||||
});
|
||||
var data = file.contents;
|
||||
wstream.write("#define " + filename.replace(/\.|-/g, "_") + "_len " + data.length + "\n");
|
||||
wstream.write("const uint8_t " + filename.replace(/\.|-/g, "_") + "[] PROGMEM = {")
|
||||
|
||||
for (i = 0; i < data.length; i++) {
|
||||
if (i % 1000 == 0) wstream.write("\n");
|
||||
wstream.write('0x' + ('00' + data[i].toString(16)).slice(-2));
|
||||
if (i < data.length - 1) wstream.write(',');
|
||||
}
|
||||
|
||||
wstream.write("\n};")
|
||||
wstream.end();
|
||||
|
||||
return stream;
|
||||
}));
|
||||
});
|
||||
|
||||
gulp.task('html-concat', function () {
|
||||
return gulp.src(['../../src/websrc/myesp.htm', '../../src/custom.htm'])
|
||||
.pipe(concat({
|
||||
path: 'myesp.html',
|
||||
stat: {
|
||||
mode: 0666
|
||||
}
|
||||
}))
|
||||
.pipe(htmlmin({ collapseWhitespace: true, minifyJS: true }))
|
||||
.pipe(gulp.dest('../../src/websrc/temp/'))
|
||||
.pipe(gzip({
|
||||
append: true
|
||||
}))
|
||||
.pipe(gulp.dest('../../src/websrc/temp/gzipped/'));
|
||||
});
|
||||
|
||||
gulp.task('htmlsprep', ["html-concat"], function () {
|
||||
return gulp.src('../../src/websrc/index.html')
|
||||
.pipe(htmlmin({ collapseWhitespace: true, minifyJS: true }))
|
||||
.pipe(gulp.dest('../../src/websrc/temp/'))
|
||||
.pipe(gzip({
|
||||
append: true
|
||||
}))
|
||||
.pipe(gulp.dest('../../src/websrc/temp/gzipped/'));
|
||||
});
|
||||
|
||||
gulp.task("htmls", ["htmlsprep"], function () {
|
||||
return gulp.src("../../src/websrc/temp/gzipped/*.gz")
|
||||
.pipe(flatmap(function (stream, file) {
|
||||
var filename = path.basename(file.path);
|
||||
var wstream = fs.createWriteStream("../../src/webh/" + filename + ".h");
|
||||
wstream.on("error", function (err) {
|
||||
gutil.log(err);
|
||||
});
|
||||
var data = file.contents;
|
||||
wstream.write("#define " + filename.replace(/\.|-/g, "_") + "_len " + data.length + "\n");
|
||||
wstream.write("const uint8_t " + filename.replace(/\.|-/g, "_") + "[] PROGMEM = {")
|
||||
|
||||
for (i = 0; i < data.length; i++) {
|
||||
if (i % 1000 == 0) wstream.write("\n");
|
||||
wstream.write('0x' + ('00' + data[i].toString(16)).slice(-2));
|
||||
if (i < data.length - 1) wstream.write(',');
|
||||
}
|
||||
|
||||
wstream.write("\n};")
|
||||
wstream.end();
|
||||
|
||||
return stream;
|
||||
}));
|
||||
});
|
||||
|
||||
gulp.task('default', ['scripts', 'styles', "fonts", "htmls"]);
|
||||
2715
tools/webfilesbuilder/package-lock.json
generated
Normal file
2715
tools/webfilesbuilder/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
24
tools/webfilesbuilder/package.json
Normal file
24
tools/webfilesbuilder/package.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "uglifier",
|
||||
"version": "0.0.1",
|
||||
"description": "Combine all js and css files into one and gzip them for the myESP project",
|
||||
"main": "unglify.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"start": "gulp"
|
||||
},
|
||||
"author": "proddy",
|
||||
"license": "UNLICENSED",
|
||||
"dependencies": {
|
||||
"gulp-concat": "^2.6.1",
|
||||
"gulp-flatmap": "^1.0.2",
|
||||
"gulp-gzip": "^1.4.2",
|
||||
"gulp-htmlmin": "^4.0.0",
|
||||
"gulp-uglify": "^3.0.2",
|
||||
"pump": "^3.0.0"
|
||||
},
|
||||
"bin": "node_modules\\gulp\\bin\\gulp.js",
|
||||
"devDependencies": {
|
||||
"gulp": "^3.9.1"
|
||||
}
|
||||
}
|
||||
27
tools/wsemulator/package-lock.json
generated
Normal file
27
tools/wsemulator/package-lock.json
generated
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"name": "wsemulator",
|
||||
"version": "0.0.1",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"async-limiter": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
|
||||
"integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
||||
},
|
||||
"ws": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz",
|
||||
"integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==",
|
||||
"requires": {
|
||||
"async-limiter": "~1.0.0",
|
||||
"safe-buffer": "~5.1.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
14
tools/wsemulator/package.json
Normal file
14
tools/wsemulator/package.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"name": "wsemulator",
|
||||
"version": "0.0.1",
|
||||
"description": "Emulate websocket communication ",
|
||||
"main": "wserver.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "proddy",
|
||||
"license": "UNLICENSED",
|
||||
"dependencies": {
|
||||
"ws": "^4.1.0"
|
||||
}
|
||||
}
|
||||
15
tools/wsemulator/run.ps1
Normal file
15
tools/wsemulator/run.ps1
Normal file
@@ -0,0 +1,15 @@
|
||||
$ScriptDir = Split-Path $script:MyInvocation.MyCommand.Path
|
||||
|
||||
# build web
|
||||
$webfilesbuilder = $ScriptDir + "\..\webfilesbuilder"
|
||||
node $webfilesbuilder\node_modules\gulp\bin\gulp.js --cwd $webfilesbuilder
|
||||
|
||||
# run chrome
|
||||
$pathToChrome = 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
|
||||
$tempFolder = '--user-data-dir=c:\temp'
|
||||
$startmode = '--remote-debugging-port=9222 --disable-web-security --disable-gpu'
|
||||
$startPage = $ScriptDir + "\..\..\src\websrc\temp\index.html"
|
||||
Start-Process -FilePath $pathToChrome -ArgumentList $tempFolder, $startmode, $startPage
|
||||
|
||||
# run ws fake server
|
||||
node wserver.js
|
||||
7
tools/wsemulator/run.sh
Normal file
7
tools/wsemulator/run.sh
Normal file
@@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
node $PWD/../webfilesbuilder/node_modules/gulp/bin/gulp.js --cwd $PWD/../webfilesbuilder
|
||||
|
||||
open -na Google\ Chrome --args --disable-web-security --remote-debugging-port=9222 --user-data-dir="/tmp/chrome_dev" $PWD/../../src/websrc/temp/index.html
|
||||
|
||||
node wserver.js
|
||||
250
tools/wsemulator/wserver.js
Normal file
250
tools/wsemulator/wserver.js
Normal file
@@ -0,0 +1,250 @@
|
||||
console.log("[INFO] Starting MyESP WebSocket Emulation Server");
|
||||
|
||||
const WebSocket = require("ws");
|
||||
|
||||
console.log("[INFO] You can connect to ws://localhost or load URL .../src/websrc/temp/index.html");
|
||||
console.log("[INFO] Password is 'neo'");
|
||||
|
||||
const wss = new WebSocket.Server({
|
||||
port: 80
|
||||
});
|
||||
|
||||
wss.broadcast = function broadcast(data) {
|
||||
wss.clients.forEach(function each(client) {
|
||||
if (client.readyState === WebSocket.OPEN) {
|
||||
client.send(JSON.stringify(data));
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
var networks = {
|
||||
"command": "ssidlist",
|
||||
"list": [{
|
||||
"ssid": "Company's Network",
|
||||
"bssid": "4c:f4:39:a1:41",
|
||||
"rssi": "-84"
|
||||
},
|
||||
{
|
||||
"ssid": "Home Router",
|
||||
"bssid": "8a:e6:63:a8:15",
|
||||
"rssi": "-42"
|
||||
},
|
||||
{
|
||||
"ssid": "SSID Shown Here",
|
||||
"bssid": "8a:f5:86:c3:12",
|
||||
"rssi": "-77"
|
||||
},
|
||||
{
|
||||
"ssid": "Great Wall of WPA",
|
||||
"bssid": "9c:f1:90:c5:15",
|
||||
"rssi": "-80"
|
||||
},
|
||||
{
|
||||
"ssid": "Not Internet",
|
||||
"bssid": "8c:e4:57:c5:16",
|
||||
"rssi": "-87"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
var eventlog = {
|
||||
"command": "eventlist",
|
||||
"page": 1,
|
||||
"haspages": 1,
|
||||
"list": [
|
||||
"{ \"type\": \"WARN\", \"src\": \"sys\", \"desc\": \"Event log cleared!\", \"data\": \"\", \"time\": 1563371160 }",
|
||||
"{ \"type\": \"WARN\", \"src\": \"sys\", \"desc\": \"Event log cleared!\", \"data\": \"\", \"time\": 1563371160 }",
|
||||
"{ \"type\": \"INFO\", \"src\": \"wifi\", \"desc\": \"WiFi is connected\", \"data\": \"SMC\", \"time\": 13 }",
|
||||
"{ \"type\": \"INFO\", \"src\": \"sys\", \"desc\": \"System setup completed, running\", \"data\": \"\", \"time\": 13 }",
|
||||
"{ \"type\": \"INFO\", \"src\": \"wifi\", \"desc\": \"WiFi is connected\", \"data\": \"SMC\", \"time\": 13 }",
|
||||
"{ \"type\": \"INFO\", \"src\": \"sys\", \"desc\": \"System setup completed, running\", \"data\": \"\", \"time\": 13 }",
|
||||
"{ \"type\": \"WARN\", \"src\": \"websrv\", \"desc\": \"New login attempt\", \"data\": \"\", \"time\": 1563371160 }",
|
||||
"{ \"type\": \"INFO\", \"src\": \"websrv\", \"desc\": \"Login success!\", \"data\": \"\", \"time\": 1563371160 }",
|
||||
"{ \"type\": \"INFO\", \"src\": \"wifi\", \"desc\": \"WiFi is connected\", \"data\": \"SMC\", \"time\": 13 }",
|
||||
"{ \"type\": \"INFO\", \"src\": \"sys\", \"desc\": \"System setup completed, running\", \"data\": \"\", \"time\": 13 }",
|
||||
"{ \"type\": \"WARN\", \"src\": \"websrv\", \"desc\": \"New login attempt\", \"data\": \"\", \"time\": 1563371160 }"
|
||||
]
|
||||
}
|
||||
|
||||
var configfile = {
|
||||
"command": "configfile",
|
||||
"network": {
|
||||
"ssid": "myssid",
|
||||
"wmode": "0",
|
||||
"password": "password"
|
||||
},
|
||||
"general": {
|
||||
"hostname": "myesp",
|
||||
"password": "admin",
|
||||
"serial": true
|
||||
},
|
||||
"mqtt": {
|
||||
"enabled": false,
|
||||
"ip": "ip",
|
||||
"port": "port",
|
||||
"base": "base",
|
||||
"user": "user",
|
||||
"password": "password",
|
||||
"heartbeat": false
|
||||
},
|
||||
"ntp": {
|
||||
"server": "pool.ntp.org",
|
||||
"interval": "30",
|
||||
"timezone": "0",
|
||||
"enabled": false
|
||||
}
|
||||
};
|
||||
|
||||
var custom_configfile = {
|
||||
"command": "custom_configfile",
|
||||
"settings": {
|
||||
"led": true,
|
||||
"led_gpio": 2,
|
||||
"dallas_gpio": 14,
|
||||
"dallas_parasite": false,
|
||||
"listen_mode": false,
|
||||
"shower_timer": false,
|
||||
"shower_alert": false,
|
||||
"publish_time": 120,
|
||||
"heating_circuit": 1,
|
||||
"tx_mode": 2
|
||||
}
|
||||
};
|
||||
|
||||
function sendEventLog() {
|
||||
wss.broadcast(eventlog);
|
||||
var res = {
|
||||
"command": "result",
|
||||
"resultof": "eventlist",
|
||||
"result": true
|
||||
};
|
||||
wss.broadcast(res);
|
||||
}
|
||||
|
||||
function sendStatus() {
|
||||
var stats = {
|
||||
"command": "status",
|
||||
"heap": 30,
|
||||
"availsize": 555,
|
||||
"availspiffs": 445,
|
||||
"spiffssize": 888,
|
||||
"sketchsize": 222,
|
||||
"uptime": "1 Day 6 Hours",
|
||||
"ssid": "SSID",
|
||||
"mac": "EM:44:11:33:22",
|
||||
"ip": "192.168.2.2",
|
||||
"signalstr": 66,
|
||||
"systemload": 10,
|
||||
"mqttconnected": true,
|
||||
"mqttheartbeat": false
|
||||
};
|
||||
wss.broadcast(stats);
|
||||
}
|
||||
|
||||
function sendCustomStatus() {
|
||||
var stats = {
|
||||
"command": "custom_status",
|
||||
"version": "1.9.0b",
|
||||
"customname": "ems-esp",
|
||||
"helpurl": "https://github.com/proddy/EMS-ESP/wiki",
|
||||
"updateurl": "https://api.github.com/repos/proddy/EMS-ESP/releases/latest",
|
||||
|
||||
"emsbus": {
|
||||
"ok": true,
|
||||
"msg": "everything is OK",
|
||||
"devices": [
|
||||
{ "type": 1, "model": "model 1", "deviceid": "device id1", "version": "version id1", "productid": "product id1" },
|
||||
{ "type": 2, "model": "model 2", "deviceid": "device id2", "version": "version id2", "productid": "product id2" },
|
||||
{ "type": 3, "model": "model 3", "deviceid": "device id3", "version": "version id3", "productid": "product id3" },
|
||||
{ "type": 4, "model": "model 4", "deviceid": "device id3", "version": "version id3", "productid": "product id3" },
|
||||
{ "type": 5, "model": "model 5", "deviceid": "device id3", "version": "version id3", "productid": "product id3" }
|
||||
|
||||
]
|
||||
},
|
||||
|
||||
"thermostat": {
|
||||
"ok": true,
|
||||
"tm": "model abc",
|
||||
"ts": "23",
|
||||
"tc": "27.5",
|
||||
"tmode": "manual"
|
||||
},
|
||||
|
||||
"boiler": {
|
||||
"ok": true,
|
||||
"bm": "mode boiler",
|
||||
"b1": "on",
|
||||
"b2": "off",
|
||||
"b3": 5.8,
|
||||
"b4": 61.5
|
||||
}
|
||||
|
||||
};
|
||||
wss.broadcast(stats);
|
||||
}
|
||||
|
||||
wss.on('connection', function connection(ws) {
|
||||
ws.on("error", () => console.log("[WARN] WebSocket Error - Assume a client is disconnected."));
|
||||
ws.on('message', function incoming(message) {
|
||||
var obj = JSON.parse(message);
|
||||
console.log("[INFO] Got Command: " + obj.command);
|
||||
switch (obj.command) {
|
||||
case "configfile":
|
||||
console.log("[INFO] New system settings file received");
|
||||
configfile = obj;
|
||||
break;
|
||||
case "custom_configfile":
|
||||
console.log("[INFO] New custom config file received");
|
||||
custom_configfile = obj;
|
||||
break;
|
||||
case "status":
|
||||
console.log("[INFO] Sending Fake Emulator Status");
|
||||
sendStatus();
|
||||
break;
|
||||
case "custom_status":
|
||||
console.log("[INFO] Sending custom status");
|
||||
sendCustomStatus();
|
||||
break;
|
||||
case "scan":
|
||||
console.log("[INFO] Sending Fake Wireless Networks");
|
||||
wss.broadcast(networks);
|
||||
break;
|
||||
case "gettime":
|
||||
console.log("[INFO] Sending time");
|
||||
var res = {};
|
||||
res.command = "gettime";
|
||||
res.epoch = Math.floor((new Date).getTime() / 1000);
|
||||
res.timezone = configfile.timezone;
|
||||
wss.broadcast(res);
|
||||
break;
|
||||
case "settime":
|
||||
console.log("[INFO] Setting time (fake)");
|
||||
var res = {};
|
||||
res.command = "gettime";
|
||||
res.epoch = Math.floor((new Date).getTime() / 1000);
|
||||
res.timezone = configfile.timezone;
|
||||
wss.broadcast(res);
|
||||
break;
|
||||
case "getconf":
|
||||
console.log("[INFO] Sending system configuration file (if set any)");
|
||||
wss.broadcast(configfile);
|
||||
break;
|
||||
case "geteventlog":
|
||||
console.log("[INFO] Sending eventlog");
|
||||
sendEventLog();
|
||||
break;
|
||||
case "clearevent":
|
||||
console.log("[INFO] Clearing eventlog");
|
||||
break;
|
||||
case "restart":
|
||||
console.log("[INFO] Restart");
|
||||
break;
|
||||
case "destroy":
|
||||
console.log("[INFO] Destroy");
|
||||
break;
|
||||
default:
|
||||
console.log("[WARN] Unknown command ");
|
||||
break;
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user