mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 22:22:16 +03:00
начал писать систему формирования виджетов
This commit is contained in:
@@ -61,7 +61,7 @@
|
||||
"type": "Reading",
|
||||
"subtype": "InputValue",
|
||||
"id": "txt",
|
||||
"widget": "input",
|
||||
"widget": "inputDigit",
|
||||
"page": "Лимиты",
|
||||
"descr": "Порог"
|
||||
},
|
||||
|
||||
6
data_svelte/widgets/alarm.json
Normal file
6
data_svelte/widgets/alarm.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"widget": "anydata",
|
||||
"icon": "body",
|
||||
"color": "red",
|
||||
"descrColor": "red"
|
||||
}
|
||||
5
data_svelte/widgets/anydata.json
Normal file
5
data_svelte/widgets/anydata.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"widget": "anydata",
|
||||
"after": "",
|
||||
"icon": ""
|
||||
}
|
||||
6
data_svelte/widgets/anydataAlarm.json
Normal file
6
data_svelte/widgets/anydataAlarm.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"widget": "anydata",
|
||||
"after": "",
|
||||
"color":"red",
|
||||
"icon": "walk"
|
||||
}
|
||||
5
data_svelte/widgets/anydataAmp.json
Normal file
5
data_svelte/widgets/anydataAmp.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"widget": "anydata",
|
||||
"after": "Amp",
|
||||
"icon": "speedometer"
|
||||
}
|
||||
5
data_svelte/widgets/anydataHtz.json
Normal file
5
data_svelte/widgets/anydataHtz.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"widget": "anydata",
|
||||
"after": "Htz",
|
||||
"icon": "speedometer"
|
||||
}
|
||||
6
data_svelte/widgets/anydataHum.json
Normal file
6
data_svelte/widgets/anydataHum.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"widget": "anydata",
|
||||
"after": "%",
|
||||
"icon": "water",
|
||||
"color": "#88AADF"
|
||||
}
|
||||
5
data_svelte/widgets/anydataPpb.json
Normal file
5
data_svelte/widgets/anydataPpb.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"widget": "anydata",
|
||||
"after": "ppb",
|
||||
"icon": "body"
|
||||
}
|
||||
5
data_svelte/widgets/anydataPpm.json
Normal file
5
data_svelte/widgets/anydataPpm.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"widget": "anydata",
|
||||
"after": "ppm",
|
||||
"icon": "body"
|
||||
}
|
||||
5
data_svelte/widgets/anydataPress.json
Normal file
5
data_svelte/widgets/anydataPress.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"widget": "anydata",
|
||||
"after": "mm",
|
||||
"icon": "speedometer"
|
||||
}
|
||||
16
data_svelte/widgets/anydataTemp.json
Normal file
16
data_svelte/widgets/anydataTemp.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"widget": "anydata",
|
||||
"after": "°С",
|
||||
"icon": "thermometer",
|
||||
"font": "OCR A Std",
|
||||
"color": [
|
||||
{ "level": -20, "value": "#0000CC" },
|
||||
{ "level": -10, "value": "#0000CC" },
|
||||
{ "level": 0, "value": "#0000CC" },
|
||||
{ "level": 12, "value": "#3366FF" },
|
||||
{ "level": 16, "value": "#33CCFF" },
|
||||
{ "level": 18, "value": "#009933" },
|
||||
{ "level": 30, "value": "#FF9900" },
|
||||
{ "level": 40, "value": "red" }
|
||||
]
|
||||
}
|
||||
5
data_svelte/widgets/anydataTime.json
Normal file
5
data_svelte/widgets/anydataTime.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"widget": "anydata",
|
||||
"after": "",
|
||||
"icon": "speedometer"
|
||||
}
|
||||
5
data_svelte/widgets/anydataVlt.json
Normal file
5
data_svelte/widgets/anydataVlt.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"widget": "anydata",
|
||||
"after": "Vlt",
|
||||
"icon": "speedometer"
|
||||
}
|
||||
5
data_svelte/widgets/anydataWhr.json
Normal file
5
data_svelte/widgets/anydataWhr.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"widget": "anydata",
|
||||
"after": "Whr",
|
||||
"icon": "speedometer"
|
||||
}
|
||||
5
data_svelte/widgets/anydataWtt.json
Normal file
5
data_svelte/widgets/anydataWtt.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"widget": "anydata",
|
||||
"after": "Wtt",
|
||||
"icon": "speedometer"
|
||||
}
|
||||
6
data_svelte/widgets/btn.json
Normal file
6
data_svelte/widgets/btn.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"widget": "btn",
|
||||
"size": "large",
|
||||
"color": "green",
|
||||
"send": "test"
|
||||
}
|
||||
5
data_svelte/widgets/chart.json
Normal file
5
data_svelte/widgets/chart.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"widget": "chart",
|
||||
"dateFormat": "HH:mm",
|
||||
"pointRadius": 0
|
||||
}
|
||||
4
data_svelte/widgets/chart2.json
Normal file
4
data_svelte/widgets/chart2.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"widget": "chart",
|
||||
"dateFormat": "HH:mm"
|
||||
}
|
||||
5
data_svelte/widgets/chart3.json
Normal file
5
data_svelte/widgets/chart3.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"widget": "chart",
|
||||
"dateFormat": "DD.MM.YYYY",
|
||||
"type":"bar"
|
||||
}
|
||||
4
data_svelte/widgets/chart4.json
Normal file
4
data_svelte/widgets/chart4.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"widget": "chart",
|
||||
"dateFormat": "DD.MM.YYYY"
|
||||
}
|
||||
7
data_svelte/widgets/fillgauge.json
Normal file
7
data_svelte/widgets/fillgauge.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"widget": "fillgauge",
|
||||
"circleColor": "#00FFFF",
|
||||
"textColor": "#FFFFFF",
|
||||
"waveTextColor": "#000000",
|
||||
"waveColor": "#00FFFF"
|
||||
}
|
||||
6
data_svelte/widgets/inputDate.json
Normal file
6
data_svelte/widgets/inputDate.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"widget" : "input",
|
||||
"size" : "small",
|
||||
"color" : "orange",
|
||||
"type" : "date"
|
||||
}
|
||||
5
data_svelte/widgets/inputDigit.json
Normal file
5
data_svelte/widgets/inputDigit.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"widget" : "input",
|
||||
"color" : "blue",
|
||||
"type" : "number"
|
||||
}
|
||||
7
data_svelte/widgets/inputDigitTemp.json
Normal file
7
data_svelte/widgets/inputDigitTemp.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"widget" : "input",
|
||||
"color" : "green",
|
||||
"type" : "number",
|
||||
"size" : "small",
|
||||
"icon": "thermometer"
|
||||
}
|
||||
6
data_svelte/widgets/inputText.json
Normal file
6
data_svelte/widgets/inputText.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"widget" : "input",
|
||||
"size" : "small",
|
||||
"color" : "orange",
|
||||
"type" : "text"
|
||||
}
|
||||
5
data_svelte/widgets/inputTime.json
Normal file
5
data_svelte/widgets/inputTime.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"widget" : "input",
|
||||
"color" : "blue",
|
||||
"type" : "time"
|
||||
}
|
||||
7
data_svelte/widgets/inputTimeClock.json
Normal file
7
data_svelte/widgets/inputTimeClock.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"widget" : "input",
|
||||
"color" : "orange",
|
||||
"type" : "time",
|
||||
"size" : "small",
|
||||
"icon": "alarm-outline"
|
||||
}
|
||||
12
data_svelte/widgets/progress-line.json
Normal file
12
data_svelte/widgets/progress-line.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"widget": "progress-line",
|
||||
"icon": "sunny",
|
||||
"descrColor": "",
|
||||
"color": "",
|
||||
"max": "100",
|
||||
"background": "",
|
||||
"stroke": "10",
|
||||
"disabled": "",
|
||||
"before": "",
|
||||
"after": ""
|
||||
}
|
||||
11
data_svelte/widgets/progress-round.json
Normal file
11
data_svelte/widgets/progress-round.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"widget": "progress-round",
|
||||
"descrColor": "",
|
||||
"max": "100",
|
||||
"stroke": "20",
|
||||
"color": "#45ccce",
|
||||
"background": "#777",
|
||||
"before": "",
|
||||
"semicircle": "1",
|
||||
"after": ""
|
||||
}
|
||||
9
data_svelte/widgets/range.json
Normal file
9
data_svelte/widgets/range.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"widget" : "range",
|
||||
"descrColor": "red",
|
||||
"after" : "%",
|
||||
"k" : 0.0977,
|
||||
"min" : 0,
|
||||
"max" : 100,
|
||||
"debounce": 500
|
||||
}
|
||||
8
data_svelte/widgets/select.json
Normal file
8
data_svelte/widgets/select.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"widget": "select",
|
||||
"options": [
|
||||
"Выключен",
|
||||
"Включен"
|
||||
],
|
||||
"status": 0
|
||||
}
|
||||
5
data_svelte/widgets/toggle.json
Normal file
5
data_svelte/widgets/toggle.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"widget": "toggle",
|
||||
"icon": "",
|
||||
"iconOff": ""
|
||||
}
|
||||
5
data_svelte/widgets/toggleSunMoon.json
Normal file
5
data_svelte/widgets/toggleSunMoon.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"widget": "toggle",
|
||||
"icon": "sunny",
|
||||
"iconOff": "moon"
|
||||
}
|
||||
8
include/CreateWidget.h
Normal file
8
include/CreateWidget.h
Normal file
@@ -0,0 +1,8 @@
|
||||
#pragma once
|
||||
#include "Global.h"
|
||||
|
||||
extern void createWidget(String& parameters);
|
||||
|
||||
extern bool loadWidget(const String& filename, String& buf);
|
||||
|
||||
extern const String getWidgetFile(const String& name);
|
||||
@@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
#include "Global.h"
|
||||
#include "Classes/IoTSensor.h"
|
||||
#include "CreateWidget.h"
|
||||
|
||||
extern std::vector<IoTSensor*> iotSensors; // вектор ссылок базового класса IoTSensor - список всех запущенных сенсоров
|
||||
|
||||
|
||||
@@ -6,4 +6,5 @@ extern File seekFile(const String& filename, size_t position = 0);
|
||||
extern const String writeFile(const String& filename, const String& str);
|
||||
extern const String readFile(const String& filename, size_t max_size);
|
||||
extern const String filepath(const String& filename);
|
||||
extern bool cutFile(const String& src, const String& dst);
|
||||
extern bool cutFile(const String& src, const String& dst);
|
||||
extern const String addFileLn(const String& filename, const String& str);
|
||||
47
src/CreateWidget.cpp
Normal file
47
src/CreateWidget.cpp
Normal file
@@ -0,0 +1,47 @@
|
||||
#include "CreateWidget.h"
|
||||
|
||||
void createWidget(String& parameters) {
|
||||
String id = jsonReadStr(parameters, "id");
|
||||
String widget = jsonReadStr(parameters, "widget");
|
||||
String order = jsonReadStr(parameters, "order");
|
||||
String page = jsonReadStr(parameters, "page");
|
||||
String descr = jsonReadStr(parameters, "descr");
|
||||
|
||||
if (widget != "na") {
|
||||
String buf = "{}";
|
||||
if (!loadWidget(widget, buf)) {
|
||||
return;
|
||||
}
|
||||
// if (_cnt != "") {
|
||||
// if (widget.indexOf("chart") != -1) jsonWriteStr(buf, "maxCount", _cnt);
|
||||
// }
|
||||
|
||||
#ifdef GATE_MODE
|
||||
jsonWriteStr(buf, "info", " ");
|
||||
#endif
|
||||
|
||||
jsonWriteStr(buf, "page", page);
|
||||
jsonWriteStr(buf, "order", order);
|
||||
jsonWriteStr(buf, "descr", descr);
|
||||
jsonWriteStr(buf, "topic", prex + "/" + id);
|
||||
|
||||
#ifdef LAYOUT_IN_RAM
|
||||
all_widgets += widget + "\r\n";
|
||||
#else
|
||||
addFileLn("layout.txt", buf);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
bool loadWidget(const String& widget, String& buf) {
|
||||
buf = readFile(getWidgetFile(widget), 2048);
|
||||
bool res = !(buf == "Failed" || buf == "Large");
|
||||
if (!res) {
|
||||
SerialPrint("E", "module", "on load" + widget);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
const String getWidgetFile(const String& name) {
|
||||
return "/widgets/" + name + ".json";
|
||||
}
|
||||
@@ -20,6 +20,7 @@ void configure(String path) {
|
||||
myIoTSensor = (IoTSensor*)getAPI_AnalogAdc(jsonArrayElement);
|
||||
if (myIoTSensor) {
|
||||
iotSensors.push_back(myIoTSensor);
|
||||
createWidget(jsonArrayElement);
|
||||
}
|
||||
//================================================================================================================
|
||||
}
|
||||
|
||||
@@ -63,4 +63,15 @@ bool cutFile(const String& src, const String& dst) {
|
||||
dstFile.close();
|
||||
FileFS.remove(srcPath);
|
||||
return true;
|
||||
}
|
||||
|
||||
const String addFileLn(const String& filename, const String& str) {
|
||||
String path = filepath(filename);
|
||||
auto file = FileFS.open(path, "a");
|
||||
if (!file) {
|
||||
return "failed";
|
||||
}
|
||||
file.println(str);
|
||||
file.close();
|
||||
return "sucсess";
|
||||
}
|
||||
Reference in New Issue
Block a user