node-red-contrib-alarm-ultimate 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,762 @@
1
+ [
2
+ {
3
+ "id": "c0a4b6d3e5f70819",
4
+ "type": "tab",
5
+ "label": "Alarm Ultimate - Dashboard V2 (FlowFuse)",
6
+ "disabled": false,
7
+ "info": ""
8
+ },
9
+ {
10
+ "id": "d1b5c7e4f608192a",
11
+ "type": "comment",
12
+ "z": "c0a4b6d3e5f70819",
13
+ "name": "Requires @flowfuse/node-red-dashboard",
14
+ "info": "Install `@flowfuse/node-red-dashboard` (Dashboard 2.0), then import this flow.\n\nDashboard V2 URLs (default):\n- Panel: http://<node-red-host>:1880/dashboard/panel\n- Controls: http://<node-red-host>:1880/dashboard/controls\n- Sensors: http://<node-red-host>:1880/dashboard/sensors\n- Zones: http://<node-red-host>:1880/dashboard/zones\n- Status: http://<node-red-host>:1880/dashboard/status\n\nNotes:\n- If you changed the Dashboard path in the `ui-base` config, adjust `/dashboard` accordingly.\n- The embedded Alarm Panel is served from Node-RED *admin* endpoints (`/alarm-ultimate/alarm-panel`).",
15
+ "x": 290,
16
+ "y": 60,
17
+ "wires": []
18
+ },
19
+ {
20
+ "id": "a2b3c4d5e6f70819",
21
+ "type": "AlarmSystemUltimate",
22
+ "z": "c0a4b6d3e5f70819",
23
+ "name": "Home Alarm",
24
+ "controlTopic": "alarm",
25
+ "payloadPropName": "payload",
26
+ "persistState": true,
27
+ "requireCodeForArm": false,
28
+ "requireCodeForDisarm": false,
29
+ "armCode": "",
30
+ "duressCode": "",
31
+ "blockArmOnViolations": true,
32
+ "exitDelaySeconds": 10,
33
+ "entryDelaySeconds": 30,
34
+ "emitOpenZonesDuringArming": false,
35
+ "openZonesArmingIntervalSeconds": 1,
36
+ "openZonesRequestTopic": "alarm/listOpenZones",
37
+ "openZonesRequestIntervalSeconds": 0,
38
+ "sirenDurationSeconds": 180,
39
+ "sirenLatchUntilDisarm": false,
40
+ "sirenTopic": "alarm/siren",
41
+ "sirenOnPayload": true,
42
+ "sirenOnPayloadType": "bool",
43
+ "sirenOffPayload": false,
44
+ "sirenOffPayloadType": "bool",
45
+ "emitRestoreEvents": false,
46
+ "maxLogEntries": 50,
47
+ "zones": "[\n {\n \"id\": \"front_door\",\n \"name\": \"Front door\",\n \"topic\": \"sensor/frontdoor\",\n \"type\": \"perimeter\",\n \"entry\": true,\n \"bypassable\": true,\n \"chime\": true\n },\n {\n \"id\": \"living_pir\",\n \"name\": \"Living PIR\",\n \"topic\": \"sensor/living_pir\",\n \"type\": \"motion\",\n \"entry\": false,\n \"bypassable\": true,\n \"cooldownSeconds\": 10\n }\n]",
48
+ "x": 220,
49
+ "y": 200,
50
+ "wires": [
51
+ [],
52
+ [],
53
+ [],
54
+ [],
55
+ [],
56
+ [],
57
+ [],
58
+ [],
59
+ []
60
+ ]
61
+ },
62
+ {
63
+ "id": "e6f708192a3b4c5e",
64
+ "type": "ui-template",
65
+ "z": "c0a4b6d3e5f70819",
66
+ "group": "08192a3b4c5d6e7f",
67
+ "name": "Alarm Panel (embed)",
68
+ "order": 1,
69
+ "width": 12,
70
+ "height": 18,
71
+ "head": "",
72
+ "format": "<template>\n <iframe :src=\"panelUrl\" style=\"width:100%; height:720px; border:0; border-radius:10px;\"></iframe>\n</template>\n\n<script>\nexport default {\n data () {\n return {\n panelUrl: ''\n }\n },\n mounted () {\n const alarmNodeId = 'a2b3c4d5e6f70819'\n const setupUrl = new URL('../_setup', window.location.href)\n\n fetch(setupUrl)\n .then(r => r.json())\n .then(setup => {\n const httpAdminRoot = setup?.RED?.httpAdminRoot ?? '/'\n const root = httpAdminRoot.endsWith('/') ? httpAdminRoot : `${httpAdminRoot}/`\n this.panelUrl = `${root}alarm-ultimate/alarm-panel?embed=1&view=keypad&id=${encodeURIComponent(alarmNodeId)}`\n })\n .catch(() => {\n const relative = `../alarm-ultimate/alarm-panel?embed=1&view=keypad&id=${encodeURIComponent(alarmNodeId)}`\n this.panelUrl = new URL(relative, window.location.href).toString()\n })\n }\n}\n</script>\n",
73
+ "storeOutMessages": true,
74
+ "passthru": true,
75
+ "resendOnRefresh": true,
76
+ "templateScope": "local",
77
+ "className": "",
78
+ "x": 520,
79
+ "y": 200
80
+ },
81
+ {
82
+ "id": "1c2d3e4f50617283",
83
+ "type": "ui-template",
84
+ "z": "c0a4b6d3e5f70819",
85
+ "group": "4b5c6d7e8f901a2b",
86
+ "name": "Zones (embed)",
87
+ "order": 1,
88
+ "width": 12,
89
+ "height": 18,
90
+ "head": "",
91
+ "format": "<template>\n <iframe :src=\"panelUrl\" style=\"width:100%; height:720px; border:0; border-radius:10px;\"></iframe>\n</template>\n\n<script>\nexport default {\n data () {\n return {\n panelUrl: ''\n }\n },\n mounted () {\n const alarmNodeId = 'a2b3c4d5e6f70819'\n const setupUrl = new URL('../_setup', window.location.href)\n\n fetch(setupUrl)\n .then(r => r.json())\n .then(setup => {\n const httpAdminRoot = setup?.RED?.httpAdminRoot ?? '/'\n const root = httpAdminRoot.endsWith('/') ? httpAdminRoot : `${httpAdminRoot}/`\n this.panelUrl = `${root}alarm-ultimate/alarm-panel?embed=1&view=zones&id=${encodeURIComponent(alarmNodeId)}`\n })\n .catch(() => {\n const relative = `../alarm-ultimate/alarm-panel?embed=1&view=zones&id=${encodeURIComponent(alarmNodeId)}`\n this.panelUrl = new URL(relative, window.location.href).toString()\n })\n }\n}\n</script>\n",
92
+ "storeOutMessages": true,
93
+ "passthru": true,
94
+ "resendOnRefresh": true,
95
+ "templateScope": "local",
96
+ "className": "",
97
+ "x": 820,
98
+ "y": 200,
99
+ "wires": [
100
+ []
101
+ ]
102
+ },
103
+ {
104
+ "id": "b4c5d6e7f8091a2b",
105
+ "type": "function",
106
+ "z": "c0a4b6d3e5f70819",
107
+ "name": "Build control msg",
108
+ "func": "const payload = msg.payload;\n\nmsg.topic = \"alarm\";\n\nif (payload && typeof payload === \"object\") {\n if (typeof payload.command === \"string\") msg.command = payload.command;\n if (payload.zone != null) msg.zone = payload.zone;\n if (payload.code != null) msg.code = payload.code;\n} else if (typeof payload === \"string\") {\n msg.command = payload;\n}\n\nreturn msg;",
109
+ "outputs": 1,
110
+ "noerr": 0,
111
+ "initialize": "",
112
+ "finalize": "",
113
+ "libs": [],
114
+ "x": 520,
115
+ "y": 380,
116
+ "wires": [
117
+ [
118
+ "a2b3c4d5e6f70819"
119
+ ]
120
+ ]
121
+ },
122
+ {
123
+ "id": "c5d6e7f8091a2b3c",
124
+ "type": "ui-button",
125
+ "z": "c0a4b6d3e5f70819",
126
+ "group": "f708192a3b4c5d6e",
127
+ "name": "Arm",
128
+ "label": "Arm",
129
+ "order": 1,
130
+ "width": 4,
131
+ "height": 1,
132
+ "emulateClick": false,
133
+ "tooltip": "",
134
+ "color": "white",
135
+ "bgcolor": "#ff375f",
136
+ "className": "",
137
+ "icon": "fa-lock",
138
+ "iconPosition": "left",
139
+ "payload": "arm",
140
+ "payloadType": "str",
141
+ "topic": "",
142
+ "topicType": "str",
143
+ "buttonColor": "",
144
+ "textColor": "",
145
+ "iconColor": "",
146
+ "enableClick": true,
147
+ "enablePointerdown": false,
148
+ "pointerdownPayload": "",
149
+ "pointerdownPayloadType": "str",
150
+ "enablePointerup": false,
151
+ "pointerupPayload": "",
152
+ "pointerupPayloadType": "str",
153
+ "x": 220,
154
+ "y": 340,
155
+ "wires": [
156
+ [
157
+ "b4c5d6e7f8091a2b"
158
+ ]
159
+ ]
160
+ },
161
+ {
162
+ "id": "d6e7f8091a2b3c4d",
163
+ "type": "ui-button",
164
+ "z": "c0a4b6d3e5f70819",
165
+ "group": "f708192a3b4c5d6e",
166
+ "name": "Disarm",
167
+ "label": "Disarm",
168
+ "order": 2,
169
+ "width": 4,
170
+ "height": 1,
171
+ "emulateClick": false,
172
+ "tooltip": "",
173
+ "color": "white",
174
+ "bgcolor": "#1f6feb",
175
+ "className": "",
176
+ "icon": "fa-unlock",
177
+ "iconPosition": "left",
178
+ "payload": "disarm",
179
+ "payloadType": "str",
180
+ "topic": "",
181
+ "topicType": "str",
182
+ "buttonColor": "",
183
+ "textColor": "",
184
+ "iconColor": "",
185
+ "enableClick": true,
186
+ "enablePointerdown": false,
187
+ "pointerdownPayload": "",
188
+ "pointerdownPayloadType": "str",
189
+ "enablePointerup": false,
190
+ "pointerupPayload": "",
191
+ "pointerupPayloadType": "str",
192
+ "x": 220,
193
+ "y": 380,
194
+ "wires": [
195
+ [
196
+ "b4c5d6e7f8091a2b"
197
+ ]
198
+ ]
199
+ },
200
+ {
201
+ "id": "e7f8091a2b3c4d5e",
202
+ "type": "ui-button",
203
+ "z": "c0a4b6d3e5f70819",
204
+ "group": "f708192a3b4c5d6e",
205
+ "name": "Status snapshot",
206
+ "label": "Status",
207
+ "order": 3,
208
+ "width": 4,
209
+ "height": 1,
210
+ "emulateClick": false,
211
+ "tooltip": "Emits a full snapshot on output 1",
212
+ "color": "white",
213
+ "bgcolor": "#6e7681",
214
+ "className": "",
215
+ "icon": "fa-info-circle",
216
+ "iconPosition": "left",
217
+ "payload": "status",
218
+ "payloadType": "str",
219
+ "topic": "",
220
+ "topicType": "str",
221
+ "buttonColor": "",
222
+ "textColor": "",
223
+ "iconColor": "",
224
+ "enableClick": true,
225
+ "enablePointerdown": false,
226
+ "pointerdownPayload": "",
227
+ "pointerdownPayloadType": "str",
228
+ "enablePointerup": false,
229
+ "pointerupPayload": "",
230
+ "pointerupPayloadType": "str",
231
+ "x": 220,
232
+ "y": 420,
233
+ "wires": [
234
+ [
235
+ "b4c5d6e7f8091a2b"
236
+ ]
237
+ ]
238
+ },
239
+ {
240
+ "id": "f8091a2b3c4d5e6f",
241
+ "type": "ui-button",
242
+ "z": "c0a4b6d3e5f70819",
243
+ "group": "e6f708192a3b4c5d",
244
+ "name": "Front door OPEN",
245
+ "label": "Front door: OPEN",
246
+ "order": 1,
247
+ "width": 6,
248
+ "height": 1,
249
+ "emulateClick": false,
250
+ "tooltip": "Sends topic sensor/frontdoor payload true",
251
+ "color": "white",
252
+ "bgcolor": "#d1242f",
253
+ "className": "",
254
+ "icon": "fa-door-open",
255
+ "iconPosition": "left",
256
+ "payload": "true",
257
+ "payloadType": "bool",
258
+ "topic": "sensor/frontdoor",
259
+ "topicType": "str",
260
+ "buttonColor": "",
261
+ "textColor": "",
262
+ "iconColor": "",
263
+ "enableClick": true,
264
+ "enablePointerdown": false,
265
+ "pointerdownPayload": "",
266
+ "pointerdownPayloadType": "str",
267
+ "enablePointerup": false,
268
+ "pointerupPayload": "",
269
+ "pointerupPayloadType": "str",
270
+ "x": 230,
271
+ "y": 520,
272
+ "wires": [
273
+ [
274
+ "a2b3c4d5e6f70819"
275
+ ]
276
+ ]
277
+ },
278
+ {
279
+ "id": "091a2b3c4d5e6f70",
280
+ "type": "ui-button",
281
+ "z": "c0a4b6d3e5f70819",
282
+ "group": "e6f708192a3b4c5d",
283
+ "name": "Front door CLOSED",
284
+ "label": "Front door: CLOSED",
285
+ "order": 2,
286
+ "width": 6,
287
+ "height": 1,
288
+ "emulateClick": false,
289
+ "tooltip": "Sends topic sensor/frontdoor payload false",
290
+ "color": "white",
291
+ "bgcolor": "#2ea043",
292
+ "className": "",
293
+ "icon": "fa-door-closed",
294
+ "iconPosition": "left",
295
+ "payload": "false",
296
+ "payloadType": "bool",
297
+ "topic": "sensor/frontdoor",
298
+ "topicType": "str",
299
+ "buttonColor": "",
300
+ "textColor": "",
301
+ "iconColor": "",
302
+ "enableClick": true,
303
+ "enablePointerdown": false,
304
+ "pointerdownPayload": "",
305
+ "pointerdownPayloadType": "str",
306
+ "enablePointerup": false,
307
+ "pointerupPayload": "",
308
+ "pointerupPayloadType": "str",
309
+ "x": 230,
310
+ "y": 560,
311
+ "wires": [
312
+ [
313
+ "a2b3c4d5e6f70819"
314
+ ]
315
+ ]
316
+ },
317
+ {
318
+ "id": "1a2b3c4d5e6f7081",
319
+ "type": "ui-button",
320
+ "z": "c0a4b6d3e5f70819",
321
+ "group": "e6f708192a3b4c5d",
322
+ "name": "Living PIR MOTION",
323
+ "label": "Living PIR: MOTION",
324
+ "order": 3,
325
+ "width": 6,
326
+ "height": 1,
327
+ "emulateClick": false,
328
+ "tooltip": "Sends topic sensor/living_pir payload true",
329
+ "color": "white",
330
+ "bgcolor": "#ff9f0a",
331
+ "className": "",
332
+ "icon": "fa-walking",
333
+ "iconPosition": "left",
334
+ "payload": "true",
335
+ "payloadType": "bool",
336
+ "topic": "sensor/living_pir",
337
+ "topicType": "str",
338
+ "buttonColor": "",
339
+ "textColor": "",
340
+ "iconColor": "",
341
+ "enableClick": true,
342
+ "enablePointerdown": false,
343
+ "pointerdownPayload": "",
344
+ "pointerdownPayloadType": "str",
345
+ "enablePointerup": false,
346
+ "pointerupPayload": "",
347
+ "pointerupPayloadType": "str",
348
+ "x": 230,
349
+ "y": 600,
350
+ "wires": [
351
+ [
352
+ "a2b3c4d5e6f70819"
353
+ ]
354
+ ]
355
+ },
356
+ {
357
+ "id": "2b3c4d5e6f708192",
358
+ "type": "ui-button",
359
+ "z": "c0a4b6d3e5f70819",
360
+ "group": "e6f708192a3b4c5d",
361
+ "name": "Living PIR CLEAR",
362
+ "label": "Living PIR: CLEAR",
363
+ "order": 4,
364
+ "width": 6,
365
+ "height": 1,
366
+ "emulateClick": false,
367
+ "tooltip": "Sends topic sensor/living_pir payload false",
368
+ "color": "white",
369
+ "bgcolor": "#6e7681",
370
+ "className": "",
371
+ "icon": "fa-pause",
372
+ "iconPosition": "left",
373
+ "payload": "false",
374
+ "payloadType": "bool",
375
+ "topic": "sensor/living_pir",
376
+ "topicType": "str",
377
+ "buttonColor": "",
378
+ "textColor": "",
379
+ "iconColor": "",
380
+ "enableClick": true,
381
+ "enablePointerdown": false,
382
+ "pointerdownPayload": "",
383
+ "pointerdownPayloadType": "str",
384
+ "enablePointerup": false,
385
+ "pointerupPayload": "",
386
+ "pointerupPayloadType": "str",
387
+ "x": 230,
388
+ "y": 640,
389
+ "wires": [
390
+ [
391
+ "a2b3c4d5e6f70819"
392
+ ]
393
+ ]
394
+ },
395
+ {
396
+ "id": "3c4d5e6f708192a3",
397
+ "type": "AlarmUltimateState",
398
+ "z": "c0a4b6d3e5f70819",
399
+ "name": "Alarm State",
400
+ "alarmId": "a2b3c4d5e6f70819",
401
+ "topic": "",
402
+ "outputInitialState": true,
403
+ "x": 220,
404
+ "y": 720,
405
+ "wires": [
406
+ [
407
+ "4d5e6f708192a3b4"
408
+ ]
409
+ ]
410
+ },
411
+ {
412
+ "id": "5e6f708192a3b4c5",
413
+ "type": "AlarmUltimateSiren",
414
+ "z": "c0a4b6d3e5f70819",
415
+ "name": "Siren",
416
+ "alarmId": "a2b3c4d5e6f70819",
417
+ "topic": "",
418
+ "outputInitialState": true,
419
+ "x": 220,
420
+ "y": 760,
421
+ "wires": [
422
+ [
423
+ "6f708192a3b4c5d6"
424
+ ]
425
+ ]
426
+ },
427
+ {
428
+ "id": "4d5e6f708192a3b4",
429
+ "type": "ui-text",
430
+ "z": "c0a4b6d3e5f70819",
431
+ "group": "192a3b4c5d6e7f80",
432
+ "order": 1,
433
+ "width": 6,
434
+ "height": 1,
435
+ "name": "",
436
+ "label": "Alarm state",
437
+ "format": "{{msg.payload}}",
438
+ "layout": "row-spread",
439
+ "style": false,
440
+ "font": "Helvetica",
441
+ "fontSize": 16,
442
+ "color": "#717171",
443
+ "wrapText": false,
444
+ "className": "",
445
+ "value": "payload",
446
+ "valueType": "msg",
447
+ "x": 520,
448
+ "y": 720
449
+ },
450
+ {
451
+ "id": "6f708192a3b4c5d6",
452
+ "type": "ui-text",
453
+ "z": "c0a4b6d3e5f70819",
454
+ "group": "192a3b4c5d6e7f80",
455
+ "order": 2,
456
+ "width": 6,
457
+ "height": 1,
458
+ "name": "",
459
+ "label": "Siren",
460
+ "format": "{{msg.payload}}",
461
+ "layout": "row-spread",
462
+ "style": false,
463
+ "font": "Helvetica",
464
+ "fontSize": 16,
465
+ "color": "#717171",
466
+ "wrapText": false,
467
+ "className": "",
468
+ "value": "payload",
469
+ "valueType": "msg",
470
+ "x": 520,
471
+ "y": 760
472
+ },
473
+ {
474
+ "id": "c4d5e6f708192a3b",
475
+ "type": "ui-base",
476
+ "name": "Dashboard",
477
+ "path": "/dashboard",
478
+ "appIcon": "",
479
+ "includeClientData": true,
480
+ "acceptsClientConfig": [
481
+ "ui-notification",
482
+ "ui-control"
483
+ ],
484
+ "showPathInSidebar": false,
485
+ "headerContent": "page",
486
+ "navigationStyle": "fixed",
487
+ "titleBarStyle": "default",
488
+ "showReconnectNotification": true,
489
+ "notificationDisplayTime": 5,
490
+ "showDisconnectNotification": true,
491
+ "allowInstall": false
492
+ },
493
+ {
494
+ "id": "b3c4d5e6f708192a",
495
+ "type": "ui-theme",
496
+ "name": "Default",
497
+ "colors": {
498
+ "surface": "#ffffff",
499
+ "primary": "#0094CE",
500
+ "bgPage": "#eeeeee",
501
+ "groupBg": "#ffffff",
502
+ "groupOutline": "#cccccc"
503
+ },
504
+ "sizes": {
505
+ "density": "default",
506
+ "pagePadding": "12px",
507
+ "groupGap": "12px",
508
+ "groupBorderRadius": "4px",
509
+ "widgetGap": "12px"
510
+ }
511
+ },
512
+ {
513
+ "id": "d5e6f708192a3b4c",
514
+ "type": "ui-page",
515
+ "name": "Panel",
516
+ "ui": "c4d5e6f708192a3b",
517
+ "path": "/panel",
518
+ "icon": "shield-home",
519
+ "layout": "grid",
520
+ "theme": "b3c4d5e6f708192a",
521
+ "breakpoints": [
522
+ {
523
+ "name": "Default",
524
+ "px": 0,
525
+ "cols": 12
526
+ },
527
+ {
528
+ "name": "Tablet",
529
+ "px": 576,
530
+ "cols": 12
531
+ },
532
+ {
533
+ "name": "Small Desktop",
534
+ "px": 768,
535
+ "cols": 12
536
+ },
537
+ {
538
+ "name": "Desktop",
539
+ "px": 1024,
540
+ "cols": 12
541
+ }
542
+ ],
543
+ "order": 1,
544
+ "className": "",
545
+ "visible": true,
546
+ "disabled": false
547
+ },
548
+ {
549
+ "id": "b1c2d3e4f5060718",
550
+ "type": "ui-page",
551
+ "name": "Controls",
552
+ "ui": "c4d5e6f708192a3b",
553
+ "path": "/controls",
554
+ "icon": "remote",
555
+ "layout": "grid",
556
+ "theme": "b3c4d5e6f708192a",
557
+ "breakpoints": [
558
+ {
559
+ "name": "Default",
560
+ "px": 0,
561
+ "cols": 12
562
+ },
563
+ {
564
+ "name": "Tablet",
565
+ "px": 576,
566
+ "cols": 12
567
+ },
568
+ {
569
+ "name": "Small Desktop",
570
+ "px": 768,
571
+ "cols": 12
572
+ },
573
+ {
574
+ "name": "Desktop",
575
+ "px": 1024,
576
+ "cols": 12
577
+ }
578
+ ],
579
+ "order": 2,
580
+ "className": "",
581
+ "visible": true,
582
+ "disabled": false
583
+ },
584
+ {
585
+ "id": "c2d3e4f506071829",
586
+ "type": "ui-page",
587
+ "name": "Sensors",
588
+ "ui": "c4d5e6f708192a3b",
589
+ "path": "/sensors",
590
+ "icon": "motion-sensor",
591
+ "layout": "grid",
592
+ "theme": "b3c4d5e6f708192a",
593
+ "breakpoints": [
594
+ {
595
+ "name": "Default",
596
+ "px": 0,
597
+ "cols": 12
598
+ },
599
+ {
600
+ "name": "Tablet",
601
+ "px": 576,
602
+ "cols": 12
603
+ },
604
+ {
605
+ "name": "Small Desktop",
606
+ "px": 768,
607
+ "cols": 12
608
+ },
609
+ {
610
+ "name": "Desktop",
611
+ "px": 1024,
612
+ "cols": 12
613
+ }
614
+ ],
615
+ "order": 3,
616
+ "className": "",
617
+ "visible": true,
618
+ "disabled": false
619
+ },
620
+ {
621
+ "id": "e4f5060718293b4c",
622
+ "type": "ui-page",
623
+ "name": "Zones",
624
+ "ui": "c4d5e6f708192a3b",
625
+ "path": "/zones",
626
+ "icon": "format-list-bulleted",
627
+ "layout": "grid",
628
+ "theme": "b3c4d5e6f708192a",
629
+ "breakpoints": [
630
+ {
631
+ "name": "Default",
632
+ "px": 0,
633
+ "cols": 12
634
+ },
635
+ {
636
+ "name": "Tablet",
637
+ "px": 576,
638
+ "cols": 12
639
+ },
640
+ {
641
+ "name": "Small Desktop",
642
+ "px": 768,
643
+ "cols": 12
644
+ },
645
+ {
646
+ "name": "Desktop",
647
+ "px": 1024,
648
+ "cols": 12
649
+ }
650
+ ],
651
+ "order": 4,
652
+ "className": "",
653
+ "visible": true,
654
+ "disabled": false
655
+ },
656
+ {
657
+ "id": "d3e4f5060718293a",
658
+ "type": "ui-page",
659
+ "name": "Status",
660
+ "ui": "c4d5e6f708192a3b",
661
+ "path": "/status",
662
+ "icon": "information-outline",
663
+ "layout": "grid",
664
+ "theme": "b3c4d5e6f708192a",
665
+ "breakpoints": [
666
+ {
667
+ "name": "Default",
668
+ "px": 0,
669
+ "cols": 12
670
+ },
671
+ {
672
+ "name": "Tablet",
673
+ "px": 576,
674
+ "cols": 12
675
+ },
676
+ {
677
+ "name": "Small Desktop",
678
+ "px": 768,
679
+ "cols": 12
680
+ },
681
+ {
682
+ "name": "Desktop",
683
+ "px": 1024,
684
+ "cols": 12
685
+ }
686
+ ],
687
+ "order": 5,
688
+ "className": "",
689
+ "visible": true,
690
+ "disabled": false
691
+ },
692
+ {
693
+ "id": "08192a3b4c5d6e7f",
694
+ "type": "ui-group",
695
+ "name": "Panel",
696
+ "page": "d5e6f708192a3b4c",
697
+ "width": 12,
698
+ "height": 1,
699
+ "order": 1,
700
+ "showTitle": true,
701
+ "className": "",
702
+ "visible": true,
703
+ "disabled": false,
704
+ "groupType": "default"
705
+ },
706
+ {
707
+ "id": "f708192a3b4c5d6e",
708
+ "type": "ui-group",
709
+ "name": "Controls",
710
+ "page": "b1c2d3e4f5060718",
711
+ "width": 12,
712
+ "height": 1,
713
+ "order": 1,
714
+ "showTitle": true,
715
+ "className": "",
716
+ "visible": true,
717
+ "disabled": false,
718
+ "groupType": "default"
719
+ },
720
+ {
721
+ "id": "e6f708192a3b4c5d",
722
+ "type": "ui-group",
723
+ "name": "Sensor simulator",
724
+ "page": "c2d3e4f506071829",
725
+ "width": 12,
726
+ "height": 1,
727
+ "order": 1,
728
+ "showTitle": true,
729
+ "className": "",
730
+ "visible": true,
731
+ "disabled": false,
732
+ "groupType": "default"
733
+ },
734
+ {
735
+ "id": "192a3b4c5d6e7f80",
736
+ "type": "ui-group",
737
+ "name": "Status",
738
+ "page": "d3e4f5060718293a",
739
+ "width": 12,
740
+ "height": 1,
741
+ "order": 1,
742
+ "showTitle": true,
743
+ "className": "",
744
+ "visible": true,
745
+ "disabled": false,
746
+ "groupType": "default"
747
+ },
748
+ {
749
+ "id": "4b5c6d7e8f901a2b",
750
+ "type": "ui-group",
751
+ "name": "Zones",
752
+ "page": "e4f5060718293b4c",
753
+ "width": 12,
754
+ "height": 1,
755
+ "order": 1,
756
+ "showTitle": true,
757
+ "className": "",
758
+ "visible": true,
759
+ "disabled": false,
760
+ "groupType": "default"
761
+ }
762
+ ]