Last modified by Hera Guo on 2024/11/11 17:08

From version 19.1
edited by Hera Guo
on 2024/11/05 09:51
Change comment: There is no comment for this version
To version 16.1
edited by Hera Guo
on 2024/11/04 16:45
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -94,583 +94,52 @@
94 94  
95 95  Asset map:
96 96  
97 -[[image:1730709409941-536.png||height="729" width="1440"]]
97 +[[image:1730709409941-536.png]]
98 98  
99 99  detail:
100 100  
101 -[[image:1730709424998-915.png||height="729" width="1436"]]
101 +[[image:1730709424998-915.png]]
102 102  
103 103  devid:
104 104  
105 -[[image:1730709442773-502.png||height="738" width="1434"]]
105 +[[image:1730709442773-502.png]]
106 106  
107 107  State:
108 108  
109 -[[image:1730709461297-207.png||height="706" width="1434"]]
109 +[[image:1730709461297-207.png]]
110 110  
111 111  Alarm:
112 112  
113 -[[image:1730709479828-595.png||height="696" width="1435"]]
113 +[[image:1730709479828-595.png]]
114 114  
115 115  Dragino&GXHL,Ltd:
116 116  
117 -[[image:1730709511861-439.png||height="714" width="1435"]]
117 +[[image:1730709511861-439.png]]
118 118  
119 119  Selected Supermarket:
120 120  
121 -[[image:1730709527720-418.png||height="751" width="1433"]]
121 +[[image:1730709527720-418.png]]
122 122  
123 123  Supermarkets:
124 124  
125 -[[image:1730709542597-321.png||height="734" width="1435"]]
125 +[[image:1730709542597-321.png]]
126 126  
127 127  Supermarket Devices:
128 128  
129 -[[image:1730709555797-383.png||height="726" width="1434"]]
129 +[[image:1730709555797-383.png]]
130 130  
131 131  
132 132  === 4.1.2.Page Configuration ===
133 133  
134 -==== 4.1.2.1、Configure the interface of the third layer Davies. ====
134 +1、Configure the interface of the third layer Davies.
135 135  
136 136  
137 -==== 4.1.2.2、Configure the interface of the second layer asset ====
137 +2、Configure the interface of the second layer asset
138 138  
139 -**Equipment distribution diagram:**
140 140  
141 -**Data:**
140 +3、Configure the first layer menu interface
142 142  
143 -[[image:1730770392454-317.png||height="745" width="1439"]]
144 144  
145 -Tooltip function:
146 -
147 -{{code language="none"}}
148 -var msg = data
149 -if(msg.Label=="gateway" && msg.type == "gateway"){
150 - var stauts
151 - if (msg.gatewaystauts=="true"){
152 - stauts = "Connect"
153 - }
154 - else{
155 - stauts = "Disconnected"
156 - }
157 - var str = "<b>"+msg.entityName+"</b><br/><b>"+stauts+"</b><br/>"
158 - return str
159 -}
160 -else if(msg.type=="gxhl01" && msg.Label!="gateway"){
161 - var str = "<b>"+msg.entityName+"</b><br/><b>"+msg.Label+"</b><br/><b>Bat:</b>"+msg.BatV+"V<br/><b>Temperature:</b>"+ msg.TempC_SHT+ "°C<br/><b>Humidity:</b>"+msg.Hum_SHT+"%"
162 - return str
163 -}
164 -else{
165 - var str = "<b>"+msg.entityName+"</b><br/><b>"+msg.Label+"</b><br/><b>Bat:</b>"+msg.BatV+"V<br/><b>Temperature:</b>"+ msg.temperature+ "°C<br/><b>Humidity:"+msg.humidity+"%"+"</b><br/>"+
166 - "<b>Co2:"+msg.co2+"</b></br><b>Air_Pressure:"+msg.air_pressure
167 -
168 - return str
169 -}
170 -{{/code}}
171 -
172 -==== Marker image function: ====
173 -
174 -{{code language="none"}}
175 -var res
176 -var msg = data
177 -if(msg.Label=="gateway" && msg.type=="gateway"){
178 - if (msg.gatewaystauts == "true"){
179 - res = {
180 - url: images[3],
181 - size: 40
182 -}
183 -}
184 -else{
185 - res = {
186 - url: images[2],
187 - size: 40
188 -}
189 -}}
190 -else if(msg.Label!="gateway" && msg.type=="gxhl01" ){
191 - if (msg.active=="false"){
192 - res = {
193 - url: images[1],
194 - size: 40
195 -}}
196 -else{
197 - res = {
198 - url: images[0],
199 - size: 40
200 -}
201 -}
202 -}
203 -else if(msg.type=="LWL02"){
204 - if (msg.WATER_LEAK_STATUS=="0"){
205 - res = {
206 - url: images[6],
207 - size: 40
208 -}}
209 -else{
210 - res = {
211 - url: images[7],
212 - size: 40
213 -}
214 -}
215 -}
216 -else if(msg.type=="LDS02"){
217 - if (msg.DOOR_OPEN_STATUS=="0"){
218 - res = {
219 - url: images[5],
220 - size: 40
221 -}}
222 -else{
223 - res = {
224 - url: images[8],
225 - size: 40
226 -}
227 -}
228 -}
229 -else if(msg.type=="LDS12"){
230 - res = {
231 - url: images[10],
232 - size: 40
233 -}}
234 -else if(msg.type=="SE01"){
235 - res = {
236 - url: images[9],
237 - size: 40
238 -}}
239 -else if(msg.type=="PB01"){
240 - res = {
241 - url: images[11],
242 - size: 40
243 -}}
244 -else if(msg.type=="S31b"){
245 - res = {
246 - url: images[12],
247 - size: 40
248 -}}
249 -else if(msg.type=="LHT65N"){
250 - res = {
251 - url: images[13],
252 - size: 40
253 -}}
254 -else{
255 - res = {
256 - url: images[4],
257 - size: 40
258 -}
259 -}
260 -return res;
261 -{{/code}}
262 -
263 -==== [[image:1730770875793-351.png]] ====
264 -
265 -==== Actions ====
266 -
267 -{{code language="none"}}
268 -var entitySubType;
269 -var $injector = widgetContext.$scope.$injector;
270 -$injector.get(widgetContext.servicesMap.get('entityService')).getEntity(entityId.entityType, entityId.id)
271 - .subscribe(function(data) {
272 - entitySubType = data.type;
273 - console.log(entitySubType)
274 - if (entitySubType == 'gateway') {
275 - openDashboardStates('gateway_detail');
276 - } else if (entitySubType == 'gxhl01') {
277 - openDashboardStates('detail');
278 - }
279 - else if(entitySubType == 'AQS01-dragino-office'){
280 - openDashboardStates("aqs01_detail")
281 - }
282 - else if (entitySubType == 'LDS12') {
283 - openDashboardStates('lds12_detail');
284 - }
285 - else if (entitySubType == 'LDS02') {
286 - openDashboardStates('lds02_detail');
287 - }
288 - else if (entitySubType == 'SE01') {
289 - openDashboardStates('se01_detail');
290 - }
291 - else if (entitySubType == 'PB01') {
292 - openDashboardStates('pb01_detail');
293 - }
294 - else if (entitySubType == 'LWL02') {
295 - openDashboardStates('lwl02_detail');
296 - }
297 - else if (entitySubType == 'LPS8N') {
298 - openDashboardStates('lps8n_detail');
299 - }
300 - else if (entitySubType == 'LHT65N') {
301 - openDashboardStates('lht65n_detail');
302 - }
303 - else if (entitySubType == 'S31b') {
304 - openDashboardStates('s31b_detail');
305 - }
306 - });
307 -
308 -function openDashboardStates(statedId) {
309 - var stateParams = widgetContext.stateController.getStateParams();
310 - var params = {
311 - entityId: entityId,
312 - entityName: entityName
313 - };
314 -
315 - if (stateParams.city) {
316 - params.city = stateParams.city;
317 - }
318 -
319 - widgetContext.stateController.openState(statedId, params, false);
320 -}
321 -
322 -{{/code}}
323 -
324 -[[image:1730771103096-522.png]]
325 -
326 -Device List
327 -
328 -Data:
329 -
330 -[[image:1730771199343-553.png]]
331 -
332 -Actions:
333 -
334 -[[image:1730771228766-212.png]]
335 -
336 -==== Edit device: ====
337 -
338 -{{code language="none"}}
339 -let $injector = widgetContext.$scope.$injector;
340 -let customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));
341 -let deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));
342 -let attributeService = $injector.get(widgetContext.servicesMap.get('attributeService'));
343 -
344 -openEditDeviceDialog();
345 -
346 -function openEditDeviceDialog() {
347 - customDialog.customDialog(htmlTemplate, EditDeviceDialogController).subscribe();
348 -}
349 -
350 -function EditDeviceDialogController(instance) {
351 - let vm = instance;
352 -
353 - vm.device = null;
354 - vm.attributes = {};
355 -
356 - vm.editDeviceFormGroup = vm.fb.group({
357 - deviceName: ['', [vm.validators.required]],
358 - deviceType: ['', [vm.validators.required]],
359 - deviceLabel: [''],
360 - attributes: vm.fb.group({
361 - latitude: [null],
362 - longitude: [null]
363 - })
364 - });
365 -
366 - vm.cancel = function() {
367 - vm.dialogRef.close(null);
368 - };
369 -
370 - vm.save = function() {
371 - vm.editDeviceFormGroup.markAsPristine();
372 - if (vm.editDeviceFormGroup.get('deviceType').value !== vm.device.type) {
373 - delete vm.device.deviceProfileId;
374 - }
375 - vm.device.name = vm.editDeviceFormGroup.get('deviceName').value,
376 - vm.device.type = vm.editDeviceFormGroup.get('deviceType').value,
377 - vm.device.label = vm.editDeviceFormGroup.get('deviceLabel').value
378 - deviceService.saveDevice(vm.device).subscribe(
379 - function () {
380 - saveAttributes().subscribe(
381 - function () {
382 - widgetContext.updateAliases();
383 - vm.dialogRef.close(null);
384 - }
385 - );
386 - }
387 - );
388 - };
389 -
390 - getEntityInfo();
391 -
392 - function getEntityInfo() {
393 - deviceService.getDevice(entityId.id).subscribe(
394 - function (device) {
395 - attributeService.getEntityAttributes(entityId, 'SERVER_SCOPE',
396 - ['latitude', 'longitude']).subscribe(
397 - function (attributes) {
398 - for (let i = 0; i < attributes.length; i++) {
399 - vm.attributes[attributes[i].key] = attributes[i].value;
400 - }
401 - vm.device = device;
402 - vm.editDeviceFormGroup.patchValue(
403 - {
404 - deviceName: vm.device.name,
405 - deviceType: vm.device.type,
406 - deviceLabel: vm.device.label,
407 - attributes: {
408 - latitude: vm.attributes.latitude,
409 - longitude: vm.attributes.longitude
410 - }
411 - }, {emitEvent: false}
412 - );
413 - }
414 - );
415 - }
416 - );
417 - }
418 -
419 - function saveAttributes() {
420 - let attributes = vm.editDeviceFormGroup.get('attributes').value;
421 - let attributesArray = [];
422 - for (let key in attributes) {
423 - attributesArray.push({key: key, value: attributes[key]});
424 - }
425 - if (attributesArray.length > 0) {
426 - return attributeService.saveEntityAttributes(entityId, 'SERVER_SCOPE', attributesArray);
427 - } else {
428 - return widgetContext.rxjs.of([]);
429 - }
430 - }
431 -}
432 -{{/code}}
433 -
434 -==== [[image:1730771256045-238.png]] ====
435 -
436 -Delete device:
437 -
438 -{{code language="none"}}
439 -let $injector = widgetContext.$scope.$injector;
440 -let dialogs = $injector.get(widgetContext.servicesMap.get('dialogs'));
441 -let deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));
442 -
443 -openDeleteDeviceDialog();
444 -
445 -function openDeleteDeviceDialog() {
446 - let title = "Are you sure you want to delete the device " + entityName + "?";
447 - let content = "Be careful, after the confirmation, the device and all related data will become unrecoverable!";
448 - dialogs.confirm(title, content, 'Cancel', 'Delete').subscribe(
449 - function (result) {
450 - if (result) {
451 - deleteDevice();
452 - }
453 - }
454 - );
455 -}
456 -
457 -function deleteDevice() {
458 - deviceService.deleteDevice(entityId.id).subscribe(
459 - function () {
460 - widgetContext.updateAliases();
461 - }
462 - );
463 -}
464 -
465 -{{/code}}
466 -
467 -[[image:1730771318657-502.png]]
468 -
469 -jump
470 -
471 -{{code language="none"}}
472 -console.log(entityName)
473 -var entitySubType;
474 -var $injector = widgetContext.$scope.$injector;
475 -//console.log($injector)
476 -$injector.get(widgetContext.servicesMap.get('entityService')).getEntity(entityId.entityType, entityId.id)
477 - .subscribe(function(data) {
478 - console.log(data)
479 - entitySubType = data.type;
480 - console.log(entitySubType)
481 - if (entitySubType == 'AQS01-dragino-office') {
482 - openDashboardStates('aqs01_detail');
483 - }else if (entitySubType == 'gateway') {
484 - openDashboardStates('gateway_detail');
485 - } else if (entitySubType == 'gxhl01') {
486 - openDashboardStates('detail');
487 -
488 - } else if (entitySubType == 'tank-type1') {
489 - openDashboardStates('test1');
490 - }
491 - else if (entitySubType == 'LDS12') {
492 - openDashboardStates('lds12_detail');
493 - }
494 - else if (entitySubType == 'LDS02') {
495 - openDashboardStates('lds02_detail');
496 - }
497 - else if (entitySubType == 'SE01') {
498 - openDashboardStates('se01_detail');
499 - }
500 - else if (entitySubType == 'PB01') {
501 - openDashboardStates('pb01_detail');
502 - }
503 - else if (entitySubType == 'LWL02') {
504 - openDashboardStates('lwl02_detail');
505 - }
506 - else if (entitySubType == 'LPS8N') {
507 - openDashboardStates('lps8n_detail');
508 - }
509 - else if (entitySubType == 'LHT65N') {
510 - openDashboardStates('lht65n_detail');
511 - }
512 - else if (entitySubType == 'S31b') {
513 - openDashboardStates('s31b_detail');
514 - }
515 - });
516 -
517 -function openDashboardStates(statedId) {
518 - var stateParams = widgetContext.stateController.getStateParams();
519 - //console.log(stateParams)
520 - var params = {
521 - entityId: entityId,
522 - entityName: entityName
523 - };
524 - widgetContext.stateController.updateState(statedId, params, false);
525 -}
526 -{{/code}}
527 -
528 -==== [[image:1730771386258-676.png]] ====
529 -
530 -Add device:
531 -
532 -{{code language="none"}}
533 -let $injector = widgetContext.$scope.$injector;
534 -let customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));
535 -let deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));
536 -let attributeService = $injector.get(widgetContext.servicesMap.get('attributeService'));
537 -
538 -openAddDeviceDialog();
539 -
540 -function openAddDeviceDialog() {
541 - customDialog.customDialog(htmlTemplate, AddDeviceDialogController).subscribe();
542 -}
543 -
544 -function AddDeviceDialogController(instance) {
545 - let vm = instance;
546 -
547 - vm.addDeviceFormGroup = vm.fb.group({
548 - deviceName: ['', [vm.validators.required]],
549 - deviceType: ['', [vm.validators.required]],
550 - deviceLabel: [''],
551 - attributes: vm.fb.group({
552 - latitude: [null],
553 - longitude: [null]
554 - })
555 - });
556 -
557 - vm.cancel = function() {
558 - vm.dialogRef.close(null);
559 - };
560 -
561 - vm.save = function() {
562 - vm.addDeviceFormGroup.markAsPristine();
563 - let device = {
564 - name: vm.addDeviceFormGroup.get('deviceName').value,
565 - type: vm.addDeviceFormGroup.get('deviceType').value,
566 - label: vm.addDeviceFormGroup.get('deviceLabel').value
567 - };
568 - deviceService.saveDevice(device).subscribe(
569 - function (device) {
570 - saveAttributes(device.id).subscribe(
571 - function () {
572 - widgetContext.updateAliases();
573 - vm.dialogRef.close(null);
574 - }
575 - );
576 - }
577 - );
578 - };
579 -
580 - function saveAttributes(entityId) {
581 - let attributes = vm.addDeviceFormGroup.get('attributes').value;
582 - let attributesArray = [];
583 - for (let key in attributes) {
584 - attributesArray.push({key: key, value: attributes[key]});
585 - }
586 - if (attributesArray.length > 0) {
587 - return attributeService.saveEntityAttributes(entityId, "SERVER_SCOPE", attributesArray);
588 - } else {
589 - return widgetContext.rxjs.of([]);
590 - }
591 - }
592 -}
593 -{{/code}}
594 -
595 -==== [[image:1730771441589-122.png]] ====
596 -
597 -==== Asset Alarm: ====
598 -
599 -Data:
600 -
601 -[[image:1730771504586-433.png]]
602 -
603 -==== 4.1.2.3、Configure the first layer menu interface ====
604 -
605 -**Map:**
606 -
607 -Data:
608 -
609 -[[image:1730710271230-716.png||height="729" width="1427"]]
610 -
611 -Actions:The map interface has two actions, among which Select supermarket can refresh the device list and related alarms on the right side to enter the location, and Supermarket_detail can jump to the second level physical interface to view the details of the location based on the selected location
612 -
613 -[[image:1730710850458-781.png||height="770" width="1429"]]
614 -
615 -Select supermarket:
616 -
617 -{{code language="none"}}
618 -var params = widgetContext.stateController.getStateParams();
619 -var selectedSupermarket = params['selectedSupermarket'];
620 -if (selectedSupermarket && selectedSupermarket.entityId.id === entityId.id) {
621 - params['selectedSupermarket'] = null;
622 -} else {
623 - params['selectedSupermarket'] = { entityId: entityId, entityName: entityName, entityLabel: entityLabel };
624 -}
625 -widgetContext.stateController.updateState(null, params);
626 -{{/code}}
627 -
628 -[[image:1730710875401-848.png||height="767" width="1429"]]
629 -
630 -Supermarket_detail:
631 -
632 -{{code language="none"}}
633 -var params = JSON.parse(JSON.stringify(widgetContext.stateController.getStateParams()));
634 -params['selectedSupermarket'] = {
635 - entityId: entityId,
636 - entityName: entityName,
637 - entityLabel: entityLabel,
638 -};
639 -params['targetEntityParamName'] = 'selectedSupermarket';
640 -params['selectedDevice'] = null;
641 -
642 -widgetContext.stateController.openState('svgmap', params);
643 -{{/code}}
644 -
645 -[[image:1730710990334-601.png||height="772" width="1433"]]
646 -
647 -* In this demo, exclusive map icons were set as follows:
648 -
649 -{{code language="none"}}
650 -var res = {
651 - url: images[0],
652 - size: 66
653 -};
654 -return res;
655 -{{/code}}
656 -
657 -[[image:1730710395303-672.png||height="771" width="1438"]]
658 -
659 -Asset List:
660 -
661 -
662 -[[image:1730710693066-349.png||height="772" width="1439"]]
663 -
664 -Actions:The Assets List interface has an action, which is the same as the Supermarket_details in the Map. You can jump to the second level entity interface to view the details of the selected location based on its location
665 -
666 -[[image:1730712335338-750.png||height="751" width="1423"]]
667 -
668 -[[image:1730712473941-913.png||height="781" width="1422"]]
669 -
670 -All Alarms:
671 -
672 -[[image:1730712539209-554.png||height="764" width="1424"]]
673 -
674 674  == 4.2 Alarm configuration details ==
675 675  
676 676  == 4.3 Rule chain configuration details ==
1730710271230-716.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -1.5 MB
Content
1730710395303-672.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -1.6 MB
Content
1730710693066-349.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -94.4 KB
Content
1730710850458-781.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -1.5 MB
Content
1730710875401-848.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -1.0 MB
Content
1730710949358-671.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -1.0 MB
Content
1730710990334-601.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -1.0 MB
Content
1730712335338-750.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -77.1 KB
Content
1730712473941-913.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -135.9 KB
Content
1730712539209-554.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -131.0 KB
Content
1730770392454-317.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -195.6 KB
Content
1730770636230-829.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -290.6 KB
Content
1730770875793-351.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -305.2 KB
Content
1730771103096-522.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -197.9 KB
Content
1730771199343-553.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -108.5 KB
Content
1730771228766-212.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -46.8 KB
Content
1730771256045-238.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -69.1 KB
Content
1730771318657-502.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -60.4 KB
Content
1730771386258-676.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -46.4 KB
Content
1730771441589-122.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -57.6 KB
Content
1730771504586-433.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -151.2 KB
Content