diff --git a/Data/Pilgatan/archive/listofsensores_separatescarss.json b/Data/Pilgatan/archive/listofsensores_separatescarss.json new file mode 100644 index 0000000..3b31366 --- /dev/null +++ b/Data/Pilgatan/archive/listofsensores_separatescarss.json @@ -0,0 +1,338 @@ +{ + "Hus_Pilgatan_card_v1": [ + "Date", + "Time", + "SCv1.SCv1-1-Temp.celsius", + "SCv1.SCv1-2-Counter.Counter", + "SCv1.SCv1-3-Temp.celsius", + "SCv1.SCv1-4-Hum.percentRH", + "SCv1.SCv1-5-Pressure.hPa", + "WS.WS-01-Speed.mXs", + "WS.WS-01-Gust.mXs", + "WS.WS-03-Temp.celsius", + "WS.WS-03-Wind.deg", + "WS.WS-05-Hum.percentRH", + "WS.WS-05-Rain (d).mm", + "WS.WS-07-Rain (h).mmXh", + "WS.WS-07-Air pressure.hPa", + "WS.WS-09-UV index.none", + "WS.WS-09-Sun.none", + "W1.W1-01-Temp.celsius", + "W1.W1-01-Hum.percentRH", + "W1.W1-02-Temp.celsius", + "W1.W1-02-Hum.percentRH", + "W1.W1-03-Temp.celsius", + "W1.W1-03-Hum.percentRH", + "W1.W1-04-Temp.celsius", + "W1.W1-04-Hum.percentRH", + "W1.W1-05-Temp.celsius", + "W1.W1-05-Hum.percentRH", + "W1.W1-06-Temp.celsius", + "W1.W1-06-Hum.percentRH", + "W1.W1-07-Temp.celsius", + "W1.W1-07-Hum.percentRH", + "W1.W1-08-Temp.celsius", + "W1.W1-08-Hum.percentRH", + "W1.W1-09-Temp.celsius", + "W1.W1-09-Hum.percentRH", + "W1.W1-10-Temp.celsius", + "W1.W1-10-Hum.percentRH", + "W1.W1-11-Temp.celsius", + "W1.W1-11-Hum.percentRH", + "W1.W1-12-Temp.celsius", + "W1.W1-12-Hum.percentRH", + "W1.W1-intern-Temp.celsius", + "W1.W1-intern-Hum.percentRH", + "W1.intern-intern-Pressure.hPa", + "W1.W1-intern-Runtime.min", + "W2.W2-01-Temp.celsius", + "W2.W2-01-Hum.percentRH", + "W2.W2-02-Temp.celsius", + "W2.W2-02-Hum.percentRH", + "W2.W2-03-Temp.celsius", + "W2.W2-03-Hum.percentRH", + "W2.W2-04-Temp.celsius", + "W2.W2-04-Hum.percentRH", + "W2.W2-05-Temp.celsius", + "W2.W2-05-Hum.percentRH", + "W2.W2-06-Temp.celsius", + "W2.W2-06-Hum.percentRH", + "W2.W2-07-Temp.celsius", + "W2.W2-07-Hum.percentRH", + "W2.W2-08-Temp.celsius", + "W2.W2-08-Hum.percentRH", + "W2.W2-09-Temp.celsius", + "W2.W2-09-Hum.percentRH", + "W2.W2-10-Temp.celsius", + "W2.W2-10-Hum.percentRH", + "W2.W2-11-Temp.celsius", + "W2.W2-11-Hum.percentRH", + "W2.W2-12-Temp.celsius", + "W2.W2-12-Hum.percentRH", + "W2.W2-intern-Temp.celsius", + "W2.W2-intern-Hum.percentRH", + "W2.intern-intern-Pressure.hPa", + "W2.W2-intern-Runtime.min", + "W3.W3-01-Temp.celsius", + "W3.W3-01-Hum.percentRH", + "W3.W3-02-Temp.celsius", + "W3.W3-02-Hum.percentRH", + "W3.W3-03-Temp.celsius", + "W3.W3-03-Hum.percentRH", + "W3.W3-04-Temp.celsius", + "W3.W3-04-Hum.percentRH", + "W3.W3-05-Temp.celsius", + "W3.W3-05-Hum.percentRH", + "W3.W3-06-Temp.celsius", + "W3.W3-06-Hum.percentRH", + "W3.W3-07-Temp.celsius", + "W3.W3-07-Hum.percentRH", + "W3.W3-08-Temp.celsius", + "W3.W3-08-Hum.percentRH", + "W3.W3-09-Temp.celsius", + "W3.W3-09-Hum.percentRH", + "W3.W3-10-Temp.celsius", + "W3.W3-10-Hum.percentRH", + "W3.W3-11-Temp.celsius", + "W3.W3-11-Hum.percentRH", + "W3.W3-12-Temp.celsius", + "W3.W3-12-Hum.percentRH", + "W3.W3-intern-Temp.celsius", + "W3.W3-intern-Hum.percentRH", + "W3.intern-intern-Pressure.hPa", + "W3.W3-intern-Runtime.min", + "W4.W4-01-Temp.celsius", + "W4.W4-01-Hum.percentRH", + "W4.W4-02-Temp.celsius", + "W4.W4-02-Hum.percentRH", + "W4.W4-03-Temp.celsius", + "W4.W4-03-Hum.percentRH", + "W4.W4-04-Temp.celsius", + "W4.W4-04-Hum.percentRH", + "W4.W4-05-Temp.celsius", + "W4.W4-05-Hum.percentRH", + "W4.W4-06-Temp.celsius", + "W4.W4-06-Hum.percentRH", + "W4.W4-07-Temp.celsius", + "W4.W4-07-Hum.percentRH", + "W4.W4-08-Temp.celsius", + "W4.W4-08-Hum.percentRH", + "W4.W4-09-Temp.celsius", + "W4.W4-09-Hum.percentRH", + "W4.W4-10-Temp.celsius", + "W4.W4-10-Hum.percentRH", + "W4.W4-11-Temp.celsius", + "W4.W4-11-Hum.percentRH", + "W4.W4-12-Temp.celsius", + "W4.W4-12-Hum.percentRH", + "W4.W4-intern-Temp.celsius", + "W4.W4-intern-Hum.percentRH", + "W4.intern-intern-Pressure.hPa", + "W4.W4-intern-Runtime.min", + "S2.S2-01-Temp.celsius", + "S2.S2-01-Hum.percentRH", + "S2.S2-02-Temp.celsius", + "S2.S2-02-Hum.percentRH", + "S2.S2-03-Temp.celsius", + "S2.S2-03-Hum.percentRH", + "S3.S2-01-Temp.celsius", + "S3.S2-01-Hum.percentRH", + "S3.S2-02-Temp.celsius", + "S3.S2-02-Hum.percentRH", + "S3.S2-03-Temp.celsius", + "S3.S2-03-Hum.percentRH", + "S1.S2-01-Temp.celsius", + "S1.S2-01-Hum.percentRH", + "S1.S2-02-Temp.celsius", + "S1.S2-02-Hum.percentRH", + "S1.S2-03-Temp.celsius", + "S1.S2-03-Hum.percentRH", + "S4.S2-01-Temp.celsius", + "S4.S2-01-Hum.percentRH", + "S4.S2-02-Temp.celsius", + "S4.S2-02-Hum.percentRH", + "S4.S2-03-Temp.celsius", + "S4.S2-03-Hum.percentRH", + "S4.S2-intern-Temp.celsius", + "S4.S2-intern-Hum.percentRH", + "S4.intern-intern-Pressure.hPa", + "S4.S2-intern-Runtime.min", + "S6.S6-01-Temp.celsius", + "S6.S6-01-Hum.percentRH", + "S6.S6-02-Temp.celsius", + "S6.S6-02-Hum.percentRH", + "S6.S6-03-Temp.celsius", + "S6.S6-03-Hum.percentRH", + "S7.S6-01-Temp.celsius", + "S7.S6-01-Hum.percentRH", + "S7.S6-02-Temp.celsius", + "S7.S6-02-Hum.percentRH", + "S7.S6-03-Temp.celsius", + "S7.S6-03-Hum.percentRH", + "S5.S6-01-Temp.celsius", + "S5.S6-01-Hum.percentRH", + "S5.S6-02-Temp.celsius", + "S5.S6-02-Hum.percentRH", + "S5.S6-03-Temp.celsius", + "S5.S6-03-Hum.percentRH", + "S8.S6-01-Temp.celsius", + "S8.S6-01-Hum.percentRH", + "S8.S6-02-Temp.celsius", + "S8.S6-02-Hum.percentRH", + "S8.S6-03-Temp.celsius", + "S8.S6-03-Hum.percentRH", + "S8.S6-intern-Temp.celsius", + "S8.S6-intern-Hum.percentRH", + "S8.intern-intern-Pressure.hPa", + "S8.S6-intern-Runtime.min" + ], + "Hus_Pilgatan_card_v6": [ + "Date", + "Time", + "SCv6.SCv6-01-Temp.celsius", + "SCv6.SCv6-02-Counter.Counter", + "SCv6.SCv6-03-Temp.celsius", + "SCv6.SCv6-04-Hum.percentRH", + "SCv6.SCv6-05-Pressure.hPa", + "W5.W5-01-Temp.celsius", + "W5.W5-01-Hum.percentRH", + "W5.W5-02-Temp.celsius", + "W5.W5-02-Hum.percentRH", + "W5.W5-03-Temp.celsius", + "W5.W5-03-Hum.percentRH", + "W5.W5-04-Temp.celsius", + "W5.W5-04-Hum.percentRH", + "W5.W5-05-Temp.celsius", + "W5.W5-05-Hum.percentRH", + "W5.W5-06-Temp.celsius", + "W5.W5-06-Hum.percentRH", + "W5.W5-07-Temp.celsius", + "W5.W5-07-Hum.percentRH", + "W5.W5-08-Temp.celsius", + "W5.W5-08-Hum.percentRH", + "W5.W5-09-Temp.celsius", + "W5.W5-09-Hum.percentRH", + "W5.W5-10-Temp.celsius", + "W5.W5-10-Hum.percentRH", + "W5.W5-11-Temp.celsius", + "W5.W5-11-Hum.percentRH", + "W5.W5-12-Temp.celsius", + "W5.W5-12-Hum.percentRH", + "W5.W5-intern-Temp.celsius", + "W5.W5-intern-Hum.percentRH", + "W5.intern-intern-Pressure.hPa", + "W5.W5-intern-Runtime.min", + "W6.W6-01-Temp.celsius", + "W6.W6-01-Hum.percentRH", + "W6.W6-02-Temp.celsius", + "W6.W6-02-Hum.percentRH", + "W6.W6-03-Temp.celsius", + "W6.W6-03-Hum.percentRH", + "W6.W6-04-Temp.celsius", + "W6.W6-04-Hum.percentRH", + "W6.W6-05-Temp.celsius", + "W6.W6-05-Hum.percentRH", + "W6.W6-06-Temp.celsius", + "W6.W6-06-Hum.percentRH", + "W6.W6-07-Temp.celsius", + "W6.W6-07-Hum.percentRH", + "W6.W6-08-Temp.celsius", + "W6.W6-08-Hum.percentRH", + "W6.W6-09-Temp.celsius", + "W6.W6-09-Hum.percentRH", + "W6.W6-10-Temp.celsius", + "W6.W6-10-Hum.percentRH", + "W6.W6-11-Temp.celsius", + "W6.W6-11-Hum.percentRH", + "W6.W6-12-Temp.celsius", + "W6.W6-12-Hum.percentRH", + "W6.W6-intern-Temp.celsius", + "W6.W6-intern-Hum.percentRH", + "W6.intern-intern-Pressure.hPa", + "W6.W6-intern-Runtime.min", + "W7.W7-01-Temp.celsius", + "W7.W7-01-Hum.percentRH", + "W7.W7-02-Temp.celsius", + "W7.W7-02-Hum.percentRH", + "W7.W7-03-Temp.celsius", + "W7.W7-03-Hum.percentRH", + "W7.W7-04-Temp.celsius", + "W7.W7-04-Hum.percentRH", + "W7.W7-05-Temp.celsius", + "W7.W7-05-Hum.percentRH", + "W7.W7-06-Temp.celsius", + "W7.W7-06-Hum.percentRH", + "W7.W7-07-Temp.celsius", + "W7.W7-07-Hum.percentRH", + "W7.W7-08-Temp.celsius", + "W7.W7-08-Hum.percentRH", + "W7.W7-09-Temp.celsius", + "W7.W7-09-Hum.percentRH", + "W7.W7-10-Temp.celsius", + "W7.W7-10-Hum.percentRH", + "W7.W7-11-Temp.celsius", + "W7.W7-11-Hum.percentRH", + "W7.W7-12-Temp.celsius", + "W7.W7-12-Hum.percentRH", + "W7.W7-intern-Temp.celsius", + "W7.W7-intern-Hum.percentRH", + "W7.intern-intern-Pressure.hPa", + "W7.W7-intern-Runtime.min", + "W8.W8-01-Temp.celsius", + "W8.W8-01-Hum.percentRH", + "W8.W8-02-Temp.celsius", + "W8.W8-02-Hum.percentRH", + "W8.W8-03-Temp.celsius", + "W8.W8-03-Hum.percentRH", + "W8.W8-04-Temp.celsius", + "W8.W8-04-Hum.percentRH", + "W8.W8-05-Temp.celsius", + "W8.W8-05-Hum.percentRH", + "W8.W8-06-Temp.celsius", + "W8.W8-06-Hum.percentRH", + "W8.W8-07-Temp.celsius", + "W8.W8-07-Hum.percentRH", + "W8.W8-08-Temp.celsius", + "W8.W8-08-Hum.percentRH", + "W8.W8-09-Temp.celsius", + "W8.W8-09-Hum.percentRH", + "W8.W8-10-Temp.celsius", + "W8.W8-10-Hum.percentRH", + "W8.W8-11-Temp.celsius", + "W8.W8-11-Hum.percentRH", + "W8.W8-12-Temp.celsius", + "W8.W8-12-Hum.percentRH", + "W8.W8-intern-Temp.celsius", + "W8.W8-intern-Hum.percentRH", + "W8.intern-intern-Pressure.hPa", + "W8.W8-intern-Runtime.min", + "R1.R1-01-Temp.celsius", + "R1.R1-01-Hum.percentRH", + "R1.R1-02-Temp.celsius", + "R1.R1-02-Hum.percentRH", + "R1.R1-03-Temp.celsius", + "R1.R1-03-Hum.percentRH", + "R1.R1-04-Temp.celsius", + "R1.R1-04-Hum.percentRH", + "R1.R1-05-Temp.celsius", + "R1.R1-05-Hum.percentRH", + "R1.R1-06-Temp.celsius", + "R1.R1-06-Hum.percentRH", + "R2.R1-01-Temp.celsius", + "R2.R1-01-Hum.percentRH", + "R2.R1-02-Temp.celsius", + "R2.R1-02-Hum.percentRH", + "R2.R1-03-Temp.celsius", + "R2.R1-03-Hum.percentRH", + "R2.R1-04-Temp.celsius", + "R2.R1-04-Hum.percentRH", + "R2.R1-05-Temp.celsius", + "R2.R1-05-Hum.percentRH", + "R2.R1-06-Temp.celsius", + "R2.R1-06-Hum.percentRH", + "R2.R1-intern-Temp.celsius", + "R2.R1-intern-Hum.percentRH", + "R2.intern-intern-Pressure.hPa", + "R2.R1-intern-Runtime.min" + ] +} diff --git a/py/Boards/Charlie/test1.json b/py/Boards/Charlie/test1.json new file mode 100644 index 0000000..041532a --- /dev/null +++ b/py/Boards/Charlie/test1.json @@ -0,0 +1 @@ +{"Name": "test1", "Description": "this is a test", "Hus": "Charlie", "col-left": [{"order": 0, "id": "P-txt-723017", "text": "eeeeeeee", "api_url": null}, {"order": 1, "id": "parallel-4286811", "text": "", "api_url": "parallel/daily?hus=Charlie&family=MP1_1&type=celsius&day=2022-12-15"}], "col-center": [{"order": 0, "id": "G-txt-910177", "text": "err we", "api_url": null}, {"order": 1, "id": "grid-438525", "text": "", "api_url": "grid/yearly?hus=Charlie&sensor=Temp_MP1_1_Pos1&type=celsius&year=2023"}], "col-right": [{"order": 0, "id": "H-txt-974001", "text": "rerer er re", "api_url": null}, {"order": 1, "id": "horizon-487744", "text": "", "api_url": "horizon/daily?hus=Charlie&family=MP1_1&type=celsius&day=2023-02-07"}]} \ No newline at end of file diff --git a/py/Boards/Charlie/test2.json b/py/Boards/Charlie/test2.json new file mode 100644 index 0000000..abc6032 --- /dev/null +++ b/py/Boards/Charlie/test2.json @@ -0,0 +1 @@ +{"Name": "test2", "Description": "this is exactly like test1", "Hus": "Charlie", "col-left": [{"order": 0, "id": "P-txt-723017", "text": "eeeeeeeeeeeeeeee", "api_url": null}, {"order": 1, "id": "parallel-4286811", "text": "", "api_url": "parallel/daily?hus=Charlie&family=MP1_1&type=celsius&day=2022-12-15"}], "col-center": [{"order": 0, "id": "G-txt-910177", "text": "err weerr we", "api_url": null}, {"order": 1, "id": "grid-438525", "text": "", "api_url": "grid/yearly?hus=Charlie&sensor=Temp_MP1_1_Pos1&type=celsius&year=2023"}], "col-right": [{"order": 0, "id": "H-txt-974001", "text": "rerer er rererer er re", "api_url": null}, {"order": 1, "id": "horizon-487744", "text": "", "api_url": "horizon/daily?hus=Charlie&family=MP1_1&type=celsius&day=2023-02-07"}]} \ No newline at end of file diff --git a/py/Boards/Charlie/test3.json b/py/Boards/Charlie/test3.json new file mode 100644 index 0000000..0e77d50 --- /dev/null +++ b/py/Boards/Charlie/test3.json @@ -0,0 +1 @@ +{"Name": "test3", "Description": "test2 has TXT+Diagram -> 1+2, 1+2 and 1+2", "Hus": "Charlie", "col-left": [{"order": 0, "id": "P-txt-723017", "text": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", "api_url": null}, {"order": 1, "id": "parallel-4286811", "text": "", "api_url": "parallel/daily?hus=Charlie&family=MP1_1&type=celsius&day=2022-12-15"}, {"order": 2, "id": "parallel-8519775", "text": "", "api_url": "parallel/yearly?hus=Charlie&family=MP1_1&type=celsius&year=2023"}], "col-center": [{"order": 0, "id": "G-txt-910177", "text": "err weerr weerr weerr we", "api_url": null}, {"order": 1, "id": "grid-438525", "text": "", "api_url": "grid/yearly?hus=Charlie&sensor=Temp_MP1_1_Pos1&type=celsius&year=2023"}, {"order": 2, "id": "grid-628976", "text": "", "api_url": "grid/monthly?hus=Charlie&sensor=Temp_MP1_1_Pos1&type=celsius&year=2023&month=01"}], "col-right": [{"order": 0, "id": "H-txt-974001", "text": "rerer er rererer er rererer er rererer er re", "api_url": null}, {"order": 1, "id": "horizon-487744", "text": "", "api_url": "horizon/daily?hus=Charlie&family=MP1_1&type=celsius&day=2023-02-07"}, {"order": 2, "id": "horizon-138015", "text": "", "api_url": "horizon/weekly?hus=Charlie&family=MP1_1&type=celsius&year=2023&week=14"}]} \ No newline at end of file diff --git a/py/Boards/Pilgatan/2222222.json b/py/Boards/Pilgatan/2222222.json new file mode 100644 index 0000000..70fc4b4 --- /dev/null +++ b/py/Boards/Pilgatan/2222222.json @@ -0,0 +1 @@ +{"Name": "2222222", "Description": "333333333", "Hus": "Pilgatan", "col-left": [], "col-center": [], "col-right": []} \ No newline at end of file diff --git a/py/Boards/Pilgatan/dddd.json b/py/Boards/Pilgatan/dddd.json new file mode 100644 index 0000000..94496dc --- /dev/null +++ b/py/Boards/Pilgatan/dddd.json @@ -0,0 +1 @@ +{"Name": "dddd", "Description": "fff", "Hus": "Pilgatan", "col-left": [], "col-center": [], "col-right": []} \ No newline at end of file diff --git a/py/Boards/Pilgatan/ee.json b/py/Boards/Pilgatan/ee.json new file mode 100644 index 0000000..846e298 --- /dev/null +++ b/py/Boards/Pilgatan/ee.json @@ -0,0 +1 @@ +{"Name": "ee", "Description": "ee", "Hus": "Pilgatan", "col-left": [{"order": 0, "id": "parallel-5047360", "text": "", "api_url": "parallel/daily?hus=Pilgatan&family=SCv1&type=celsius&day=2023-06-06"}], "col-center": [{"order": 0, "id": "grid-175161", "text": "", "api_url": "grid/monthly?hus=Pilgatan&sensor=SCv1-1-Temp&type=celsius&year=2023&month=01"}], "col-right": [{"order": 0, "id": "horizon-970414", "text": "", "api_url": "horizon/daily?hus=Pilgatan&family=SCv1&type=celsius&day=2023-06-05"}]} \ No newline at end of file diff --git a/py/Boards/Pilgatan/rr.json b/py/Boards/Pilgatan/rr.json new file mode 100644 index 0000000..a669ee4 --- /dev/null +++ b/py/Boards/Pilgatan/rr.json @@ -0,0 +1 @@ +{"Name": "rr", "Description": "rr", "Hus": "Pilgatan", "col-left": [], "col-center": [], "col-right": []} \ No newline at end of file diff --git a/web-html/config/config.js b/web-html/config/config.js index dc4518a..5eacc27 100644 --- a/web-html/config/config.js +++ b/web-html/config/config.js @@ -4,7 +4,7 @@ homePagageUrl = "./home.html"; h1_title = "Welcome to the TräHus flexyboard"; subtitle = 'This application is a flexyboard that enables monitorization of time-series sensors.'; -x1 = "..."; +base_url_API = "http://localhost:5000"; x2 = "..."; credits = "Infravis.se (LNU node)"; diff --git a/web-html/config/datamap.js b/web-html/config/datamap.js index f64b86e..a74a606 100644 --- a/web-html/config/datamap.js +++ b/web-html/config/datamap.js @@ -11,17 +11,16 @@ var PROJECTS = "map": "imgs/samplemap.png", "map_url": "http://", "range_years_month": ["2018-07", "2023-08"], // Defina the range of time you want to be able to choose, for example["2018-07", "2023-08"] + "listOfSensors":["MP1_1.Temp_MP1_1_Pos1.celsius", "MP1_1.RF_MP1_1_Pos1.percentRH", "MP1_1.Temp_MP1_1_Pos2.celsius", "MP1_1.RF_MP1_1_Pos2.percentRH", "MP1_1.Temp_MP1_1_Pos3.celsius", "MP1_1.RF_MP1_1_Pos3.percentRH", "MP1_1.Temp_MP1_1_Pos4.celsius", "MP1_1.RF_MP1_1_Pos4.percentRH", "MP1_1.Temp_MP1_1_Pos5.celsius", "MP1_1.RF_MP1_1_Pos5.percentRH", "MP1_1.Temp_MP1_1_Pos6.celsius", "MP1_1.RF_MP1_1_Pos6.percentRH", "MP1_2.Temp_MP1_2_Pos1.celsius", "MP1_2.RF_MP1_2_Pos1.percentRH", "MP1_2.Temp_MP1_2_Pos2.celsius", "MP1_2.RF_MP1_2_Pos2.percentRH", "MP1_2.Temp_MP1_2_Pos3.celsius", "MP1_2.RF_MP1_2_Pos3.percentRH", "MP1_2.Temp_MP1_2_Pos4.celsius", "MP1_2.RF_MP1_2_Pos4.percentRH", "MP1_2.Temp_MP1_2_Pos5.celsius", "MP1_2.RF_MP1_2_Pos5.percentRH", "MP1_2.Temp_MP1_2_Pos6.celsius", "MP1_2.RF_MP1_2_Pos6.percentRH", "MP1_3.RelDisp_MP1_4.percent", "MP1_3.AbsDisp_MP1_4.mm", "MP1_3.RelDisp_MP2_X.percent", "MP1_3.AbsDisp_MP2_X.mm", "MP1_3.RelDisp_MP2_Y.percent", "MP1_3.AbsDisp_MP2_Y.mm", "MP1_5.Temp_MP1_5_Pos1.celsius", "MP1_5.RF_MP1_5_Pos1.percentRH", "MP1_5.MC_MP1_5_Pos1.percentEMC", "MP1_5.Resist_MP1_5_Pos1.Mohm", "MP1_5.Temp_MP1_5_Pos2.celsius", "MP1_5.RF_MP1_5_Pos2.percentRH", "MP1_5.MC_MP1_5_Pos2.percentEMC", "MP1_5.Resist_MP1_5_Pos2.Mohm", "MP1_5.Temp_MP1_5_Pos3.celsius", "MP1_5.RF_MP1_5_Pos3.percentRH", "MP1_5.MC_MP1_5_Pos3.percentEMC", "MP1_5.Resist_MP1_5_Pos3.Mohm", "MP1_5.TempCond_MP1_5.celsius", "MP1_5.RFCond_MP1_5.percentRH", "Internal.Temp_SC4", "Internal.Count_SC4", "Temp_MP4_1_Pos1", "MP4_1.RF_MP4_1_Pos1", "MP4_1.Temp_MP4_1_Pos2", "MP4_1.RF_MP4_1_Pos2", "MP4_1.Temp_MP4_1_Pos3", "MP4_1.RF_MP4_1_Pos3", "MP4_1.Temp_MP4_1_Pos4", "MP4_1.RF_MP4_1_Pos4", "MP4_1.Temp_MP4_1_Pos5", "MP4_1.RF_MP4_1_Pos5", "MP4_1.Temp_MP4_1_Pos6", "MP4_1.RF_MP4_1_Pos6", "MP4_1.AirPres_MP4_1", "Temp_MP4_2_Pos1", "MP4_2.RF_MP4_2_Pos1", "MP4_2.Temp_MP4_2_Pos2", "MP4_2.RF_MP4_2_Pos2", "MP4_2.Temp_MP4_2_Pos3", "MP4_2.RF_MP4_2_Pos3", "MP4_2.Temp_MP4_2_Pos4", "MP4_2.RF_MP4_2_Pos4", "MP4_2.Temp_MP4_2_Pos5", "MP4_2.RF_MP4_2_Pos5", "MP4_2.Temp_MP4_2_Pos6", "MP4_2.RF_MP4_2_Pos6","AvgWind_Weather", "WEATHER.MomWind_Weather", "WEATHER.Temp_Weather", "WEATHER.DirWind_Weather", "WEATHER.RF_Weather", "WEATHER.RainDay_Weather", "WEATHER.RainRate_Weather", "WEATHER.AirPres_Weather", "AvgWind_Weather", "Internal.Temp_SC1.celsius", "Internal.Count_SC1.celsius", "WEATHER.MomWind_Weather", "WEATHER.Temp_Weather", "WEATHER.DirWind_Weather", "WEATHER.RF_Weather", "WEATHER.RainDay_Weather", "WEATHER.RainRate_Weather", "WEATHER.AirPres_Weather"], "families": [ { "reference": "fam1", // A code to be read by software, not by a human "name":"xxxx", // Human name for the family. Can content any character, words o sentence. - "listOfSensors":["MP1_1.Temp_MP1_1_Pos1.celsius", "MP1_1.RF_MP1_1_Pos1.percentRH", "MP1_1.Temp_MP1_1_Pos2.celsius", "MP1_1.RF_MP1_1_Pos2.percentRH", "MP1_1.Temp_MP1_1_Pos3.celsius", "MP1_1.RF_MP1_1_Pos3.percentRH", "MP1_1.Temp_MP1_1_Pos4.celsius", "MP1_1.RF_MP1_1_Pos4.percentRH", "MP1_1.Temp_MP1_1_Pos5.celsius", "MP1_1.RF_MP1_1_Pos5.percentRH", "MP1_1.Temp_MP1_1_Pos6.celsius", "MP1_1.RF_MP1_1_Pos6.percentRH", "MP1_2.Temp_MP1_2_Pos1.celsius", "MP1_2.RF_MP1_2_Pos1.percentRH", "MP1_2.Temp_MP1_2_Pos2.celsius", "MP1_2.RF_MP1_2_Pos2.percentRH", "MP1_2.Temp_MP1_2_Pos3.celsius", "MP1_2.RF_MP1_2_Pos3.percentRH", "MP1_2.Temp_MP1_2_Pos4.celsius", "MP1_2.RF_MP1_2_Pos4.percentRH", "MP1_2.Temp_MP1_2_Pos5.celsius", "MP1_2.RF_MP1_2_Pos5.percentRH", "MP1_2.Temp_MP1_2_Pos6.celsius", "MP1_2.RF_MP1_2_Pos6.percentRH", "MP1_3.RelDisp_MP1_4.percent", "MP1_3.AbsDisp_MP1_4.mm", "MP1_3.RelDisp_MP2_X.percent", "MP1_3.AbsDisp_MP2_X.mm", "MP1_3.RelDisp_MP2_Y.percent", "MP1_3.AbsDisp_MP2_Y.mm", "MP1_5.Temp_MP1_5_Pos1.celsius", "MP1_5.RF_MP1_5_Pos1.percentRH", "MP1_5.MC_MP1_5_Pos1.percentEMC", "MP1_5.Resist_MP1_5_Pos1.Mohm", "MP1_5.Temp_MP1_5_Pos2.celsius", "MP1_5.RF_MP1_5_Pos2.percentRH", "MP1_5.MC_MP1_5_Pos2.percentEMC", "MP1_5.Resist_MP1_5_Pos2.Mohm", "MP1_5.Temp_MP1_5_Pos3.celsius", "MP1_5.RF_MP1_5_Pos3.percentRH", "MP1_5.MC_MP1_5_Pos3.percentEMC", "MP1_5.Resist_MP1_5_Pos3.Mohm", "MP1_5.TempCond_MP1_5.celsius", "MP1_5.RFCond_MP1_5.percentRH", "Internal.Temp_SC4", "Internal.Count_SC4", "Temp_MP4_1_Pos1", "MP4_1.RF_MP4_1_Pos1", "MP4_1.Temp_MP4_1_Pos2", "MP4_1.RF_MP4_1_Pos2", "MP4_1.Temp_MP4_1_Pos3", "MP4_1.RF_MP4_1_Pos3", "MP4_1.Temp_MP4_1_Pos4", "MP4_1.RF_MP4_1_Pos4", "MP4_1.Temp_MP4_1_Pos5", "MP4_1.RF_MP4_1_Pos5", "MP4_1.Temp_MP4_1_Pos6", "MP4_1.RF_MP4_1_Pos6", "MP4_1.AirPres_MP4_1", "Temp_MP4_2_Pos1", "MP4_2.RF_MP4_2_Pos1", "MP4_2.Temp_MP4_2_Pos2", "MP4_2.RF_MP4_2_Pos2", "MP4_2.Temp_MP4_2_Pos3", "MP4_2.RF_MP4_2_Pos3", "MP4_2.Temp_MP4_2_Pos4", "MP4_2.RF_MP4_2_Pos4", "MP4_2.Temp_MP4_2_Pos5", "MP4_2.RF_MP4_2_Pos5", "MP4_2.Temp_MP4_2_Pos6", "MP4_2.RF_MP4_2_Pos6","AvgWind_Weather", "WEATHER.MomWind_Weather", "WEATHER.Temp_Weather", "WEATHER.DirWind_Weather", "WEATHER.RF_Weather", "WEATHER.RainDay_Weather", "WEATHER.RainRate_Weather", "WEATHER.AirPres_Weather", "AvgWind_Weather", "Internal.Temp_SC1.celsius", "Internal.Count_SC1.celsius", "WEATHER.MomWind_Weather", "WEATHER.Temp_Weather", "WEATHER.DirWind_Weather", "WEATHER.RF_Weather", "WEATHER.RainDay_Weather", "WEATHER.RainRate_Weather", "WEATHER.AirPres_Weather"], "position":[5, 10, 15, 20, 25, 30] }, { "reference": "fam2", // A code to be read by software, not by a human "name":"xxxx", // Human name for the family. Can content any character, words o sentence. - "listOfSensors":["Charly-Fam-S1.1-Temp", "Charly-Fam1-S1.2-Temp", "", "Charly-Fam1-S1.3-Temp", "Charly-Fam1-S1.4-Temp"], "position":[5, 10, 15, 20, 25, 30] } ] @@ -35,17 +34,16 @@ var PROJECTS = "map": "imgs/housepilgatan_map.png", "map_url": "https://maps.app.goo.gl/HHj2Xua5doRufLQF6", "range_years_month": ["2021-02", "2023-10"], // Defina the range of time you want to be able to choose, for example["2018-07", "2023-08"] + "listOfSensors": ["SCv1.SCv1-1-Temp.celsius", "SCv1.SCv1-2-Counter.Counter", "SCv1.SCv1-3-Temp.celsius", "SCv1.SCv1-4-Hum.percentRH", "SCv1.SCv1-5-Pressure.hPa", "WS.WS-01-Speed.mXs", "WS.WS-01-Gust.mXs", "WS.WS-03-Temp.celsius", "WS.WS-03-Wind.deg", "WS.WS-05-Hum.percentRH", "WS.WS-05-Rain (d).mm", "WS.WS-07-Rain (h).mmXh", "WS.WS-07-Air pressure.hPa", "WS.WS-09-UV index.none", "WS.WS-09-Sun.none", "W1.W1-01-Temp.celsius", "W1.W1-01-Hum.percentRH", "W1.W1-02-Temp.celsius", "W1.W1-02-Hum.percentRH", "W1.W1-03-Temp.celsius", "W1.W1-03-Hum.percentRH", "W1.W1-04-Temp.celsius", "W1.W1-04-Hum.percentRH", "W1.W1-05-Temp.celsius", "W1.W1-05-Hum.percentRH", "W1.W1-06-Temp.celsius", "W1.W1-06-Hum.percentRH", "W1.W1-07-Temp.celsius", "W1.W1-07-Hum.percentRH", "W1.W1-08-Temp.celsius", "W1.W1-08-Hum.percentRH", "W1.W1-09-Temp.celsius", "W1.W1-09-Hum.percentRH", "W1.W1-10-Temp.celsius", "W1.W1-10-Hum.percentRH", "W1.W1-11-Temp.celsius", "W1.W1-11-Hum.percentRH", "W1.W1-12-Temp.celsius", "W1.W1-12-Hum.percentRH", "W1.W1-intern-Temp.celsius", "W1.W1-intern-Hum.percentRH", "W1.intern-intern-Pressure.hPa", "W1.W1-intern-Runtime.min", "W2.W2-01-Temp.celsius", "W2.W2-01-Hum.percentRH", "W2.W2-02-Temp.celsius", "W2.W2-02-Hum.percentRH", "W2.W2-03-Temp.celsius", "W2.W2-03-Hum.percentRH", "W2.W2-04-Temp.celsius", "W2.W2-04-Hum.percentRH", "W2.W2-05-Temp.celsius", "W2.W2-05-Hum.percentRH", "W2.W2-06-Temp.celsius", "W2.W2-06-Hum.percentRH", "W2.W2-07-Temp.celsius", "W2.W2-07-Hum.percentRH", "W2.W2-08-Temp.celsius", "W2.W2-08-Hum.percentRH", "W2.W2-09-Temp.celsius", "W2.W2-09-Hum.percentRH", "W2.W2-10-Temp.celsius", "W2.W2-10-Hum.percentRH", "W2.W2-11-Temp.celsius", "W2.W2-11-Hum.percentRH", "W2.W2-12-Temp.celsius", "W2.W2-12-Hum.percentRH", "W2.W2-intern-Temp.celsius", "W2.W2-intern-Hum.percentRH", "W2.intern-intern-Pressure.hPa", "W2.W2-intern-Runtime.min", "W3.W3-01-Temp.celsius", "W3.W3-01-Hum.percentRH", "W3.W3-02-Temp.celsius", "W3.W3-02-Hum.percentRH", "W3.W3-03-Temp.celsius", "W3.W3-03-Hum.percentRH", "W3.W3-04-Temp.celsius", "W3.W3-04-Hum.percentRH", "W3.W3-05-Temp.celsius", "W3.W3-05-Hum.percentRH", "W3.W3-06-Temp.celsius", "W3.W3-06-Hum.percentRH", "W3.W3-07-Temp.celsius", "W3.W3-07-Hum.percentRH", "W3.W3-08-Temp.celsius", "W3.W3-08-Hum.percentRH", "W3.W3-09-Temp.celsius", "W3.W3-09-Hum.percentRH", "W3.W3-10-Temp.celsius", "W3.W3-10-Hum.percentRH", "W3.W3-11-Temp.celsius", "W3.W3-11-Hum.percentRH", "W3.W3-12-Temp.celsius", "W3.W3-12-Hum.percentRH", "W3.W3-intern-Temp.celsius", "W3.W3-intern-Hum.percentRH", "W3.intern-intern-Pressure.hPa", "W3.W3-intern-Runtime.min", "W4.W4-01-Temp.celsius", "W4.W4-01-Hum.percentRH", "W4.W4-02-Temp.celsius", "W4.W4-02-Hum.percentRH", "W4.W4-03-Temp.celsius", "W4.W4-03-Hum.percentRH", "W4.W4-04-Temp.celsius", "W4.W4-04-Hum.percentRH", "W4.W4-05-Temp.celsius", "W4.W4-05-Hum.percentRH", "W4.W4-06-Temp.celsius", "W4.W4-06-Hum.percentRH", "W4.W4-07-Temp.celsius", "W4.W4-07-Hum.percentRH", "W4.W4-08-Temp.celsius", "W4.W4-08-Hum.percentRH", "W4.W4-09-Temp.celsius", "W4.W4-09-Hum.percentRH", "W4.W4-10-Temp.celsius", "W4.W4-10-Hum.percentRH", "W4.W4-11-Temp.celsius", "W4.W4-11-Hum.percentRH", "W4.W4-12-Temp.celsius", "W4.W4-12-Hum.percentRH", "W4.W4-intern-Temp.celsius", "W4.W4-intern-Hum.percentRH", "W4.intern-intern-Pressure.hPa", "W4.W4-intern-Runtime.min", "S2.S2-01-Temp.celsius", "S2.S2-01-Hum.percentRH", "S2.S2-02-Temp.celsius", "S2.S2-02-Hum.percentRH", "S2.S2-03-Temp.celsius", "S2.S2-03-Hum.percentRH", "S3.S2-01-Temp.celsius", "S3.S2-01-Hum.percentRH", "S3.S2-02-Temp.celsius", "S3.S2-02-Hum.percentRH", "S3.S2-03-Temp.celsius", "S3.S2-03-Hum.percentRH", "S1.S2-01-Temp.celsius", "S1.S2-01-Hum.percentRH", "S1.S2-02-Temp.celsius", "S1.S2-02-Hum.percentRH", "S1.S2-03-Temp.celsius", "S1.S2-03-Hum.percentRH", "S4.S2-01-Temp.celsius", "S4.S2-01-Hum.percentRH", "S4.S2-02-Temp.celsius", "S4.S2-02-Hum.percentRH", "S4.S2-03-Temp.celsius", "S4.S2-03-Hum.percentRH", "S4.S2-intern-Temp.celsius", "S4.S2-intern-Hum.percentRH", "S4.intern-intern-Pressure.hPa", "S4.S2-intern-Runtime.min", "S6.S6-01-Temp.celsius", "S6.S6-01-Hum.percentRH", "S6.S6-02-Temp.celsius", "S6.S6-02-Hum.percentRH", "S6.S6-03-Temp.celsius", "S6.S6-03-Hum.percentRH", "S7.S6-01-Temp.celsius", "S7.S6-01-Hum.percentRH", "S7.S6-02-Temp.celsius", "S7.S6-02-Hum.percentRH", "S7.S6-03-Temp.celsius", "S7.S6-03-Hum.percentRH", "S5.S6-01-Temp.celsius", "S5.S6-01-Hum.percentRH", "S5.S6-02-Temp.celsius", "S5.S6-02-Hum.percentRH", "S5.S6-03-Temp.celsius", "S5.S6-03-Hum.percentRH", "S8.S6-01-Temp.celsius", "S8.S6-01-Hum.percentRH", "S8.S6-02-Temp.celsius", "S8.S6-02-Hum.percentRH", "S8.S6-03-Temp.celsius", "S8.S6-03-Hum.percentRH", "S8.S6-intern-Temp.celsius", "S8.S6-intern-Hum.percentRH", "S8.intern-intern-Pressure.hPa", "S8.S6-intern-Runtime.min", "SCv6.SCv6-01-Temp.celsius", "SCv6.SCv6-02-Counter.Counter", "SCv6.SCv6-03-Temp.celsius", "SCv6.SCv6-04-Hum.percentRH", "SCv6.SCv6-05-Pressure.hPa", "W5.W5-01-Temp.celsius", "W5.W5-01-Hum.percentRH", "W5.W5-02-Temp.celsius", "W5.W5-02-Hum.percentRH", "W5.W5-03-Temp.celsius", "W5.W5-03-Hum.percentRH", "W5.W5-04-Temp.celsius", "W5.W5-04-Hum.percentRH", "W5.W5-05-Temp.celsius", "W5.W5-05-Hum.percentRH", "W5.W5-06-Temp.celsius", "W5.W5-06-Hum.percentRH", "W5.W5-07-Temp.celsius", "W5.W5-07-Hum.percentRH", "W5.W5-08-Temp.celsius", "W5.W5-08-Hum.percentRH", "W5.W5-09-Temp.celsius", "W5.W5-09-Hum.percentRH", "W5.W5-10-Temp.celsius", "W5.W5-10-Hum.percentRH", "W5.W5-11-Temp.celsius", "W5.W5-11-Hum.percentRH", "W5.W5-12-Temp.celsius", "W5.W5-12-Hum.percentRH", "W5.W5-intern-Temp.celsius", "W5.W5-intern-Hum.percentRH", "W5.intern-intern-Pressure.hPa", "W5.W5-intern-Runtime.min", "W6.W6-01-Temp.celsius", "W6.W6-01-Hum.percentRH", "W6.W6-02-Temp.celsius", "W6.W6-02-Hum.percentRH", "W6.W6-03-Temp.celsius", "W6.W6-03-Hum.percentRH", "W6.W6-04-Temp.celsius", "W6.W6-04-Hum.percentRH", "W6.W6-05-Temp.celsius", "W6.W6-05-Hum.percentRH", "W6.W6-06-Temp.celsius", "W6.W6-06-Hum.percentRH", "W6.W6-07-Temp.celsius", "W6.W6-07-Hum.percentRH", "W6.W6-08-Temp.celsius", "W6.W6-08-Hum.percentRH", "W6.W6-09-Temp.celsius", "W6.W6-09-Hum.percentRH", "W6.W6-10-Temp.celsius", "W6.W6-10-Hum.percentRH", "W6.W6-11-Temp.celsius", "W6.W6-11-Hum.percentRH", "W6.W6-12-Temp.celsius", "W6.W6-12-Hum.percentRH", "W6.W6-intern-Temp.celsius", "W6.W6-intern-Hum.percentRH", "W6.intern-intern-Pressure.hPa", "W6.W6-intern-Runtime.min", "W7.W7-01-Temp.celsius", "W7.W7-01-Hum.percentRH", "W7.W7-02-Temp.celsius", "W7.W7-02-Hum.percentRH", "W7.W7-03-Temp.celsius", "W7.W7-03-Hum.percentRH", "W7.W7-04-Temp.celsius", "W7.W7-04-Hum.percentRH", "W7.W7-05-Temp.celsius", "W7.W7-05-Hum.percentRH", "W7.W7-06-Temp.celsius", "W7.W7-06-Hum.percentRH", "W7.W7-07-Temp.celsius", "W7.W7-07-Hum.percentRH", "W7.W7-08-Temp.celsius", "W7.W7-08-Hum.percentRH", "W7.W7-09-Temp.celsius", "W7.W7-09-Hum.percentRH", "W7.W7-10-Temp.celsius", "W7.W7-10-Hum.percentRH", "W7.W7-11-Temp.celsius", "W7.W7-11-Hum.percentRH", "W7.W7-12-Temp.celsius", "W7.W7-12-Hum.percentRH", "W7.W7-intern-Temp.celsius", "W7.W7-intern-Hum.percentRH", "W7.intern-intern-Pressure.hPa", "W7.W7-intern-Runtime.min", "W8.W8-01-Temp.celsius", "W8.W8-01-Hum.percentRH", "W8.W8-02-Temp.celsius", "W8.W8-02-Hum.percentRH", "W8.W8-03-Temp.celsius", "W8.W8-03-Hum.percentRH", "W8.W8-04-Temp.celsius", "W8.W8-04-Hum.percentRH", "W8.W8-05-Temp.celsius", "W8.W8-05-Hum.percentRH", "W8.W8-06-Temp.celsius", "W8.W8-06-Hum.percentRH", "W8.W8-07-Temp.celsius", "W8.W8-07-Hum.percentRH", "W8.W8-08-Temp.celsius", "W8.W8-08-Hum.percentRH", "W8.W8-09-Temp.celsius", "W8.W8-09-Hum.percentRH", "W8.W8-10-Temp.celsius", "W8.W8-10-Hum.percentRH", "W8.W8-11-Temp.celsius", "W8.W8-11-Hum.percentRH", "W8.W8-12-Temp.celsius", "W8.W8-12-Hum.percentRH", "W8.W8-intern-Temp.celsius", "W8.W8-intern-Hum.percentRH", "W8.intern-intern-Pressure.hPa", "W8.W8-intern-Runtime.min", "R1.R1-01-Temp.celsius", "R1.R1-01-Hum.percentRH", "R1.R1-02-Temp.celsius", "R1.R1-02-Hum.percentRH", "R1.R1-03-Temp.celsius", "R1.R1-03-Hum.percentRH", "R1.R1-04-Temp.celsius", "R1.R1-04-Hum.percentRH", "R1.R1-05-Temp.celsius", "R1.R1-05-Hum.percentRH", "R1.R1-06-Temp.celsius", "R1.R1-06-Hum.percentRH", "R2.R1-01-Temp.celsius", "R2.R1-01-Hum.percentRH", "R2.R1-02-Temp.celsius", "R2.R1-02-Hum.percentRH", "R2.R1-03-Temp.celsius", "R2.R1-03-Hum.percentRH", "R2.R1-04-Temp.celsius", "R2.R1-04-Hum.percentRH", "R2.R1-05-Temp.celsius", "R2.R1-05-Hum.percentRH", "R2.R1-06-Temp.celsius", "R2.R1-06-Hum.percentRH", "R2.R1-intern-Temp.celsius", "R2.R1-intern-Hum.percentRH", "R2.intern-intern-Pressure.hPa", "R2.R1-intern-Runtime.min"], "families": [ { "reference": "fam1", // A code to be read by software, not by a human "name":"xxxx", // Human name for the family. Can content any character, words o sentence. - "listOfSensors": ["SCv1.SCv1-1-Temp.celsius", "SCv1.SCv1-2-Counter.Counter", "SCv1.SCv1-3-Temp.celsius", "SCv1.SCv1-4-Hum.percentRH", "SCv1.SCv1-5-Pressure.hPa", "WS.WS-01-Speed.mXs", "WS.WS-01-Gust.mXs", "WS.WS-03-Temp.celsius", "WS.WS-03-Wind.deg", "WS.WS-05-Hum.percentRH", "WS.WS-05-Rain (d).mm", "WS.WS-07-Rain (h).mmXh", "WS.WS-07-Air pressure.hPa", "WS.WS-09-UV index.none", "WS.WS-09-Sun.none", "W1.W1-01-Temp.celsius", "W1.W1-01-Hum.percentRH", "W1.W1-02-Temp.celsius", "W1.W1-02-Hum.percentRH", "W1.W1-03-Temp.celsius", "W1.W1-03-Hum.percentRH", "W1.W1-04-Temp.celsius", "W1.W1-04-Hum.percentRH", "W1.W1-05-Temp.celsius", "W1.W1-05-Hum.percentRH", "W1.W1-06-Temp.celsius", "W1.W1-06-Hum.percentRH", "W1.W1-07-Temp.celsius", "W1.W1-07-Hum.percentRH", "W1.W1-08-Temp.celsius", "W1.W1-08-Hum.percentRH", "W1.W1-09-Temp.celsius", "W1.W1-09-Hum.percentRH", "W1.W1-10-Temp.celsius", "W1.W1-10-Hum.percentRH", "W1.W1-11-Temp.celsius", "W1.W1-11-Hum.percentRH", "W1.W1-12-Temp.celsius", "W1.W1-12-Hum.percentRH", "W1.W1-intern-Temp.celsius", "W1.W1-intern-Hum.percentRH", "W1.intern-intern-Pressure.hPa", "W1.W1-intern-Runtime.min", "W2.W2-01-Temp.celsius", "W2.W2-01-Hum.percentRH", "W2.W2-02-Temp.celsius", "W2.W2-02-Hum.percentRH", "W2.W2-03-Temp.celsius", "W2.W2-03-Hum.percentRH", "W2.W2-04-Temp.celsius", "W2.W2-04-Hum.percentRH", "W2.W2-05-Temp.celsius", "W2.W2-05-Hum.percentRH", "W2.W2-06-Temp.celsius", "W2.W2-06-Hum.percentRH", "W2.W2-07-Temp.celsius", "W2.W2-07-Hum.percentRH", "W2.W2-08-Temp.celsius", "W2.W2-08-Hum.percentRH", "W2.W2-09-Temp.celsius", "W2.W2-09-Hum.percentRH", "W2.W2-10-Temp.celsius", "W2.W2-10-Hum.percentRH", "W2.W2-11-Temp.celsius", "W2.W2-11-Hum.percentRH", "W2.W2-12-Temp.celsius", "W2.W2-12-Hum.percentRH", "W2.W2-intern-Temp.celsius", "W2.W2-intern-Hum.percentRH", "W2.intern-intern-Pressure.hPa", "W2.W2-intern-Runtime.min", "W3.W3-01-Temp.celsius", "W3.W3-01-Hum.percentRH", "W3.W3-02-Temp.celsius", "W3.W3-02-Hum.percentRH", "W3.W3-03-Temp.celsius", "W3.W3-03-Hum.percentRH", "W3.W3-04-Temp.celsius", "W3.W3-04-Hum.percentRH", "W3.W3-05-Temp.celsius", "W3.W3-05-Hum.percentRH", "W3.W3-06-Temp.celsius", "W3.W3-06-Hum.percentRH", "W3.W3-07-Temp.celsius", "W3.W3-07-Hum.percentRH", "W3.W3-08-Temp.celsius", "W3.W3-08-Hum.percentRH", "W3.W3-09-Temp.celsius", "W3.W3-09-Hum.percentRH", "W3.W3-10-Temp.celsius", "W3.W3-10-Hum.percentRH", "W3.W3-11-Temp.celsius", "W3.W3-11-Hum.percentRH", "W3.W3-12-Temp.celsius", "W3.W3-12-Hum.percentRH", "W3.W3-intern-Temp.celsius", "W3.W3-intern-Hum.percentRH", "W3.intern-intern-Pressure.hPa", "W3.W3-intern-Runtime.min", "W4.W4-01-Temp.celsius", "W4.W4-01-Hum.percentRH", "W4.W4-02-Temp.celsius", "W4.W4-02-Hum.percentRH", "W4.W4-03-Temp.celsius", "W4.W4-03-Hum.percentRH", "W4.W4-04-Temp.celsius", "W4.W4-04-Hum.percentRH", "W4.W4-05-Temp.celsius", "W4.W4-05-Hum.percentRH", "W4.W4-06-Temp.celsius", "W4.W4-06-Hum.percentRH", "W4.W4-07-Temp.celsius", "W4.W4-07-Hum.percentRH", "W4.W4-08-Temp.celsius", "W4.W4-08-Hum.percentRH", "W4.W4-09-Temp.celsius", "W4.W4-09-Hum.percentRH", "W4.W4-10-Temp.celsius", "W4.W4-10-Hum.percentRH", "W4.W4-11-Temp.celsius", "W4.W4-11-Hum.percentRH", "W4.W4-12-Temp.celsius", "W4.W4-12-Hum.percentRH", "W4.W4-intern-Temp.celsius", "W4.W4-intern-Hum.percentRH", "W4.intern-intern-Pressure.hPa", "W4.W4-intern-Runtime.min", "S2.S2-01-Temp.celsius", "S2.S2-01-Hum.percentRH", "S2.S2-02-Temp.celsius", "S2.S2-02-Hum.percentRH", "S2.S2-03-Temp.celsius", "S2.S2-03-Hum.percentRH", "S3.S2-01-Temp.celsius", "S3.S2-01-Hum.percentRH", "S3.S2-02-Temp.celsius", "S3.S2-02-Hum.percentRH", "S3.S2-03-Temp.celsius", "S3.S2-03-Hum.percentRH", "S1.S2-01-Temp.celsius", "S1.S2-01-Hum.percentRH", "S1.S2-02-Temp.celsius", "S1.S2-02-Hum.percentRH", "S1.S2-03-Temp.celsius", "S1.S2-03-Hum.percentRH", "S4.S2-01-Temp.celsius", "S4.S2-01-Hum.percentRH", "S4.S2-02-Temp.celsius", "S4.S2-02-Hum.percentRH", "S4.S2-03-Temp.celsius", "S4.S2-03-Hum.percentRH", "S4.S2-intern-Temp.celsius", "S4.S2-intern-Hum.percentRH", "S4.intern-intern-Pressure.hPa", "S4.S2-intern-Runtime.min", "S6.S6-01-Temp.celsius", "S6.S6-01-Hum.percentRH", "S6.S6-02-Temp.celsius", "S6.S6-02-Hum.percentRH", "S6.S6-03-Temp.celsius", "S6.S6-03-Hum.percentRH", "S7.S6-01-Temp.celsius", "S7.S6-01-Hum.percentRH", "S7.S6-02-Temp.celsius", "S7.S6-02-Hum.percentRH", "S7.S6-03-Temp.celsius", "S7.S6-03-Hum.percentRH", "S5.S6-01-Temp.celsius", "S5.S6-01-Hum.percentRH", "S5.S6-02-Temp.celsius", "S5.S6-02-Hum.percentRH", "S5.S6-03-Temp.celsius", "S5.S6-03-Hum.percentRH", "S8.S6-01-Temp.celsius", "S8.S6-01-Hum.percentRH", "S8.S6-02-Temp.celsius", "S8.S6-02-Hum.percentRH", "S8.S6-03-Temp.celsius", "S8.S6-03-Hum.percentRH", "S8.S6-intern-Temp.celsius", "S8.S6-intern-Hum.percentRH", "S8.intern-intern-Pressure.hPa", "S8.S6-intern-Runtime.min", "SCv6.SCv6-01-Temp.celsius", "SCv6.SCv6-02-Counter.Counter", "SCv6.SCv6-03-Temp.celsius", "SCv6.SCv6-04-Hum.percentRH", "SCv6.SCv6-05-Pressure.hPa", "W5.W5-01-Temp.celsius", "W5.W5-01-Hum.percentRH", "W5.W5-02-Temp.celsius", "W5.W5-02-Hum.percentRH", "W5.W5-03-Temp.celsius", "W5.W5-03-Hum.percentRH", "W5.W5-04-Temp.celsius", "W5.W5-04-Hum.percentRH", "W5.W5-05-Temp.celsius", "W5.W5-05-Hum.percentRH", "W5.W5-06-Temp.celsius", "W5.W5-06-Hum.percentRH", "W5.W5-07-Temp.celsius", "W5.W5-07-Hum.percentRH", "W5.W5-08-Temp.celsius", "W5.W5-08-Hum.percentRH", "W5.W5-09-Temp.celsius", "W5.W5-09-Hum.percentRH", "W5.W5-10-Temp.celsius", "W5.W5-10-Hum.percentRH", "W5.W5-11-Temp.celsius", "W5.W5-11-Hum.percentRH", "W5.W5-12-Temp.celsius", "W5.W5-12-Hum.percentRH", "W5.W5-intern-Temp.celsius", "W5.W5-intern-Hum.percentRH", "W5.intern-intern-Pressure.hPa", "W5.W5-intern-Runtime.min", "W6.W6-01-Temp.celsius", "W6.W6-01-Hum.percentRH", "W6.W6-02-Temp.celsius", "W6.W6-02-Hum.percentRH", "W6.W6-03-Temp.celsius", "W6.W6-03-Hum.percentRH", "W6.W6-04-Temp.celsius", "W6.W6-04-Hum.percentRH", "W6.W6-05-Temp.celsius", "W6.W6-05-Hum.percentRH", "W6.W6-06-Temp.celsius", "W6.W6-06-Hum.percentRH", "W6.W6-07-Temp.celsius", "W6.W6-07-Hum.percentRH", "W6.W6-08-Temp.celsius", "W6.W6-08-Hum.percentRH", "W6.W6-09-Temp.celsius", "W6.W6-09-Hum.percentRH", "W6.W6-10-Temp.celsius", "W6.W6-10-Hum.percentRH", "W6.W6-11-Temp.celsius", "W6.W6-11-Hum.percentRH", "W6.W6-12-Temp.celsius", "W6.W6-12-Hum.percentRH", "W6.W6-intern-Temp.celsius", "W6.W6-intern-Hum.percentRH", "W6.intern-intern-Pressure.hPa", "W6.W6-intern-Runtime.min", "W7.W7-01-Temp.celsius", "W7.W7-01-Hum.percentRH", "W7.W7-02-Temp.celsius", "W7.W7-02-Hum.percentRH", "W7.W7-03-Temp.celsius", "W7.W7-03-Hum.percentRH", "W7.W7-04-Temp.celsius", "W7.W7-04-Hum.percentRH", "W7.W7-05-Temp.celsius", "W7.W7-05-Hum.percentRH", "W7.W7-06-Temp.celsius", "W7.W7-06-Hum.percentRH", "W7.W7-07-Temp.celsius", "W7.W7-07-Hum.percentRH", "W7.W7-08-Temp.celsius", "W7.W7-08-Hum.percentRH", "W7.W7-09-Temp.celsius", "W7.W7-09-Hum.percentRH", "W7.W7-10-Temp.celsius", "W7.W7-10-Hum.percentRH", "W7.W7-11-Temp.celsius", "W7.W7-11-Hum.percentRH", "W7.W7-12-Temp.celsius", "W7.W7-12-Hum.percentRH", "W7.W7-intern-Temp.celsius", "W7.W7-intern-Hum.percentRH", "W7.intern-intern-Pressure.hPa", "W7.W7-intern-Runtime.min", "W8.W8-01-Temp.celsius", "W8.W8-01-Hum.percentRH", "W8.W8-02-Temp.celsius", "W8.W8-02-Hum.percentRH", "W8.W8-03-Temp.celsius", "W8.W8-03-Hum.percentRH", "W8.W8-04-Temp.celsius", "W8.W8-04-Hum.percentRH", "W8.W8-05-Temp.celsius", "W8.W8-05-Hum.percentRH", "W8.W8-06-Temp.celsius", "W8.W8-06-Hum.percentRH", "W8.W8-07-Temp.celsius", "W8.W8-07-Hum.percentRH", "W8.W8-08-Temp.celsius", "W8.W8-08-Hum.percentRH", "W8.W8-09-Temp.celsius", "W8.W8-09-Hum.percentRH", "W8.W8-10-Temp.celsius", "W8.W8-10-Hum.percentRH", "W8.W8-11-Temp.celsius", "W8.W8-11-Hum.percentRH", "W8.W8-12-Temp.celsius", "W8.W8-12-Hum.percentRH", "W8.W8-intern-Temp.celsius", "W8.W8-intern-Hum.percentRH", "W8.intern-intern-Pressure.hPa", "W8.W8-intern-Runtime.min", "R1.R1-01-Temp.celsius", "R1.R1-01-Hum.percentRH", "R1.R1-02-Temp.celsius", "R1.R1-02-Hum.percentRH", "R1.R1-03-Temp.celsius", "R1.R1-03-Hum.percentRH", "R1.R1-04-Temp.celsius", "R1.R1-04-Hum.percentRH", "R1.R1-05-Temp.celsius", "R1.R1-05-Hum.percentRH", "R1.R1-06-Temp.celsius", "R1.R1-06-Hum.percentRH", "R2.R1-01-Temp.celsius", "R2.R1-01-Hum.percentRH", "R2.R1-02-Temp.celsius", "R2.R1-02-Hum.percentRH", "R2.R1-03-Temp.celsius", "R2.R1-03-Hum.percentRH", "R2.R1-04-Temp.celsius", "R2.R1-04-Hum.percentRH", "R2.R1-05-Temp.celsius", "R2.R1-05-Hum.percentRH", "R2.R1-06-Temp.celsius", "R2.R1-06-Hum.percentRH", "R2.R1-intern-Temp.celsius", "R2.R1-intern-Hum.percentRH", "R2.intern-intern-Pressure.hPa", "R2.R1-intern-Runtime.min"], "position":[5, 10, 15, 20, 25, 30] }, { "reference": "fam2", // A code to be read by software, not by a human "name":"xxxx", // Human name for the family. Can content any character, words o sentence. - "listOfSensors":["a", "b"], "position":[5, 10, 15, 20, 25, 30] } ] diff --git a/web-html/css/dash.css b/web-html/css/dash.css index e86242e..87e0d77 100644 --- a/web-html/css/dash.css +++ b/web-html/css/dash.css @@ -1,107 +1,3 @@ - - -/* Horizon graph stules*/ -.horizon { - border-top: solid 1px #000; - border-bottom: solid 1px #000; - overflow: hidden; - position: relative; -} - -.horizon + .horizon { - border-top: none; -} - -.horizon canvas { - display: block; - image-rendering: pixelated; -} - -.horizon .title, -.horizon .value { - bottom: 0; - line-height: 30px; - margin: 0 6px; - position: absolute; - font-family: sans-serif; - text-shadow: 0 1px 0 rgba(255,255,255,.5); - white-space: nowrap; -} - -.horizon .title { - left: 0; -} - -.horizon .value { - right: 0; -} -.color { - width:70px; - height: 70px; - margin:2px; - float:left; -} - -/* ***************************************** */ -/* Style for the right upper corner div */ -.corner-div { - position: relative; - border: 1px solid #ccc; - padding: 20px; - margin-bottom: 20px; /* Add some spacing between divs */ -} - -/* Style for the close button */ -.corner-close { - position: absolute; - top: 5px; - right: 5px; - cursor: pointer; -} - -/* Style for the pop-up button */ -.corner-popup { - position: absolute; - top: 5px; - right: 40px; - cursor: pointer; -} - -/* Style for the print button */ -.corner-print { - position: absolute; - top: 5px; - right: 75px; - cursor: pointer; -} - - -/*Grid monthly styles*/ -/* Add your CSS styles here */ -.heatmap rect { - stroke: #fff; -} - -#tooltip { - padding: 5px; - background: rgba(0, 0, 0, 0.7); - color: white; - border-radius: 1px; -} - -.year-label { - text-anchor: end; - font-size: 1.5em; - font-weight: bold; - margin-right: 20px; -} - -/* ------------------ */ - -.c3-grid-lines { - width:100%; -} - .card-img-top { width:150px; } @@ -176,4 +72,4 @@ font-size: 12px; fill: none; font-size: 10px; shape-rendering: crispEdges; -} \ No newline at end of file +} diff --git a/web-html/dash.html b/web-html/dash.html index 57324f3..9aea7d4 100644 --- a/web-html/dash.html +++ b/web-html/dash.html @@ -1,12 +1,12 @@ - + TräHus dashboard - + @@ -18,84 +18,9 @@ - + @@ -112,16 +37,12 @@ - - -
- @@ -133,9 +54,9 @@
Manage board:   - +    - + Templates:      @@ -154,6 +75,50 @@
+ + + + + + + + + @@ -288,7 +253,7 @@

Select Month and Year:

- +

 

@@ -339,7 +304,7 @@
- +

 

@@ -391,9 +356,8 @@
- - - + +

 

@@ -411,7 +375,6 @@ - @@ -481,7 +444,6 @@

 

@@ -489,16 +451,13 @@

 

- -

 

@@ -538,15 +497,13 @@

 

-
- +

 

@@ -579,15 +536,13 @@

 

Select parameter:

-

 

@@ -596,7 +551,7 @@
- +

 

@@ -614,7 +569,6 @@ - @@ -681,7 +635,7 @@
Diagram title: - +

 

@@ -689,12 +643,10 @@

 

-

 

Select parameter:

@@ -707,7 +659,6 @@
@@ -717,7 +668,7 @@
- +
@@ -744,7 +695,6 @@

 

@@ -755,14 +705,13 @@

 

- +

 

@@ -801,7 +750,6 @@

 

@@ -812,7 +760,6 @@

 

@@ -822,7 +769,7 @@
- +

 

@@ -855,7 +802,6 @@

 

@@ -863,7 +809,6 @@

 

@@ -873,7 +818,7 @@ - +

 

@@ -881,7 +826,7 @@
- +
@@ -891,13 +836,16 @@
- - - - + + + + @@ -908,27 +856,16 @@
- - + - - - - + - - - - - - + - - + + diff --git a/web-html/home.html b/web-html/home.html index 0ba0eca..9f59f44 100644 --- a/web-html/home.html +++ b/web-html/home.html @@ -16,11 +16,30 @@ padding: 1rem; border: 1px solid black; margin: 1rem; + max-height: 390px; + scroll-behavior: auto; + overflow-y: scroll; } .card-img-top { max-height:110px; width:150px; } + + .card-body { + position: relative; + height: 390px; /*Set the desired height of the container*/ + } + .card-text { + max-height: 100px; + overflow-y:auto; + } + .card-text:-webkit-scrollbar { + width: 8px; + } + .homeButtons { + position: absolute; + bottom: 0 + } @@ -62,7 +81,7 @@ ...
${houses.hname}

${houses.subtitle}

-

Open dashboard +

Open dashboard inthis window In a new window

diff --git a/web-html/js/dash.js b/web-html/js/dash.js index d073962..73a09df 100644 --- a/web-html/js/dash.js +++ b/web-html/js/dash.js @@ -32,7 +32,7 @@ // DEFAULT INTERFACE BUILDING var myHouse = PROJECTS.items[myNumber]; var myHouseXname = PROJECTS.items[myNumber].xname; -cl(myHouseXname); +//cl(myHouseXname); document.getElementById("h1_title").innerHTML = h1_title; document.getElementById("subtitle").innerHTML = subtitle; @@ -41,7 +41,6 @@ document.getElementById("subtitle").innerHTML = subtitle; // Get and apply the range of time for the data. - ////////////////////////////////// // LIST OF SENSOR NAME and Families. // Get the list of sensors, amnd the range_years_month from config/datamap.js @@ -51,7 +50,7 @@ var range_year_month; for (var i = 0; i < PROJECTS.items.length; i++) { if (PROJECTS.items[i].xname === projectName) { range_year_month = PROJECTS.items[i].range_years_month; - listSensors = PROJECTS.items[i].families[0].listOfSensors; + listSensors = PROJECTS.items[i].listOfSensors; break; } } @@ -195,9 +194,9 @@ document.getElementById("HDParameter").innerHTML = listParametersOptions; //----------------------------- // writeIn and writeInTXT - async function writeIn(formId, formData) { + async function writeIn(formId, formData) {//, apiUrl, myid) { var myColumn = getName(formId[0]) - var myTitle = document.getElementById(formId+"Title").value; + var myTitle = document.getElementById(formId[0]+"Text").value; // cl("formId[0]: "+formId[0]); // cl("myColumn: "+myColumn); @@ -324,7 +323,6 @@ document.getElementById("HDParameter").innerHTML = listParametersOptions; // BUILDING API query var apiUrl = "grid/weekly?hus="+myHouseXname+"&sensor="+sensor+"&type="+type+"&year="+year+"&week="+week; makeApiRequest(formId, apiUrl, myid, myTitle, sensor, type, inDate); - break; //------------------------------- case "GM": @@ -441,7 +439,7 @@ document.getElementById("HDParameter").innerHTML = listParametersOptions; // Parallel function do_parallel(myid, myxs, mycolumns, inMyTitle) { - cl(myxs); + //cl(myxs); c3.generate({ bindto: myid, data: { @@ -479,7 +477,6 @@ function do_parallel(myid, myxs, mycolumns, inMyTitle) { `; var myTitle = "

"+inMyTitle+"

"; my = myid.replace('#', '') - var mainDiv = document.getElementById(my); mainDiv.insertAdjacentHTML("afterbegin", myButtons+myTitle); @@ -1313,89 +1310,6 @@ function do_horizon_row(data, myid, title, myDates) { // FUNCTIONS ///////////////////////////////////////////////// // Function interactions -//////////////////////////////////////////////////////////////// - - -//////////////////////////////// -// SAVE DASHBOARF :: export diagrams + texts to the API - -function getApiUrls() { - var apiUrlsLeft = []; - var apiUrlsCenter = []; - var apiUrlsRight = []; - - document.querySelectorAll('#col-left div').forEach(function(element, index) { - var apiUrl = element.getAttribute('apiurl'); - var id = element.id; - var order = apiUrlsLeft.length; - if (apiUrl === 'txt') { - var clone = element.cloneNode(true); - clone.querySelectorAll('span').forEach(function(span) { - span.parentNode.removeChild(span); - }); - var innerText = clone.innerText.trim(); - apiUrlsLeft.push({ order: order, id: id, text: innerText, api_url: null }); - } else if (apiUrl) { - var h2Element = element.querySelector('h2'); - text = h2Element ? h2Element.innerText.trim() : ''; - apiUrlsLeft.push({ order: order, id: id, text: text, api_url: apiUrl }); - } - }); - - document.querySelectorAll('#col-center div').forEach(function(element, index) { - var apiUrl = element.getAttribute('apiurl'); - var id = element.id; - var text = element.innerHTML.trim(); // Assuming the text is the innerHTML of the element - var order = apiUrlsCenter.length; - if (apiUrl === 'txt') { - var clone = element.cloneNode(true); - clone.querySelectorAll('span').forEach(function(span) { - span.parentNode.removeChild(span); - }); - var innerText = clone.innerText.trim(); - apiUrlsCenter.push({ order: order, id: id, text: innerText, api_url: null }); - } else if (apiUrl) { - var h2Element = element.querySelector('h2'); - text = h2Element ? h2Element.myLen.trim() : ''; - - apiUrlsCenter.push({ order: order, id: id, text: text, api_url: apiUrl }); - } - }); - - document.querySelectorAll('#col-right div').forEach(function(element, index) { - var apiUrl = element.getAttribute('apiurl'); - var id = element.id; - var text = element.innerHTML.trim(); // Assuming the text is the innerHTML of the element - var order = apiUrlsRight.length; - if (apiUrl === 'txt') { - var clone = element.cloneNode(true); - clone.querySelectorAll('span').forEach(function(span) { - span.parentNode.removeChild(span); - }); - var innerText = clone.innerText.trim(); - apiUrlsRight.push({ order: order, id: id, text: innerText, api_url: null }); - } else if (apiUrl) { - var h2Element = element.querySelector('h2'); - text = h2Element ? h2Element.innerText.trim() : ''; - apiUrlsRight.push({ order: order, id: id, text: text, api_url: apiUrl }); - } - }); - - // Similar modifications for #col-center and #col-right - - var result = { - // FIXME : boardName will be entered in the save board form - "boardName" : "my Form name test", - "name": boardName, - "hus": myParam, - "description": myHouse.subtitle, - "col-left": apiUrlsLeft, - "col-center": apiUrlsCenter, - "col-right": apiUrlsRight - }; - - return alert(JSON.stringify(result)); -} @@ -1570,8 +1484,6 @@ document.querySelectorAll('button[type="submit"]').forEach(button => { const formId = event.target.closest('form').id; // Get the form data based on the form ID const formData = getFormData(formId); - // Display or use the form data - //cl(`Form Data for ${formId}:`, formData); // Is it a diagram or a text? if (formId.substring(1)=="Text") { var fromEditor = document.getElementById(formId[0]+"editor").innerHTML; @@ -1581,9 +1493,13 @@ document.querySelectorAll('button[type="submit"]').forEach(button => { var div = doc.querySelector('div[data-lt-tmp-id^="lt-"]'); var textData = div ? div.innerHTML : 'No div found'; writeInTXT(formId, textData); + } if (formId == "saveBoardForm") { + var boardName = document.getElementById("boardName").value; + var boardDesc = document.getElementById("boardDesc").value + getCurrentBoardData(boardName, boardDesc); } else { writeIn(formId, formData); - } + } }); }); @@ -1635,6 +1551,11 @@ const editorContent = editor.innerHTML; console.log(editorContent); } +/////////////////// +// FORMS Check validator required fields: +// +// ... + //////////////////////ç// @@ -1814,35 +1735,243 @@ var firstOpen = true; // > makeApiRequiest // > submit nuttons listener +function getValueByKeyFrrmUrl(key, apiurl) { + const keyValuePairs = apiurl.split("&"); + for (let i = 0; i < keyValuePairs.length; i++) { + const [currentKey, value] = keyValuePairs[i].split("="); + if (currentKey === key) { + return value; + } + } + return null; // Return null if the key is not found +} + +function getFormattedDateFromWeek(week, year) { + const date = new Date(year, 0, 1 + (week - 1) * 7); // January 1st + (week - 1) * 7 days + const day = date.getDate(); + const month = date.getMonth() + 1; // Months are zero-based, so we add 1 + const formattedDate = `${day.toString().padStart(2, '0')}-${month.toString().padStart(2, '0')}-${year}`; + + return formattedDate; +} + +// Checking if any variable for the API query is null and NaN +function checkEmptyVariable(str) { + const queryString = str.split("?")[1]; + if (!queryString) { + console.log("No variables found after the '?' symbol"); + return false; + } + + const variables = queryString.split("&"); + + for (let variable of variables) { + const [key, value] = variable.split("="); + + if (key !== "hus" && (!value || value.trim() === "undefined" || value.toString().includes("undefined"))) { + var missedVar = `Variable "${key}" is empty, undefined, or NaN`; + console.log(missedVar); + console.log(str); + return missedVar; + } + } + + console.log("No empty, undefined, or NaN variables found"); + return false; +} + +//////////////////////////////////////// +// BOARDS: + +//////////////////////////////// +// SAVE BOARD :: export diagrams + texts to the API + +// Function to get all the vurrent data from the board. +function getCurrentBoardData(boardName, boardDesc) { + var apiUrlsLeft = []; + var apiUrlsCenter = []; + var apiUrlsRight = []; + document.querySelectorAll('#col-left div').forEach(function(element, index) { + var apiUrl = element.getAttribute('apiurl'); + var id = element.id; + var order = apiUrlsLeft.length; + if (apiUrl === 'txt') { + var clone = element.cloneNode(true); + clone.querySelectorAll('span').forEach(function(span) { + span.parentNode.removeChild(span); + }); + var innerText = clone.innerText.trim(); + apiUrlsLeft.push({ order: order, id: id, text: innerText, api_url: null }); + } else if (apiUrl) { + var h2Element = element.querySelector('h2'); + text = h2Element ? h2Element.innerText.trim() : ''; + apiUrlsLeft.push({ order: order, id: id, text: text, api_url: apiUrl }); + } + }); + + document.querySelectorAll('#col-center div').forEach(function(element, index) { + var apiUrl = element.getAttribute('apiurl'); + var id = element.id; + var text = element.innerHTML.trim(); // Assuming the text is the innerHTML of the element + var order = apiUrlsCenter.length; + if (apiUrl === 'txt') { + var clone = element.cloneNode(true); + clone.querySelectorAll('span').forEach(function(span) { + span.parentNode.removeChild(span); + }); + var innerText = clone.innerText.trim(); + apiUrlsCenter.push({ order: order, id: id, text: innerText, api_url: null }); + } else if (apiUrl) { + var h2Element = element.querySelector('h2'); + text = h2Element ? h2Element.myLen.trim() : ''; + + apiUrlsCenter.push({ order: order, id: id, text: text, api_url: apiUrl }); + } + }); + + document.querySelectorAll('#col-right div').forEach(function(element, index) { + var apiUrl = element.getAttribute('apiurl'); + var id = element.id; + var text = element.innerHTML.trim(); // Assuming the text is the innerHTML of the element + var order = apiUrlsRight.length; + if (apiUrl === 'txt') { + var clone = element.cloneNode(true); + clone.querySelectorAll('span').forEach(function(span) { + span.parentNode.removeChild(span); + }); + var innerText = clone.innerText.trim(); + apiUrlsRight.push({ order: order, id: id, text: innerText, api_url: null }); + } else if (apiUrl) { + var h2Element = element.querySelector('h2'); + text = h2Element ? h2Element.innerText.trim() : ''; + apiUrlsRight.push({ order: order, id: id, text: text, api_url: apiUrl }); + } + }); + var result = { + // FIXME : boardName will be entered in the save board form + "Name" : boardName, + "Description": boardDesc, + "Hus": myParam, + "col-left": apiUrlsLeft, + "col-center": apiUrlsCenter, + "col-right": apiUrlsRight + }; + //alert(JSON.stringify(result)); + return sendDataToAPI(JSON.stringify(result)); +} + + +// function to send and save the collected data from the current borad to the server thriugh the API +function sendDataToAPI(myJSON) { + const form = document.getElementById("saveBoardForm"); // Get the form element + const inputField = document.getElementById("boardName"); // Get the input field element + form.addEventListener("submit", function(event) { + if (inputField.value.trim() === "") { // Check if the input field is empty after trimming whitespace + event.preventDefault(); // Prevent form submission + console.log("Empty field detected. Form submission blocked."); + } else { + base_url_API = "http://localhost:5000"; + const myApiUrl = base_url_API+"/boards/save"; // Replace with your API URL + const requestOptions = { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: myJSON //.stringify(myJSON) + }; + fetch(myApiUrl, requestOptions) + //.then(response => response.json()) + .then(data => { + console.log("Response from API:", myJSON); + // Handle the response from the API as needed + const myModal = new bootstrap.Modal(document.getElementById("saveBoardModal")); + const submitBtn = document.getElementById("submitBoard"); + submitBtn.addEventListener("click", function() { + myModal.hide(); + }); + alert("Board saved!"); + }) + .catch(error => { + console.error("Error:", error); + }); + } + }); +} + + //function to prepare the tha API request upon a board JSON function getFormId(api_url) {return api_url[0].toUpperCase() + api_url.split("/")[1][0].toUpperCase();}; -function loadBoards() { - - //JAUME - // Test JSON Board: - myJSON = {"name":"Charlie","hus":"Charlie","description":"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen.","col-left":[{"order":0,"id":"P-txt-728265","text":"Here a text","api_url":null},{"order":1,"id":"parallel-8001586","text":"","api_url":"parallel/monthly?hus=Charlie&family=MP1_1&type=celsius&year=2020&month=1"}],"col-center":[{"order":0,"id":"G-txt-956767","text":"Here a text","api_url":null},{"order":1,"id":"grid-190619","text":"","api_url":"grid/monthly?hus=Charlie&sensor=Temp_MP1_1_Pos1&type=celsius&year=2023&month=01"}],"col-right":[{"order":0,"id":"H-txt-518613","text":"Here a text","api_url":null},{"order":1,"id":"horizon-986338","text":"","api_url":"horizon/daily?hus=Charlie&family=MP1_1&type=celsius&day=2023-04-12"}]}; +//////////////////////////////// +// LOAD BOARD +// button listener to get the BOARD LIST from the server +const buttonElement = document.getElementById("loadListBoardsButton"); +buttonElement.addEventListener("click", function() { + fetchDataAndGenerateHTML(myParam); +}); +// Function to generate the already loaded JSON data of a board. +async function loadBoards(myJSON) { + //myJSON = {"Name":"dddd","Description":" f fa af ffsdfsdfs fsd","Hus":"Charlie","col-left":[],"col-center":[{"order":0,"id":"grid-710994","text":"","api_url":"grid/weekly?hus=Charlie&sensor=Temp_MP1_1_Pos1&type=celsius&year=2023&week=23"}],"col-right":[]}; var cols = ["col-left", "col-center", "col-right"]; cols.forEach(col => { if (col.length > 0) { - myJSON[col].forEach(element => { + myJSON[col].forEach(async element => { // Get necessary variables: + var myTitle = myTitle ? nuull : ""; var myColumn = col; var myid = element.id; var myTitle = element.text; // Create DIV - createMyDiv(myid, myColumn, myTitle); + await createMyDiv(myid, myColumn, myTitle); + + // setTimeout(function() { + // console.log("After 2 seconds"); + // // Code to be executed after the delay + // }, 2000); + // Check if is TXT or Diagram: - if (element.text == "" ) { - cl(element["api_url"]); - var apiUrl = element["api_url"]; - var formId = getFormId(apiUrl); - //createParallel(myid, formId, formData); - makeApiRequest(formId, apiUrl, myid); + if (element.api_url != null ) { + var apiurl = element.api_url; + var formId = getFormId(apiurl); + var sensor = getValueByKeyFrrmUrl("sensor", apiurl); + var type = getValueByKeyFrrmUrl("type", apiurl); + var year = getValueByKeyFrrmUrl("year", apiurl); + + switch (formId) { + case "PD": + var family = getValueByKeyFrrmUrl("family", apiurl); + var day = getValueByKeyFrrmUrl("day", apiurl); + // cl("PD LoadBoards:"); + // cl(formId+" - "+apiurl+" - "+myid+" - "+myTitle+" - "+family+" - "+type+" - "+day); + makeApiRequest(formId, apiurl, myid, myTitle, family, type, day); + break; + + case "GW": + var week = getValueByKeyFrrmUrl("week", apiurl); + // Trans for week and year to DD-MM-YYYY + var startingDate = getFormattedDateFromWeek(week, year); + //cl("startingDate: "+startingDate+" -formId - "+formId+" -apiurl: "+apiurl+" -myid: "+myid+" -myTitle: "+myTitle+" -semsor: "+sensor+" -type: "+type+" -week: "+week+" -year: "+year); + makeApiRequest(formId, apiurl, myid, myTitle, sensor, type, startingDate); + break; + case "GM": + var month = getValueByKeyFrrmUrl("month", apiurl); + makeApiRequest(formId, apiurl, myid, myTitle, sensor, type, year, month); + break; + case "GY": + makeApiRequest(formId, apiurl, myid, myTitle, sensor, type, year);; + break; + + + default: + makeApiRequest(formId, apiurl, myid); + break; + } + + } else { var formId = "TXT"; createTXT(myid, element.text); @@ -1851,19 +1980,80 @@ function loadBoards() { } }); -//Prepara the variables: -// formId, apiUrl, myid, myTitle, ...args +} + +// function to load THE LIST OF boards FOR AN SPECIFIC hOUSE +function fetchDataAndGenerateHTML(husName) { + base_url_API = "http://localhost:5000"; + var apiUrl = base_url_API+"/boards?hus="+husName; + cl(apiUrl); + fetch(apiUrl) + .then(response => response.json()) + .then(jsonData => { + const generatedHTML = generateHTML(jsonData); + document.getElementById("loadBoard-pills-default").innerHTML = generatedHTML; + }) + .catch(error => { + console.error("Error:", error); + }); +} + +// function to load one boards JSON data +function fetchOneBoardData(husName, boardFilename) { + var apiUrl = base_url_API+"/boards/load?hus="+myParam+"&filename="+boardFilename; + fetch(apiUrl) + .then(response => response.json()) + .then(jsonData1 => { + loadBoards(jsonData1); + }) + .catch(error => { + console.error("Error:", error); + }); +} + + +function generateHTML(jsonData) { + let html = '

List of saved boards. Just click the one you want to load.:

 :

    '; + for (let i = 0; i < jsonData.length; i++) { + const item = jsonData[i]; + html += `
  1. ${item.Name}
  2. `; + html += ''; + html += '

     

    '; + } + html += '
'; + return html; +} -// for each entry of JSON: make calls: createDiv -// Check if is TXT or DIAGRANM: then call makeApiRequest +function checkElementExistence(myid, apiUrl) { + const element = document.getElementById(myid); + if (element) { + element.setAttribute("apiurl", apiUrl); + return + } else { + setTimeout(function() { + checkElementExistence(myid, apiUrl); + }, 1000); // Retry after 1 second (adjust the delay as needed) + } } +/////////////////////////////////// // Server API: // Define a function to make the API request function makeApiRequest(formId, apiUrl, myid, myTitle, ...args) { + // Check the variables on the query: + // var myMissedVar = checkEmptyVariable(apiUrl); + // if(myMissedVar!=false) { + // alert("There are variables with null or NaN values. "+myMissedVar); + // return; + // }; + const myArgs = []; // Store all arguments in an array myTitle = myTitle || ""; // Define emty if undefined: @@ -1899,6 +2089,7 @@ function makeApiRequest(formId, apiUrl, myid, myTitle, ...args) { var sensor = myArgs[0]; var type = myArgs[1]; var inDate = myArgs[2]; + break; case "GM": var sensor = myArgs[0]; @@ -1939,13 +2130,18 @@ function makeApiRequest(formId, apiUrl, myid, myTitle, ...args) { var year = myArgs[2]; break; -} + } // Make an AJAX request to your Flask API + var apiRequest = `http://localhost:5000/${apiUrl}`; ///parallel/daily?family=${family}&type=${type}&day=${day}`; cl(apiRequest); + var myDiv_ = document.getElementById(myid); var myCol = getName(formId[0]).split("-")[1]; - document.getElementById(myid).setAttribute("apiurl", apiUrl); + //if (myDiv_ && myDiv_.hasAttribute("apiurl")) { + checkElementExistence(myid, apiUrl) + //document.getElementById(myid).setAttribute("apiurl", apiUrl); + //} fetch(apiRequest) .then((response) => {