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

From version 43.1
edited by Hera Guo
on 2024/11/07 09:47
Change comment: There is no comment for this version
To version 15.1
edited by Hera Guo
on 2024/11/04 15:11
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -57,7 +57,7 @@
57 57  
58 58  **device:**This section displays the specific information collected by the device, and different types of sensors have different display interfaces
59 59  
60 -[[image:屏幕截图 2024-11-04 134645.png]]
60 +[[image:1730699212334-960.png]]
61 61  
62 62  First floor:
63 63  
... ... @@ -82,7 +82,7 @@
82 82  
83 83  High Temperature、Low Temperature、High humidity、Low humidity、Low voltage、Device Disconnected
84 84  
85 -[[image:屏幕截图 2024-11-04 135045.png]]
85 +[[image:1730699566023-958.png]]
86 86  
87 87  = 4.configuration details =
88 88  
... ... @@ -90,987 +90,17 @@
90 90  
91 91  == 4.1 Dashboard configuration details ==
92 92  
93 -=== 4.1.1.Data source (Entity aliases) ===
93 +1、Configure the interface of the third layer Davies.
94 94  
95 -detail:Obtain data based on dashboard status
96 96  
97 -[[image:1730709424998-915.png||height="729" width="1436"]]
96 +2、Configure the interface of the second layer asset
98 98  
99 -Alarm:Obtain alarm information
100 100  
101 -[[image:1730709479828-595.png||height="696" width="1435"]]
99 +3、Configure the first layer menu interface
102 102  
103 -Dragino&GXHL,Ltd:Obtain data through asset types
104 104  
105 -[[image:1730709511861-439.png||height="714" width="1435"]]
106 -
107 -Selected Supermarket:Retrieve devices by device type
108 -
109 -[[image:1730709527720-418.png||height="751" width="1433"]]
110 -
111 -Supermarket Devices:Obtain data through device type
112 -
113 -[[image:1730709555797-383.png||height="726" width="1434"]]
114 -
115 -LHT65N Device:Obtain data based on device type
116 -
117 -[[image:1730857191863-514.png||height="725" width="1433"]]
118 -
119 -=== 4.1.2.Page Configuration ===
120 -
121 -==== 4.1.2.1、Configure the interface of the third layer Davies. ====
122 -
123 -==== 4.1.2.2、Configure the interface of the second layer asset ====
124 -
125 -===== 4.1.2.2.1 Equipment distribution diagram: =====
126 -
127 -**Data:**
128 -
129 -[[image:1730770392454-317.png||height="745" width="1439"]]
130 -
131 -**Appearannce:**In this module, we need to arrange our devices in the corresponding positions and use icons to display our devices. Therefore, in the Appearance interface, we need to configure them
132 -
133 -**Tooltip function:**This module displays the current information of the device
134 -
135 -[[image:1730857537965-184.png]]
136 -
137 -{{code language="none"}}
138 -var msg = data
139 -if(msg.Label=="gateway" && msg.type == "gateway"){
140 - var stauts
141 - if (msg.gatewaystauts=="true"){
142 - stauts = "Connect"
143 - }
144 - else{
145 - stauts = "Disconnected"
146 - }
147 - var str = "<b>"+msg.entityName+"</b><br/><b>"+stauts+"</b><br/>"
148 - return str
149 -}
150 -else if(msg.type=="gxhl01" && msg.Label!="gateway"){
151 - 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+"%"
152 - return str
153 -}
154 -else{
155 - 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/>"+
156 - "<b>Co2:"+msg.co2+"</b></br><b>Air_Pressure:"+msg.air_pressure
157 -
158 - return str
159 -}
160 -{{/code}}
161 -
162 -(% class="wikigeneratedid" id="HMarkerimagefunctionFF1A" %)
163 -**Marker image function:**This module can display different icons based on different types of sensors and their status to achieve its functionality
164 -
165 -(% class="wikigeneratedid" %)
166 -[[image:1730857750749-240.png]]
167 -
168 -{{code language="none"}}
169 -var res
170 -var msg = data
171 -if(msg.Label=="gateway" && msg.type=="gateway"){
172 - if (msg.gatewaystauts == "true"){
173 - res = {
174 - url: images[3],
175 - size: 40
176 -}
177 -}
178 -else{
179 - res = {
180 - url: images[2],
181 - size: 40
182 -}
183 -}}
184 -else if(msg.Label!="gateway" && msg.type=="gxhl01" ){
185 - if (msg.active=="false"){
186 - res = {
187 - url: images[1],
188 - size: 40
189 -}}
190 -else{
191 - res = {
192 - url: images[0],
193 - size: 40
194 -}
195 -}
196 -}
197 -else if(msg.type=="LWL02"){
198 - if (msg.WATER_LEAK_STATUS=="0"){
199 - res = {
200 - url: images[6],
201 - size: 40
202 -}}
203 -else{
204 - res = {
205 - url: images[7],
206 - size: 40
207 -}
208 -}
209 -}
210 -else if(msg.type=="LDS02"){
211 - if (msg.DOOR_OPEN_STATUS=="0"){
212 - res = {
213 - url: images[5],
214 - size: 40
215 -}}
216 -else{
217 - res = {
218 - url: images[8],
219 - size: 40
220 -}
221 -}
222 -}
223 -else if(msg.type=="LDS12"){
224 - res = {
225 - url: images[10],
226 - size: 40
227 -}}
228 -else if(msg.type=="SE01"){
229 - res = {
230 - url: images[9],
231 - size: 40
232 -}}
233 -else if(msg.type=="PB01"){
234 - res = {
235 - url: images[11],
236 - size: 40
237 -}}
238 -else if(msg.type=="S31b"){
239 - res = {
240 - url: images[12],
241 - size: 40
242 -}}
243 -else if(msg.type=="LHT65N"){
244 - res = {
245 - url: images[13],
246 - size: 40
247 -}}
248 -else{
249 - res = {
250 - url: images[4],
251 - size: 40
252 -}
253 -}
254 -return res;
255 -{{/code}}
256 -
257 -(% class="wikigeneratedid" %)
258 -[[image:1730770875793-351.png]]
259 -
260 -(% class="wikigeneratedid" %)
261 -**Actions:**We need to implement the function of entering the details interface through the corresponding device icon, so in this module, we need to add actions to achieve redirection
262 -
263 -{{code language="none"}}
264 -var entitySubType;
265 -var $injector = widgetContext.$scope.$injector;
266 -$injector.get(widgetContext.servicesMap.get('entityService')).getEntity(entityId.entityType, entityId.id)
267 - .subscribe(function(data) {
268 - entitySubType = data.type;
269 - console.log(entitySubType)
270 - if (entitySubType == 'gateway') {
271 - openDashboardStates('gateway_detail');
272 - } else if (entitySubType == 'gxhl01') {
273 - openDashboardStates('detail');
274 - }
275 - else if(entitySubType == 'AQS01-dragino-office'){
276 - openDashboardStates("aqs01_detail")
277 - }
278 - else if (entitySubType == 'LDS12') {
279 - openDashboardStates('lds12_detail');
280 - }
281 - else if (entitySubType == 'LDS02') {
282 - openDashboardStates('lds02_detail');
283 - }
284 - else if (entitySubType == 'SE01') {
285 - openDashboardStates('se01_detail');
286 - }
287 - else if (entitySubType == 'PB01') {
288 - openDashboardStates('pb01_detail');
289 - }
290 - else if (entitySubType == 'LWL02') {
291 - openDashboardStates('lwl02_detail');
292 - }
293 - else if (entitySubType == 'LPS8N') {
294 - openDashboardStates('lps8n_detail');
295 - }
296 - else if (entitySubType == 'LHT65N') {
297 - openDashboardStates('lht65n_detail');
298 - }
299 - else if (entitySubType == 'S31b') {
300 - openDashboardStates('s31b_detail');
301 - }
302 - });
303 -
304 -function openDashboardStates(statedId) {
305 - var stateParams = widgetContext.stateController.getStateParams();
306 - var params = {
307 - entityId: entityId,
308 - entityName: entityName
309 - };
310 -
311 - if (stateParams.city) {
312 - params.city = stateParams.city;
313 - }
314 -
315 - widgetContext.stateController.openState(statedId, params, false);
316 -}
317 -
318 -{{/code}}
319 -
320 -[[image:1730771103096-522.png]]
321 -
322 -===== 4.1.2.2.2 Device List =====
323 -
324 -(% class="wikigeneratedid" id="HDataFF1A" %)
325 -**Data:**
326 -
327 -[[image:1730771199343-553.png]]
328 -
329 -**Actions:**Equipment distribution diagram: In this module, functions need to be implemented such as adding devices, editing devices, deleting devices, and jumping to the device details page. Therefore, the following actions need to be added:
330 -
331 -[[image:1730771228766-212.png]]
332 -
333 -(% class="wikigeneratedid" id="HEditdeviceFF1A" %)
334 -**Edit device:**Implementation function: Device editing
335 -
336 -[[image:1730771256045-238.png]]
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 -**Delete device:**Implementation function: Device deletion
435 -
436 -[[image:1730771318657-502.png]]
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 -**jump:I**mplementation function: Jump to the device details page
468 -
469 -[[image:1730771386258-676.png]]
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 -(% class="wikigeneratedid" id="H-1" %)
529 -**Add device:**Implementation function: Add device
530 -
531 -[[image:1730771441589-122.png]]
532 -
533 -{{code language="none"}}
534 -let $injector = widgetContext.$scope.$injector;
535 -let customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));
536 -let deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));
537 -let attributeService = $injector.get(widgetContext.servicesMap.get('attributeService'));
538 -
539 -openAddDeviceDialog();
540 -
541 -function openAddDeviceDialog() {
542 - customDialog.customDialog(htmlTemplate, AddDeviceDialogController).subscribe();
543 -}
544 -
545 -function AddDeviceDialogController(instance) {
546 - let vm = instance;
547 -
548 - vm.addDeviceFormGroup = vm.fb.group({
549 - deviceName: ['', [vm.validators.required]],
550 - deviceType: ['', [vm.validators.required]],
551 - deviceLabel: [''],
552 - attributes: vm.fb.group({
553 - latitude: [null],
554 - longitude: [null]
555 - })
556 - });
557 -
558 - vm.cancel = function() {
559 - vm.dialogRef.close(null);
560 - };
561 -
562 - vm.save = function() {
563 - vm.addDeviceFormGroup.markAsPristine();
564 - let device = {
565 - name: vm.addDeviceFormGroup.get('deviceName').value,
566 - type: vm.addDeviceFormGroup.get('deviceType').value,
567 - label: vm.addDeviceFormGroup.get('deviceLabel').value
568 - };
569 - deviceService.saveDevice(device).subscribe(
570 - function (device) {
571 - saveAttributes(device.id).subscribe(
572 - function () {
573 - widgetContext.updateAliases();
574 - vm.dialogRef.close(null);
575 - }
576 - );
577 - }
578 - );
579 - };
580 -
581 - function saveAttributes(entityId) {
582 - let attributes = vm.addDeviceFormGroup.get('attributes').value;
583 - let attributesArray = [];
584 - for (let key in attributes) {
585 - attributesArray.push({key: key, value: attributes[key]});
586 - }
587 - if (attributesArray.length > 0) {
588 - return attributeService.saveEntityAttributes(entityId, "SERVER_SCOPE", attributesArray);
589 - } else {
590 - return widgetContext.rxjs.of([]);
591 - }
592 - }
593 -}
594 -{{/code}}
595 -
596 -==== ====
597 -
598 -===== **4.1.2.2.3 Asset Alarm:** =====
599 -
600 -**Data:**
601 -
602 -[[image:1730771504586-433.png]]
603 -
604 -==== 4.1.2.3、Configure the first layer menu interface ====
605 -
606 -===== =====
607 -
608 -[[image:1730710271230-716.png||height="729" width="1427"]]
609 -
610 -**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
611 -
612 -[[image:1730710850458-781.png||height="770" width="1429"]]
613 -
614 -**Select supermarket:**Implementation function: Refresh the side page
615 -
616 -{{code language="none"}}
617 -var params = widgetContext.stateController.getStateParams();
618 -var selectedSupermarket = params['selectedSupermarket'];
619 -if (selectedSupermarket && selectedSupermarket.entityId.id === entityId.id) {
620 - params['selectedSupermarket'] = null;
621 -} else {
622 - params['selectedSupermarket'] = { entityId: entityId, entityName: entityName, entityLabel: entityLabel };
623 -}
624 -widgetContext.stateController.updateState(null, params);
625 -{{/code}}
626 -
627 -[[image:1730710875401-848.png||height="767" width="1429"]]
628 -
629 -**Supermarket_detail:**Implementation function: Jump to the asset details page
630 -
631 -{{code language="none"}}
632 -var params = JSON.parse(JSON.stringify(widgetContext.stateController.getStateParams()));
633 -params['selectedSupermarket'] = {
634 - entityId: entityId,
635 - entityName: entityName,
636 - entityLabel: entityLabel,
637 -};
638 -params['targetEntityParamName'] = 'selectedSupermarket';
639 -params['selectedDevice'] = null;
640 -
641 -widgetContext.stateController.openState('svgmap', params);
642 -{{/code}}
643 -
644 -[[image:1730710990334-601.png||height="772" width="1433"]]
645 -
646 -* (((
647 -In this demo, exclusive map icons were set as follows:
648 -)))
649 -
650 -{{code language="none"}}
651 -var res = {
652 - url: images[0],
653 - size: 66
654 -};
655 -return res;
656 -{{/code}}
657 -
658 -[[image:1730710395303-672.png||height="771" width="1438"]]
659 -
660 -===== 4.1.2.3.1 Asset List: =====
661 -
662 -
663 -
664 -**Data:**
665 -
666 -[[image:1730710693066-349.png||height="772" width="1439"]]
667 -
668 -**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
669 -
670 -[[image:1730712335338-750.png||height="751" width="1423"]]
671 -
672 -[[image:1730712473941-913.png||height="781" width="1422"]]
673 -
674 -All Alarms:
675 -
676 -[[image:1730712539209-554.png||height="764" width="1424"]]
677 -
678 678  == 4.2 Alarm configuration details ==
679 679  
680 -=== 4.2.1 High temperature ===
681 -
682 -Creat:
683 -
684 -[[image:1730862483514-101.png||height="750" width="1407"]]
685 -
686 -Clear:
687 -
688 -[[image:1730862584519-902.png||height="758" width="1404"]]
689 -
690 -=== 4.2.2 Low Temperature ===
691 -
692 -Creat:
693 -
694 -[[image:1730863708259-750.png||height="752" width="1403"]]
695 -
696 -Clear:
697 -
698 -[[image:1730863750414-979.png||height="746" width="1403"]]
699 -
700 -=== 4.2.3 High humidity ===
701 -
702 -Creat:
703 -
704 -[[image:1730864045747-876.png||height="752" width="1396"]]
705 -
706 -Clear:
707 -
708 -[[image:1730864077395-395.png||height="735" width="1393"]]
709 -
710 -=== 4.2.4 Low humidity ===
711 -
712 -Creat:
713 -
714 -[[image:1730864117808-484.png||height="741" width="1392"]]
715 -
716 -Clear:
717 -
718 -[[image:1730864159071-895.png||height="745" width="1392"]]
719 -
720 -=== 4.2.5 Low voltage ===
721 -
722 -Creat:
723 -
724 -[[image:1730864207037-477.png||height="740" width="1388"]]
725 -
726 -Clear:
727 -
728 -[[image:1730864250506-111.png||height="735" width="1389"]]
729 -
730 -=== 4.2.6 Device Disconnected ===
731 -
732 -Creat:
733 -
734 -[[image:1730864293216-991.png||height="739" width="1387"]]
735 -
736 -Clear:
737 -
738 -[[image:1730864331859-740.png||height="735" width="1385"]]
739 -
740 740  == 4.3 Rule chain configuration details ==
741 741  
742 -[[image:1730864784118-474.png]]
743 -
744 -**Script:**Email configuration for sending device alarm information
745 -
746 -[[image:1730864676542-406.png||height="732" width="1384"]]
747 -
748 -{{code language="none"}}
749 -function locatime(timenumber){
750 - var date = new Date(timenumber)
751 - return date.toLocaleDateString() + ' ' + date.toLocaleTimeString()
752 -}
753 -var name = msg.name
754 -var devicename = msg.originatorName
755 -var label = msg.originatorLabel
756 -var status = msg.status
757 -var detaildata =JSON.parse(msg.details.data)
758 -var tempswitch
759 -
760 -if (name != "Device Disconnected") {
761 - //detaildata=JSON.parse(msg.details.data)
762 - if (detaildata.Temperature_alarm_switch == true) {
763 - tempswitch = "open"
764 - } else {
765 - tempswitch = "close"
766 - }
767 - var humswitch
768 - if (detaildata.Humidity_alarm_switch == true) {
769 - humswitch = "open"
770 - } else {
771 - humswitch = "close"
772 - }
773 - var batswitch
774 - if (detaildata.Voltage_alarm_switch == true) {
775 - batswitch = "open"
776 - } else {
777 - batswitch = "close"
778 - }
779 - var str2 = "<p>-- Temperature alarm switch status: " +
780 - tempswitch + "</p>" +
781 - "<p>-- Humidity alarm switch status: " + humswitch +
782 - "</p>" +
783 - "<p>-- Voltage alarm switch status: " + batswitch
784 -}
785 -
786 -if (name == "High Temperature" && status ==
787 - "ACTIVE_UNACK") {
788 - var emailstr =
789 - "<div><p><span style='color: black; font-weight: bold'>" +
790 - "Device " + label + " has alarm:</span></p>" +
791 - "<p><span style='color: red; font-weight: bold'>-- High Temperature Alarm</span></p>" +
792 - "<p>-- Current Temperature : " + detaildata
793 - .TempC_SHT + "</p><br>" +
794 - "<p>Device Configure:</p>" +
795 - "<p>-- Temperature Threshold : min: " + detaildata
796 - .Low_temperature_alarm + ", max: " + detaildata
797 - .High_temperature_alarm + "</p>" +
798 - "<p>-- Humidity Threshold: min: " + detaildata
799 - .Low_humidity_alarm + ", max:" + detaildata
800 - .High_humidity_alarm + "</p>" +
801 - "<p>-- Battery threshold: min: " + detaildata
802 - .Low_voltage_alarm + "</p>" + str2 + "</div>"
803 - return {
804 - msg: {
805 - "data": emailstr
806 - },
807 - metadata: metadata,
808 - msgType: msgType
809 - };
810 -} else if (name == "Low Temperature" && status ==
811 - "ACTIVE_UNACK") {
812 - var emailstr =
813 - "<div><p><span style='color: black; font-weight: bold'>" +
814 - "Device " + label + " has alarm:</span></p>" +
815 - "<p><span style='color: red; font-weight: bold'>-- Low Temperature Alarm</span></p>" +
816 - "<p>-- Current Temperature : " + detaildata
817 - .TempC_SHT + "</p><br>" +
818 - "<p>Device Configure:</p>" +
819 - "<p>-- Temperature Threshold : min: " + detaildata
820 - .Low_temperature_alarm + ", max: " + detaildata
821 - .High_temperature_alarm + "</p>" +
822 - "<p>-- Humidity Threshold: min: " + detaildata
823 - .Low_humidity_alarm + ", max:" + detaildata
824 - .High_humidity_alarm + "</p>" +
825 - "<p>-- Battery threshold: min: " + detaildata
826 - .Low_voltage_alarm + "</p>" + str2 + "</div>"
827 -
828 - return {
829 - msg: {
830 - "data": emailstr
831 - },
832 - metadata: metadata,
833 - msgType: msgType
834 - };
835 -
836 -} else if (name == "Device Disconnected" && status ==
837 - "ACTIVE_UNACK") {
838 - var time1 = locatime(Number(detaildata.lastActivityTime))
839 - //var time1 = detaildata.lastActivityTime
840 - // var chazhi = parseInt((detaildata.inactivityAlarmTime-detaildata.lastActivityTime)/1000/60)
841 - // var emailstr =
842 - // "<div><p><span style='color: red; font-weight: bold'>" +
843 - // "Device " + label + " has Alarm</span></p><p>Last activity time: "+time1+"</p><p>Last Uplink: 21"+"minutes ago</p></div>"
844 -
845 - var emailstr ="Device " + label + " has Alarm##Last activity time: "+time1+"##Last Uplink: 21minutes ago"
846 - var newType = "POST_TELEMETRY_REQUEST"
847 - return {
848 - msg:emailstr,
849 - metadata: metadata,
850 - msgType: newType
851 - }
852 -} else if (name == "High humidity" && status ==
853 - "ACTIVE_UNACK") {
854 - var emailstr =
855 - "<div><p><span style='color: black; font-weight: bold'>" +
856 - "Device " + label + " has alarm:</span></p>" +
857 - "<p><span style='color: red; font-weight: bold'>-- High Humidity Alarm</span></p>" +
858 - "<p>-- Current Temperature : " + detaildata
859 - .Hum_SHT + "</p><br>" +
860 - "<p>Device Configure:</p>" +
861 - "<p>-- Temperature Threshold : min: " + detaildata
862 - .Low_temperature_alarm + ", max: " + detaildata
863 - .High_temperature_alarm + "</p>" +
864 - "<p>-- Humidity Threshold: min: " + detaildata
865 - .Low_humidity_alarm + ", max:" + detaildata
866 - .High_humidity_alarm + "</p>" +
867 - "<p>-- Battery threshold: min: " + detaildata
868 - .Low_voltage_alarm + "</p>" + str2 + "</div>"
869 -
870 - return {
871 - msg: {
872 - "data": emailstr
873 - },
874 - metadata: metadata,
875 - msgType: msgType
876 - };
877 -} else if (name == "Low humidity" && status ==
878 - "ACTIVE_UNACK") {
879 - var emailstr =
880 - "<div><p><span style='color: black; font-weight: bold'>" +
881 - "Device " + label + " has alarm:</span></p>" +
882 - "<p><span style='color: red; font-weight: bold'>-- Low Humidity Alarm</span></p>" +
883 - "<p>-- Current Temperature : " + detaildata
884 - .Hum_SHT + "</p><br>" +
885 - "<p>Device Configure:</p>" +
886 - "<p>-- Temperature Threshold : min: " + detaildata
887 - .Low_temperature_alarm + ", max: " + detaildata
888 - .High_temperature_alarm + "</p>" +
889 - "<p>-- Humidity Threshold: min: " + detaildata
890 - .Low_humidity_alarm + ", max:" + detaildata
891 - .High_humidity_alarm + "</p>" +
892 - "<p>-- Battery threshold: min: " + detaildata
893 - .Low_voltage_alarm + "</p>" + str2 + "</div>"
894 -
895 - return {
896 - msg: {
897 - "data": emailstr
898 - },
899 - metadata: metadata,
900 - msgType: msgType
901 - };
902 -} else if (name == "Low voltage" && status ==
903 - "ACTIVE_UNACK") {
904 - var emailstr =
905 - "<div><p><span style='color: black; font-weight: bold'>" +
906 - "Device " + label + " has alarm:</span></p>" +
907 - "<p><span style='color: red; font-weight: bold'>-- Low Voltage Alarm</span></p>" +
908 - "<p>-- Current Temperature : " + detaildata.BatV +
909 - "</p><br>" +
910 - "<p>Device Configure:</p>" +
911 - "<p>-- Temperature Threshold : min: " + detaildata
912 - .Low_temperature_alarm + ", max: " + detaildata
913 - .High_temperature_alarm + "</p>" +
914 - "<p>-- Humidity Threshold: min: " + detaildata
915 - .Low_humidity_alarm + ", max:" + detaildata
916 - .High_humidity_alarm + "</p>" +
917 - "<p>-- Battery threshold: min: " + detaildata
918 - .Low_voltage_alarm + "</p>" + str2 + "</div>"
919 -
920 - return {
921 - msg: {
922 - "data": emailstr
923 - },
924 - metadata: metadata,
925 - msgType: msgType
926 - };
927 -} else if (name == "High Temperature" && status ==
928 - "CLEARED_UNACK") {
929 - var emailstr =
930 - "<div><p><span style='color: green; font-weight: bold'>Device " +
931 - label +
932 - " High Temperature Alarm Cleared</span></p>" +
933 - "<p>-- Current Temperature : " + detaildata
934 - .TempC_SHT + "</p><br>" +
935 - "<p>Device Configure:</p>" +
936 - "<p>-- Temperature Threshold : min: " + detaildata
937 - .Low_temperature_alarm + ", max: " + detaildata
938 - .High_temperature_alarm + "</p>" +
939 - "<p>-- Humidity Threshold: min: " + detaildata
940 - .Low_humidity_alarm + ", max:" + detaildata
941 - .High_humidity_alarm + "</p>" +
942 - "<p>-- Battery threshold: min: " + detaildata
943 - .Low_voltage_alarm + "</p>" + str2 + "</div>"
944 -
945 - return {
946 - msg: {
947 - "data": emailstr
948 - },
949 - metadata: metadata,
950 - msgType: msgType
951 - };
952 -} else if (name == "Low Temperature" && status ==
953 - "CLEARED_UNACK") {
954 - var emailstr =
955 - "<div><p><span style='color: green; font-weight: bold'>Device " +
956 - label +
957 - " Low Temperature Alarm Cleared</span></p>" +
958 - "<p>-- Current Temperature : " + detaildata
959 - .TempC_SHT + "</p><br>" +
960 - "<p>Device Configure:</p>" +
961 - "<p>-- Temperature Threshold : min: " + detaildata
962 - .Low_temperature_alarm + ", max: " + detaildata
963 - .High_temperature_alarm + "</p>" +
964 - "<p>-- Humidity Threshold: min: " + detaildata
965 - .Low_humidity_alarm + ", max:" + detaildata
966 - .High_humidity_alarm + "</p>" +
967 - "<p>-- Battery threshold: min: " + detaildata
968 - .Low_voltage_alarm + "</p>" + str2 + "</div>"
969 -
970 - return {
971 - msg: {
972 - "data": emailstr
973 - },
974 - metadata: metadata,
975 - msgType: msgType
976 - };
977 -} else if (name == "High humidity" && status ==
978 - "CLEARED_UNACK") {
979 - var emailstr =
980 - "<div><p><span style='color: green; font-weight: bold'>Device " +
981 - label + " High Humidity Alarm Cleared</span></p>" +
982 - "<p>-- Current Temperature : " + detaildata
983 - .Hum_SHT + "</p><br>" +
984 - "<p>Device Configure:</p>" +
985 - "<p>-- Temperature Threshold : min: " + detaildata
986 - .Low_temperature_alarm + ", max: " + detaildata
987 - .High_temperature_alarm + "</p>" +
988 - "<p>-- Humidity Threshold: min: " + detaildata
989 - .Low_humidity_alarm + ", max:" + detaildata
990 - .High_humidity_alarm + "</p>" +
991 - "<p>-- Battery threshold: min: " + detaildata
992 - .Low_voltage_alarm + "</p>" + str2 + "</div>"
993 -
994 - return {
995 - msg: {
996 - "data": emailstr
997 - },
998 - metadata: metadata,
999 - msgType: msgType
1000 - };
1001 -} else if (name == "Low humidity" && status ==
1002 - "CLEARED_UNACK") {
1003 - var emailstr =
1004 - "<div><p><span style='color: green; font-weight: bold'>Device " +
1005 - label + " Low Humidity Alarm Cleared</span></p>" +
1006 - "<p>-- Current Temperature : " + detaildata
1007 - .Hum_SHT + "</p><br>" +
1008 - "<p>Device Configure:</p>" +
1009 - "<p>-- Temperature Threshold : min: " + detaildata
1010 - .Low_temperature_alarm + ", max: " + detaildata
1011 - .High_temperature_alarm + "</p>" +
1012 - "<p>-- Humidity Threshold: min: " + detaildata
1013 - .Low_humidity_alarm + ", max:" + detaildata
1014 - .High_humidity_alarm + "</p>" +
1015 - "<p>-- Battery threshold: min: " + detaildata
1016 - .Low_voltage_alarm + "</p>" + str2 + "</div>"
1017 - return {
1018 - msg: {
1019 - "data": emailstr
1020 - },
1021 - metadata: metadata,
1022 - msgType: msgType
1023 - };
1024 -} else if (name == "Low voltage" && status ==
1025 - "CLEARED_UNACK") {
1026 -
1027 - var emailstr =
1028 - "<div><p><span style='color: green; font-weight: bold'>Device " +
1029 - label + " Low Voltage Alarm Cleared</span></p>" +
1030 - "<p>-- Current Temperature : " + detaildata.BatV +
1031 - "</p><br><br>" +
1032 - "<p>Device Configure:</p>" +
1033 - "<p>-- Temperature Threshold : min: " + detaildata
1034 - .Low_temperature_alarm + ", max: " + detaildata
1035 - .High_temperature_alarm + "</p>" +
1036 - "<p>-- Humidity Threshold: min: " + detaildata
1037 - .Low_humidity_alarm + ", max:" + detaildata
1038 - .High_humidity_alarm + "</p>" +
1039 - "<p>-- Battery threshold: min: " + detaildata
1040 - .Low_voltage_alarm + "</p>" + str2 + "</div>"
1041 -
1042 - return {
1043 - msg: {
1044 - "data": emailstr
1045 - },
1046 - metadata: metadata,
1047 - msgType: msgType
1048 - };
1049 -} else if (name == "Device Disconnected" && status ==
1050 - "CLEARED_UNACK") {
1051 - var time1 = locatime(Number(detaildata.lastActivityTime))
1052 - //var time1 = detaildata.lastActivityTime
1053 - // var chazhi = parseInt((detaildata.inactivityAlarmTime-detaildata.lastActivityTime)/1000/60)
1054 - // var emailstr =
1055 - // "<div><p><span style='color: green; font-weight: bold'>" +
1056 - // "Device " + label + " has Alarm Cleared</span></p><p>Last activity time: "+time1+"</p></div>"
1057 - var emailstr ="Device " + label + " has Alarm Cleared##Last activity time: "+time1
1058 - var newType = "POST_TELEMETRY_REQUEST"
1059 - return {
1060 - msg: emailstr,
1061 - metadata: metadata,
1062 - msgType: newType
1063 - }
1064 -}
1065 -{{/code}}
1066 -
1067 -(% class="wikigeneratedid" %)
1068 -**Generate Report:**
1069 -
1070 -(% class="wikigeneratedid" %)
1071 -[[image:1730865053380-293.png]]
1072 -
1073 -= 5.other =
1074 -
1075 -* If you want to create a similar dashboard, after understanding the case, you can download and import the dashboard, device profiles, rule chains, etc. of the case on GitHub, and make modifications based on them.
1076 -* GitHub address:[[https:~~/~~/github.com/ThingsEye-io/te-platform/tree/main/case/Dragino%20Office%20%26%20Factory>>https://github.com/ThingsEye-io/te-platform/tree/main/case/Dragino%20Office%20%26%20Factory]]
106 += 5. =
1730709382428-730.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -480.8 KB
Content
1730709409941-536.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -451.5 KB
Content
1730709424998-915.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -443.4 KB
Content
1730709442773-502.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -448.3 KB
Content
1730709461297-207.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -458.2 KB
Content
1730709479828-595.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -450.7 KB
Content
1730709511861-439.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -470.0 KB
Content
1730709527720-418.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -475.8 KB
Content
1730709542597-321.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -474.8 KB
Content
1730709555797-383.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -463.2 KB
Content
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
1730857191863-514.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -354.7 KB
Content
1730857537965-184.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -455.1 KB
Content
1730857750749-240.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -285.9 KB
Content
1730862483514-101.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -195.8 KB
Content
1730862584519-902.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -191.1 KB
Content
1730863708259-750.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -220.1 KB
Content
1730863750414-979.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -210.6 KB
Content
1730864045747-876.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -208.9 KB
Content
1730864077395-395.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -201.4 KB
Content
1730864117808-484.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -203.0 KB
Content
1730864159071-895.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -226.6 KB
Content
1730864207037-477.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -215.3 KB
Content
1730864250506-111.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -209.5 KB
Content
1730864293216-991.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -138.5 KB
Content
1730864331859-740.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -134.4 KB
Content
1730864460314-611.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -256.7 KB
Content
1730864617480-221.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -260.8 KB
Content
1730864676542-406.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -227.7 KB
Content
1730864784118-474.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -148.8 KB
Content
1730865053380-293.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -46.7 KB
Content
屏幕截图 2024-11-04 135045.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -29.4 KB
Content