iobroker.zigbee 1.6.8 → 1.6.12
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.
- package/README.md +11 -1
- package/admin/admin.js +167 -19
- package/admin/img/14153905L.png +0 -0
- package/admin/img/81855.png +0 -0
- package/admin/img/HG06338.png +0 -0
- package/admin/img/TI0001-cover.png +0 -0
- package/admin/index_m.html +93 -19
- package/admin/tab_m.html +119 -211
- package/admin/words.js +29 -28
- package/io-package.json +10 -2
- package/lib/commands.js +35 -4
- package/lib/devices.js +25 -0
- package/lib/exposes.js +791 -791
- package/lib/groups.js +28 -18
- package/lib/rgb.js +30 -0
- package/lib/states.js +38 -13
- package/lib/statescontroller.js +84 -22
- package/lib/zbBaseExtension.js +4 -3
- package/lib/zbDelayedAction.js +1 -0
- package/lib/zbDeviceAvailability.js +2 -1
- package/lib/zbDeviceConfigure.js +11 -7
- package/lib/zbDeviceEvent.js +6 -0
- package/lib/zigbeecontroller.js +87 -20
- package/main.js +5 -4
- package/package.json +3 -3
package/admin/tab_m.html
CHANGED
|
@@ -369,7 +369,7 @@
|
|
|
369
369
|
</div>
|
|
370
370
|
<ul id="nav-mobile" class="right">
|
|
371
371
|
<li>
|
|
372
|
-
<a id="state_cleanup_btn" class="btn-floating waves-effect waves-light
|
|
372
|
+
<a id="state_cleanup_btn" class="btn-floating waves-effect waves-light red tooltipped center-align hoverable translateT" title="State Cleanup">
|
|
373
373
|
<i class="material-icons large icon-blue">sync</i></a>
|
|
374
374
|
</li>
|
|
375
375
|
<li>
|
|
@@ -377,7 +377,7 @@
|
|
|
377
377
|
<i class="material-icons large icon-blue">system_update</i></a>
|
|
378
378
|
</li>
|
|
379
379
|
<li>
|
|
380
|
-
<a id="add_grp_btn" class="btn-floating waves-effect waves-light
|
|
380
|
+
<a id="add_grp_btn" class="btn-floating waves-effect waves-light brown tooltipped center-align hoverable translateT" title="Add Group">
|
|
381
381
|
<i class="material-icons large">group_work</i></a>
|
|
382
382
|
</li>
|
|
383
383
|
<li>
|
|
@@ -393,12 +393,11 @@
|
|
|
393
393
|
<div class="nav-content">
|
|
394
394
|
<ul class="tabs tabs-transparent">
|
|
395
395
|
<li class="tab col s2"><a href="#tab-main" id="devs" class="translate">Devices</a></li>
|
|
396
|
-
<!-- <li class="tab col s2"><a href="#tab-groups" class="translate">Groups</a></li>-->
|
|
397
396
|
<li class="tab col s2"><a href="#tab-map" id="tabmap" class="translate">Network map</a></li>
|
|
398
397
|
<li class="tab col s2"><a href="#tab-binding" class="translate">Binding</a></li>
|
|
399
398
|
<li class="tab col s2"><a href="#tab-exclude" class="translate">Excludes</a></li>
|
|
400
399
|
<!--li class="tab col s2"><a href="#tab-sett" id="settings" class="translate">Settings</a></li-->
|
|
401
|
-
|
|
400
|
+
<!-- li class="tab col s2"><a href="#tab-dev" id="develop" class="translate">Developer</a></li-->
|
|
402
401
|
</ul>
|
|
403
402
|
</div>
|
|
404
403
|
</nav>
|
|
@@ -419,7 +418,7 @@
|
|
|
419
418
|
<input id="device-search" class="filter-input translateP" placeholder="Искать" autocomplete="new-password" readonly="readonly" onfocus="if (this.hasAttribute('readonly')) {this.removeAttribute('readonly'); this.blur(); this.focus();}" data-lang-placeholder="Filter">
|
|
420
419
|
<a class="filter-clear btn-floating btn-very-small translateT red lighten-3" title="Очистить" data-lang-title="clear" style="display: none;"><i class="material-icons">clear</i></a>
|
|
421
420
|
</div>
|
|
422
|
-
|
|
421
|
+
|
|
423
422
|
</li>
|
|
424
423
|
<li>
|
|
425
424
|
<div class="col input-field" style="line-height: 24px;">
|
|
@@ -553,6 +552,7 @@
|
|
|
553
552
|
<option value="-22">low</option>
|
|
554
553
|
<option value="0">norm</option>
|
|
555
554
|
<option value="19">high</option>
|
|
555
|
+
<option value="20">high+</option>
|
|
556
556
|
</select>
|
|
557
557
|
<label class="translate" for="transmitPower">transmitPower</label>
|
|
558
558
|
</div>
|
|
@@ -565,173 +565,7 @@
|
|
|
565
565
|
</div>
|
|
566
566
|
</div>
|
|
567
567
|
</div>
|
|
568
|
-
|
|
569
|
-
<div id="develop" class="row">
|
|
570
|
-
<div class="row">
|
|
571
|
-
<div class="col s12">
|
|
572
|
-
<h6 class="translate">This page is needed only for advanced users that like to extend adapter functionalities!</h6>
|
|
573
|
-
</div>
|
|
574
|
-
</div>
|
|
575
|
-
<div class="row">
|
|
576
|
-
<div class="col s4">
|
|
577
|
-
<p class="translate">notImplementedText</p>
|
|
578
|
-
<p><span class="translate">You find good explanations what the settings mean</span>
|
|
579
|
-
<a href="https://docs.smartthings.com/en/latest/device-type-developers-guide/zigbee-primer.html" target="_blank" class="translate">here</a>
|
|
580
|
-
<span class="translate">and in</span> <a href="https://www.nxp.com/docs/en/user-guide/JN-UG-3115.pdf" target="_blank">ZigBee Cluster Library</a>.
|
|
581
|
-
</p>
|
|
582
|
-
<p><span class="translate">Please contribute your discoveries</span> (<a href="https://github.com/Koenkk/zigbee-herdsman-converters" target="_blank">
|
|
583
|
-
zigbee-herdsman-converters</a>) <span class="translate">to make it available for other user too</span>.
|
|
584
|
-
</p>
|
|
585
|
-
</div>
|
|
586
|
-
<div class="col s8">
|
|
587
|
-
<div class="blue-grey-text">
|
|
588
|
-
<h6 class="translate">Examples:</h6>
|
|
589
|
-
<ul class="collapsible">
|
|
590
|
-
<li>
|
|
591
|
-
<div class="collapsible-header translate">Read Firmware</div>
|
|
592
|
-
<div class="collapsible-body">Hue Motion Detector: <b>Device:</b> SML001, <b>Endpoint:</b> 2, <b>ClusterId:</b> genBasic (0),
|
|
593
|
-
<b>Command Type: </b>Foundation, <b>Command:</b> read (0), <b>AttributeId:</b> swBuildId (16384)<br>
|
|
594
|
-
=> Result: "6.1.0.18912" (You read the device Firmware version)
|
|
595
|
-
</div>
|
|
596
|
-
</li>
|
|
597
|
-
<li>
|
|
598
|
-
<div class="collapsible-header translate">Write Attribute</div>
|
|
599
|
-
<div class="collapsible-body"><b>Device:</b> SML001, <b>Endpoint:</b> 2,
|
|
600
|
-
<b>ClusterId:</b> msOccupancySensing (1030), <b>Command Type: </b>Foundation,
|
|
601
|
-
<b>Command:</b> write (2), <b>AttributeId:</b>
|
|
602
|
-
pirOToUDelay (16, type 33), <b>Value:</b> 55<br>
|
|
603
|
-
=> (You set the timeout until motion detector changes from occupied not unoccupied,
|
|
604
|
-
test it be <b>reading</b> same attribute)
|
|
605
|
-
</div>
|
|
606
|
-
</li>
|
|
607
|
-
<li>
|
|
608
|
-
<div class="collapsible-header translate">Send Functional command</div>
|
|
609
|
-
<div class="collapsible-body"><b>Device:</b> TRADFRI bulb..., <b>Endpoint:</b> 1,
|
|
610
|
-
<b>ClusterId:</b> genOnOff (6), <b>Command Type: </b>Functional,
|
|
611
|
-
<b>Command:</b> on (1), <b>AttributeId:</b>
|
|
612
|
-
onOff (0, type 16)<br>
|
|
613
|
-
=> You switched on your bulb
|
|
614
|
-
<p>For details about needed arguments (expert mode) see
|
|
615
|
-
<a href="https://github.com/zigbeer/zcl-packet/wiki/6.-Appendix#621-general">
|
|
616
|
-
zcl-packet - Appendix</a></p></div>
|
|
617
|
-
</li>
|
|
618
|
-
<li>
|
|
619
|
-
<div class="collapsible-header translate">Expert Mode</div>
|
|
620
|
-
<div class="collapsible-body">Example:<br>
|
|
621
|
-
<b>JSON:</b> { "devId": "zigbee.0.yourDevId",
|
|
622
|
-
"ep": "2", "cid": "msOccupancySensing", "cmd": "write", "cmdType": "foundation", "zclData": { "pirOToUDelay": 30 },
|
|
623
|
-
"cfg": { "manufCode": 4107, "manufSpec": 1}}<br>
|
|
624
|
-
(You may use selectors together with expert mode to get prepared JSON)</div>
|
|
625
|
-
</li>
|
|
626
|
-
<li>
|
|
627
|
-
<div class="collapsible-header translate">Configure reporting</div>
|
|
628
|
-
<div class="collapsible-body">Example (Expert Mode):<br>
|
|
629
|
-
<b>JSON:</b> { "devId": "zigbee.0.yourDevId",
|
|
630
|
-
"ep": "2", "cid": "msTemperatureMeasurement", "cmd": "configReport", "cmdType": "foundation",<br>
|
|
631
|
-
"zclData": [{<br>
|
|
632
|
-
"attribute": "measuredValue", <br>"minimumReportInterval": 1, <br>"maximumReportInterval": 600,<br>
|
|
633
|
-
"reportableChange": 1 }],<br>
|
|
634
|
-
"cfg": null}
|
|
635
|
-
</div>
|
|
636
|
-
</li>
|
|
637
|
-
</ul>
|
|
638
|
-
</div>
|
|
639
|
-
</div>
|
|
640
|
-
</div>
|
|
641
|
-
<div class="col s9">
|
|
642
|
-
<div class="row">
|
|
643
|
-
<div class="input-field col s8">
|
|
644
|
-
<select id ="dev-selector">
|
|
645
|
-
<option value="" disabled selected class="translate">Select a device</option>
|
|
646
|
-
</select>
|
|
647
|
-
<label for="dev-selector" class="translate">Device</label>
|
|
648
|
-
</div>
|
|
649
|
-
<div class="input-field col s4 admin-tooltip-icon translateT" title="Some kind of 'device within device'. Every endpoint may have different functions. If one does not work, test another.">
|
|
650
|
-
<select id ="ep-selector">
|
|
651
|
-
<option value="" disabled selected class="translate">Select an Endpoint</option>
|
|
652
|
-
</select>
|
|
653
|
-
<label for="ep-selector" class="translate">Endpoint</label>
|
|
654
|
-
</div>
|
|
655
|
-
</div>
|
|
656
|
-
<div class="row">
|
|
657
|
-
<div class="row">
|
|
658
|
-
<div class="input-field col s4 admin-tooltip-icon" title="Group of functions. AttributeIds will change depending on your choice here.">
|
|
659
|
-
<select id ="cid-selector">
|
|
660
|
-
<option value="" disabled selected class="translate">Select cid</option>
|
|
661
|
-
</select>
|
|
662
|
-
<label for="cid-selector" class="translate">Cluster ID</label>
|
|
663
|
-
</div>
|
|
664
|
-
<div class="input-field col s4 admin-tooltip-icon" title="Command type. Available commands will change depending on your choice here. Some actions need Foundation, others Functional, you may test both.">
|
|
665
|
-
<select id ="cmd-type-selector">
|
|
666
|
-
<option value="foundation" selected>Foundation</option>
|
|
667
|
-
<option value="functional">Functional</option>
|
|
668
|
-
</select>
|
|
669
|
-
<label for="cid-selector" class="translate">Command Type</label>
|
|
670
|
-
</div>
|
|
671
|
-
<div class="input-field col s4 admin-tooltip-icon" title="The action you want to run.">
|
|
672
|
-
<select id ="cmd-selector">
|
|
673
|
-
<option value="" disabled selected class="translate">Select Command</option>
|
|
674
|
-
</select>
|
|
675
|
-
<label for="cmd-selector" class="translate">Command</label>
|
|
676
|
-
</div>
|
|
677
|
-
<div class="input-field col s4 admin-tooltip-icon" title="The setting you are interested in.">
|
|
678
|
-
<select id ="attrid-selector">
|
|
679
|
-
<option value="" disabled selected class="translate">Select Attribute</option>
|
|
680
|
-
</select>
|
|
681
|
-
<label for="attrid-selector" class="translate">Attribute ID</label>
|
|
682
|
-
</div>
|
|
683
|
-
<div class="col s8">
|
|
684
|
-
<div class="input-field col s5 offset-s1 admin-tooltip-icon translateT" title="Check if your Command needs to submit a value. For example, cmd 'write' needs the value you want to write to your device.">
|
|
685
|
-
<label for="value-needed" style="pointer-events: auto;">
|
|
686
|
-
<!-- workaround input not clickable https://codepen.io/alexisdiel/pen/gxwPWj -->
|
|
687
|
-
<input style="pointer-events: none;" id="value-needed" type="checkbox" class="filled-in"/>
|
|
688
|
-
<span style="pointer-events: none;" class="translate">Needs value</span>
|
|
689
|
-
</label>
|
|
690
|
-
</div>
|
|
691
|
-
<div class="input-field col s6 admin-tooltip-icon translateT" title="The value to send to your device (use douple-quotes if a number is a string).">
|
|
692
|
-
<input id ="value-input" disabled placeholder="0">
|
|
693
|
-
<label for="value-input">Value</label>
|
|
694
|
-
</div>
|
|
695
|
-
</div>
|
|
696
|
-
</div>
|
|
697
|
-
</div>
|
|
698
|
-
</div>
|
|
699
|
-
<div class="col s3">
|
|
700
|
-
<div class="row">
|
|
701
|
-
<div id="expert-toggle" class="input-field col s12 admin-tooltip-icon translateT" title="Switch expert mode to enter raw data, sent to zigbee device.">
|
|
702
|
-
<label for="expert-mode" style="pointer-events: auto;">
|
|
703
|
-
<!-- workaround input not clickable https://codepen.io/alexisdiel/pen/gxwPWj -->
|
|
704
|
-
<input style="pointer-events: none;" id="expert-mode" type="checkbox" class="filled-in"/>
|
|
705
|
-
<span style="pointer-events: none;" class="translate">Expert mode</span>
|
|
706
|
-
</label>
|
|
707
|
-
</div>
|
|
708
|
-
<div id="expert-json-box" class="input-field col s12" style="display:none;">
|
|
709
|
-
<p class="translate">zigbee-shepherd</p>
|
|
710
|
-
<div class="input-field col s12">
|
|
711
|
-
<textarea id="expert-json" class="materialize-textarea"></textarea>
|
|
712
|
-
<label for="expert-json">JSON</label>
|
|
713
|
-
</div>
|
|
714
|
-
</div>
|
|
715
|
-
</div>
|
|
716
|
-
<div id="dev-action-card" class=".center-align blue card-panel">
|
|
717
|
-
<div class="card-content white-text">
|
|
718
|
-
<h5 id="devActResult" class="card-title"></h5>
|
|
719
|
-
<p id="devInfoMsg" class="translate">Select your settings. Then click RUN to send command to your Zigbee device.</p>
|
|
720
|
-
</div>
|
|
721
|
-
<div class="card-action">
|
|
722
|
-
<a id="dev-send-btn" class="waves-effect waves-light white-text btn-large tooltipped translateT translate" data-position="bottom" title="Send data to Zigbee">Run</a>
|
|
723
|
-
</div>
|
|
724
|
-
</div>
|
|
725
|
-
</div>
|
|
726
|
-
</div>
|
|
727
|
-
<div id="sett" class="row">
|
|
728
|
-
<a class="col s1 offset-s11 btn-small" onClick="$('#dev_result_log').html('');">Clear Log</a>
|
|
729
|
-
<div class="col s12" class="card-panel ">
|
|
730
|
-
<div id="dev_result_log" class="card-content black white-text"></div>
|
|
731
|
-
<label for="dev_result_log" class="translate">Results</label>
|
|
732
|
-
</div>
|
|
733
|
-
</div>
|
|
734
|
-
</div>
|
|
568
|
+
|
|
735
569
|
<div id="tab-groups" class="col s12 page">
|
|
736
570
|
<div class="row">
|
|
737
571
|
<div class="col s12">
|
|
@@ -773,47 +607,110 @@
|
|
|
773
607
|
</div>
|
|
774
608
|
|
|
775
609
|
<div class="materialize-dialogs m">
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
</
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
610
|
+
<div id="modaledit" class="modal">
|
|
611
|
+
<div class="modal-content">
|
|
612
|
+
<h3 class="translate">Config device</h3>
|
|
613
|
+
<div class="row">
|
|
614
|
+
<div class="col">
|
|
615
|
+
<div class="input-field">
|
|
616
|
+
<input id="d_name" type="text" class="value validate">
|
|
617
|
+
<label for="d_name" class="translate">Name</label>
|
|
618
|
+
</div>
|
|
619
|
+
</div>
|
|
620
|
+
</div>
|
|
621
|
+
<div class="row epid0">
|
|
622
|
+
<div class="col">
|
|
623
|
+
<div class=endpointid>
|
|
624
|
+
<p class="translate device_with_endpoint">Main Endpoint</p>
|
|
625
|
+
</div>
|
|
626
|
+
</div>
|
|
627
|
+
<div class="col">
|
|
628
|
+
<div class="input-field groups">
|
|
629
|
+
<select id="d_groups_ep0" class="materialSelect" multiple><option value="1">Значение</option></select>
|
|
630
|
+
<label for="d_groups_ep0" class="translate">Groups</label>
|
|
631
|
+
</div>
|
|
632
|
+
</div>
|
|
633
|
+
</div>
|
|
634
|
+
<div class="row epid1">
|
|
635
|
+
<div class="col epid">
|
|
636
|
+
<div class=endpointid>
|
|
637
|
+
<p class="translate device_with_endpoint">Sub Endpoint 1</p>
|
|
638
|
+
</div>
|
|
639
|
+
</div>
|
|
640
|
+
<div class="col">
|
|
641
|
+
<div class="input-field groups">
|
|
642
|
+
<select id="d_groups_ep1" class="materialSelect" multiple><option value="1">Значение</option></select>
|
|
643
|
+
<label for="d_groups_ep1" class="translate">Groups</label>
|
|
644
|
+
</div>
|
|
645
|
+
</div>
|
|
646
|
+
</div>
|
|
647
|
+
<div class="row epid2">
|
|
648
|
+
<div class="col epid">
|
|
649
|
+
<div class=endpointid>
|
|
650
|
+
<p class="translate device_with_endpoint">Sub Endpoint 2</p>
|
|
651
|
+
</div>
|
|
652
|
+
</div>
|
|
653
|
+
<div class="col">
|
|
654
|
+
<div class="input-field groups">
|
|
655
|
+
<select id="d_groups_ep2" class="materialSelect" multiple><option value="1">Значение</option></select>
|
|
656
|
+
<label for="d_groups_ep2" class="translate">Groups</label>
|
|
657
|
+
</div>
|
|
658
|
+
</div>
|
|
659
|
+
</div>
|
|
660
|
+
<div class="row epid3">
|
|
661
|
+
<div class="col epid">
|
|
662
|
+
<div class=endpointid>
|
|
663
|
+
<p class="translate device_with_endpoint">Sub Endpoint 3</p>
|
|
664
|
+
</div>
|
|
665
|
+
</div>
|
|
666
|
+
<div class="col">
|
|
667
|
+
<div class="input-field groups">
|
|
668
|
+
<select id="d_groups_ep3" class="materialSelect" multiple><option value="1">Значение</option></select>
|
|
669
|
+
<label for="d_groups_ep3" class="translate">Groups</label>
|
|
670
|
+
</div>
|
|
671
|
+
</div>
|
|
672
|
+
</div>
|
|
673
|
+
</div>
|
|
674
|
+
<div class="modal-footer">
|
|
675
|
+
<a name="save" href="#!" class="modal-action modal-close waves-effect waves-green btn green translate">Save</a>
|
|
676
|
+
<a href="#!" class="modal-action modal-close waves-effect waves-red btn-flat translate">Cancel</a>
|
|
677
|
+
</div>
|
|
678
|
+
</div>
|
|
795
679
|
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
<div class="input-field
|
|
807
|
-
|
|
808
|
-
|
|
680
|
+
<div id="groupedit" class="modal">
|
|
681
|
+
<div class="modal-content">
|
|
682
|
+
<div class = "addgroup">
|
|
683
|
+
<h3 class="translate">Add Group</h3>
|
|
684
|
+
</div>
|
|
685
|
+
<div class = "editgroup">
|
|
686
|
+
<h3 class="translate">Edit Group</h3>
|
|
687
|
+
</div>
|
|
688
|
+
<div class="row">
|
|
689
|
+
<div class="col s4 m4 l2">
|
|
690
|
+
<div class="input-field groupid">
|
|
691
|
+
<input id="g_index" type="number" min="1" class="value validate">
|
|
692
|
+
<label for="g_index" class="translate">№</label>
|
|
809
693
|
</div>
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
694
|
+
</div>
|
|
695
|
+
<div class="input-field col s8 m8 l10">
|
|
696
|
+
<input id="g_name" type="text" class="value validate">
|
|
697
|
+
<label for="g_name" class="translate">Name</label>
|
|
698
|
+
</div>
|
|
699
|
+
</div>
|
|
700
|
+
<div class="row hide">
|
|
701
|
+
<div class="col s12">
|
|
702
|
+
<div class="input-field members">
|
|
703
|
+
<label for="g_members" class="translate">Members</label>
|
|
704
|
+
<select id="g_members" class="materialSelect" multiple><option value="1">Значение</option></select>
|
|
705
|
+
</div>
|
|
706
|
+
</div>
|
|
707
|
+
</div>
|
|
708
|
+
</div>
|
|
709
|
+
<div class="modal-footer">
|
|
710
|
+
<a name="save" href="#!" class="modal-action modal-close waves-effect waves-green btn green translate">Save</a>
|
|
711
|
+
<a href="#!" class="modal-action modal-close waves-effect waves-red btn-flat translate">Cancel</a>
|
|
712
|
+
</div>
|
|
713
|
+
</div>
|
|
817
714
|
|
|
818
715
|
<div id="modaldelete" class="modal">
|
|
819
716
|
<div class="modal-content">
|
|
@@ -847,6 +744,17 @@
|
|
|
847
744
|
</div>
|
|
848
745
|
</div>
|
|
849
746
|
|
|
747
|
+
<div id="modalreconfigure" class="modal">
|
|
748
|
+
<div class="modal-content">
|
|
749
|
+
<h3 class="translate">Reconfigure device</h3>
|
|
750
|
+
<p>A bunch of text</p>
|
|
751
|
+
</div>
|
|
752
|
+
<div class="modal-footer">
|
|
753
|
+
<a name="yes" href="#!" class="modal-action modal-close waves-effect waves-green btn green translate">Yes</a>
|
|
754
|
+
<a href="#!" class="modal-action modal-close waves-effect waves-red btn-flat translate">Cancel</a>
|
|
755
|
+
</div>
|
|
756
|
+
</div>
|
|
757
|
+
|
|
850
758
|
<div id="modalpairing" class="modal modal-fixed-footer">
|
|
851
759
|
<div class="modal-content">
|
|
852
760
|
<h3 class="translate">Pairing process</h3>
|