diff --git a/WebUI/data.json b/WebUI/data.json
index 9935aa4..f97c66b 100644
--- a/WebUI/data.json
+++ b/WebUI/data.json
@@ -8,7 +8,8 @@
"error": false,
"co2": 300,
"rh": 37,
- "temp": 20
+ "temp": 20,
+ "ts": "21.10.2022 10.48.39"
},
{
"nr": 1,
@@ -19,62 +20,368 @@
"error": false,
"co2": 300,
"rh": 37,
- "temp": 20
+ "temp": 20,
+ "ts": "21.10.2022 10.48.44"
},
{
"nr": 2,
"speed": 10,
"setpoint": 10,
- "pressure": 2,
+ "pressure": 1,
"auto": true,
"error": false,
"co2": 300,
"rh": 37,
- "temp": 20
+ "temp": 20,
+ "ts": "21.10.2022 10.48.49"
},
{
"nr": 3,
- "speed": 14,
+ "speed": 15,
+ "setpoint": 10,
+ "pressure": 1,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.48.54"
+ },
+ {
+ "nr": 4,
+ "speed": 20,
+ "setpoint": 10,
+ "pressure": 1,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.48.59"
+ },
+ {
+ "nr": 5,
+ "speed": 24,
+ "setpoint": 10,
+ "pressure": 1,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.49.04"
+ },
+ {
+ "nr": 6,
+ "speed": 29,
+ "setpoint": 10,
+ "pressure": 1,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.49.09"
+ },
+ {
+ "nr": 7,
+ "speed": 34,
+ "setpoint": 41,
+ "pressure": 1,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.49.14"
+ },
+ {
+ "nr": 8,
+ "speed": 39,
+ "setpoint": 43,
+ "pressure": 1,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.49.19"
+ },
+ {
+ "nr": 9,
+ "speed": 44,
+ "setpoint": 43,
+ "pressure": 1,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.49.24"
+ },
+ {
+ "nr": 10,
+ "speed": 49,
+ "setpoint": 43,
+ "pressure": 1,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.49.29"
+ },
+ {
+ "nr": 11,
+ "speed": 54,
+ "setpoint": 43,
+ "pressure": 1,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.49.34"
+ },
+ {
+ "nr": 12,
+ "speed": 59,
+ "setpoint": 43,
+ "pressure": 1,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.49.39"
+ },
+ {
+ "nr": 13,
+ "speed": 64,
+ "setpoint": 43,
+ "pressure": 1,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.49.44"
+ },
+ {
+ "nr": 14,
+ "speed": 69,
+ "setpoint": 43,
+ "pressure": 1,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.49.49"
+ },
+ {
+ "nr": 15,
+ "speed": 74,
+ "setpoint": 43,
+ "pressure": 1,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.49.54"
+ },
+ {
+ "nr": 16,
+ "speed": 79,
+ "setpoint": 43,
+ "pressure": 1,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.49.59"
+ },
+ {
+ "nr": 17,
+ "speed": 84,
+ "setpoint": 43,
+ "pressure": 1,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.50.04"
+ },
+ {
+ "nr": 18,
+ "speed": 89,
+ "setpoint": 43,
+ "pressure": 1,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.50.09"
+ },
+ {
+ "nr": 19,
+ "speed": 94,
+ "setpoint": 43,
+ "pressure": 1,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.50.14"
+ },
+ {
+ "nr": 20,
+ "speed": 99,
+ "setpoint": 43,
+ "pressure": 1,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.50.19"
+ },
+ {
+ "nr": 21,
+ "speed": 100,
+ "setpoint": 43,
+ "pressure": 1,
+ "auto": true,
+ "error": true,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.50.24"
+ },
+ {
+ "nr": 22,
+ "speed": 100,
+ "setpoint": 43,
+ "pressure": 1,
+ "auto": true,
+ "error": true,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.50.29"
+ },
+ {
+ "nr": 23,
+ "speed": 100,
+ "setpoint": 43,
+ "pressure": 1,
+ "auto": true,
+ "error": true,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.50.34"
+ },
+ {
+ "nr": 24,
+ "speed": 100,
+ "setpoint": 43,
+ "pressure": 1,
+ "auto": true,
+ "error": true,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.50.39"
+ },
+ {
+ "nr": 0,
+ "speed": 0,
+ "setpoint": 10,
+ "pressure": 0,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.52.43"
+ },
+ {
+ "nr": 1,
+ "speed": 5,
+ "setpoint": 10,
+ "pressure": 1,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.52.48"
+ },
+ {
+ "nr": 2,
+ "speed": 10,
+ "setpoint": 10,
+ "pressure": 3,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.52.53"
+ },
+ {
+ "nr": 3,
+ "speed": 15,
"setpoint": 10,
"pressure": 4,
"auto": true,
"error": false,
"co2": 300,
"rh": 37,
- "temp": 20
+ "temp": 20,
+ "ts": "21.10.2022 10.52.58"
},
{
"nr": 4,
- "speed": 19,
+ "speed": 20,
"setpoint": 10,
"pressure": 5,
"auto": true,
"error": false,
"co2": 300,
"rh": 37,
- "temp": 20
+ "temp": 20,
+ "ts": "21.10.2022 10.53.03"
},
{
"nr": 5,
- "speed": 24,
+ "speed": 25,
"setpoint": 10,
"pressure": 6,
"auto": true,
"error": false,
"co2": 300,
"rh": 37,
- "temp": 20
+ "temp": 20,
+ "ts": "21.10.2022 10.53.08"
},
{
"nr": 6,
- "speed": 29,
+ "speed": 30,
"setpoint": 10,
"pressure": 9,
"auto": true,
"error": false,
"co2": 300,
"rh": 37,
- "temp": 20
+ "temp": 20,
+ "ts": "21.10.2022 10.53.13"
},
{
"nr": 7,
@@ -85,7 +392,8 @@
"error": false,
"co2": 300,
"rh": 37,
- "temp": 20
+ "temp": 20,
+ "ts": "21.10.2022 10.53.18"
},
{
"nr": 8,
@@ -96,7 +404,8 @@
"error": false,
"co2": 300,
"rh": 37,
- "temp": 20
+ "temp": 20,
+ "ts": "21.10.2022 10.53.23"
},
{
"nr": 9,
@@ -107,7 +416,8 @@
"error": false,
"co2": 300,
"rh": 37,
- "temp": 20
+ "temp": 20,
+ "ts": "21.10.2022 10.53.28"
},
{
"nr": 10,
@@ -118,7 +428,8 @@
"error": false,
"co2": 300,
"rh": 37,
- "temp": 20
+ "temp": 20,
+ "ts": "21.10.2022 10.53.33"
},
{
"nr": 11,
@@ -129,32 +440,227 @@
"error": false,
"co2": 300,
"rh": 37,
- "temp": 20
+ "temp": 20,
+ "ts": "21.10.2022 10.53.38"
},
{
"nr": 12,
- "speed": 30,
- "setpoint": 10,
+ "speed": 31,
+ "setpoint": 15,
"pressure": 10,
"auto": true,
"error": false,
"co2": 300,
"rh": 37,
- "temp": 20
+ "temp": 20,
+ "ts": "21.10.2022 10.53.43"
},
{
"nr": 13,
- "speed": 30,
- "setpoint": 10,
+ "speed": 36,
+ "setpoint": 15,
"pressure": 10,
"auto": true,
"error": false,
"co2": 300,
"rh": 37,
- "temp": 20
+ "temp": 20,
+ "ts": "21.10.2022 10.53.48"
},
{
"nr": 14,
+ "speed": 41,
+ "setpoint": 15,
+ "pressure": 10,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.53.53"
+ },
+ {
+ "nr": 15,
+ "speed": 46,
+ "setpoint": 15,
+ "pressure": 10,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.53.58"
+ },
+ {
+ "nr": 16,
+ "speed": 51,
+ "setpoint": 15,
+ "pressure": 10,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.54.03"
+ },
+ {
+ "nr": 17,
+ "speed": 56,
+ "setpoint": 15,
+ "pressure": 10,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.54.08"
+ },
+ {
+ "nr": 18,
+ "speed": 61,
+ "setpoint": 15,
+ "pressure": 10,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.54.13"
+ },
+ {
+ "nr": 19,
+ "speed": 66,
+ "setpoint": 15,
+ "pressure": 10,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.54.18"
+ },
+ {
+ "nr": 20,
+ "speed": 71,
+ "setpoint": 15,
+ "pressure": 10,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.54.23"
+ },
+ {
+ "nr": 21,
+ "speed": 76,
+ "setpoint": 15,
+ "pressure": 10,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.54.28"
+ },
+ {
+ "nr": 22,
+ "speed": 81,
+ "setpoint": 15,
+ "pressure": 10,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 10.54.33"
+ },
+ {
+ "nr": 0,
+ "speed": 0,
+ "setpoint": 10,
+ "pressure": 0,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.09.13"
+ },
+ {
+ "nr": 1,
+ "speed": 5,
+ "setpoint": 10,
+ "pressure": 1,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.09.18"
+ },
+ {
+ "nr": 2,
+ "speed": 10,
+ "setpoint": 10,
+ "pressure": 3,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.09.23"
+ },
+ {
+ "nr": 3,
+ "speed": 15,
+ "setpoint": 10,
+ "pressure": 4,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.09.28"
+ },
+ {
+ "nr": 4,
+ "speed": 19,
+ "setpoint": 10,
+ "pressure": 5,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.09.33"
+ },
+ {
+ "nr": 5,
+ "speed": 24,
+ "setpoint": 10,
+ "pressure": 6,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.09.38"
+ },
+ {
+ "nr": 6,
+ "speed": 29,
+ "setpoint": 10,
+ "pressure": 9,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.09.43"
+ },
+ {
+ "nr": 7,
"speed": 30,
"setpoint": 10,
"pressure": 10,
@@ -162,149 +668,571 @@
"error": false,
"co2": 300,
"rh": 37,
- "temp": 20
+ "temp": 20,
+ "ts": "21.10.2022 11.09.48"
+ },
+ {
+ "nr": 8,
+ "speed": 30,
+ "setpoint": 10,
+ "pressure": 10,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.09.53"
+ },
+ {
+ "nr": 9,
+ "speed": 30,
+ "setpoint": 10,
+ "pressure": 10,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.09.58"
+ },
+ {
+ "nr": 10,
+ "speed": 30,
+ "setpoint": 10,
+ "pressure": 10,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.10.03"
+ },
+ {
+ "nr": 11,
+ "speed": 33,
+ "setpoint": 17,
+ "pressure": 12,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.10.08"
+ },
+ {
+ "nr": 12,
+ "speed": 38,
+ "setpoint": 17,
+ "pressure": 15,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.10.13"
+ },
+ {
+ "nr": 13,
+ "speed": 41,
+ "setpoint": 17,
+ "pressure": 17,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.10.18"
+ },
+ {
+ "nr": 14,
+ "speed": 41,
+ "setpoint": 17,
+ "pressure": 17,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.10.23"
},
{
"nr": 15,
- "speed": 30,
- "setpoint": 10,
- "pressure": 10,
+ "speed": 41,
+ "setpoint": 17,
+ "pressure": 17,
"auto": true,
"error": false,
- "co2": 489,
+ "co2": 300,
"rh": 37,
- "temp": 20
+ "temp": 20,
+ "ts": "21.10.2022 11.10.28"
},
{
"nr": 16,
- "speed": 30,
- "setpoint": 10,
- "pressure": 10,
+ "speed": 41,
+ "setpoint": 17,
+ "pressure": 17,
"auto": true,
"error": false,
- "co2": 489,
+ "co2": 300,
"rh": 37,
- "temp": 3
+ "temp": 20,
+ "ts": "21.10.2022 11.10.33"
},
{
"nr": 17,
- "speed": 30,
- "setpoint": 10,
- "pressure": 10,
+ "speed": 41,
+ "setpoint": 17,
+ "pressure": 17,
"auto": true,
"error": false,
- "co2": 1916,
+ "co2": 300,
"rh": 37,
- "temp": 3
+ "temp": 20,
+ "ts": "21.10.2022 11.10.38"
},
{
"nr": 18,
- "speed": 30,
- "setpoint": 10,
- "pressure": 10,
+ "speed": 41,
+ "setpoint": 17,
+ "pressure": 17,
"auto": true,
"error": false,
- "co2": 1916,
+ "co2": 300,
"rh": 37,
- "temp": 3
+ "temp": 20,
+ "ts": "21.10.2022 11.10.43"
},
{
"nr": 19,
- "speed": 30,
- "setpoint": 10,
- "pressure": 10,
+ "speed": 41,
+ "setpoint": 17,
+ "pressure": 17,
"auto": true,
"error": false,
- "co2": 340,
- "rh": 70,
- "temp": 3
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.10.48"
},
{
"nr": 20,
- "speed": 30,
- "setpoint": 10,
- "pressure": 10,
+ "speed": 41,
+ "setpoint": 17,
+ "pressure": 17,
"auto": true,
"error": false,
- "co2": 340,
- "rh": 70,
- "temp": 3
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.10.53"
},
{
"nr": 21,
- "speed": 35,
- "setpoint": 31,
- "pressure": 13,
+ "speed": 41,
+ "setpoint": 17,
+ "pressure": 17,
"auto": true,
"error": false,
- "co2": 340,
- "rh": 70,
- "temp": 3
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.10.58"
},
{
"nr": 22,
"speed": 40,
- "setpoint": 31,
+ "setpoint": 10,
"pressure": 16,
"auto": true,
"error": false,
- "co2": 340,
- "rh": 70,
- "temp": 3
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.11.03"
},
{
"nr": 23,
- "speed": 45,
- "setpoint": 31,
- "pressure": 19,
+ "speed": 35,
+ "setpoint": 10,
+ "pressure": 13,
"auto": true,
"error": false,
- "co2": 340,
- "rh": 70,
- "temp": 3
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.11.08"
},
{
"nr": 24,
- "speed": 50,
- "setpoint": 31,
- "pressure": 23,
+ "speed": 31,
+ "setpoint": 10,
+ "pressure": 10,
"auto": true,
"error": false,
- "co2": 340,
- "rh": 70,
- "temp": 3
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.11.13"
},
{
"nr": 25,
- "speed": 55,
- "setpoint": 31,
- "pressure": 28,
+ "speed": 31,
+ "setpoint": 10,
+ "pressure": 10,
"auto": true,
"error": false,
- "co2": 340,
- "rh": 70,
- "temp": 3
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.11.18"
},
{
"nr": 26,
- "speed": 58,
- "setpoint": 31,
- "pressure": 31,
+ "speed": 31,
+ "setpoint": 10,
+ "pressure": 10,
"auto": true,
"error": false,
- "co2": 340,
- "rh": 70,
- "temp": 3
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.11.23"
},
{
"nr": 27,
+ "speed": 35,
+ "setpoint": 23,
+ "pressure": 13,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.11.28"
+ },
+ {
+ "nr": 28,
+ "speed": 40,
+ "setpoint": 23,
+ "pressure": 16,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.11.33"
+ },
+ {
+ "nr": 29,
+ "speed": 45,
+ "setpoint": 23,
+ "pressure": 19,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.11.38"
+ },
+ {
+ "nr": 30,
+ "speed": 50,
+ "setpoint": 23,
+ "pressure": 23,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.11.43"
+ },
+ {
+ "nr": 31,
+ "speed": 50,
+ "setpoint": 23,
+ "pressure": 23,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.11.48"
+ },
+ {
+ "nr": 32,
+ "speed": 50,
+ "setpoint": 23,
+ "pressure": 23,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.11.53"
+ },
+ {
+ "nr": 33,
+ "speed": 50,
+ "setpoint": 23,
+ "pressure": 23,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.11.58"
+ },
+ {
+ "nr": 34,
+ "speed": 50,
+ "setpoint": 23,
+ "pressure": 23,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.12.03"
+ },
+ {
+ "nr": 35,
+ "speed": 50,
+ "setpoint": 23,
+ "pressure": 23,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.12.08"
+ },
+ {
+ "nr": 36,
+ "speed": 50,
+ "setpoint": 23,
+ "pressure": 23,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.12.13"
+ },
+ {
+ "nr": 37,
+ "speed": 50,
+ "setpoint": 23,
+ "pressure": 23,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.12.18"
+ },
+ {
+ "nr": 38,
+ "speed": 48,
+ "setpoint": 10,
+ "pressure": 21,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.12.23"
+ },
+ {
+ "nr": 39,
+ "speed": 43,
+ "setpoint": 10,
+ "pressure": 18,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.12.28"
+ },
+ {
+ "nr": 40,
+ "speed": 38,
+ "setpoint": 10,
+ "pressure": 15,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.12.33"
+ },
+ {
+ "nr": 41,
+ "speed": 33,
+ "setpoint": 10,
+ "pressure": 12,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.12.38"
+ },
+ {
+ "nr": 42,
+ "speed": 31,
+ "setpoint": 10,
+ "pressure": 10,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.12.43"
+ },
+ {
+ "nr": 43,
+ "speed": 33,
+ "setpoint": 34,
+ "pressure": 12,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.12.48"
+ },
+ {
+ "nr": 44,
+ "speed": 38,
+ "setpoint": 34,
+ "pressure": 15,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.12.53"
+ },
+ {
+ "nr": 45,
+ "speed": 43,
+ "setpoint": 34,
+ "pressure": 18,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.12.58"
+ },
+ {
+ "nr": 46,
+ "speed": 48,
+ "setpoint": 34,
+ "pressure": 21,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.13.03"
+ },
+ {
+ "nr": 47,
+ "speed": 53,
+ "setpoint": 34,
+ "pressure": 26,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.13.08"
+ },
+ {
+ "nr": 48,
"speed": 58,
- "setpoint": 31,
+ "setpoint": 34,
"pressure": 31,
"auto": true,
"error": false,
- "co2": 340,
- "rh": 70,
- "temp": 3
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.13.13"
+ },
+ {
+ "nr": 49,
+ "speed": 60,
+ "setpoint": 34,
+ "pressure": 34,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.13.18"
+ },
+ {
+ "nr": 50,
+ "speed": 60,
+ "setpoint": 34,
+ "pressure": 34,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.13.23"
+ },
+ {
+ "nr": 51,
+ "speed": 60,
+ "setpoint": 34,
+ "pressure": 34,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.13.28"
+ },
+ {
+ "nr": 52,
+ "speed": 60,
+ "setpoint": 34,
+ "pressure": 34,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.13.33"
+ },
+ {
+ "nr": 53,
+ "speed": 60,
+ "setpoint": 34,
+ "pressure": 34,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.13.38"
+ },
+ {
+ "nr": 54,
+ "speed": 60,
+ "setpoint": 34,
+ "pressure": 34,
+ "auto": true,
+ "error": false,
+ "co2": 300,
+ "rh": 37,
+ "temp": 20,
+ "ts": "21.10.2022 11.13.43"
}
]
\ No newline at end of file
diff --git a/WebUI/index.html b/WebUI/index.html
index 20ff3e7..6273f00 100644
--- a/WebUI/index.html
+++ b/WebUI/index.html
@@ -8,13 +8,14 @@
-
+
+
-
-
-
+
+
+
+
-
+
diff --git a/WebUI/index.js b/WebUI/index.js
index 81ff3ab..493c5d4 100644
--- a/WebUI/index.js
+++ b/WebUI/index.js
@@ -1,13 +1,103 @@
+'use strict'
+
const express = require('express')
const path = require('path')
const app = express()
+const util = require("util");
+const fs = require("fs");
+const bodyParser = require("body-parser");
+const server = require('http').createServer(app);
+const io = require('socket.io')(server);
+const mqtt = require('mqtt')
+//const WebSocket = require('ws');
+
+//const wss = new WebSocket.Server({server});
+const client = mqtt.connect('mqtt://127.0.0.1:1883', {clientId: 'node_server', clean: true})
+let newData;
app.use(express.static(path.join(__dirname, '/')));
+app.use(bodyParser.json());
+app.use(bodyParser.urlencoded({extended: false}));
+
+
+const writeFile = util.promisify(fs.writeFile);
+const readFile = util.promisify(fs.readFile);
+
+function read(filePath) {
+ return readFile(path.resolve(__dirname, filePath)).then(data => JSON.parse(data));
+}
+
+function write(data, filePath) {
+ return writeFile(path.resolve(__dirname, filePath), JSON.stringify(data, null, 2))
+ .catch(err => console.error(err));
+}
app.get('/', (req, res)=>{
- //console.log(__dirname)
+
res.sendFile(path.join(__dirname + '/index.html'));
})
+client.on('connect', ()=>{
+ console.log('MQTT client connect: '+client.connected);
+});
-app.listen(3000, () => console.log('Server listening on port 3000'));
\ No newline at end of file
+client.subscribe('controller/status', (err)=>{
+ if(err){
+ console.log('Subscription failed')
+ }
+});
+
+io.on('connection', (socket)=>{
+ console.log("User " + socket.id + " connected");
+ socket.on('setting', (arg)=> {
+ let data = JSON.stringify(arg);
+ console.log(data);
+ client.publish("controller/settings", JSON.stringify(arg), { qos: 2, retain: false }, (error)=>{
+ if(error){
+ console.log(error);
+ }
+ })
+ });
+});
+
+client.on('message',async (topic, message) =>{
+ newData = JSON.parse(message.toString());
+ io.emit('data', newData);
+ console.log(newData);
+ //console.log(message)
+ //io.on('connection', (socket)=>{
+ //let send = JSON.stringify(newdata);
+
+ //});
+
+ let info = [];
+ try {
+ info = await read('data.json');
+ } catch (e) {
+ }
+ let today = new Date();
+ let day = ("0" + today.getDate()).slice(-2);
+ let month = ("0" + (today.getMonth() + 1)).slice(-2);
+ let hours = ("0" + today.getHours()).slice(-2);
+ let mins = ("0" + today.getMinutes()).slice(-2);
+ let secs = ("0" + today.getSeconds()).slice(-2);
+ let timestamp = (day + '.' + month + '.' + today.getFullYear() + ' ' + hours + '.' + mins + '.' + secs).toString();
+ //console.log(timestamp);
+ newData['ts'] = timestamp;
+ info.push(newData);
+ write(info, 'data.json');
+});
+
+
+
+app.get('/data', async (req, res) => {
+ try {
+ const data = await read('data.json');
+ res.json(data);
+ } catch (e) {
+ res.status(404).send(e);
+ }
+});
+
+
+server.listen(3000, () => console.log('Server listening on port 3000'));
\ No newline at end of file
diff --git a/WebUI/main.js b/WebUI/main.js
index 11ec68c..9f45adf 100644
--- a/WebUI/main.js
+++ b/WebUI/main.js
@@ -1,3 +1,5 @@
+
+
const automode = document.getElementById('m_auto');
const manmode = document.getElementById('m_man');
const s_pressure = document.getElementById('pressure'); //slider
@@ -9,11 +11,27 @@ const g_co = document.getElementById('get_co');
const g_temp = document.getElementById('get_temp');
const g_rh = document.getElementById('get_rh');
const canvas = document.getElementById('dataChart');
+const socket = io('http://localhost:3000');
+
+socket.on('connection');
+socket.on('data', (data) =>{
+ g_pressure.value = data.pressure;
+ g_co.value = data.co2;
+ g_rh.value = data.rh;
+ g_speed.value = data.speed;
+ g_temp.value = data.temp;
+ updateChart();
+});
s_pressure.addEventListener('input', e =>{
e.preventDefault();
- updateChart();
-})
+ sendPressure();
+});
+
+s_speed.addEventListener('input', e =>{
+ e.preventDefault();
+ sendSpeed();
+});
automode.addEventListener('click', () =>{
s_pressure.disabled = false;
@@ -28,7 +46,17 @@ manmode.addEventListener('click', () =>{
s_speed.disabled = false;
document.getElementById('set_speed').disabled = false;
})
-
+
+function sendPressure(){
+ let press = { auto: true, pressure: parseInt(s_pressure.value) }
+ socket.emit('setting', press);
+}
+
+function sendSpeed(){
+ let speed = { auto: false, speed: parseInt(s_speed.value) }
+ socket.emit('setting', speed);
+}
+
const data = {
//labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [{
@@ -110,11 +138,11 @@ const config = {
data,
options: {
scales: {
- x: {
+ /*x: {
ticks: {
display: false
}
- },
+ },*/
y0: { // temp
type: 'linear',
position: 'left',
@@ -163,14 +191,18 @@ const myChart = new Chart(canvas, config);
function updateChart(){
async function fetchData(){
const response = await fetch('data.json');
+ //const data = await response.json();
const datapoints = await response.json();
+ /*const datapoints = data.filter(function(elem, index){
+ return index >= data.length -10;
+ })*/
console.log(datapoints);
return datapoints;
};
fetchData().then(datapoints => {
const time = datapoints.map((time, index) => {
- return time.nr;
+ return time.ts;
});
const temp = datapoints.map((temp, index) => {
return temp.temp;
@@ -181,15 +213,36 @@ function updateChart(){
const fanspeed = datapoints.map((temp, index) => {
return temp.speed;
});
- console.log(time);
- console.log(temp);
+ //console.log(time);
+ //console.log(temp);
myChart.config.data.labels = time;
myChart.config.data.datasets[0].data = temp;
myChart.config.data.datasets[1].data = pressure;
myChart.config.data.datasets[2].data = fanspeed;
myChart.update();
- })
+ });
+};
-
-};
\ No newline at end of file
+
+
+/*
+setInterval(function(){
+ fetch('/data')
+ .then(res => res.json())
+ .then(data => {
+ for (const dp of data) {
+ }
+ if(length !== data.length){
+ g_pressure.value = data[data.length -1].pressure;
+ g_co.value = data[data.length -1].co2;
+ g_rh.value = data[data.length -1].rh;
+ g_speed.value = data[data.length -1].speed;
+ g_temp.value = data[data.length -1].temp;
+ updateChart();
+ }
+ length = data.length;
+ });
+
+}, 1000);
+*/
diff --git a/WebUI/node_modules/.bin/mqtt b/WebUI/node_modules/.bin/mqtt
new file mode 100644
index 0000000..d12e904
--- /dev/null
+++ b/WebUI/node_modules/.bin/mqtt
@@ -0,0 +1,12 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ exec "$basedir/node" "$basedir/../mqtt/bin/mqtt.js" "$@"
+else
+ exec node "$basedir/../mqtt/bin/mqtt.js" "$@"
+fi
diff --git a/WebUI/node_modules/.bin/mqtt.cmd b/WebUI/node_modules/.bin/mqtt.cmd
new file mode 100644
index 0000000..28f1840
--- /dev/null
+++ b/WebUI/node_modules/.bin/mqtt.cmd
@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+ SET "_prog=%dp0%\node.exe"
+) ELSE (
+ SET "_prog=node"
+ SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\mqtt\bin\mqtt.js" %*
diff --git a/WebUI/node_modules/.bin/mqtt.ps1 b/WebUI/node_modules/.bin/mqtt.ps1
new file mode 100644
index 0000000..c7de499
--- /dev/null
+++ b/WebUI/node_modules/.bin/mqtt.ps1
@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+ # Fix case when both the Windows and Linux builds of Node
+ # are installed in the same directory
+ $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "$basedir/node$exe" "$basedir/../mqtt/bin/mqtt.js" $args
+ } else {
+ & "$basedir/node$exe" "$basedir/../mqtt/bin/mqtt.js" $args
+ }
+ $ret=$LASTEXITCODE
+} else {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "node$exe" "$basedir/../mqtt/bin/mqtt.js" $args
+ } else {
+ & "node$exe" "$basedir/../mqtt/bin/mqtt.js" $args
+ }
+ $ret=$LASTEXITCODE
+}
+exit $ret
diff --git a/WebUI/node_modules/.bin/mqtt_pub b/WebUI/node_modules/.bin/mqtt_pub
new file mode 100644
index 0000000..e0b3e01
--- /dev/null
+++ b/WebUI/node_modules/.bin/mqtt_pub
@@ -0,0 +1,12 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ exec "$basedir/node" "$basedir/../mqtt/bin/pub.js" "$@"
+else
+ exec node "$basedir/../mqtt/bin/pub.js" "$@"
+fi
diff --git a/WebUI/node_modules/.bin/mqtt_pub.cmd b/WebUI/node_modules/.bin/mqtt_pub.cmd
new file mode 100644
index 0000000..cd277d5
--- /dev/null
+++ b/WebUI/node_modules/.bin/mqtt_pub.cmd
@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+ SET "_prog=%dp0%\node.exe"
+) ELSE (
+ SET "_prog=node"
+ SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\mqtt\bin\pub.js" %*
diff --git a/WebUI/node_modules/.bin/mqtt_pub.ps1 b/WebUI/node_modules/.bin/mqtt_pub.ps1
new file mode 100644
index 0000000..94b2549
--- /dev/null
+++ b/WebUI/node_modules/.bin/mqtt_pub.ps1
@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+ # Fix case when both the Windows and Linux builds of Node
+ # are installed in the same directory
+ $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "$basedir/node$exe" "$basedir/../mqtt/bin/pub.js" $args
+ } else {
+ & "$basedir/node$exe" "$basedir/../mqtt/bin/pub.js" $args
+ }
+ $ret=$LASTEXITCODE
+} else {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "node$exe" "$basedir/../mqtt/bin/pub.js" $args
+ } else {
+ & "node$exe" "$basedir/../mqtt/bin/pub.js" $args
+ }
+ $ret=$LASTEXITCODE
+}
+exit $ret
diff --git a/WebUI/node_modules/.bin/mqtt_sub b/WebUI/node_modules/.bin/mqtt_sub
new file mode 100644
index 0000000..600596a
--- /dev/null
+++ b/WebUI/node_modules/.bin/mqtt_sub
@@ -0,0 +1,12 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ exec "$basedir/node" "$basedir/../mqtt/bin/sub.js" "$@"
+else
+ exec node "$basedir/../mqtt/bin/sub.js" "$@"
+fi
diff --git a/WebUI/node_modules/.bin/mqtt_sub.cmd b/WebUI/node_modules/.bin/mqtt_sub.cmd
new file mode 100644
index 0000000..90c700d
--- /dev/null
+++ b/WebUI/node_modules/.bin/mqtt_sub.cmd
@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+ SET "_prog=%dp0%\node.exe"
+) ELSE (
+ SET "_prog=node"
+ SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\mqtt\bin\sub.js" %*
diff --git a/WebUI/node_modules/.bin/mqtt_sub.ps1 b/WebUI/node_modules/.bin/mqtt_sub.ps1
new file mode 100644
index 0000000..1cf18c3
--- /dev/null
+++ b/WebUI/node_modules/.bin/mqtt_sub.ps1
@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+ # Fix case when both the Windows and Linux builds of Node
+ # are installed in the same directory
+ $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "$basedir/node$exe" "$basedir/../mqtt/bin/sub.js" $args
+ } else {
+ & "$basedir/node$exe" "$basedir/../mqtt/bin/sub.js" $args
+ }
+ $ret=$LASTEXITCODE
+} else {
+ # Support pipeline input
+ if ($MyInvocation.ExpectingInput) {
+ $input | & "node$exe" "$basedir/../mqtt/bin/sub.js" $args
+ } else {
+ & "node$exe" "$basedir/../mqtt/bin/sub.js" $args
+ }
+ $ret=$LASTEXITCODE
+}
+exit $ret
diff --git a/WebUI/node_modules/.package-lock.json b/WebUI/node_modules/.package-lock.json
index 279a65d..8005a77 100644
--- a/WebUI/node_modules/.package-lock.json
+++ b/WebUI/node_modules/.package-lock.json
@@ -4,6 +4,26 @@
"lockfileVersion": 2,
"requires": true,
"packages": {
+ "node_modules/@socket.io/component-emitter": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
+ "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg=="
+ },
+ "node_modules/@types/cookie": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
+ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
+ },
+ "node_modules/@types/cors": {
+ "version": "2.8.12",
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
+ "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw=="
+ },
+ "node_modules/@types/node": {
+ "version": "18.11.2",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.2.tgz",
+ "integrity": "sha512-BWN3M23gLO2jVG8g/XHIRFWiiV4/GckeFIqbU/C4V3xpoBBWSMk4OZomouN0wCkfQFPqgZikyLr7DOYDysIkkw=="
+ },
"node_modules/abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
@@ -43,8 +63,34 @@
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/base64id": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
+ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
+ "engines": {
+ "node": "^4.5.0 || >= 5.9"
+ }
},
"node_modules/binary-extensions": {
"version": "2.2.0",
@@ -55,6 +101,16 @@
"node": ">=8"
}
},
+ "node_modules/bl": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ }
+ },
"node_modules/body-parser": {
"version": "1.20.1",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
@@ -95,7 +151,6 @@
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -113,6 +168,34 @@
"node": ">=8"
}
},
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
"node_modules/bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
@@ -160,11 +243,33 @@
"fsevents": "~2.3.2"
}
},
+ "node_modules/commist": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/commist/-/commist-1.1.0.tgz",
+ "integrity": "sha512-rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg==",
+ "dependencies": {
+ "leven": "^2.1.0",
+ "minimist": "^1.1.0"
+ }
+ },
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "node_modules/concat-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz",
+ "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
+ "engines": [
+ "node >= 6.0"
+ ],
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.0.2",
+ "typedarray": "^0.0.6"
+ }
},
"node_modules/content-disposition": {
"version": "0.5.4",
@@ -198,6 +303,18 @@
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
},
+ "node_modules/cors": {
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+ "dependencies": {
+ "object-assign": "^4",
+ "vary": "^1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
"node_modules/debug": {
"version": "3.2.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
@@ -224,6 +341,17 @@
"npm": "1.2.8000 || >= 1.4.16"
}
},
+ "node_modules/duplexify": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz",
+ "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==",
+ "dependencies": {
+ "end-of-stream": "^1.4.1",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1",
+ "stream-shift": "^1.0.0"
+ }
+ },
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -237,6 +365,91 @@
"node": ">= 0.8"
}
},
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/engine.io": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz",
+ "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==",
+ "dependencies": {
+ "@types/cookie": "^0.4.1",
+ "@types/cors": "^2.8.12",
+ "@types/node": ">=10.0.0",
+ "accepts": "~1.3.4",
+ "base64id": "2.0.0",
+ "cookie": "~0.4.1",
+ "cors": "~2.8.5",
+ "debug": "~4.3.1",
+ "engine.io-parser": "~5.0.3",
+ "ws": "~8.2.3"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/engine.io-parser": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz",
+ "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/engine.io/node_modules/cookie": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
+ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/engine.io/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/engine.io/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/engine.io/node_modules/ws": {
+ "version": "8.2.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
+ "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": "^5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
"node_modules/escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@@ -362,6 +575,11 @@
"node": ">= 0.6"
}
},
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
"node_modules/function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -380,6 +598,25 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
@@ -423,6 +660,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/help-me": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/help-me/-/help-me-3.0.0.tgz",
+ "integrity": "sha512-hx73jClhyk910sidBB7ERlnhMlFsJJIBqSVMFDwPN8o2v9nmp5KgLq1Xz1Bf1fCMMZ6mPrX159iG0VLy/fPMtQ==",
+ "dependencies": {
+ "glob": "^7.1.6",
+ "readable-stream": "^3.6.0"
+ }
+ },
"node_modules/http-errors": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
@@ -449,12 +695,40 @@
"node": ">=0.10.0"
}
},
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
"node_modules/ignore-by-default": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
"integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==",
"dev": true
},
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
@@ -510,6 +784,30 @@
"node": ">=0.12.0"
}
},
+ "node_modules/js-sdsl": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz",
+ "integrity": "sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw=="
+ },
+ "node_modules/leven": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz",
+ "integrity": "sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -565,7 +863,6 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
},
@@ -573,6 +870,118 @@
"node": "*"
}
},
+ "node_modules/minimist": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
+ "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/mqtt": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-4.3.7.tgz",
+ "integrity": "sha512-ew3qwG/TJRorTz47eW46vZ5oBw5MEYbQZVaEji44j5lAUSQSqIEoul7Kua/BatBW0H0kKQcC9kwUHa1qzaWHSw==",
+ "dependencies": {
+ "commist": "^1.0.0",
+ "concat-stream": "^2.0.0",
+ "debug": "^4.1.1",
+ "duplexify": "^4.1.1",
+ "help-me": "^3.0.0",
+ "inherits": "^2.0.3",
+ "lru-cache": "^6.0.0",
+ "minimist": "^1.2.5",
+ "mqtt-packet": "^6.8.0",
+ "number-allocator": "^1.0.9",
+ "pump": "^3.0.0",
+ "readable-stream": "^3.6.0",
+ "reinterval": "^1.1.0",
+ "rfdc": "^1.3.0",
+ "split2": "^3.1.0",
+ "ws": "^7.5.5",
+ "xtend": "^4.0.2"
+ },
+ "bin": {
+ "mqtt": "bin/mqtt.js",
+ "mqtt_pub": "bin/pub.js",
+ "mqtt_sub": "bin/sub.js"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/mqtt-packet": {
+ "version": "6.10.0",
+ "resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-6.10.0.tgz",
+ "integrity": "sha512-ja8+mFKIHdB1Tpl6vac+sktqy3gA8t9Mduom1BA75cI+R9AHnZOiaBQwpGiWnaVJLDGRdNhQmFaAqd7tkKSMGA==",
+ "dependencies": {
+ "bl": "^4.0.2",
+ "debug": "^4.1.1",
+ "process-nextick-args": "^2.0.1"
+ }
+ },
+ "node_modules/mqtt-packet/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/mqtt-packet/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/mqtt/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/mqtt/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/mqtt/node_modules/ws": {
+ "version": "7.5.9",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
+ "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
+ "engines": {
+ "node": ">=8.3.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": "^5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
"node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -638,6 +1047,44 @@
"node": ">=0.10.0"
}
},
+ "node_modules/number-allocator": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/number-allocator/-/number-allocator-1.0.12.tgz",
+ "integrity": "sha512-sGB0qoQGmKimery9JubBQ9pQUr1V/LixJAk3Ygp7obZf6mpSXime8d7XHEobbIimkdZpgjkNlLt6G7LPEWFYWg==",
+ "dependencies": {
+ "debug": "^4.3.1",
+ "js-sdsl": "4.1.4"
+ }
+ },
+ "node_modules/number-allocator/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/number-allocator/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/object-inspect": {
"version": "1.12.2",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
@@ -657,6 +1104,14 @@
"node": ">= 0.8"
}
},
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
"node_modules/parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -665,6 +1120,14 @@
"node": ">= 0.8"
}
},
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
@@ -682,6 +1145,11 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
"node_modules/proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -700,6 +1168,15 @@
"integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
"dev": true
},
+ "node_modules/pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
"node_modules/qs": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
@@ -736,6 +1213,19 @@
"node": ">= 0.8"
}
},
+ "node_modules/readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -748,6 +1238,16 @@
"node": ">=8.10.0"
}
},
+ "node_modules/reinterval": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reinterval/-/reinterval-1.1.0.tgz",
+ "integrity": "sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ=="
+ },
+ "node_modules/rfdc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
+ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA=="
+ },
"node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -870,6 +1370,89 @@
"semver": "bin/semver.js"
}
},
+ "node_modules/socket.io": {
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.3.tgz",
+ "integrity": "sha512-zdpnnKU+H6mOp7nYRXH4GNv1ux6HL6+lHL8g7Ds7Lj8CkdK1jJK/dlwsKDculbyOHifcJ0Pr/yeXnZQ5GeFrcg==",
+ "dependencies": {
+ "accepts": "~1.3.4",
+ "base64id": "~2.0.0",
+ "debug": "~4.3.2",
+ "engine.io": "~6.2.0",
+ "socket.io-adapter": "~2.4.0",
+ "socket.io-parser": "~4.2.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/socket.io-adapter": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz",
+ "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg=="
+ },
+ "node_modules/socket.io-parser": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz",
+ "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==",
+ "dependencies": {
+ "@socket.io/component-emitter": "~3.1.0",
+ "debug": "~4.3.1"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/socket.io-parser/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/socket.io-parser/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/socket.io/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/socket.io/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/split2": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz",
+ "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==",
+ "dependencies": {
+ "readable-stream": "^3.0.0"
+ }
+ },
"node_modules/statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
@@ -878,6 +1461,19 @@
"node": ">= 0.8"
}
},
+ "node_modules/stream-shift": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
+ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
"node_modules/supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -934,6 +1530,11 @@
"node": ">= 0.6"
}
},
+ "node_modules/typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
"node_modules/undefsafe": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
@@ -948,6 +1549,11 @@
"node": ">= 0.8"
}
},
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
"node_modules/utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
@@ -963,6 +1569,24 @@
"engines": {
"node": ">= 0.8"
}
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
}
}
}
diff --git a/WebUI/node_modules/@socket.io/component-emitter/LICENSE b/WebUI/node_modules/@socket.io/component-emitter/LICENSE
new file mode 100644
index 0000000..de51692
--- /dev/null
+++ b/WebUI/node_modules/@socket.io/component-emitter/LICENSE
@@ -0,0 +1,24 @@
+(The MIT License)
+
+Copyright (c) 2014 Component contributors
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/WebUI/node_modules/@socket.io/component-emitter/Readme.md b/WebUI/node_modules/@socket.io/component-emitter/Readme.md
new file mode 100644
index 0000000..0f3f9b9
--- /dev/null
+++ b/WebUI/node_modules/@socket.io/component-emitter/Readme.md
@@ -0,0 +1,74 @@
+# Emitter [](https://travis-ci.org/component/emitter)
+
+ Event emitter component.
+
+## Installation
+
+```
+$ component install component/emitter
+```
+
+## API
+
+### Emitter(obj)
+
+ The `Emitter` may also be used as a mixin. For example
+ a "plain" object may become an emitter, or you may
+ extend an existing prototype.
+
+ As an `Emitter` instance:
+
+```js
+var Emitter = require('emitter');
+var emitter = new Emitter;
+emitter.emit('something');
+```
+
+ As a mixin:
+
+```js
+var Emitter = require('emitter');
+var user = { name: 'tobi' };
+Emitter(user);
+
+user.emit('im a user');
+```
+
+ As a prototype mixin:
+
+```js
+var Emitter = require('emitter');
+Emitter(User.prototype);
+```
+
+### Emitter#on(event, fn)
+
+ Register an `event` handler `fn`.
+
+### Emitter#once(event, fn)
+
+ Register a single-shot `event` handler `fn`,
+ removed immediately after it is invoked the
+ first time.
+
+### Emitter#off(event, fn)
+
+ * Pass `event` and `fn` to remove a listener.
+ * Pass `event` to remove all listeners on that event.
+ * Pass nothing to remove all listeners on all events.
+
+### Emitter#emit(event, ...)
+
+ Emit an `event` with variable option args.
+
+### Emitter#listeners(event)
+
+ Return an array of callbacks, or an empty array.
+
+### Emitter#hasListeners(event)
+
+ Check if this emitter has `event` handlers.
+
+## License
+
+MIT
diff --git a/WebUI/node_modules/@socket.io/component-emitter/index.d.ts b/WebUI/node_modules/@socket.io/component-emitter/index.d.ts
new file mode 100644
index 0000000..49a74e1
--- /dev/null
+++ b/WebUI/node_modules/@socket.io/component-emitter/index.d.ts
@@ -0,0 +1,179 @@
+/**
+ * An events map is an interface that maps event names to their value, which
+ * represents the type of the `on` listener.
+ */
+export interface EventsMap {
+ [event: string]: any;
+}
+
+/**
+ * The default events map, used if no EventsMap is given. Using this EventsMap
+ * is equivalent to accepting all event names, and any data.
+ */
+export interface DefaultEventsMap {
+ [event: string]: (...args: any[]) => void;
+}
+
+/**
+ * Returns a union type containing all the keys of an event map.
+ */
+export type EventNames