Wiki source code of 01 Lua Functions

Version 5.21 by Stone Wu on 2022/07/12 10:10

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 == **serial.open(table setup)** ==
631 )))
632
633 **Function:** Enable one serial port
634
635 **Parameters:**
636
637 //Setup// is a Lua table; it needs to contain the following fields
638
639 //String setup.name//,// //serial port name, such as: COM1/COM2 (requires uppercase)
640
641 //number setup.mode//, mode: RS232/RS485/RS422
642
643 //number setup.baud_rate//, such as 115200
644
645 //number setup.stop_bit//, stop bit: 1 or 2
646
647 //number setup.data_len//, data bit: 7 or 8
648
649 //string setup.check_bit//, check bit: NONE/ODD/EVEN/SPACE
650
651 //number [setup.wait_timeout=300]//, waiting timeout
652
653 //number [setup.recv_timeout=50]//, receive wait timeout
654
655 //number [setup.flow_control=0]//, Flow control method, 0:XON/XOFF, 2:DSR/ER
656
657 Supported baud rate
658
659 1200/2400/4800/9600/14400/19200/38400/43000/57600/76800/115200/128000/230400/256000/460800/961000
660
661 **Return:**
662
663 Succeed: serial object
664
665 Failed: multi
666
667 (((
668 == **serial.close(serial obj)** ==
669 )))
670
671 **Function:** Disable the serial port
672
673 **Parameters: **//Obj //is the object returned by serial.open
674
675 **Return:**
676
677 Succeed: true
678
679 Failed: multi
680
681 (((
682 == **serial:read(number bytes[, number timeout])** ==
683 )))
684
685 **Function:** Read the specified byte length serial port data
686
687 **Parameters:**
688
689 //bytes//: number of bytes
690
691 //[timeout=50]//: timeout for reading, in milliseconds
692
693 **Return:**
694
695 Succeed: true
696
697 Failed: multi
698
699 (((
700 == **serial:write(string data)** ==
701 )))
702
703 **Function:** Write the specified byte length to serial port data
704
705 **Parameters: **
706
707 //data//: serial port data
708
709 **Return:**
710
711 Succeed: true
712
713 Failed: multi
714
715 (((
716 == **serial:flush([number flag])** ==
717 )))
718
719 **Function:** Clear the serial port buffer
720
721 **Parameters:**
722
723 //[flag=2]// clear option: 0: read, 1: write, 2: read-write
724
725 **Return:**
726
727 Succeed: true
728
729 Failed: multi
730
731 (((
732 == **serial:close()** ==
733 )))
734
735 **Function:** Close the serial port object
736
737 **Parameters:** None
738
739 **Return:**
740
741 Succeed: true
742
743 Failed: multi
744
745 (((
746 = **4 MQTT operation** =
747 )))
748
749 Operations on MQTT such as connect, subscribe, etc. must use ':' for full mode calls, that is, operate on a created MQTT object.
750
751 Both MQTT subscriptions and publications are asynchronous implementations that require the user to implement a callback function.
752
753 **QoS value:**
754
755 * 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.
756 * 1: The message is delivered at least once, but the message may be delivered repeatedly.
757 * 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.
758
759 **Retain flag:**
760
761 0: not reserved;
762
763 1: reserved
764
765 (((
766 == **mqtt.create(string serverurl, string clientid)** ==
767 )))
768
769 **Function:** Create an MQTT object
770
771 **Parameters:**
772
773 //serverurl //Server url
774
775 Format: "//protocol:~/~/host:port//"
776
777 //protocol//: tcp/ssl
778
779 //host//: Host name/IP
780
781 //port//: such as 1883
782
783 //clientid//: Client ID
784
785 **Return:**
786
787 Succeed: MQTT object
788
789 Failed: multi
790
791 (((
792 == **mqtt.close(mqtt obj)** ==
793 )))
794
795 **Function:** Close the specified MQTT object (if the connected server will be disconnected automatically)
796
797 **Parameters: **//Obj //is the objeced returned by mqtt.create
798
799 **Return:**
800
801 Succeed: true
802
803 Failed: multi
804
805 (((
806 == **mqtt:connect(table conn[, table lwt, table cart])** ==
807 )))
808
809 **Function:**Establish a connection to the server
810
811 **Parameters:**
812
813 //conn //is a Lua table and needs to contain the following fields
814
815 * //string conn.username//, user name
816 * //string conn.password//, password
817 * //number [conn.netway=0]//, networking method, if set error number will use Ethernet method
818 ** 0: Ethernet
819 ** 1: WIFI
820 ** 2: 4G
821 ** 3: 2G
822 * //number [conn.keepalive=60]//, keep connected heartbeat interval, in seconds
823 * //number [conn.cleansession=1]//, empty the session as described below:
824
825 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:
826
827 * 1 (Empty): If a session exists and is 1, the previous session messages on the client and server are emptied.
828 * 0 (reserved): Conversely, both the client and the server use the previous session. If the previous session does not exist, start a new session.
829
830 //lwt// (Last Will and Testament) is a Lua table and needs to contain the following fields
831
832 * //string lwt.topic//, topic
833 * //string lwt.message//, message
834 * //number [lwt.qos=0]//, qos value
835 * //number [lwt.retain=0]//, retain flag
836
837 **Return:**
838
839 Succeed: true
840
841 Failed: multi
842
843 (((
844 == **mqtt:disconnect([number timeout])** ==
845 )))
846
847 **Function:** Disconnect from the MQTT server
848
849 **Parameters: **//[timeout=10000] //Disconnect waiting timeout, in milliseconds
850
851 **Return:**
852
853 Succeed: true
854
855 Failed: multi
856
857 (((
858 == **mqtt:isconnected()** ==
859 )))
860
861 **Function:** Test whether or not a client is currently connected to the MQTT server
862
863 **Parameters:** None
864
865 **Return:**
866
867 Succeed: true ~-~-Connected
868
869 Failed: false ~-~- Unconnected and other unknowns
870
871 (((
872 == **mqtt:subscribe(string topic, number qos)** ==
873 )))
874
875 **Function: **Subscribe to the topic (before the subscription, the user must first call the connect method to connect to the server)
876
877 **Parameters:**
878
879 //topic//, topic name
880
881 //qos//, quality of service
882
883 **Return:**
884
885 Succeed: true
886
887 Failed: multi
888
889 (((
890 == **mqtt:unsubscribe(string topic)** ==
891 )))
892
893 **Function:** Unsubscribe topic
894
895 **Parameters:**
896
897 //topic//, topic name
898
899 **Return:**
900
901 Succeed: true
902
903 Failed: multi
904
905 (((
906 == **mqtt:publish(string topic, string message, number qos, number retain[, number timeout])** ==
907 )))
908
909 **Function:** Publish message
910
911 **Parameters:**
912
913 //topic//, topic name
914
915 //message//, message
916
917 //qos//, quality of service
918
919 //retain//, retain flag
920
921 //[timeout=1000]//, waiting for response timeout, in milliseconds (only valid when qos is greater than 0)
922
923 **Return:**
924
925 Succeed: true
926
927 Failed: multi
928
929 (((
930 == **mqtt:close()** ==
931 )))
932
933 **Function:** Close the mqtt object (the connection to the server will be automatically disconnected)
934
935 **Parameters:** None
936
937 **Return:**
938
939 Succeed: true
940
941 Failed: multi
942
943 (((
944 == **mqtt:on(string method, function callback)** ==
945 )))
946
947 **Function:** Register event callback function
948
949 **Parameters:**
950
951 //method//, It can be message/arrived/offline, these 3 types of events
952
953 //callback//, It is a callback function that needs to pass in a function
954
955 **1.**"message" will call this function after receiving the message
956
957 //Callback// prototype~:// function (string topic, string message)//
958
959 Parameter:
960
961 * //Topic//, topic name
962 * //Message//, content
963
964 **2."arrived" is published by publish, this function will be called after the publication arrives**
965
966 //Callback// prototype~:// function ()//
967
968 Parameter: None
969
970 **3.This function will be called after the "offline" connection is lost**
971
972 //Callback// prototype~:// function (string cause)//
973
974 Parameter:
975
976 //cause//, reason for loss of connection
977
978 **Return:**
979
980 Succeed: true
981
982 Failed: multi
983
984 (((
985 == **mqtt:setup_cfg()** ==
986 )))
987
988 **Function:** Cloud mode interface, to obtain MQTT information configured by the cloud platform
989
990 **Parameters:** None
991
992 **Return:**
993
994 //serverurl, clientid, conn, lwt, cart //(5 returns, respectively, server address, client ID, connection table, last word table, certificate table)
995
996 //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
997
998 //LWT// Last Words configuration is not yet open for setting, //lw//t is fixed to nil
999
1000 If ssl is not enabled, //cart// is nil, otherwise //cart// is table
1001
1002 (((
1003 = **5 JSON operation** =
1004 )))
1005
1006 Lua only has a table data structure, so all arrays and key-value objects of json will be returned as a table.
1007
1008 (((
1009 == **json.encode( lua_object )** ==
1010 )))
1011
1012 **Function: **Convert lua data type to json string
1013
1014 **Parameters: **Lua data type (including boolean, number, string, table)
1015
1016 **Return:** Json format string
1017
1018 (((
1019 == **json.decode(string json_string)** ==
1020 )))
1021
1022 **Function:** Convert json string to lua data type
1023
1024 **Parameters: **//json_string//, string of json data structure
1025
1026 **Return: **Lua data type
1027
1028 (((
1029 == **json.null** ==
1030 )))
1031
1032 **Function:**
1033
1034 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.
1035
1036 **Parameters:** None
1037
1038 **Return: **None
1039
1040 = **6 Cloud mode** =
1041
1042 The cloud interface is only used in cloud mode, and V-NET mode is not available.
1043
1044 (((
1045 == **bns_get_alldata()** ==
1046 )))
1047
1048 **Function:** Obtain all monitoring points (point table) data configured by the end user
1049
1050 **✎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
1051
1052 **Parameters:** None
1053
1054 **Return:**
1055
1056 Succeed: table two-dimensional array, the structure is as follows
1057
1058 Each item is a monitoring point, which contains 5 attributes:
1059
1060 (1 ID, 2 status, 3 tag name, 4 value, 5 custom)
1061
1062 The status contains 3 enumerated values (0: offline, 1: online, 2: timeout)
1063
1064 If there is no custom configuration, return an empty table, otherwise, return with "field name/field content"
1065
1066 E.g:
1067
1068 {
1069
1070 [1]= {[1]=1234, [2]=1, [3]='temp', [4]='23.5', [5]={"fruit"="apple"}},
1071
1072 [2]= {[1]=1235, [2]=1, [3]='humi', [4]='67', [5]={"fruit"="pear"}},
1073
1074 ...
1075
1076 [n]= {[1]=xxxx, [2]=x, [3]='xxxx', [4]='xx.x', [5]={}},
1077
1078 }
1079
1080 Failed: //table// empty table
1081
1082 (((
1083 == **bns_get_config(string from)** ==
1084 )))
1085
1086 **Function:** Obtain custom configuration parameters with the specified from type
1087
1088 **parameter:**
1089
1090 from type, there are the following two categories, the string must be all lowercase
1091
1092 'user': terminal parameters, that is, custom parameters configured by the user
1093
1094 'bind': binding parameters, which are custom parameters that need to be input
1095
1096 when the user binds V-BOX
1097
1098 **Return:**
1099
1100 Succeed: table field name/field content table in organization form
1101
1102 Failed~:// table// empty table
1103
1104 (((
1105 == **bns_get_data(string name, string data)** ==
1106 )))
1107
1108 **Function:**write data to the name of the monitoring point
1109
1110 **parameter:**
1111
1112 //name //The name of the monitoring point
1113
1114 //data// the data to be written
1115
1116 **Return:**
1117
1118 Succede: //string  // value before the monitoring point is written
1119
1120 Failed: nil
1121
1122 (((
1123 == **bns_get_data(string name)** ==
1124 )))
1125
1126 **Function:**
1127
1128 Read the data of the monitoring point name
1129
1130 **parameter:**
1131
1132 //name  // The name of the monitoring point
1133
1134 **Return:**
1135
1136 Succeed: string, table 2 results: the value of the monitoring point, custom content
1137
1138 Failed: nil
1139
1140 (((
1141 == **bns_get_datadesc()** ==
1142 )))
1143
1144 **Function: **Obtain all configured communication ports and monitoring point information
1145
1146 **Parameters:** None
1147
1148 **Return:**
1149
1150 Succeed: table three-dimensional array, the structure is as follows
1151
1152 Each item is a communication port, which contains 3 attributes (1 monitoring point array, 2 ID, 3 name)
1153
1154 The monitoring point array contains 4 attributes (1 ID, 2 name, 3 read and write attributes, 4 types)
1155
1156 Read and write attributes (1: read only, 2: write only, 3: read and write)
1157
1158 Type (1: switch, 2: number, 3: string)
1159
1160 E.g:
1161 {
1162
1163 [1]={~-~-The first communication port
1164
1165 [1]={~-~-monitoring point array of the first communication port
1166
1167 [1]={[1]=11,[2]='data1',[3]=3,[4]=2},
1168
1169 [2]={[1]=12,[2]='data2',[3]=3,[4]=2},
1170
1171 ...
1172
1173 [n]={[1]=xx,[2]='datan',[3]=x,[4]=x},~-~-n monitoring points
1174
1175 },
1176
1177 [2]=14, ~-~-ID
1178
1179 [3]='Modbus TCP' ~-~-n monitoring points
1180
1181 },
1182
1183 [2]={~-~-The second communication port
1184
1185 [1]={},~-~-The monitoring point of the second communication port is not configured and is empty
1186
1187 [2]=15, ~-~-ID
1188
1189 [3]='WECON' ~-~-communication protocol name
1190
1191 },
1192
1193 ...n communication ports and so on
1194
1195 }
1196
1197 Failed~:// table// empty table
1198
1199 (((
1200 == **bns_get_machineinfo()** ==
1201 )))
1202
1203 **Function:** get machine information
1204
1205 **Parameters:** None
1206
1207 **Return:**
1208
1209 Succeed: 3 string type results (model, machine code, software version)
1210
1211 Failed: nil
1212
1213 (((
1214 == **bns_get_groupdata(string name)** ==
1215 )))
1216
1217 **Function:** Get all monitoring point data under the specified group name
1218
1219 **parameter:**
1220
1221 //Name  // group name
1222
1223 **Return:**
1224
1225 Succeed: //table// two-dimensional array, the structure is consistent with section 6.1
1226
1227 Failed: //table// empty table
1228
1229 (((
1230 == **bns_get_groupdesc()** ==
1231 )))
1232
1233 **Function:** Get all group information
1234
1235 **Parameters:** None
1236
1237 **Return:**
1238
1239 Succeed: //table// two-dimensional array, the structure is as follows
1240
1241 Each item represents a group, which contains 3 attributes (1 collection type, 2 name, 3 cycles)
1242
1243 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)
1244
1245 Some collection types do not have a period, the period is -1
1246
1247 Failed: //table  // empty table
1248
1249 (((
1250 == **bns_get_onecache(string msg)** ==
1251 )))
1252
1253 **Function:** 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.
1254
1255 **Parameters: **//msg// String
1256
1257 **Return:**
1258
1259 Succeed: true
1260
1261 Failed: nil
1262
1263 (((
1264 == **bns_get_allcache()** ==
1265 )))
1266
1267 **Function:** Get all the cached content (once the internal cache file will be emptied)
1268
1269 **Parameters:** None
1270
1271 **Return:**
1272
1273 Succeed: //table// one-dimensional array
1274
1275 E.g:
1276
1277 {
1278
1279 [1]="This is the oldest message", - the first is the oldest message
1280
1281 [2]="This is a test",
1282
1283 ...
1284
1285 [n]="This is the latest message", - the last is the latest message
1286
1287 }
1288
1289 Failede: nil
1290
1291 (((
1292 = **7 HTTP operation** =
1293 )))
1294
1295 Network communication includes Http request interface, this document does not provide interface description, please refer to the online document for how to use it.
1296
1297 (((
1298 == **http request** ==
1299 )))
1300
1301 [[http:~~/~~/w3.impa.br/~~~~diego/software/luasocket/http.html#request>>url:http://w3.impa.br/~~diego/software/luasocket/http.html#request]]
1302
1303 == **https request** ==
1304
1305 Example:
1306
1307 {{code language="LUA"}}
1308 local json = require("json")
1309
1310 local https = require("https")
1311
1312 functions https_demo.main()
1313
1314 local url = "https://XXXXXXXXXXXXXXXXXXXXXXXXXX"
1315
1316 local body = {}
1317
1318 body["XXXXXX"] = "XXXXX"
1319
1320 body["XXXXXXX"] = "XXXXXXXXXXX"
1321
1322 local bodyJson = json.encode(body)
1323
1324 local header = {}
1325
1326 header["content-type"] = "application/json"
1327
1328 local result_table, code, headers, status = https.request(url,
1329
1330 bodyJson)
1331
1332 if code == 200 then
1333
1334 print("https suc")
1335
1336 return true
1337
1338 else
1339
1340 print("https fail")
1341
1342 return nil
1343
1344 end
1345
1346 end
1347 {{/code}}
1348
1349 (((
1350 = **8 Internal register** =
1351 )))
1352
1353 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):
1354
1355 **Access by word, prefix @W_HDW.**
1356
1357 For example: @W_HDW0 represents the first word of the system data area, @W_HDW1 represents the second word of the system data area.
1358
1359 **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.**
1360
1361 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.
1362
1363 (% class="box infomessage" %)
1364 (((
1365 **✎Note: **
1366
1367 * The address in @B_HDX is taken from the word in @W_HDW, so pay special attention when using the address.
1368 ** 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.
1369 * The address of the bit address @B_HDX has a decimal point, while the word address is an integer.
1370 )))
1371
1372
1373 (((
1374 == **Data storage area(HDW/HDX)** ==
1375 )))
1376
1377 The system storage area (HDW) of the V-BOX is used to store temporary data:
1378
1379 1. Access by word, the number range is: "@W_HDW0"-"@W_HDW299999".
1380 1. Access in bit mode, the number range is: "@B_HDX0.0"-"@B_HDX299999.15".
1381
1382 (((
1383 == **8.2 Special data area (HSW/HSX)** ==
1384
1385 (% class="box infomessage" %)
1386 (((
1387 **✎Note: **
1388
1389 * //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).
1390 * //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.
1391 )))
1392 )))
1393
1394 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:
1395
1396 (% class="table-bordered" %)
1397 |=(% style="width: 151px;" %)address|=(% style="width: 169px;" %)function|=(% style="width: 456px;" %)Read and write status: read only, write only, read and write
1398 |(% style="width:151px" %)@W_HSW0|(% style="width:169px" %)restart|(% style="width:456px" %)read and write
1399 |(% style="width:151px" %)@W_HSW1|(% style="width:169px" %)Box time: year|(% style="width:456px" %)read and write
1400 |(% style="width:151px" %)@W_HSW2|(% style="width:169px" %)Box time: month|(% style="width:456px" %)read and write
1401 |(% style="width:151px" %)@W_HSW3|(% style="width:169px" %)Box time: day|(% style="width:456px" %)read and write
1402 |(% style="width:151px" %)@W_HSW4|(% style="width:169px" %)Box time: hour|(% style="width:456px" %)read and write
1403 |(% style="width:151px" %)@W_HSW5|(% style="width:169px" %)Box time: minute|(% style="width:456px" %)read and write
1404 |(% style="width:151px" %)@W_HSW6|(% style="width:169px" %)Box time: second|(% style="width:456px" %)read and write
1405 |(% style="width:151px" %)@W_HSW7|(% style="width:169px" %)Box time: week|(% style="width:456px" %)read and write
1406 |(% style="width:151px" %)@W_HSW8|(% style="width:169px" %)Ethernet IP1|(% style="width:456px" %)read only
1407 |(% style="width:151px" %)@W_HSW9|(% style="width:169px" %)Ethernet IP2|(% style="width:456px" %)read only
1408 |(% style="width:151px" %)@W_HSW10|(% style="width:169px" %)Ethernet IP3|(% style="width:456px" %)read only
1409 |(% style="width:151px" %)@W_HSW11|(% style="width:169px" %)Ethernet IP4|(% style="width:456px" %)read only
1410 |(% style="width:151px" %)@W_HSW12|(% style="width:169px" %)Ethernet Mask 1|(% style="width:456px" %)read only
1411 |(% style="width:151px" %)@W_HSW13|(% style="width:169px" %)Ethernet Mask 2|(% style="width:456px" %)read only
1412 |(% style="width:151px" %)@W_HSW14|(% style="width:169px" %)Ethernet Mask 3|(% style="width:456px" %)read only
1413 |(% style="width:151px" %)@W_HSW15|(% style="width:169px" %)Ethernet Mask 4|(% style="width:456px" %)read only
1414 |(% style="width:151px" %)@W_HSW16|(% style="width:169px" %)Ethernet Gateway 1|(% style="width:456px" %)read only
1415 |(% style="width:151px" %)@W_HSW17|(% style="width:169px" %)Ethernet Gateway 2|(% style="width:456px" %)read only
1416 |(% style="width:151px" %)@W_HSW18|(% style="width:169px" %)Ethernet Gateway 3|(% style="width:456px" %)read only
1417 |(% style="width:151px" %)@W_HSW19|(% style="width:169px" %)Ethernet Gateway 4|(% style="width:456px" %)read only
1418 |(% style="width:151px" %)@W_HSW21|(% style="width:169px" %)Ethernet MAC1|(% style="width:456px" %)read only
1419 |(% style="width:151px" %)@W_HSW22|(% style="width:169px" %)Ethernet MAC2|(% style="width:456px" %)read only
1420 |(% style="width:151px" %)@W_HSW23|(% style="width:169px" %)Ethernet MAC3|(% style="width:456px" %)read only
1421 |(% style="width:151px" %)@W_HSW24|(% style="width:169px" %)Ethernet MAC4|(% style="width:456px" %)read only
1422 |(% style="width:151px" %)@W_HSW25|(% style="width:169px" %)Ethernet MAC3|(% style="width:456px" %)read only
1423 |(% style="width:151px" %)@W_HSW26|(% style="width:169px" %)Ethernet MAC4|(% style="width:456px" %)read only
1424 |(% style="width:151px" %)@W_HSW128|(% style="width:169px" %)WIFI IP1|(% style="width:456px" %)read only
1425 |(% style="width:151px" %)@W_HSW129|(% style="width:169px" %)WIFI IP2|(% style="width:456px" %)read only
1426 |(% style="width:151px" %)@W_HSW130|(% style="width:169px" %)WIFI IP3|(% style="width:456px" %)read only
1427 |(% style="width:151px" %)@W_HSW131|(% style="width:169px" %)WIFI IP4|(% style="width:456px" %)read only
1428 |(% style="width:151px" %)@W_HSW132|(% style="width:169px" %)WIFI Mask 1|(% style="width:456px" %)read only
1429 |(% style="width:151px" %)@W_HSW133|(% style="width:169px" %)WIFI Mask 2|(% style="width:456px" %)read only
1430 |(% style="width:151px" %)@W_HSW134|(% style="width:169px" %)WIFI Mask 3|(% style="width:456px" %)read only
1431 |(% style="width:151px" %)@W_HSW135|(% style="width:169px" %)WIFI Mask 4|(% style="width:456px" %)read only
1432 |(% style="width:151px" %)@W_HSW136|(% style="width:169px" %)WIFI Gateway 1|(% style="width:456px" %)read only
1433 |(% style="width:151px" %)@W_HSW137|(% style="width:169px" %)WIFI Gateway 2|(% style="width:456px" %)read only
1434 |(% style="width:151px" %)@W_HSW138|(% style="width:169px" %)WIFI Gateway 3|(% style="width:456px" %)read only
1435 |(% style="width:151px" %)@W_HSW139|(% style="width:169px" %)WIFI Gateway 4|(% style="width:456px" %)read only
1436 |(% style="width:151px" %)@W_HSW140|(% style="width:169px" %)WIFI MAC1|(% style="width:456px" %)read only
1437 |(% style="width:151px" %)@W_HSW141|(% style="width:169px" %)WIFI MAC2|(% style="width:456px" %)read only
1438 |(% style="width:151px" %)@W_HSW142|(% style="width:169px" %)WIFI MAC3|(% style="width:456px" %)read only
1439 |(% style="width:151px" %)@W_HSW143|(% style="width:169px" %)WIFI MAC4|(% style="width:456px" %)read only
1440 |(% style="width:151px" %)@W_HSW144|(% style="width:169px" %)WIFI MAC5|(% style="width:456px" %)read only
1441 |(% style="width:151px" %)@W_HSW145|(% style="width:169px" %)WIFI MAC6|(% style="width:456px" %)read only
1442 |(% style="width:151px" %)@W_HSW146|(% style="width:169px" %)WIFI Signal value|(% style="width:456px" %)read only
1443 |(% style="width:151px" %)@W_HSW148|(% style="width:169px" %)4G IP1|(% style="width:456px" %)read only
1444 |(% style="width:151px" %)@W_HSW149|(% style="width:169px" %)4G IP2|(% style="width:456px" %)read only
1445 |(% style="width:151px" %)@W_HSW150|(% style="width:169px" %)4G IP3|(% style="width:456px" %)read only
1446 |(% style="width:151px" %)@W_HSW151|(% style="width:169px" %)4G IP4|(% style="width:456px" %)read only
1447 |(% style="width:151px" %)@W_HSW152|(% style="width:169px" %)4G Mask 1|(% style="width:456px" %)read only
1448 |(% style="width:151px" %)@W_HSW153|(% style="width:169px" %)4G Mask 2|(% style="width:456px" %)read only
1449 |(% style="width:151px" %)@W_HSW154|(% style="width:169px" %)4G Mask 3|(% style="width:456px" %)read only
1450 |(% style="width:151px" %)@W_HSW155|(% style="width:169px" %)4G Mask 4|(% style="width:456px" %)read only
1451 |(% style="width:151px" %)@W_HSW156|(% style="width:169px" %)4G Gateway 1|(% style="width:456px" %)read only
1452 |(% style="width:151px" %)@W_HSW157|(% style="width:169px" %)4G Gateway 2|(% style="width:456px" %)read only
1453 |(% style="width:151px" %)@W_HSW158|(% style="width:169px" %)4G Gateway 3|(% style="width:456px" %)read only
1454 |(% style="width:151px" %)@W_HSW159|(% style="width:169px" %)4G Gateway 4|(% style="width:456px" %)read only
1455 |(% style="width:151px" %)@W_HSW160|(% style="width:169px" %)4G MAC1|(% style="width:456px" %)read only
1456 |(% style="width:151px" %)@W_HSW161|(% style="width:169px" %)4G MAC2|(% style="width:456px" %)read only
1457 |(% style="width:151px" %)@W_HSW162|(% style="width:169px" %)4G MAC3|(% style="width:456px" %)read only
1458 |(% style="width:151px" %)@W_HSW163|(% style="width:169px" %)4G MAC4|(% style="width:456px" %)read only
1459 |(% style="width:151px" %)@W_HSW164|(% style="width:169px" %)4G MAC5|(% style="width:456px" %)read only
1460 |(% style="width:151px" %)@W_HSW165|(% style="width:169px" %)4G MAC6|(% style="width:456px" %)read only
1461 |(% style="width:151px" %)@W_HSW166|(% style="width:169px" %)4G Signal value|(% style="width:456px" %)read only
1462
1463 **Others**
1464
1465 * Access password: addr_getstring("@W_HSW27", 16)
1466 * Machine code: addr_getstring("@W_HSW60", 64)
1467 * Positioning method (@W_HSW167): (read only)
1468 ** Latitude and longitude
1469 *** Longitude: addr_getdouble("@W_HSW168") (read only)
1470 *** Latitude: addr_getdouble("@W_HSW172") (read only)
1471 ** Base station positioning
1472 *** LAC: addr_getdword("@W_HSW168") (read only)
1473 *** CI: addr_getdword("@W_HSW172") (read only)
1474 * Convert base station to latitude and longitude via API
1475 ** Longitude: addr_getdouble("@W_HSW187") (read only)
1476 ** Latitude: addr_getdouble("@W_HSW183") (read only)
1477 * Operator information: addr_getdword("@W_HSW181") (read only)
1478 * Networking mode: addr_getword("@W_HSW177") (read only)
1479 ** 0: Ethernet
1480 ** 1: WIFI
1481 ** 2: 4G
1482 ** 3: 2G
1483 * Map fence flag: addr_getword("@W_HSW178") (read only)
1484 ** 0: No map fence is drawn
1485 ** 1: Draw a map fence and the box is in the fence
1486 ** 2: Draw a map fence and the box is not in the fence
1487 * SIM card status addr_getword("@W_HSW179") (read only)
1488 ** 1: No card detected
1489 ** 2: Card insertion detected
1490 ** 3: The card status is abnormal
1491 * MQTT status addr_getword("@W_HSW180") (read only)
1492 ** 1: online, 2: offline
1493 * IO interface, X is read only, Y is read and write (H series)
1494 ** addr_getbit(addr1), addr_setbit(addr2)
1495 ** addr1:"@B_Y0" "@B_Y1" "@B_X0" "@B_X1"
1496 ** addr2:"@B_Y0" "@B_Y1"
1497 * Obtaining IMEI (read only)
1498 ** addr_getstring("@W_HSW191",17)
1499 * Obtaining ICCID (read only)
1500 ** addr_getstring("@W_HSW225",15)
1501
1502 (((
1503 == **Power-down storage area (HAW/HAX)** ==
1504
1505 The system storage area (HAW) is used for the system power-down hold registers:
1506
1507 1. Accessed as a word, numbered in the range: "@W_HAW0"-"@W_HAW199999".
1508 1. Accessed by bit, the numbering range is: "@B_HAX0.0"-"@B_HAX199999.15".
1509
1510 (% class="box infomessage" %)
1511 (((
1512 **✎Note:** HAW/HAX is a power-down hold, that is, the registers of this type can retain the data before power-down in case of power-down.
1513 )))
1514
1515 = **9 General Functions** =
1516 )))
1517
1518 (((
1519 == **send_sms_ira(string number, string message)** ==
1520 )))
1521
1522 **Function:** Use IRA character set to send English text messages
1523
1524 **Parameters:**
1525
1526 //number: //number (up to 32 characters, the excess will be discarded)
1527
1528 //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)
1529
1530 **Return:**
1531
1532 Succeed: SMS corresponding id, used to get whether the SMS was sent successfully
1533
1534 Failed: multi
1535
1536 (((
1537 == **9.2 send_sms_ucs2(string number, string message)** ==
1538 )))
1539
1540 **Function:**
1541
1542 Use UCS2 character set to send SMS in Chinese and other languages, such as Korean, Japanese, etc.
1543
1544 **Parameters:**
1545
1546 //number: //number (up to 32 characters, the excess will be discarded)
1547
1548 //message~:// SMS content (Only 70 Chinese characters at most, the part exceeding the length will be discarded)
1549
1550 **Return:**
1551
1552 Succeed: SMS corresponding id, used to get whether the SMS was sent successfully
1553
1554 Failed: multi
1555
1556 (((
1557 == **sms_get_state(number id)** ==
1558 )))
1559
1560 **Function:** Get the status of the SMS
1561
1562 **parameter:**
1563
1564 //id~:// SMS corresponding id
1565
1566 **Return:**
1567
1568 Succeed: SMS status (1: not sent, 2: sent successfully, 3: failed to send)
1569
1570 Failed: multi
1571
1572 (((
1573 == **jwt_encode(table head, table payload, string aud, number iat, number exp, string key, int jwttype)** ==
1574 )))
1575
1576 **Function:** Convert data to JWT format
1577
1578 **parameter:**
1579
1580 //aud: //project name
1581
1582 //iat: //The valid period start timestamp of the JWT data format
1583
1584 //exp~:// the expiration time stamp of the JWT data format
1585
1586 //head~:// head information table
1587
1588 key: key in JSON format
1589
1590 value: value in JSON format
1591
1592 type:value type, 0:string,1:integer,2:number,3:boolean
1593
1594 {
1595
1596 {key="test1",value="test1",type="0"}
1597
1598 }
1599
1600 payload: payload information table
1601
1602 The format is consistent with the header information table
1603
1604 {
1605
1606 {key="test",value="test",type="0"}
1607
1608 }
1609
1610 //jwttype: //encryption type
1611
1612 0:RS256 1:RS384 2:RS512
1613
1614 3: PS256 4: PS384 5: PS512
1615
1616 6:HS256 7:HS384 8:HS512
1617
1618 9:ES256 10:ES384 11:ES512
1619
1620 //key~:// the private key required for encryption
1621
1622 **For example:**
1623
1624 {{code language="LUA"}}
1625 function jwt.main()
1626
1627 local PRIVATE_KEY = [[-- Please enter the secret key--]]
1628
1629 local JWTType=0
1630
1631 local payload = {{key="test1",value="test1",type="0"},
1632
1633 {key="test",value="123122131",type="1"}}
1634
1635 local head = {{ key="name",value="data",type="0"},
1636
1637 {key="test2",value="test2",type="0"}}
1638
1639 local aud = "project"
1640
1641 local iat = 123122131
1642
1643 local exp1 = 123122331
1644
1645 local en = jwt_encode(head,payload,aud,iat,exp1,PRIVATE_KEY,JWTType);
1646
1647 print(en)
1648
1649 End
1650 {{/code}}
1651
1652 (((
1653 == **convertohex(number type, number value)** ==
1654 )))
1655
1656 **Function:** Convert data into hexadecimal data
1657
1658 **parameter:**
1659
1660 //type~:// incoming data type 0:word 1:dword 2:float
1661
1662 //value~:// the data to be converted
1663
1664 **Return:**
1665
1666 Succeed: the converted hexadecimal data
1667
1668 Failed: multi
1669
1670 == **crc.init(table prarm)** ==
1671
1672 **Function:** Initialize the CRC
1673
1674 **Parameters:**
1675
1676 prarm is a Lua table and needs to contain the following fields.
1677
1678 * string prarm name, see table 9-1 for details of the parameter model name When this parameter is passed in, the default table parameters are used and the poly,init,xorout,refin,and refout passed in are invalid.
1679 * number prarm.width: the width, i.e. the number of CRC bits.
1680 * number [prarm.poly]: short for the generated item in hexadecimal. For example, CRC-32 is 0x04C11DB7, ignoring the highest bit "1", i.e., the complete generation item is 0x104C11DB7.
1681 * number [prarm.init]: the initialization preset value of the register (crc) at the beginning of the algorithm in hexadecimal.
1682 * number [prarm.xorout]: the final CRC value obtained after heterodyning the calculation result with this parameter.
1683 * number [prarm.refin]: whether each byte of the data to be measured is inverted by bit, true or false.
1684 * number [prarm.refout]: after the calculation or before the heterodyning output, whether the whole data is inverted by bit, true or false.
1685
1686 Return:
1687
1688 Success: crc object
1689
1690 Failure: multi, error code
1691
1692 |=Parameter model name|=poly|=init|=xorout|=refin|=refout
1693 |crc8|0x07|0x00|0x00|false|false
1694 | | | |0x00| |
1695 | | | |0x00| |
1696 | | | |0x00| |
1697 | | | |0x00| |
1698 | | | |0x00| |
1699 | | | | | |
1700 | | | |0x00| |
1701 | | | |0x00| |
1702 | | | | | |
1703 | | | |0x00| |
1704 | | | |0x0000| |
1705 | | | |0x0000| |
1706 | | | |0x0000| |
1707 | | | |0x0000| |
1708 | | | |0x0000| |
1709 | | | |0x0000| |
1710 | | | |0x0000| |
1711 | | | |0x0000| |
1712 | | | |0x0000| |
1713 | | | |0x0001| |
1714 | | | |0x0000| |
1715 | | | |0xFFFF| |
1716 | | | |0xFFFF| |
1717 | | | |0xFFFF| |
1718 | | | |0xFFFF| |
1719 | | | |0x0000| |
1720 | | | |0x0000| |
1721 | | | |0x0000| |
1722 | | | |0xFFFF| |
1723 | | | |0x0000| |
1724 | | | |0x0000| |
1725 | | | |0xFFFF| |
1726 | | | |0x0000| |
1727 | | | |0xFFFFFFFF| |
1728 | | | |0xFFFFFFFF| |
1729 | | | |0xFFFFFFFF| |
1730 | | | |0xFFFFFFFF| |
1731 | | | |0x00000000| |
1732 | | | |0xFFFFFFFF| |
1733 | | | |0x00000000| |
1734 | | | |0x00000000| |
1735 | | | |0x00000000| |
1736 | | | |0x0000000000000000| |
1737 | | | |(((
1738 |0xFFFFFFFF
1739 )))| |
1740 | | | | | |
1741 | | | | | |
1742 | | | | | |
1743 | | | | | |
1744 | | | | | |
1745
1746 (((
1747 == **set_network(table config)** ==
1748 )))
1749
1750 **Function:** Set V-BOX network, take effect after restart
1751
1752 **parameter:**
1753
1754 //config~:// incoming network configuration table
1755
1756 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.
1757 1. ethernetEnable: Whether to enable Ethernet, 1: enable, 0: disable, and it is not allowed to be empty.
1758 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.
1759 1. ethernetIpMode: Whether to enable Ethernet static IP, 1: Enable static IP, 0: DHCP, not allowed to be empty.
1760 1. ethernetIp: The IP address needs to be configured when the Ethernet static IP is used, and it is not allowed to be empty.
1761 1. ethernetNetmask: The subnet mask needs to be configured when Ethernet static IP is used, and it is not allowed to be empty.
1762 1. ethernetGateway: The gateway can be configured when Ethernet static IP is used.
1763
1764 1. When using the Ethernet network, if the Gateway is empty, V-BOX will not connect to the server.
1765 1. If you only use Ethernet to directly connect to the PLC for communication, you do not need to configure a gateway.
1766
1767 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.
1768 1. ethernetSpareDns: Alternate DNS server can be configured when the Ethernet static IP is used, and it is allowed to be empty.
1769 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.
1770 1. wifiName: WIFI name, if WIFI is enabled, it is not allowed to be empty.
1771 1. wifiPassword: WIFI password, it is allowed to be empty.
1772 1. wifiIpMode: Whether to enable WIFI static IP, 1: Enable static IP, 0: DHCP, not allowed to be empty.
1773 1. wifiIp: IP address needs to be configured when WIFI static IP is used, it is not allowed to be empty.
1774 1. wifiNetmask: The subnet mask needs to be configured when WIFI static IP is used, and it is not allowed to be empty.
1775 1. wifiGateway: The gateway can be configured when WIFI static IP is used, and it is not allowed to be empty.
1776 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.
1777 1. wifiSpareDns: Alternate DNS server can be configured when the WIFI static IP is used, and it is allowed to be empty.
1778 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.
1779 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.
1780 1. apnName: APN name, if you choose to manually configure APN, it is not allowed to be empty.
1781 1. apnPassword: APN username, it is allowed to be empty.
1782 1. apnUserName: APN number, it is allowed to be empty.
1783 1. apnNumber: APN number, it is allowed to be empty.
1784
1785 **Return:**
1786
1787 Succeed: true
1788
1789 Faied: multi
1790
1791 (((
1792 == **9.7 remote_com_start(string config)** ==
1793 )))
1794
1795 **Function:**
1796
1797 start serial port pass-through
1798
1799 **Parameter:**
1800
1801 //config: //incoming serial port parameter configuration, JSON format
1802
1803 1. type:0, serial port pass-through
1804 1. port: serial port number marked on the V-BOX
1805 1. comtype:0-RS232, 1-RS485, 2-RS422
1806 1. baudrate: Baud Rate
1807 1. data_length: Data Bits
1808 1. stop_bit: Stop Bit
1809 1. check_bit: Check Bit
1810
1811 **Return:**
1812
1813 Succeed: true
1814
1815 Failed: multi
1816
1817 (((
1818 == **9.8 remote_com_stop()** ==
1819 )))
1820
1821 **Function:**
1822
1823 close serial port pass-through
1824
1825 **Return:**
1826
1827 Succeed: true
1828
1829 Failed: multi
1830
1831 (((
1832 == **9.9 remote_com_state()** ==
1833 )))
1834
1835 **Function:**
1836
1837 query the serial port pass-through status and pass-through server domain name and port
1838
1839 **Return:**
1840
1841 Succeed:
1842
1843 1. number, current pass-through status: 0-none 1,2-starting pass-through 3-penetrating 4,5-finishing pass-through 6-pass-through error
1844 1. string, pass-through server domain name and port number, xxxx (domain name): xxx (port number)
1845
1846 Failed: multi