Wiki source code of 01 Lua Functions

Version 5.8 by Stone Wu on 2022/07/12 09:25

Show last authors
1 = **1 Interface description** =
2
3 == **Data type definition** ==
4
5 |=**Type**|=**Description**
6 |=nil|Null
7 |=boolean|Boolean (the value is true or false)
8 |=number|Integer or floating point (signed or unsigned)
9 |=string|String
10 |=table|Table
11 |=function|Functions
12
13 == **Built-in function library clipping** ==
14
15 Full features supported: coroutine/debug/ math/ package/ string/ table/ utf8
16
17 //Some features supported (available in []):** **os[clock/ date/ difftime/ time]//
18
19 //Not supported: io/ file//
20
21 == **Return value description** ==
22
23 The function return type multi means multiple return values (at least 2), usually:
24
25 //1st: nil//
26
27 //2nd: the error message//
28
29 (((
30 == **Function parameter description** ==
31 )))
32
33 Suppose a function prototype is defined:
34
35 {{code language="LUA"}}
36 student(string name, number age[, number class])
37
38 Function:
39
40 Register a student
41
42 Parameters:
43
44 name: student name
45
46 age: student age
47
48 [class=1]: Student class
49
50 Return:
51
52 Succeed: true
53
54 Failed: multi
55 {{/code}}
56
57 **Explanation**
58
59 1. string name indicates that the first parameter name is a string
60 1. number age indicates that the second parameter age is numeric
61 1. [, number class] indicates that the third parameter class is a numeric value, and it is optional. Specify the default class in class 1 in the parameter description.
62 1. **Any parameter in the [] is considered to be an optional parameter, and may not be transmitted when called. The default value will be given in the parameter description.**
63
64 **Call example**
65
66 |(((
67 //print(student("foo", 18)) //~-~- foo, 18 years old, assigned to class 1 by default
68
69 //print(student("bar", 19, 2))// ~-~-bar, 19 years old, assigned to class 2
70
71 //print(student("bar", 18)) //~-~-bar, 18 years old, assigned to class 1 by default
72
73 //local stat, err = student("bar", 18)// ~-~- Call again, use //err// to capture error messages
74
75 //print(stat, err)//
76 )))
77
78 **Output results**
79
80 |(((
81 //true//
82
83 //true//
84
85 //nil student bar registered//
86
87 //nil student bar registered//
88 )))
89
90 **Comment**
91
92 1. From the print result, the first line and the second line are successfully called and returns true; the third line fails the call, the error message is translated as: the bar student has been registered, and there is indeed an error in the code.
93 1. The fourth line of code uses two variables to receive the return value. The call failed, the first variable stat is nil, and the second variable err stores the error message. Then print it out using print, which is the output of the third line. This example shows how to capture and view the error message.
94
95 == **Modification of print function** ==
96
97 For the convenience of remote development, the print data is sent to the front end (web page) by means of network transmission, and the user can see the result of the debug output, because it consumes certain data and occupies the bandwidth of the server (or occupies server resources). So the following restrictions are made.
98
99 1. **Interval limit: **When debugging, transfer once every 2~~3 seconds;
100 1. **Data limit: **The transfer data cannot be larger than 1.5KB in a single transmission, otherwise the extra part will be ignored;
101 1. **Transmission limit: **The data transmission will be stopped automatically after the debugging windows is not closed normally. Only when it is in the debugging window and the switch is on, there is data transmission;
102
103 Users should pay attention to avoid printing a lot of useless information, should minimize the debug output
104
105 In addition, please refer to the front-end documentation for how to use view debugging.
106
107 (((
108 = **2 Address operation** =
109 )))
110
111 |=16-bit data formal|=HLword|=32-bit data formal|=HLword|= 64-bit data formal|=HLword
112 |12(Default)|0|1234(Default)|0|(((
113 12345678(Default)
114 )))|(((
115 0
116 )))
117 |21|6|(((
118 3412(High and low word conversion)
119 )))|2|(((
120 34127856  (High and low word conversion)
121 )))|2
122 | | |2143|3|(((
123 21436587
124 )))|3
125 | | |4321|6|(((
126 87654321
127 )))|6
128 | | | | |(((
129 78563412
130 )))|7
131 | | | | |(((
132 56781234
133 )))|8
134 | | | | |(((
135 65872143
136 )))|9
137 | | | | |(((
138 43218765
139 )))|10
140
141 Table 2-1
142
143 (% class="box errormessage" %)
144 (((
145 **✎Note: **If HLword enters any other value, it will be treated as invalid.
146 )))
147
148 == **addr_getshort(string addr[, number type, number hlword])** ==
149
150 **Function:** Read 16-bit signed decimal address
151
152 **Parameters:**
153
154 //addr//: address
155
156 //num//: value
157
158 [type = 0] not read through  1: read through
159
160 [hlword = 0]  Don't convert,See Form 2.1
161
162 **Return:**
163
164 Succeed: Single word signed decimal value
165
166 Failed: multi
167
168 (((
169 == **addr_setshort(string addr, number num[, number type, number hlword])** ==
170 )))
171
172 **Function:** Write 16-bit signed decimal address
173
174 **Parameters:**
175
176 //addr//: address
177
178 //num//: value
179
180 [type = 0]not read through  1: read through
181
182 [hlword = 0]  Don't convert,See Form 2.1
183
184 **Return:**
185
186 Succeed: true
187
188 Failed: multi
189
190 (((
191 == **addr_getword(string addr[, number type, number hlword])** ==
192 )))
193
194 **Function:** Read 16-bit unsigned decimal address
195
196 **Parameters:**
197
198 //addr//: address
199
200 [type = 0]not read through 1: read through
201
202 [hlword = 0]  Don't convert,See Form 2.1
203
204 **Return:**
205
206 Succeed: Single word unsigned decimal value
207
208 Failed: multi
209
210 (((
211 == **addr_setword(string addr, number num[, number type, number hlword])** ==
212 )))
213
214 **Function:**Write 16-bit unsigned decimal address
215
216 **Parameters:**
217
218 //addr//: address
219
220 //num//: value
221
222 [type = 0]not read through 1: read through
223
224 [hlword = 0]  Don't convert,See Form 2.1
225
226 **Return:**
227
228 Succeed: true
229
230 Failed: multi
231
232 (((
233 == **addr_getint(string addr[, number type, number hlword])** ==
234 )))
235
236 **Function:** Read 32-bit signed decimal address
237
238 **Parameters:**
239
240 //addr//: address
241
242 [type = 0]not read through 1: read through
243
244 [hlword = 0]  Don't convert,See Form 2.1
245
246 **Return:**
247
248 Succeed: Double word signed decimal value
249
250 Failed: multi
251
252 (((
253 == **addr_setint(string addr, number num[, number type, number hlword])** ==
254 )))
255
256 **Function:** Write 32-bit signed decimal address
257
258 **Parameters:**
259
260 //addr//: address
261
262 //num//: value
263
264 [type = 0]not read through 1: read through
265
266 [hlword = 0]  Don't convert,See Form 2.1
267
268 **Return:**
269
270 Succeed: true
271
272 Failed: multi
273
274 (((
275 == **addr_getdword(string addr[, number type, number hlword])** ==
276 )))
277
278 **Function:** Read 32-bit unsigned decimal address
279
280 **Parameters:**
281
282 //addr//: address
283
284 [type = 0]not read through 1: read through
285
286 [hlword = 0]  Don't convert,See Form 2.1
287
288 **Return:**
289
290 Succeed: Double word unsigned decimal value
291
292 Failed: multi
293
294 (((
295 == **addr_setdword(string addr, number num[, number type, number hlword])** ==
296 )))
297
298 **Function:** Write 32-bit unsigned decimal address
299
300 **Parameters:**
301
302 //addr//: address
303
304 //num//: value
305
306 [type = 0]not read through 1: read through
307
308 [hlword = 0]  Don't convert,See Form 2.1
309
310 **Return:**
311
312 Succeed: true
313
314 Failed: multi
315
316 (((
317 == **addr_getbit(string addr[, number type])** ==
318 )))
319
320 **Function:** Read a bit of the register address
321
322 **Parameters:**
323
324 //addr//: address
325
326 [type = 0]not read through 1: read through
327
328 [hlword = 0]  Don't convert,See Form 2.1
329
330 **Return:**
331
332 Succeed: Bit address value
333
334 Failed: multi
335
336 (((
337 == **addr_setbit(string addr, number num[, number type])** ==
338 )))
339
340 **Function:** Write a bit of the register address
341
342 **Parameters:**
343
344 //addr//: address
345
346 //num//: value
347
348 [type = 0]not read through 1: read through
349
350 [hlword = 0]  Don't convert,See Form 2.1
351
352 **Return:**
353
354 Succeed: true
355
356 Failed: multi
357
358 (((
359 == **addr_getfloat(string addr[, number type, number hlword])** ==
360 )))
361
362 **Function:** Read 32-bit floating address
363
364 **Parameters:**
365
366 //addr//: address
367
368 [type = 0]not read through 1: read through
369
370 [hlword = 0]  Don't convert,See Form 2.1
371
372 **Return:**
373
374 Succeed: 32-bit floating point value
375
376 Failed: multi
377
378 (((
379 == **addr_setfloat(string addr, number num[, number type, number hlword])** ==
380 )))
381
382 **Function:** Write 32-bit floating address
383
384 **Parameters:**
385
386 //addr//: address
387
388 //num//: value
389
390 [type = 0]not read through 1: read through
391
392 [hlword = 0]  Don't convert,See Form 2.1
393
394 **Return:**
395
396 Succeed: true
397
398 Failed: multi
399
400 (((
401 == **addr_getdouble(string addr[, number type, number hlword])** ==
402 )))
403
404 **Function:** Read 64-bit floating address
405
406 **Parameters:**
407
408 //addr//: address
409
410 [type = 0]not read through 1: read through
411
412 [hlword = 0]  Don't convert,See Form 2.1
413
414 **Return:**
415
416 Succeed: 64-bit floating point value
417
418 Failed: multi
419
420 (((
421 == **addr_setdouble(string addr, number num[, number type, number hlword])** ==
422 )))
423
424 **Function:** Write 64-bit floating address
425
426 **Parameters:**
427
428 addr: address
429
430 num: value
431
432 [type = 0]not read through //1//: read through
433
434 [hlword = 0]  Don't convert,See Form 2.1
435
436 **Return:**
437
438 Succeed: true
439
440 Failed: multi
441
442 (((
443 == **addr_getstring(string addr, number length[, number type, number hlbyte])** ==
444 )))
445
446 **Function:** Read the specified length string from address
447
448 **Parameters:**
449
450 //addr//: address
451
452 //length//: length
453
454 [type = 0]not read through 1: read through
455
456 [hlbyte = 0] Don't convert,3:High and low byte conversion, 4:GBK, 5:GBK And the first byte is the length
457
458 **Return:**
459
460 Succeed: specified length string
461
462 Failed: multi
463
464 (((
465 == **addr_setstring(string addr, string str[, number type, number hlbyte])** ==
466 )))
467
468 **Function:** Write the specified length string to address
469
470 **Parameters:**
471
472 //addr//: address
473
474 //str//: string
475
476 [type = 0]not read through 1: read through
477
478 [hlbyte = 0] Don't convert,3:High and low byte conversion, 4:GBK, 5:GBK And the first byte is the length
479
480 **Return:**
481
482 Succeed: true
483
484 Failed: multi
485
486 (((
487 == **addr_bmov(string dst, string src, number length)** ==
488 )))
489
490 **Function:** Copy data from source address to destination address
491
492 **Parameters:**
493
494 //dst//: destination address
495
496 //src//: source address
497
498 //length//: length
499
500 **Return:**
501
502 Succeed: true
503
504 **Failed: multi**
505
506 (((
507 == **addr_fill(string addr, number num, number length)** ==
508 )))
509
510 **Function:** Write the same value to consecutive addresses
511
512 **Parameters:**
513
514 //addr//: address
515
516 //num//: value
517
518 //length//:continuous length
519
520 **Return:**
521
522 Succeed: true
523
524 Failed: multi
525
526 (((
527 == **addr_newnoaddr(string addr, number offset)** ==
528 )))
529
530 **Function:** Offset address value relative to //addr//
531
532 **Parameters:**
533
534 //addr//: address
535
536 //offset//: offset value
537
538 **Return:**
539
540 Succeed: New address after offset
541
542 Failed: multi
543
544 (((
545 == **addr_newstataddr(string addr, number offset)** ==
546 )))
547
548 **Function:** Offset station number relative to //addr //station number
549
550 **Parameters:**
551
552 //addr//: address
553
554 //offset//: offset value
555
556 **Return:**
557
558 Succeed: New station number after offset
559
560 Failed: multi
561
562 == **addr_gethex64(string addr[, number type, number hlword])** ==
563
564 **Function:** Read 64-bit hexadecimal numbers
565
566 **Parameters:**
567
568 //addr//: address
569
570 [type = 0]not read through 1: read through
571
572 [hlword = 0]  Don't convert,See Form 2.1
573
574 **Return:**
575
576 Succeed: 64-bit floating-point values
577
578 Failed: multi
579
580 == **addr_sethex64(string addr, number num[, number type, number hlword])** ==
581
582 **Function:** Write 64-bit hexadecimal addresses
583
584 **Parameters:**
585
586 //addr//: address
587
588 [type = 0]not write through 1: write through
589
590 [hlword = 0]  Don't convert,See Form 2.1
591
592 **Return:**
593
594 Succeed: true
595
596 Failed: multi
597
598 (((
599 = **3 Serial port operation** =
600 )))
601
602 Operations on the serial port such as read, write, etc. must use ':' for full mode calls, ie operations on an open serial object.
603
604 **Serial port name and mode**
605
606 The serial port configured in the communication configuration window cannot be configured again using the script. RS232 and RS458 (or RS422) can be used simultaneously, but RS422 and RS485 are mutually exclusive.For example, when the communication port is configured with COM1-485, the script can only open COM1-232, but not COM1-485/422. Similarly, when the communication port is configured with COM2-485, the script can only open COM2-232, but not COM2-485.
607
608 Attempting to use a script to open a serial port in an unsupported mode will result in an error directly, as below.
609
610 |(((
611 local setup = {
612
613 name = "COM2",
614
615 mode = 422, ~-~- COM2 does not support RS422
616
617 ...
618
619 }
620
621 serial.open(setup)
622 )))
623
624 **Data bit:**
625
626 1. When the data bit is 7, the maximum value of data transmission is 127 (0x7F), and non-ASCII characters will be truncated, resulting in data errors and garbled characters.
627 1. When the data bit is 8, the maximum value of data transmission is 255 (0xFF), which supports the transmission of any character.
628
629 (((
630 == **3.1 serial.open(table setup)** ==
631 )))
632
633 **Function:**
634
635 Enable one serial port
636
637 **Parameters:**
638
639 //Setup// is a Lua table; it needs to contain the following fields
640
641 //String setup.name//,// //serial port name, such as: COM1/COM2 (requires uppercase)
642
643 //number setup.mode//, mode: RS232/RS485/RS422
644
645 //number setup.baud_rate//, such as 115200
646
647 //number setup.stop_bit//, stop bit: 1 or 2
648
649 //number setup.data_len//, data bit: 7 or 8
650
651 //string setup.check_bit//, check bit: NONE/ODD/EVEN/SPACE
652
653 //number [setup.wait_timeout=300]//, waiting timeout
654
655 //number [setup.recv_timeout=50]//, receive wait timeout
656
657 //number [setup.flow_control=0]//, Flow control method, 0:XON/XOFF, 2:DSR/ER
658
659 Supported baud rate
660
661 1200/2400/4800/9600/14400/19200/38400/43000/57600/76800/115200/128000/230400/256000/460800/961000
662
663 **Return:**
664
665 Succeed: serial object
666
667 Failed: multi
668
669 (((
670 == **3.2 serial.close(serial obj)** ==
671 )))
672
673 **Function:**
674
675 Disable the serial port
676
677 **Parameters:**
678
679 //Obj //is the object returned by serial.open
680
681 **Return:**
682
683 Succeed: true
684
685 Failed: multi
686
687 (((
688 == **3.3 serial:read(number bytes[, number timeout])** ==
689 )))
690
691 **Function:**
692
693 Read the specified byte length serial port data
694
695 **Parameters:**
696
697 //bytes//: number of bytes
698
699 //[timeout=50]//: timeout for reading, in milliseconds
700
701 **Return:**
702
703 Succeed: true
704
705 Failed: multi
706
707 (((
708 == **3.4 serial:write(string data)** ==
709 )))
710
711 **Function:**
712
713 Write the specified byte length to serial port data
714
715 **Parameters:**
716
717 //data//: serial port data
718
719 **Return:**
720
721 Succeed: true
722
723 Failed: multi
724
725 (((
726 == **3.5 serial:flush([number flag])** ==
727 )))
728
729 **Function:**
730
731 Clear the serial port buffer
732
733 **Parameters:**
734
735 //[flag=2]// clear option: 0: read, 1: write, 2: read-write
736
737 **Return:**
738
739 Succeed: true
740
741 Failed: multi
742
743 (((
744 == **3.6 serial:close()** ==
745 )))
746
747 **Function:**
748
749 Close the serial port object
750
751 **Parameters:**
752
753 None
754
755 **Return:**
756
757 Succeed: true
758
759 Failed: multi
760
761 (((
762 = **4 MQTT operation** =
763 )))
764
765 Operations on MQTT such as connect, subscribe, etc. must use ':' for full mode calls, that is, operate on a created MQTT object.
766
767 Both MQTT subscriptions and publications are asynchronous implementations that require the user to implement a callback function.
768
769 **QoS value:**
770
771 0: Only push messages once, messages may be lost or duplicated. It can be used for environmental sensor data, it doesn't matter if lose a record, because there will be a second push message soon. This method is mainly used for normal APP push, but if the user smart device is not connected when the message is pushed, the message will be discarded, and the smart device will not be received when it is networked again.
772
773 1: The message is delivered at least once, but the message may be delivered repeatedly.
774
775 2: The message was delivered exactly once. This level can be used in a billing system. In a billing system, repeated or missing messages can lead to incorrect results. This highest quality message push service can also be used for instant messaging APP pushes, ensuring that users only receive messages once.
776
777 **Retain flag:**
778
779 0: not reserved;
780
781 1: reserved
782
783 (((
784 == **4.1 mqtt.create(string serverurl, string clientid)** ==
785 )))
786
787 **Function:**
788
789 Create an MQTT object
790
791 **Parameters:**
792
793 //serverurl //Server url
794
795 Format: "//protocol:~/~/host:port//"
796
797 //protocol//: tcp/ssl
798
799 //host//: Host name/IP
800
801 //port//: such as 1883
802
803 //clientid//: Client ID
804
805 **Return:**
806
807 Succeed: MQTT object
808
809 Failed: multi
810
811 (((
812 == **4.2 mqtt.close(mqtt obj)** ==
813 )))
814
815 **Function:**
816
817 Close the specified MQTT object (if the connected server will be disconnected automatically)
818
819 **Parameters:**
820
821 //Obj //is the objeced returned by mqtt.create
822
823 **Return:**
824
825 Succeed: true
826
827 Failed: multi
828
829 (((
830 == **4.3 mqtt:connect(table conn[, table lwt, table cart])** ==
831 )))
832
833 **Function:**
834
835 Establish a connection to the server
836
837 **Parameters:**
838
839 //conn //is a Lua table and needs to contain the following fields
840
841 //string conn.username//, user name
842
843 //string conn.password//, password
844
845 //number [conn.netway=0]//, networking method, if set error number will use Ethernet method
846
847 * 0: Ethernet
848 * 1: WIFI
849 * 2: 4G
850 * 3: 2G
851
852 //number [conn.keepalive=60]//, keep connected heartbeat interval, in seconds
853
854 //number [conn.cleansession=1]//, empty the session as described below:
855
856 This function is used to control the behavior when connecting and disconnecting, and the client and server will retain the session information. This information is used to guarantee "at least once" and "accurately once" delivery, as well as the subject of the client subscription, the user can choose to keep or ignore the session message, set as follows:
857
858 * 1 (Empty): If a session exists and is 1, the previous session messages on the client and server are emptied.
859 * 0 (reserved): Conversely, both the client and the server use the previous session. If the previous session does not exist, start a new session.
860
861 //lwt// (Last Will and Testament) is a Lua table and needs to contain the following fields
862
863 //string lwt.topic//, topic
864
865 //string lwt.message//, message
866
867 //number [lwt.qos=0]//, qos value
868
869 //number [lwt.retain=0]//, retain flag
870
871 **Return:**
872
873 Succeed: true
874
875 Failed: multi
876
877 (((
878 == **4.4 mqtt:disconnect([number timeout])** ==
879 )))
880
881 **Function:**
882
883 Disconnect from the MQTT server
884
885 **Parameters:**
886
887 //[timeout=10000] //Disconnect waiting timeout, in milliseconds
888
889 **Return:**
890
891 Succeed: true
892
893 Failed: multi
894
895 (((
896 == **4.5 mqtt:isconnected()** ==
897 )))
898
899 **Function:**
900
901 Test whether or not a client is currently connected to the MQTT server
902
903 **Parameters:**
904
905 None
906
907 **Return:**
908
909 Succeed: true ~-~-Connected
910
911 Failed: false ~-~- Unconnected and other unknowns
912
913 (((
914 == **4.6 mqtt:subscribe(string topic, number qos)** ==
915 )))
916
917 **Function:**
918
919 Subscribe to the topic (before the subscription, the user must first call the connect method to connect to the server)
920
921 **Parameters:**
922
923 //topic//, topic name
924
925 //qos//, quality of service
926
927 **Return:**
928
929 Succeed: true
930
931 Failed: multi
932
933 (((
934 == **4.7 mqtt:unsubscribe(string topic)** ==
935 )))
936
937 **Function:**
938
939 Unsubscribe topic
940
941 **Parameters:**
942
943 //topic//, topic name
944
945 **Return:**
946
947 Succeed: true
948
949 Failed: multi
950
951 (((
952 == **4.8 mqtt:publish(string topic, string message, number qos, number retain[, number timeout])** ==
953 )))
954
955 **Function:**
956
957 Publish message
958
959 **Parameters:**
960
961 //topic//, topic name
962
963 //message//, message
964
965 //qos//, quality of service
966
967 //retain//, retain flag
968
969 //[timeout=1000]//, waiting for response timeout, in milliseconds (only valid when qos is greater than 0)
970
971 **Return:**
972
973 Succeed: true
974
975 Failed: multi
976
977 (((
978 == **4.9 mqtt:close()** ==
979 )))
980
981 **Function:**
982
983 Close the mqtt object (the connection to the server will be automatically disconnected)
984
985 **Parameters:**
986
987 None
988
989 **Return:**
990
991 Succeed: true
992
993 Failed: multi
994
995 (((
996 == **4.10 mqtt:on(string method, function callback)** ==
997 )))
998
999 **Function:**
1000
1001 Register event callback function
1002
1003 **Parameters:**
1004
1005 //method//, It can be message/arrived/offline, these 3 types of events
1006
1007 //callback//, It is a callback function that needs to pass in a function
1008
1009 **1.**"message" will call this function after receiving the message
1010
1011 //Callback// prototype~:// function (string topic, string message)//
1012
1013 Parameter:
1014
1015 //Topic//, topic name
1016
1017 //Message//, content
1018
1019 **2.**"arrived" is published by publish, this function will be called after the publication arrives
1020
1021 //Callback// prototype~:// function ()//
1022
1023 Parameter:
1024
1025 None
1026
1027 **3.**This function will be called after the "offline" connection is lost
1028
1029 //Callback// prototype~:// function (string cause)//
1030
1031 Parameter:
1032
1033 //cause//, reason for loss of connection
1034
1035 **Return:**
1036
1037 Succeed: true
1038
1039 Failed: multi
1040
1041 (((
1042 == **4.11 mqtt:setup_cfg()** ==
1043 )))
1044
1045 **Function:**
1046
1047 Cloud mode interface, to obtain MQTT information configured by the cloud platform
1048
1049 **Parameters:**
1050
1051 None
1052
1053 **Return:**
1054
1055 //serverurl, clientid, conn, lwt, cart //(5 returns, respectively, server address, client ID, connection table, last word table, certificate table)
1056
1057 //conn// is the first parameter of the mqtt:connect method, which is fixed to table. If not configured, the information in the table is an empty string
1058
1059 //LWT// Last Words configuration is not yet open for setting, //lw//t is fixed to nil
1060
1061 If ssl is not enabled, //cart// is nil, otherwise //cart// is table
1062
1063 (((
1064 = **5 JSON operation** =
1065 )))
1066
1067 Lua only has a table data structure, so all arrays and key-value objects of json will be returned as a table.
1068
1069 (((
1070 == **5.1 json.encode( lua_object )** ==
1071 )))
1072
1073 **Function:**
1074
1075 Convert lua data type to json string
1076
1077 **Parameters:**
1078
1079 Lua data type (including boolean, number, string, table)
1080
1081 **Return:**
1082
1083 Json format string
1084
1085 (((
1086 == **5.2 json.decode(string json_string)** ==
1087 )))
1088
1089 **Function:**
1090
1091 Convert json string to lua data type
1092
1093 **Parameters:**
1094
1095 //json_string//, string of json data structure
1096
1097 **Return:**
1098
1099 Lua data type
1100
1101 (((
1102 == **5.3 json.null** ==
1103 )))
1104
1105 **Function:**
1106
1107 This method is used when assembling json data, which is equivalent to null in json. If the user directly uses json.null() to return the address of the function, it must be valid with the use of encode.
1108
1109 **Parameters:**
1110
1111 None
1112
1113 **Return:**
1114
1115 None
1116
1117 = **6 Cloud mode** =
1118
1119 The cloud interface is only used in cloud mode, and V-NET mode is not available.
1120
1121 (((
1122 == **6.1 bns_get_alldata()** ==
1123 )))
1124
1125 **Function:**
1126
1127 Obtain all monitoring points (point table) data configured by the end user
1128
1129 Note: Assuming there are timing scripts A and B with a period of 1 second, if this function is called in script A, the data will not be obtained if called in script B
1130
1131 **Parameters:**
1132
1133 None
1134
1135 **Return:**
1136
1137 Succeed: table two-dimensional array, the structure is as follows
1138
1139 Each item is a monitoring point, which contains 5 attributes:
1140
1141 (1 ID, 2 status, 3 tag name, 4 value, 5 custom)
1142
1143 The status contains 3 enumerated values (0: offline, 1: online, 2: timeout)
1144
1145 If there is no custom configuration, return an empty table, otherwise, return with "field name/field content"
1146
1147 E.g:
1148
1149 {
1150
1151 [1]= {[1]=1234, [2]=1, [3]='temp', [4]='23.5', [5]={"fruit"="apple"}},
1152
1153 [2]= {[1]=1235, [2]=1, [3]='humi', [4]='67', [5]={"fruit"="pear"}},
1154
1155 ...
1156
1157 [n]= {[1]=xxxx, [2]=x, [3]='xxxx', [4]='xx.x', [5]={}},
1158
1159 }
1160
1161 Failed: //table// empty table
1162
1163 (((
1164 == **6.2 bns_get_config(string from)** ==
1165 )))
1166
1167 **Function:**
1168
1169 Obtain custom configuration parameters with the specified from type
1170
1171 **parameter:**
1172
1173 from type, there are the following two categories, the string must be all lowercase
1174
1175 'user': terminal parameters, that is, custom parameters configured by the user
1176
1177 'bind': binding parameters, which are custom parameters that need to be input
1178
1179 when the user binds V-BOX
1180
1181 **Return:**
1182
1183 Succeed: table field name/field content table in organization form
1184
1185 Failed~:// table// empty table
1186
1187 (((
1188 == **6.3 bns_get_data(string name, string data)** ==
1189 )))
1190
1191 **Function:**
1192
1193 write data to the name of the monitoring point
1194
1195 **parameter:**
1196
1197 //name //The name of the monitoring point
1198
1199 //data// the data to be written
1200
1201 **Return:**
1202
1203 Succede: //string  // value before the monitoring point is written
1204
1205 Failed: nil
1206
1207 (((
1208 == **6.4 bns_get_data(string name)** ==
1209 )))
1210
1211 **Function:**
1212
1213 Read the data of the monitoring point name
1214
1215 **parameter:**
1216
1217 //name  // The name of the monitoring point
1218
1219 **Return:**
1220
1221 Succeed: string, table 2 results: the value of the monitoring point, custom content
1222
1223 Failed: nil
1224
1225 (((
1226 == **6.5 bns_get_datadesc()** ==
1227 )))
1228
1229 **Function:**
1230
1231 Obtain all configured communication ports and monitoring point information
1232
1233 **Parameters:**
1234
1235 None
1236
1237 **Return:**
1238
1239 Succeed: table three-dimensional array, the structure is as follows
1240
1241 Each item is a communication port, which contains 3 attributes (1 monitoring point array, 2 ID, 3 name)
1242
1243 The monitoring point array contains 4 attributes (1 ID, 2 name, 3 read and write attributes, 4 types)
1244
1245 Read and write attributes (1: read only, 2: write only, 3: read and write)
1246
1247 Type (1: switch, 2: number, 3: string)
1248
1249 E.g:
1250 {
1251
1252 [1]={~-~-The first communication port
1253
1254 [1]={~-~-monitoring point array of the first communication port
1255
1256 [1]={[1]=11,[2]='data1',[3]=3,[4]=2},
1257
1258 [2]={[1]=12,[2]='data2',[3]=3,[4]=2},
1259
1260 ...
1261
1262 [n]={[1]=xx,[2]='datan',[3]=x,[4]=x},~-~-n monitoring points
1263
1264 },
1265
1266 [2]=14, ~-~-ID
1267
1268 [3]='Modbus TCP' ~-~-n monitoring points
1269
1270 },
1271
1272 [2]={~-~-The second communication port
1273
1274 [1]={},~-~-The monitoring point of the second communication port is not configured and is empty
1275
1276 [2]=15, ~-~-ID
1277
1278 [3]='WECON' ~-~-communication protocol name
1279
1280 },
1281
1282 ...n communication ports and so on
1283
1284 }
1285
1286 Failed~:// table// empty table
1287
1288 (((
1289 == **6.6 bns_get_machineinfo()** ==
1290 )))
1291
1292 **Function:**
1293
1294 get machine information
1295
1296 **Parameters:**
1297
1298 None
1299
1300 **Return:**
1301
1302 Succeed: 3 string type results (model, machine code, software version)
1303
1304 Failed: nil
1305
1306 (((
1307 == **6.7 bns_get_groupdata(string name)** ==
1308 )))
1309
1310 **Function:**
1311
1312 Get all monitoring point data under the specified group name
1313
1314 **parameter:**
1315
1316 //Name  // group name
1317
1318 **Return:**
1319
1320 Succeed: //table// two-dimensional array, the structure is consistent with section 6.1
1321
1322 Failed: //table// empty table
1323
1324 (((
1325 == **6.8 bns_get_groupdesc()** ==
1326 )))
1327
1328 **Function:**
1329
1330 Get all group information
1331
1332 **Parameters:**
1333
1334 None
1335
1336 **Return:**
1337
1338 Succeed: //table// two-dimensional array, the structure is as follows
1339
1340 Each item represents a group, which contains 3 attributes (1 collection type, 2 name, 3 cycles)
1341
1342 Acquisition type (0: change acquisition, 1: word trigger, 2: no trigger, 3: trigger by time and conditions, 4: reset after trigger, 5: not reset after trigger)
1343
1344 Some collection types do not have a period, the period is -1
1345
1346 Failed: //table  // empty table
1347
1348 (((
1349 == **6.9 bns_get_onecache(string msg)** ==
1350 )))
1351
1352 **Function:**
1353
1354 Save a message to the cache file, which can be stored after power failure. Store up to 2000 items, delete the old and save the new in a rolling manner when it is full.
1355
1356 **Parameters:**
1357
1358 //msg// String
1359
1360 **Return:**
1361
1362 Succeed: true
1363
1364 Failed: nil
1365
1366 (((
1367 == **6.10 bns_get_allcache()** ==
1368 )))
1369
1370 **Function:**
1371
1372 Get all the cached content (once the internal cache file will be emptied)
1373
1374 **Parameters:**
1375
1376 None
1377
1378 **Return:**
1379
1380 Succeed: //table// one-dimensional array
1381
1382 E.g:
1383
1384 {
1385
1386 [1]="This is the oldest message", - the first is the oldest message
1387
1388 [2]="This is a test",
1389
1390 ...
1391
1392 [n]="This is the latest message", - the last is the latest message
1393
1394 }
1395
1396 Failede: nil
1397
1398 (((
1399 = **7 HTTP operation** =
1400 )))
1401
1402 Network communication includes Http request interface, this document does not provide interface description, please refer to the online document for how to use it.
1403
1404 (((
1405 == **7.1 http request** ==
1406 )))
1407
1408 [[http:~~/~~/w3.impa.br/~~~~diego/software/luasocket/http.html#request>>url:http://w3.impa.br/~~diego/software/luasocket/http.html#request]]
1409
1410 (((
1411 = **8 Internal register** =
1412 )))
1413
1414 The internal registers of the box are divided into bit addresses and word addresses, which can be accessed in two ways (taking HDW as an example):
1415
1416 **~1. **Access by word, prefix @W_HDW,
1417
1418 For example: @W_HDW0 represents the first word of the system data area, @W_HDW1 represents the second word of the system data area.
1419
1420 **2. **Access in bit mode, the prefix is @B_HDX, the number in front of "." indicates the number of the word, and the number behind is the bit number of the word.
1421
1422 For example: @B_HDX1020.12, its meaning is to access the system data area in bit mode, the specific location is the 13th bit of the 1020th word.
1423
1424 **✎Note: **
1425
1426 **~1. **The address in @B_HDX is taken from the word in @W_HDW, so pay special attention when using the address.
1427
1428 For example, @B_HDX1020.12 is to access the 13th bit of the 1020th word. The value of this bit is the same as the word obtained by @W_HDW001020. The 13th bit of this word is actually the same bit as @B_HDX1020.12.
1429
1430 **2.**The address of the bit address @B_HDX has a decimal point, while the word address is an integer.
1431
1432 (((
1433 == **8.1 Data storage area(HDW/HDX)** ==
1434 )))
1435
1436 The system storage area (HDW) of the V-BOX is used to store temporary data:
1437
1438 ~1. Access by word, the number range is: "@W_HDW0"-"@W_HDW299999".
1439
1440 2. Access in bit mode, the number range is: "@B_HDX0.0"-"@B_HDX299999.15".
1441
1442 (((
1443 == **8.2 Special data area (HSW/HSX)** ==
1444 )))
1445
1446 **✎Note: **
1447
1448 //HSW// is a system special register, so please refer to the system special register table during use. Do not use addresses that are not mentioned in the table, and use the addresses stated in the table with caution (example: restart ("@W_HSW0") Writing a value of 1 will cause V-BOX to restart).
1449
1450 //Without any conditions. Direct use ("@W_HSW0") will cause the V-BOX to restart continuously.// When using ("@W_HSW0") address, please add judgment conditions, such as: connection to MQTT fails, there is no network, the value of a PLC address meets the condition or counts to a certain value.
1451
1452 1.The system data area (HSW) of the box is used for system special registers (system reserved). Use //addr_getword// to obtain the following register information:
1453
1454 (% class="table-bordered" %)
1455 |address|function|Read and write status: read only, write only, read and write
1456 |@W_HSW0|restart|read and write
1457 |@W_HSW1|Box time: year|read and write
1458 |@W_HSW2|Box time: month|read and write
1459 |@W_HSW3|Box time: day|read and write
1460 |@W_HSW4|Box time: hour|read and write
1461 |@W_HSW5|Box time: minute|read and write
1462 |@W_HSW6|Box time: second|read and write
1463 |@W_HSW7|Box time: week|read and write
1464 |@W_HSW8|Ethernet IP1|read only
1465 |@W_HSW9|Ethernet IP2|read only
1466 |@W_HSW10|Ethernet IP3|read only
1467 |@W_HSW11|Ethernet IP4|read only
1468 |@W_HSW12|Ethernet Mask 1|read only
1469 |@W_HSW13|Ethernet Mask 2|read only
1470 |@W_HSW14|Ethernet Mask 3|read only
1471 |@W_HSW15|Ethernet Mask 4|read only
1472 |@W_HSW16|Ethernet Gateway 1|read only
1473 |@W_HSW17|Ethernet Gateway 2|read only
1474 |@W_HSW18|Ethernet Gateway 3|read only
1475 |@W_HSW19|Ethernet Gateway 4|read only
1476 |@W_HSW21|Ethernet MAC1|read only
1477 |@W_HSW22|Ethernet MAC2|read only
1478 |@W_HSW23|Ethernet MAC3|read only
1479 |@W_HSW24|Ethernet MAC4|read only
1480 |@W_HSW25|Ethernet MAC3|read only
1481 |@W_HSW26|Ethernet MAC4|read only
1482 |@W_HSW128|WIFI IP1|read only
1483 |@W_HSW129|WIFI IP2|read only
1484 |@W_HSW130|WIFI IP3|read only
1485 |@W_HSW131|WIFI IP4|read only
1486 |@W_HSW132|WIFI Mask 1|read only
1487 |@W_HSW133|WIFI Mask 2|read only
1488 |@W_HSW134|WIFI Mask 3|read only
1489 |@W_HSW135|WIFI Mask 4|read only
1490 |@W_HSW136|WIFI Gateway 1|read only
1491 |@W_HSW137|WIFI Gateway 2|read only
1492 |@W_HSW138|WIFI Gateway 3|read only
1493 |@W_HSW139|WIFI Gateway 4|read only
1494 |@W_HSW140|WIFI MAC1|read only
1495 |@W_HSW141|WIFI MAC2|read only
1496 |@W_HSW142|WIFI MAC3|read only
1497 |@W_HSW143|WIFI MAC4|read only
1498 |@W_HSW144|WIFI MAC5|read only
1499 |@W_HSW145|WIFI MAC6|read only
1500 |@W_HSW146|WIFI Signal value|read only
1501 |@W_HSW148|4G IP1|read only
1502 |@W_HSW149|4G IP2|read only
1503 |@W_HSW150|4G IP3|read only
1504 |@W_HSW151|4G IP4|read only
1505 |@W_HSW152|4G Mask 1|read only
1506 |@W_HSW153|4G Mask 2|read only
1507 |@W_HSW154|4G Mask 3|read only
1508 |@W_HSW155|4G Mask 4|read only
1509 |@W_HSW156|4G Gateway 1|read only
1510 |@W_HSW157|4G Gateway 2|read only
1511 |@W_HSW158|4G Gateway 3|read only
1512 |@W_HSW159|4G Gateway 4|read only
1513 |@W_HSW160|4G MAC1|read only
1514 |@W_HSW161|4G MAC2|read only
1515 |@W_HSW162|4G MAC3|read only
1516 |@W_HSW163|4G MAC4|read only
1517 |@W_HSW164|4G MAC5|read only
1518 |@W_HSW165|4G MAC6|read only
1519 |@W_HSW166|4G Signal value|read only
1520
1521 2. Other
1522
1523 2.1 Access password: addr_getstring("@W_HSW27", 16)
1524
1525 2.2 Machine code: addr_getstring("@W_HSW60", 64)
1526
1527 2.3 Positioning method (@W_HSW167): (read only)
1528
1529 ~1. Latitude and longitude
1530
1531 Longitude: addr_getdouble("@W_HSW168") (read only)
1532
1533 Latitude: addr_getdouble("@W_HSW172") (read only)
1534
1535 2. Base station positioning
1536
1537 LAC: addr_getdword("@W_HSW168") (read only)
1538
1539 CI: addr_getdword("@W_HSW172") (read only)
1540
1541 2.4 Convert base station to latitude and longitude via API
1542
1543 Longitude: addr_getdouble("@W_HSW187") (read only)
1544
1545 Latitude: addr_getdouble("@W_HSW183") (read only)
1546
1547 2.5 Operator information: addr_getdword("@W_HSW181") (read only)
1548
1549 2.6 Networking mode: addr_getword("@W_HSW177") (read only)
1550
1551 0: Ethernet, 1: WIFI, 2: 4G, 3: 2G
1552
1553 2.7 Map fence flag: addr_getword("@W_HSW178") (read only)
1554
1555 0: No map fence is drawn
1556
1557 1: Draw a map fence and the box is in the fence
1558
1559 2: Draw a map fence and the box is not in the fence
1560
1561 2.8 SIM card status addr_getword("@W_HSW179") (read only)
1562
1563 1: No card detected
1564
1565 2: Card insertion detected
1566
1567 3: The card status is abnormal
1568
1569 2.9 MQTT status addr_getword("@W_HSW180") (read only)
1570
1571 1: online, 2: offline
1572
1573 2.10 IO interface, X is read only, Y is read and write (H series)
1574
1575 addr_getbit(addr1), addr_setbit(addr2)
1576
1577 addr1:"@B_Y0" "@B_Y1" "@B_X0" "@B_X1"
1578
1579 addr2:"@B_Y0" "@B_Y1"
1580
1581 (((
1582 = **9 General Functions** =
1583 )))
1584
1585 (((
1586 == **9.1 send_sms_ira(string number, string message)** ==
1587 )))
1588
1589 **Function:**
1590
1591 Use IRA character set to send English text messages
1592
1593 **Parameters:**
1594
1595 //number: //number (up to 32 characters, the excess will be discarded)
1596
1597 //message~:// SMS content (up to 160 English characters, including special symbols, the part exceeding 160 characters will be discarded, and no characters in other languages should appear in the content)
1598
1599 **Return:**
1600
1601 Succeed: SMS corresponding id, used to get whether the SMS was sent successfully
1602
1603 Failed: multi
1604
1605 (((
1606 == **9.2 send_sms_ucs2(string number, string message)** ==
1607 )))
1608
1609 **Function:**
1610
1611 Use UCS2 character set to send SMS in Chinese and other languages, such as Korean, Japanese, etc.
1612
1613 **Parameters:**
1614
1615 //number: //number (up to 32 characters, the excess will be discarded)
1616
1617 //message~:// SMS content (Only 70 Chinese characters at most, the part exceeding the length will be discarded)
1618
1619 **Return:**
1620
1621 Succeed: SMS corresponding id, used to get whether the SMS was sent successfully
1622
1623 Failed: multi
1624
1625 (((
1626 == **9.3 sms_get_state(number id)** ==
1627 )))
1628
1629 **Function:**
1630
1631 Get the status of the SMS
1632
1633 **parameter:**
1634
1635 //id~:// SMS corresponding id
1636
1637 **Return:**
1638
1639 Succeed: SMS status (1: not sent, 2: sent successfully, 3: failed to send)
1640
1641 Failed: multi
1642
1643 (((
1644 == **9.4 jwt_encode(table head, table payload, string aud, number iat, number exp, string key, int jwttype)** ==
1645 )))
1646
1647 **Function:**
1648
1649 Convert data to JWT format
1650
1651 **parameter:**
1652
1653 //aud: //project name
1654
1655 //iat: //The valid period start timestamp of the JWT data format
1656
1657 //exp~:// the expiration time stamp of the JWT data format
1658
1659 //head~:// head information table
1660
1661 key: key in JSON format
1662
1663 value: value in JSON format
1664
1665 type:value type, 0:string,1:integer,2:number,3:boolean
1666
1667 {
1668
1669 {key="test1",value="test1",type="0"}
1670
1671 }
1672
1673 payload: payload information table
1674
1675 The format is consistent with the header information table
1676
1677 {
1678
1679 {key="test",value="test",type="0"}
1680
1681 }
1682
1683 //jwttype: //encryption type
1684
1685 0:RS256 1:RS384 2:RS512
1686
1687 3: PS256 4: PS384 5: PS512
1688
1689 6:HS256 7:HS384 8:HS512
1690
1691 9:ES256 10:ES384 11:ES512
1692
1693 //key~:// the private key required for encryption
1694
1695 For example:
1696
1697 function jwt.main()
1698
1699 local PRIVATE_KEY = ~[~[~-~- Please enter the secret key~-~-]]
1700
1701 local JWTType=0
1702
1703 local payload = ~{~{key="test1",value="test1",type="0"},
1704
1705 {key="test",value="123122131",type="1"}}
1706
1707 local head = ~{~{ key="name",value="data",type="0"},
1708
1709 {key="test2",value="test2",type="0"}}
1710
1711 local aud = "project"
1712
1713 local iat = 123122131
1714
1715 local exp1 = 123122331
1716
1717 local en = jwt_encode(head,payload,aud,iat,exp1,PRIVATE_KEY,JWTType);
1718
1719 print(en)
1720
1721 End
1722
1723 (((
1724 == **9.5 convertohex(number type, number value)** ==
1725 )))
1726
1727 **Function:**
1728
1729 Convert data into hexadecimal data
1730
1731 **parameter:**
1732
1733 //type~:// incoming data type 0:word 1:dword 2:float
1734
1735 //value~:// the data to be converted
1736
1737 **Return:**
1738
1739 Succeed: the converted hexadecimal data
1740
1741 Failed: multi
1742
1743 (((
1744 == **9.6 set_network(table config)** ==
1745 )))
1746
1747 **Function:**
1748
1749 Set V-BOX network, take effect after restart
1750
1751 **parameter:**
1752
1753 //config~:// incoming network configuration table
1754
1755 1. connectMode: the way V-BOX connects to the server, 0: Ethernet, 1: WIFI, 2: 4G, 3: 2G, it is not allowed to be empty.
1756 1. ethernetEnable: Whether to enable Ethernet, 1: enable, 0: disable, and it is not allowed to be empty.
1757 1. ethernetLanIp: Set the LAN IP address. Only V-BOX with three network ports support this configuration, and other models of V-BOX do not support setting LAN IP. This item is allowed to be empty.
1758 1. ethernetIpMode: Whether to enable Ethernet static IP, 1: Enable static IP, 0: DHCP, not allowed to be empty.
1759 1. ethernetIp: The IP address needs to be configured when the Ethernet static IP is used, and it is not allowed to be empty.
1760 1. ethernetNetmask: The subnet mask needs to be configured when Ethernet static IP is used, and it is not allowed to be empty.
1761 1. ethernetGateway: The gateway can be configured when Ethernet static IP is used.
1762
1763 1. When using the Ethernet network, if the Gateway is empty, V-BOX will not connect to the server.
1764 1. If you only use Ethernet to directly connect to the PLC for communication, you do not need to configure a gateway.
1765
1766 1. ethernetFirstDns: You can configure the preferred DNS server when the Ethernet static IP is used, and it is allowed to be empty. If you use the Ethernet network and do not fill in the DNS server, V-BOX will not be connected to the server.
1767 1. ethernetSpareDns: Alternate DNS server can be configured when the Ethernet static IP is used, and it is allowed to be empty.
1768 1. wifiEnable: Whether to enable WIFI, 1: enable, 0: disable, it is not allowed to be empty. If it is a model that does not include WIFI, directly disable it.
1769 1. wifiName: WIFI name, if WIFI is enabled, it is not allowed to be empty.
1770 1. wifiPassword: WIFI password, it is allowed to be empty.
1771 1. wifiIpMode: Whether to enable WIFI static IP, 1: Enable static IP, 0: DHCP, not allowed to be empty.
1772 1. wifiIp: IP address needs to be configured when WIFI static IP is used, it is not allowed to be empty.
1773 1. wifiNetmask: The subnet mask needs to be configured when WIFI static IP is used, and it is not allowed to be empty.
1774 1. wifiGateway: The gateway can be configured when WIFI static IP is used, and it is not allowed to be empty.
1775 1. wifiFirstDns: You can configure the preferred DNS server when the WIFI static IP is used, and it is allowed to be empty. If you use the WIFI network and do not fill in the DNS server, V-BOX will not be connected to the server.
1776 1. wifiSpareDns: Alternate DNS server can be configured when the WIFI static IP is used, and it is allowed to be empty.
1777 1. mobileEnable: Whether to enable the mobile network, 1: enable, 0: disable, it is not allowed to be empty, if it does not include 4G models, directly disable it.
1778 1. mobileApnMode: Whether to manually configure the APN, 0: Use the default APN, 1: Manually configure the APN, it is not allowed to be empty.
1779 1. apnName: APN name, if you choose to manually configure APN, it is not allowed to be empty.
1780 1. apnPassword: APN username, it is allowed to be empty.
1781 1. apnUserName: APN number, it is allowed to be empty.
1782 1. apnNumber: APN number, it is allowed to be empty.
1783
1784 **Return:**
1785
1786 Succeed: true
1787
1788 Faied: multi
1789
1790 (((
1791 == **9.7 remote_com_start(string config)** ==
1792 )))
1793
1794 **Function:**
1795
1796 start serial port pass-through
1797
1798 **Parameter:**
1799
1800 //config: //incoming serial port parameter configuration, JSON format
1801
1802 1. type:0, serial port pass-through
1803 1. port: serial port number marked on the V-BOX
1804 1. comtype:0-RS232, 1-RS485, 2-RS422
1805 1. baudrate: Baud Rate
1806 1. data_length: Data Bits
1807 1. stop_bit: Stop Bit
1808 1. check_bit: Check Bit
1809
1810 **Return:**
1811
1812 Succeed: true
1813
1814 Failed: multi
1815
1816 (((
1817 == **9.8 remote_com_stop()** ==
1818 )))
1819
1820 **Function:**
1821
1822 close serial port pass-through
1823
1824 **Return:**
1825
1826 Succeed: true
1827
1828 Failed: multi
1829
1830 (((
1831 == **9.9 remote_com_state()** ==
1832 )))
1833
1834 **Function:**
1835
1836 query the serial port pass-through status and pass-through server domain name and port
1837
1838 **Return:**
1839
1840 Succeed:
1841
1842 1. number, current pass-through status: 0-none 1,2-starting pass-through 3-penetrating 4,5-finishing pass-through 6-pass-through error
1843 1. string, pass-through server domain name and port number, xxxx (domain name): xxx (port number)
1844
1845 Failed: multi