Wiki source code of 01 Lua Functions

Version 9.2 by Stone Wu on 2022/07/25 11:32

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 infomessage" %)
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 {{code language="LUA"}}
612 local setup = {
613
614 name = "COM2",
615
616 mode = 422, -- COM2 does not support RS422
617
618 ...
619
620 }
621
622 serial.open(setup)
623 {{/code}}
624 )))
625
626 **Data bit:**
627
628 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.
629 1. When the data bit is 8, the maximum value of data transmission is 255 (0xFF), which supports the transmission of any character.
630
631 (((
632 == **serial.open(table setup)** ==
633 )))
634
635 **Function:** 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 == **serial.close(serial obj)** ==
671 )))
672
673 **Function:** Disable the serial port
674
675 **Parameters: **//Obj //is the object returned by serial.open
676
677 **Return:**
678
679 Succeed: true
680
681 Failed: multi
682
683 (((
684 == **serial:read(number bytes[, number timeout])** ==
685 )))
686
687 **Function:** Read the specified byte length serial port data
688
689 **Parameters:**
690
691 //bytes//: number of bytes
692
693 //[timeout=50]//: timeout for reading, in milliseconds
694
695 **Return:**
696
697 Succeed: true
698
699 Failed: multi
700
701 (((
702 == **serial:write(string data)** ==
703 )))
704
705 **Function:** Write the specified byte length to serial port data
706
707 **Parameters: **
708
709 //data//: serial port data
710
711 **Return:**
712
713 Succeed: true
714
715 Failed: multi
716
717 (((
718 == **serial:flush([number flag])** ==
719 )))
720
721 **Function:** Clear the serial port buffer
722
723 **Parameters:**
724
725 //[flag=2]// clear option: 0: read, 1: write, 2: read-write
726
727 **Return:**
728
729 Succeed: true
730
731 Failed: multi
732
733 (((
734 == **serial:close()** ==
735 )))
736
737 **Function:** Close the serial port object
738
739 **Parameters:** None
740
741 **Return:**
742
743 Succeed: true
744
745 Failed: multi
746
747 (((
748 = **4 MQTT operation** =
749 )))
750
751 Operations on MQTT such as connect, subscribe, etc. must use ':' for full mode calls, that is, operate on a created MQTT object.
752
753 Both MQTT subscriptions and publications are asynchronous implementations that require the user to implement a callback function.
754
755 **QoS value:**
756
757 * 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.
758 * 1: The message is delivered at least once, but the message may be delivered repeatedly.
759 * 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.
760
761 **Retain flag:**
762
763 0: not reserved;
764
765 1: reserved
766
767 (((
768 == **mqtt.create(string serverurl, string clientid)** ==
769 )))
770
771 **Function:** Create an MQTT object
772
773 **Parameters:**
774
775 //serverurl //Server url
776
777 Format: "//protocol:~/~/host:port//"
778
779 //protocol//: tcp/ssl
780
781 //host//: Host name/IP
782
783 //port//: such as 1883
784
785 //clientid//: Client ID
786
787 **Return:**
788
789 Succeed: MQTT object
790
791 Failed: multi
792
793 (((
794 == **mqtt.close(mqtt obj)** ==
795 )))
796
797 **Function:** Close the specified MQTT object (if the connected server will be disconnected automatically)
798
799 **Parameters: **//Obj //is the objeced returned by mqtt.create
800
801 **Return:**
802
803 Succeed: true
804
805 Failed: multi
806
807 (((
808 == **mqtt:connect(table conn[, table lwt, table cart])** ==
809 )))
810
811 **Function:**Establish a connection to the server
812
813 **Parameters:**
814
815 //conn //is a Lua table and needs to contain the following fields
816
817 * //string conn.username//, user name
818 * //string conn.password//, password
819 * //number [conn.netway=0]//, networking method, if set error number will use Ethernet method
820 ** 0: Ethernet
821 ** 1: WIFI
822 ** 2: 4G
823 ** 3: 2G
824 * //number [conn.keepalive=60]//, keep connected heartbeat interval, in seconds
825 * //number [conn.cleansession=1]//, empty the session as described below:
826
827 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:
828
829 * 1 (Empty): If a session exists and is 1, the previous session messages on the client and server are emptied.
830 * 0 (reserved): Conversely, both the client and the server use the previous session. If the previous session does not exist, start a new session.
831
832 //lwt// (Last Will and Testament) is a Lua table and needs to contain the following fields
833
834 * //string lwt.topic//, topic
835 * //string lwt.message//, message
836 * //number [lwt.qos=0]//, qos value
837 * //number [lwt.retain=0]//, retain flag
838
839 **Return:**
840
841 Succeed: true
842
843 Failed: multi
844
845 (((
846 == **mqtt:disconnect([number timeout])** ==
847 )))
848
849 **Function:** Disconnect from the MQTT server
850
851 **Parameters: **//[timeout=10000] //Disconnect waiting timeout, in milliseconds
852
853 **Return:**
854
855 Succeed: true
856
857 Failed: multi
858
859 (((
860 == **mqtt:isconnected()** ==
861 )))
862
863 **Function:** Test whether or not a client is currently connected to the MQTT server
864
865 **Parameters:** None
866
867 **Return:**
868
869 Succeed: true ~-~-Connected
870
871 Failed: false ~-~- Unconnected and other unknowns
872
873 (((
874 == **mqtt:subscribe(string topic, number qos)** ==
875 )))
876
877 **Function: **Subscribe to the topic (before the subscription, the user must first call the connect method to connect to the server)
878
879 **Parameters:**
880
881 //topic//, topic name
882
883 //qos//, quality of service
884
885 **Return:**
886
887 Succeed: true
888
889 Failed: multi
890
891 (((
892 == **mqtt:unsubscribe(string topic)** ==
893 )))
894
895 **Function:** Unsubscribe topic
896
897 **Parameters:**
898
899 //topic//, topic name
900
901 **Return:**
902
903 Succeed: true
904
905 Failed: multi
906
907 (((
908 == **mqtt:publish(string topic, string message, number qos, number retain[, number timeout])** ==
909 )))
910
911 **Function:** Publish message
912
913 **Parameters:**
914
915 //topic//, topic name
916
917 //message//, message
918
919 //qos//, quality of service
920
921 //retain//, retain flag
922
923 //[timeout=1000]//, waiting for response timeout, in milliseconds (only valid when qos is greater than 0)
924
925 **Return:**
926
927 Succeed: true
928
929 Failed: multi
930
931 (((
932 == **mqtt:close()** ==
933 )))
934
935 **Function:** Close the mqtt object (the connection to the server will be automatically disconnected)
936
937 **Parameters:** None
938
939 **Return:**
940
941 Succeed: true
942
943 Failed: multi
944
945 (((
946 == **mqtt:on(string method, function callback)** ==
947 )))
948
949 **Function:** Register event callback function
950
951 **Parameters:**
952
953 //method//, It can be message/arrived/offline, these 3 types of events
954
955 //callback//, It is a callback function that needs to pass in a function
956
957 **1.**"message" will call this function after receiving the message
958
959 //Callback// prototype~:// function (string topic, string message)//
960
961 Parameter:
962
963 * //Topic//, topic name
964 * //Message//, content
965
966 **2."arrived" is published by publish, this function will be called after the publication arrives**
967
968 //Callback// prototype~:// function ()//
969
970 Parameter: None
971
972 **3.This function will be called after the "offline" connection is lost**
973
974 //Callback// prototype~:// function (string cause)//
975
976 Parameter:
977
978 //cause//, reason for loss of connection
979
980 **Return:**
981
982 Succeed: true
983
984 Failed: multi
985
986 (((
987 == **mqtt:setup_cfg()** ==
988 )))
989
990 **Function:** Cloud mode interface, to obtain MQTT information configured by the cloud platform
991
992 **Parameters:** None
993
994 **Return:**
995
996 //serverurl, clientid, conn, lwt, cart //(5 returns, respectively, server address, client ID, connection table, last word table, certificate table)
997
998 //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
999
1000 //LWT// Last Words configuration is not yet open for setting, //lw//t is fixed to nil
1001
1002 If ssl is not enabled, //cart// is nil, otherwise //cart// is table
1003
1004 (((
1005 = **5 JSON operation** =
1006 )))
1007
1008 Lua only has a table data structure, so all arrays and key-value objects of json will be returned as a table.
1009
1010 (((
1011 == **json.encode( lua_object )** ==
1012 )))
1013
1014 **Function: **Convert lua data type to json string
1015
1016 **Parameters: **Lua data type (including boolean, number, string, table)
1017
1018 **Return:** Json format string
1019
1020 (((
1021 == **json.decode(string json_string)** ==
1022 )))
1023
1024 **Function:** Convert json string to lua data type
1025
1026 **Parameters: **//json_string//, string of json data structure
1027
1028 **Return: **Lua data type
1029
1030 (((
1031 == **json.null** ==
1032 )))
1033
1034 **Function:**
1035
1036 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.
1037
1038 **Parameters:** None
1039
1040 **Return: **None
1041
1042 = **6 Cloud mode** =
1043
1044 The cloud interface is only used in cloud mode, and V-NET mode is not available.
1045
1046 (((
1047 == **bns_get_alldata()** ==
1048 )))
1049
1050 **Function:** Obtain all monitoring points (point table) data configured by the end user
1051
1052 **✎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
1053
1054 **Parameters:** None
1055
1056 **Return:**
1057
1058 Succeed: table two-dimensional array, the structure is as follows
1059
1060 Each item is a monitoring point, which contains 5 attributes:
1061
1062 (1 ID, 2 status, 3 tag name, 4 value, 5 custom)
1063
1064 The status contains 3 enumerated values (0: offline, 1: online, 2: timeout)
1065
1066 If there is no custom configuration, return an empty table, otherwise, return with "field name/field content"
1067
1068 **For example:**
1069
1070 {{code language="LUA"}}
1071 {
1072
1073 [1]= {[1]=1234, [2]=1, [3]='temp', [4]='23.5', [5]={"fruit"="apple"}},
1074
1075 [2]= {[1]=1235, [2]=1, [3]='humi', [4]='67', [5]={"fruit"="pear"}},
1076
1077 ...
1078
1079 [n]= {[1]=xxxx, [2]=x, [3]='xxxx', [4]='xx.x', [5]={}},
1080
1081 }
1082
1083 Failed: table empty table
1084 {{/code}}
1085
1086 (((
1087 == **bns_get_config(string from)** ==
1088 )))
1089
1090 **Function:** Obtain custom configuration parameters with the specified from type
1091
1092 **parameter:**
1093
1094 from type, there are the following two categories, the string must be all lowercase
1095
1096 'user': terminal parameters, that is, custom parameters configured by the user
1097
1098 'bind': binding parameters, which are custom parameters that need to be input
1099
1100 when the user binds V-BOX
1101
1102 **Return:**
1103
1104 Succeed: table field name/field content table in organization form
1105
1106 Failed~:// table// empty table
1107
1108 (((
1109 == **bns_get_data(string name, string data)** ==
1110 )))
1111
1112 **Function:**write data to the name of the monitoring point
1113
1114 **parameter:**
1115
1116 //name //The name of the monitoring point
1117
1118 //data// the data to be written
1119
1120 **Return:**
1121
1122 Succede: //string  // value before the monitoring point is written
1123
1124 Failed: nil
1125
1126 (((
1127 == **bns_get_data(string name)** ==
1128 )))
1129
1130 **Function:**
1131
1132 Read the data of the monitoring point name
1133
1134 **parameter:**
1135
1136 //name  // The name of the monitoring point
1137
1138 **Return:**
1139
1140 Succeed: string, table 2 results: the value of the monitoring point, custom content
1141
1142 Failed: nil
1143
1144 (((
1145 == **bns_get_datadesc()** ==
1146 )))
1147
1148 **Function: **Obtain all configured communication ports and monitoring point information
1149
1150 **Parameters:** None
1151
1152 **Return:**
1153
1154 Succeed: table three-dimensional array, the structure is as follows
1155
1156 Each item is a communication port, which contains 3 attributes (1 monitoring point array, 2 ID, 3 name)
1157
1158 The monitoring point array contains 4 attributes (1 ID, 2 name, 3 read and write attributes, 4 types)
1159
1160 Read and write attributes (1: read only, 2: write only, 3: read and write)
1161
1162 Type (1: switch, 2: number, 3: string)
1163
1164 **For example:**
1165
1166 {{code language="LUA"}}
1167 {
1168
1169 [1]={--The first communication port
1170
1171 [1]={--monitoring point array of the first communication port
1172
1173 [1]={[1]=11,[2]='data1',[3]=3,[4]=2},
1174
1175 [2]={[1]=12,[2]='data2',[3]=3,[4]=2},
1176
1177 ...
1178
1179 [n]={[1]=xx,[2]='datan',[3]=x,[4]=x},--n monitoring points
1180
1181 },
1182
1183 [2]=14, --ID
1184
1185 [3]='Modbus TCP' --n monitoring points
1186
1187 },
1188
1189 [2]={--The second communication port
1190
1191 [1]={},--The monitoring point of the second communication port is not configured and is empty
1192
1193 [2]=15, --ID
1194
1195 [3]='WECON' --communication protocol name
1196
1197 },
1198
1199 ...n communication ports and so on
1200
1201 }
1202 {{/code}}
1203
1204 Failed~:// table// empty table
1205
1206 (((
1207 == **bns_get_machineinfo()** ==
1208 )))
1209
1210 **Function:** get machine information
1211
1212 **Parameters:** None
1213
1214 **Return:**
1215
1216 Succeed: 3 string type results (model, machine code, software version)
1217
1218 Failed: nil
1219
1220 (((
1221 == **bns_get_groupdata(string name)** ==
1222 )))
1223
1224 **Function:** Get all monitoring point data under the specified group name
1225
1226 **parameter:**
1227
1228 //Name  // group name
1229
1230 **Return:**
1231
1232 Succeed: //table// two-dimensional array, the structure is consistent with section 6.1
1233
1234 Failed: //table// empty table
1235
1236 (((
1237 == **bns_get_groupdesc()** ==
1238 )))
1239
1240 **Function:** Get all group information
1241
1242 **Parameters:** None
1243
1244 **Return:**
1245
1246 Succeed: //table// two-dimensional array, the structure is as follows
1247
1248 Each item represents a group, which contains 3 attributes (1 collection type, 2 name, 3 cycles)
1249
1250 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)
1251
1252 Some collection types do not have a period, the period is -1
1253
1254 Failed: //table  // empty table
1255
1256 (((
1257 == **bns_get_onecache(string msg)** ==
1258 )))
1259
1260 **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.
1261
1262 **Parameters: **//msg// String
1263
1264 **Return:**
1265
1266 Succeed: true
1267
1268 Failed: nil
1269
1270 (((
1271 == **bns_get_allcache()** ==
1272 )))
1273
1274 **Function:** Get all the cached content (once the internal cache file will be emptied)
1275
1276 **Parameters:** None
1277
1278 **Return:**
1279
1280 Succeed: //table// one-dimensional array
1281
1282 **For example:**
1283
1284 {{code language="LUA"}}
1285 {
1286
1287 [1]="This is the oldest message", - the first is the oldest message
1288
1289 [2]="This is a test",
1290
1291 ...
1292
1293 [n]="This is the latest message", - the last is the latest message
1294
1295 }
1296 {{/code}}
1297
1298 Failede: nil
1299
1300 (((
1301 = **7 HTTP operation** =
1302 )))
1303
1304 Network communication includes Http request interface, this document does not provide interface description, please refer to the online document for how to use it.
1305
1306 (((
1307 == **http request** ==
1308 )))
1309
1310 [[http:~~/~~/w3.impa.br/~~~~diego/software/luasocket/http.html#request>>url:http://w3.impa.br/~~diego/software/luasocket/http.html#request]]
1311
1312 == **https request** ==
1313
1314 **For example:**
1315
1316 {{code language="LUA"}}
1317 local json = require("json")
1318
1319 local https = require("https")
1320
1321 functions https_demo.main()
1322
1323 local url = "https://XXXXXXXXXXXXXXXXXXXXXXXXXX"
1324
1325 local body = {}
1326
1327 body["XXXXXX"] = "XXXXX"
1328
1329 body["XXXXXXX"] = "XXXXXXXXXXX"
1330
1331 local bodyJson = json.encode(body)
1332
1333 local header = {}
1334
1335 header["content-type"] = "application/json"
1336
1337 local result_table, code, headers, status = https.request(url,
1338
1339 bodyJson)
1340
1341 if code == 200 then
1342
1343 print("https suc")
1344
1345 return true
1346
1347 else
1348
1349 print("https fail")
1350
1351 return nil
1352
1353 end
1354
1355 end
1356 {{/code}}
1357
1358 (((
1359 = **8 Internal register** =
1360 )))
1361
1362 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):
1363
1364 **Access by word, prefix @W_HDW.**
1365
1366 For example: @W_HDW0 represents the first word of the system data area, @W_HDW1 represents the second word of the system data area.
1367
1368 **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.**
1369
1370 **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.
1371
1372 (% class="box infomessage" %)
1373 (((
1374 **✎Note: **
1375
1376 * The address in @B_HDX is taken from the word in @W_HDW, so pay special attention when using the address.
1377 ** 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.
1378 * The address of the bit address @B_HDX has a decimal point, while the word address is an integer.
1379 )))
1380
1381
1382 (((
1383 == **Data storage area(HDW/HDX)** ==
1384 )))
1385
1386 The system storage area (HDW) of the V-BOX is used to store temporary data:
1387
1388 1. Access by word, the number range is: "@W_HDW0"-"@W_HDW299999".
1389 1. Access in bit mode, the number range is: "@B_HDX0.0"-"@B_HDX299999.15".
1390
1391 (((
1392 == **Special data area (HSW/HSX)** ==
1393
1394 (% class="box infomessage" %)
1395 (((
1396 **✎Note: **
1397
1398 * //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).
1399 * //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.
1400 )))
1401 )))
1402
1403 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:
1404
1405 (% class="table-bordered" %)
1406 |=(% style="width: 151px;" %)address|=(% style="width: 169px;" %)function|=(% style="width: 456px;" %)Read and write status: read only, write only, read and write
1407 |(% style="width:151px" %)@W_HSW0|(% style="width:169px" %)restart|(% style="width:456px" %)read and write
1408 |(% style="width:151px" %)@W_HSW1|(% style="width:169px" %)Box time: year|(% style="width:456px" %)read and write
1409 |(% style="width:151px" %)@W_HSW2|(% style="width:169px" %)Box time: month|(% style="width:456px" %)read and write
1410 |(% style="width:151px" %)@W_HSW3|(% style="width:169px" %)Box time: day|(% style="width:456px" %)read and write
1411 |(% style="width:151px" %)@W_HSW4|(% style="width:169px" %)Box time: hour|(% style="width:456px" %)read and write
1412 |(% style="width:151px" %)@W_HSW5|(% style="width:169px" %)Box time: minute|(% style="width:456px" %)read and write
1413 |(% style="width:151px" %)@W_HSW6|(% style="width:169px" %)Box time: second|(% style="width:456px" %)read and write
1414 |(% style="width:151px" %)@W_HSW7|(% style="width:169px" %)Box time: week|(% style="width:456px" %)read and write
1415 |(% style="width:151px" %)@W_HSW8|(% style="width:169px" %)Ethernet IP1|(% style="width:456px" %)read only
1416 |(% style="width:151px" %)@W_HSW9|(% style="width:169px" %)Ethernet IP2|(% style="width:456px" %)read only
1417 |(% style="width:151px" %)@W_HSW10|(% style="width:169px" %)Ethernet IP3|(% style="width:456px" %)read only
1418 |(% style="width:151px" %)@W_HSW11|(% style="width:169px" %)Ethernet IP4|(% style="width:456px" %)read only
1419 |(% style="width:151px" %)@W_HSW12|(% style="width:169px" %)Ethernet Mask 1|(% style="width:456px" %)read only
1420 |(% style="width:151px" %)@W_HSW13|(% style="width:169px" %)Ethernet Mask 2|(% style="width:456px" %)read only
1421 |(% style="width:151px" %)@W_HSW14|(% style="width:169px" %)Ethernet Mask 3|(% style="width:456px" %)read only
1422 |(% style="width:151px" %)@W_HSW15|(% style="width:169px" %)Ethernet Mask 4|(% style="width:456px" %)read only
1423 |(% style="width:151px" %)@W_HSW16|(% style="width:169px" %)Ethernet Gateway 1|(% style="width:456px" %)read only
1424 |(% style="width:151px" %)@W_HSW17|(% style="width:169px" %)Ethernet Gateway 2|(% style="width:456px" %)read only
1425 |(% style="width:151px" %)@W_HSW18|(% style="width:169px" %)Ethernet Gateway 3|(% style="width:456px" %)read only
1426 |(% style="width:151px" %)@W_HSW19|(% style="width:169px" %)Ethernet Gateway 4|(% style="width:456px" %)read only
1427 |(% style="width:151px" %)@W_HSW21|(% style="width:169px" %)Ethernet MAC1|(% style="width:456px" %)read only
1428 |(% style="width:151px" %)@W_HSW22|(% style="width:169px" %)Ethernet MAC2|(% style="width:456px" %)read only
1429 |(% style="width:151px" %)@W_HSW23|(% style="width:169px" %)Ethernet MAC3|(% style="width:456px" %)read only
1430 |(% style="width:151px" %)@W_HSW24|(% style="width:169px" %)Ethernet MAC4|(% style="width:456px" %)read only
1431 |(% style="width:151px" %)@W_HSW25|(% style="width:169px" %)Ethernet MAC3|(% style="width:456px" %)read only
1432 |(% style="width:151px" %)@W_HSW26|(% style="width:169px" %)Ethernet MAC4|(% style="width:456px" %)read only
1433 |(% style="width:151px" %)@W_HSW128|(% style="width:169px" %)WIFI IP1|(% style="width:456px" %)read only
1434 |(% style="width:151px" %)@W_HSW129|(% style="width:169px" %)WIFI IP2|(% style="width:456px" %)read only
1435 |(% style="width:151px" %)@W_HSW130|(% style="width:169px" %)WIFI IP3|(% style="width:456px" %)read only
1436 |(% style="width:151px" %)@W_HSW131|(% style="width:169px" %)WIFI IP4|(% style="width:456px" %)read only
1437 |(% style="width:151px" %)@W_HSW132|(% style="width:169px" %)WIFI Mask 1|(% style="width:456px" %)read only
1438 |(% style="width:151px" %)@W_HSW133|(% style="width:169px" %)WIFI Mask 2|(% style="width:456px" %)read only
1439 |(% style="width:151px" %)@W_HSW134|(% style="width:169px" %)WIFI Mask 3|(% style="width:456px" %)read only
1440 |(% style="width:151px" %)@W_HSW135|(% style="width:169px" %)WIFI Mask 4|(% style="width:456px" %)read only
1441 |(% style="width:151px" %)@W_HSW136|(% style="width:169px" %)WIFI Gateway 1|(% style="width:456px" %)read only
1442 |(% style="width:151px" %)@W_HSW137|(% style="width:169px" %)WIFI Gateway 2|(% style="width:456px" %)read only
1443 |(% style="width:151px" %)@W_HSW138|(% style="width:169px" %)WIFI Gateway 3|(% style="width:456px" %)read only
1444 |(% style="width:151px" %)@W_HSW139|(% style="width:169px" %)WIFI Gateway 4|(% style="width:456px" %)read only
1445 |(% style="width:151px" %)@W_HSW140|(% style="width:169px" %)WIFI MAC1|(% style="width:456px" %)read only
1446 |(% style="width:151px" %)@W_HSW141|(% style="width:169px" %)WIFI MAC2|(% style="width:456px" %)read only
1447 |(% style="width:151px" %)@W_HSW142|(% style="width:169px" %)WIFI MAC3|(% style="width:456px" %)read only
1448 |(% style="width:151px" %)@W_HSW143|(% style="width:169px" %)WIFI MAC4|(% style="width:456px" %)read only
1449 |(% style="width:151px" %)@W_HSW144|(% style="width:169px" %)WIFI MAC5|(% style="width:456px" %)read only
1450 |(% style="width:151px" %)@W_HSW145|(% style="width:169px" %)WIFI MAC6|(% style="width:456px" %)read only
1451 |(% style="width:151px" %)@W_HSW146|(% style="width:169px" %)WIFI Signal value|(% style="width:456px" %)read only
1452 |(% style="width:151px" %)@W_HSW148|(% style="width:169px" %)4G IP1|(% style="width:456px" %)read only
1453 |(% style="width:151px" %)@W_HSW149|(% style="width:169px" %)4G IP2|(% style="width:456px" %)read only
1454 |(% style="width:151px" %)@W_HSW150|(% style="width:169px" %)4G IP3|(% style="width:456px" %)read only
1455 |(% style="width:151px" %)@W_HSW151|(% style="width:169px" %)4G IP4|(% style="width:456px" %)read only
1456 |(% style="width:151px" %)@W_HSW152|(% style="width:169px" %)4G Mask 1|(% style="width:456px" %)read only
1457 |(% style="width:151px" %)@W_HSW153|(% style="width:169px" %)4G Mask 2|(% style="width:456px" %)read only
1458 |(% style="width:151px" %)@W_HSW154|(% style="width:169px" %)4G Mask 3|(% style="width:456px" %)read only
1459 |(% style="width:151px" %)@W_HSW155|(% style="width:169px" %)4G Mask 4|(% style="width:456px" %)read only
1460 |(% style="width:151px" %)@W_HSW156|(% style="width:169px" %)4G Gateway 1|(% style="width:456px" %)read only
1461 |(% style="width:151px" %)@W_HSW157|(% style="width:169px" %)4G Gateway 2|(% style="width:456px" %)read only
1462 |(% style="width:151px" %)@W_HSW158|(% style="width:169px" %)4G Gateway 3|(% style="width:456px" %)read only
1463 |(% style="width:151px" %)@W_HSW159|(% style="width:169px" %)4G Gateway 4|(% style="width:456px" %)read only
1464 |(% style="width:151px" %)@W_HSW160|(% style="width:169px" %)4G MAC1|(% style="width:456px" %)read only
1465 |(% style="width:151px" %)@W_HSW161|(% style="width:169px" %)4G MAC2|(% style="width:456px" %)read only
1466 |(% style="width:151px" %)@W_HSW162|(% style="width:169px" %)4G MAC3|(% style="width:456px" %)read only
1467 |(% style="width:151px" %)@W_HSW163|(% style="width:169px" %)4G MAC4|(% style="width:456px" %)read only
1468 |(% style="width:151px" %)@W_HSW164|(% style="width:169px" %)4G MAC5|(% style="width:456px" %)read only
1469 |(% style="width:151px" %)@W_HSW165|(% style="width:169px" %)4G MAC6|(% style="width:456px" %)read only
1470 |(% style="width:151px" %)@W_HSW166|(% style="width:169px" %)4G Signal value|(% style="width:456px" %)read only
1471
1472 **Others**
1473
1474 * Access password: addr_getstring("@W_HSW27", 16)
1475 * Machine code: addr_getstring("@W_HSW60", 64)
1476 * Positioning method (@W_HSW167): (read only)
1477 ** Latitude and longitude
1478 *** Longitude: addr_getdouble("@W_HSW168") (read only)
1479 *** Latitude: addr_getdouble("@W_HSW172") (read only)
1480 ** Base station positioning
1481 *** LAC: addr_getdword("@W_HSW168") (read only)
1482 *** CI: addr_getdword("@W_HSW172") (read only)
1483 * Convert base station to latitude and longitude via API
1484 ** Longitude: addr_getdouble("@W_HSW187") (read only)
1485 ** Latitude: addr_getdouble("@W_HSW183") (read only)
1486 * Operator information: addr_getdword("@W_HSW181") (read only)
1487 * Networking mode: addr_getword("@W_HSW177") (read only)
1488 ** 0: Ethernet
1489 ** 1: WIFI
1490 ** 2: 4G
1491 ** 3: 2G
1492 * Map fence flag: addr_getword("@W_HSW178") (read only)
1493 ** 0: No map fence is drawn
1494 ** 1: Draw a map fence and the box is in the fence
1495 ** 2: Draw a map fence and the box is not in the fence
1496 * SIM card status addr_getword("@W_HSW179") (read only)
1497 ** 1: No card detected
1498 ** 2: Card insertion detected
1499 ** 3: The card status is abnormal
1500 * MQTT status addr_getword("@W_HSW180") (read only)
1501 ** 1: online, 2: offline
1502 * IO interface, X is read only, Y is read and write (H series)
1503 ** addr_getbit(addr1), addr_setbit(addr2)
1504 ** addr1:"@B_Y0" "@B_Y1" "@B_X0" "@B_X1"
1505 ** addr2:"@B_Y0" "@B_Y1"
1506 * Obtaining IMEI (read only)
1507 ** addr_getstring("@W_HSW191",17)
1508 * Obtaining ICCID (read only)
1509 ** addr_getstring("@W_HSW225",15)
1510
1511 (((
1512 == **Power-down storage area (HAW/HAX)** ==
1513
1514 The system storage area (HAW) is used for the system power-down hold registers:
1515
1516 1. Accessed as a word, numbered in the range: "@W_HAW0"-"@W_HAW199999".
1517 1. Accessed by bit, the numbering range is: "@B_HAX0.0"-"@B_HAX199999.15".
1518
1519 (% class="box infomessage" %)
1520 (((
1521 **✎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.
1522 )))
1523
1524 = **9 General Functions** =
1525 )))
1526
1527 (((
1528 == **send_sms_ira(string number, string message)** ==
1529 )))
1530
1531 **Function:** Use IRA character set to send English text messages
1532
1533 **Parameters:**
1534
1535 //number: //number (up to 32 characters, the excess will be discarded)
1536
1537 //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)
1538
1539 **Return:**
1540
1541 Succeed: SMS corresponding id, used to get whether the SMS was sent successfully
1542
1543 Failed: multi
1544
1545 (((
1546 == **send_sms_ucs2(string number, string message)** ==
1547 )))
1548
1549 **Function:**
1550
1551 Use UCS2 character set to send SMS in Chinese and other languages, such as Korean, Japanese, etc.
1552
1553 **Parameters:**
1554
1555 //number: //number (up to 32 characters, the excess will be discarded)
1556
1557 //message~:// SMS content (Only 70 Chinese characters at most, the part exceeding the length will be discarded)
1558
1559 **Return:**
1560
1561 Succeed: SMS corresponding id, used to get whether the SMS was sent successfully
1562
1563 Failed: multi
1564
1565 (((
1566 == **sms_get_state(number id)** ==
1567 )))
1568
1569 **Function:** Get the status of the SMS
1570
1571 **parameter:**
1572
1573 //id~:// SMS corresponding id
1574
1575 **Return:**
1576
1577 Succeed: SMS status (1: not sent, 2: sent successfully, 3: failed to send)
1578
1579 Failed: multi
1580
1581 (((
1582 == **jwt_encode(table head, table payload, string aud, number iat, number exp, string key, int jwttype)** ==
1583 )))
1584
1585 **Function:** Convert data to JWT format
1586
1587 **parameter:**
1588
1589 //aud: //project name
1590
1591 //iat: //The valid period start timestamp of the JWT data format
1592
1593 //exp~:// the expiration time stamp of the JWT data format
1594
1595 //head~:// head information table
1596
1597 key: key in JSON format
1598
1599 value: value in JSON format
1600
1601 type:value type, 0:string,1:integer,2:number,3:boolean
1602
1603 {
1604
1605 {key="test1",value="test1",type="0"}
1606
1607 }
1608
1609 payload: payload information table
1610
1611 The format is consistent with the header information table
1612
1613 {
1614
1615 {key="test",value="test",type="0"}
1616
1617 }
1618
1619 //jwttype: //encryption type
1620
1621 0:RS256 1:RS384 2:RS512
1622
1623 3: PS256 4: PS384 5: PS512
1624
1625 6:HS256 7:HS384 8:HS512
1626
1627 9:ES256 10:ES384 11:ES512
1628
1629 //key~:// the private key required for encryption
1630
1631 **For example:**
1632
1633 {{code language="LUA"}}
1634 function jwt.main()
1635
1636 local PRIVATE_KEY = [[-- Please enter the secret key--]]
1637
1638 local JWTType=0
1639
1640 local payload = {{key="test1",value="test1",type="0"},
1641
1642 {key="test",value="123122131",type="1"}}
1643
1644 local head = {{ key="name",value="data",type="0"},
1645
1646 {key="test2",value="test2",type="0"}}
1647
1648 local aud = "project"
1649
1650 local iat = 123122131
1651
1652 local exp1 = 123122331
1653
1654 local en = jwt_encode(head,payload,aud,iat,exp1,PRIVATE_KEY,JWTType);
1655
1656 print(en)
1657
1658 End
1659 {{/code}}
1660
1661 (((
1662 == **convertohex(number type, number value)** ==
1663 )))
1664
1665 **Function:** Convert data into hexadecimal data
1666
1667 **parameter:**
1668
1669 //type~:// incoming data type 0:word 1:dword 2:float
1670
1671 //value~:// the data to be converted
1672
1673 **Return:**
1674
1675 Succeed: the converted hexadecimal data
1676
1677 Failed: multi
1678
1679 == **crc.init(table prarm)** ==
1680
1681 **Function:** Initialize the CRC
1682
1683 **Parameters:**
1684
1685 prarm is a Lua table and needs to contain the following fields.
1686
1687 * 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.
1688 * number prarm.width: the width, i.e. the number of CRC bits.
1689 * 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.
1690 * number [prarm.init]: the initialization preset value of the register (crc) at the beginning of the algorithm in hexadecimal.
1691 * number [prarm.xorout]: the final CRC value obtained after heterodyning the calculation result with this parameter.
1692 * number [prarm.refin]: whether each byte of the data to be measured is inverted by bit, true or false.
1693 * number [prarm.refout]: after the calculation or before the heterodyning output, whether the whole data is inverted by bit, true or false.
1694
1695 **Return:**
1696
1697 Success: crc object
1698
1699 Failure: multi, error code
1700
1701 (((
1702 |=Parameter model name|=poly|=init|=xorout|=refin|=refout
1703 |crc8|0x07|0x00|0x00|false|false
1704 |crc8_cdma2000|0x9B|0xFF|0x00|false|false
1705 |crc8_darc|0x39|0x00|0x00|true|true
1706 |crc8_dvb_s2|0xD5|0x00|0x00|false|false
1707 |crc8_ebu|0x1D|0xFF|0x00|true|true
1708 |crc8_i_code|0x1D|0xFD|0x00|false|false
1709 |crc8_itu|0x07|0x00|0x55|false|false
1710 |crc8_maxim|0x31|0x00|0x00|true|true
1711 |crc8_rohc|0x07|0xFF|0x00|true|true
1712 |crc8_wcdma|0x9B|0x00|0x00|true|true
1713 |crc8_sae_j1850|0x1D|0xFF|0xFF|false|false
1714 |crc8_opensafety|0x2F|0x00|0x00|false|false
1715 |crc16_tms37157|0x1021|0x3791|0x0000|true|true
1716 |crc16_a|0x1021|0x6363|0x0000|true|true
1717 |crc16_riello|0x1021|0x554D|0x0000|true|true
1718 |crc16_ccitt_false|0x1021|0xFFFF|0x0000|false|false
1719 |crc16_arc|0x8005|0x0000|0x0000|true|true
1720 |crc16_arc_ccitt|0x1021|0x1D0F|0x0000|false|false
1721 |crc16_buypass|0x8005|0x0000|0x0000|false|false
1722 |crc16_cdma2000|0xC867|0xFFFF|0x0000|false|false
1723 |crc16_dds110|0x8005|0x800D|0x0000|false|false
1724 |crc16_dect_r|0x0589|0x0000|0x0001|false|false
1725 |crc16_dect_x|0x0589|0x0000|0x0000|false|false
1726 |crc16_dnp|0x3D65|0x0000|0xFFFF|true|true
1727 |crc16_en_13757|0x3D65|0x0000|0xFFFF|false|false
1728 |crc16_genibus|0x1021|0xFFFF|0xFFFF|false|false
1729 |crc16_maxim|0x8005|0x0000|0xFFFF|true|true
1730 |crc16_mcrf4xx|0x1021|0xFFFF|0x0000|true|true
1731 |crc16_t10_dif|0x8BB7|0x0000|0x0000|false|false
1732 |crc16_teledisk|0xA097|0x0000|0x0000|false|false
1733 |crc16_usb|0x8005|0xFFFF|0xFFFF|true|true
1734 |crc16_kermit|0x1021|0x0000|0x0000|true|true
1735
1736 (% class="wikigeneratedid" %)
1737 Table 9-1
1738
1739 == **crc:calc(string crcValue)** ==
1740
1741 **Function:** Calculate CRC result
1742
1743 **Parameter:**
1744
1745 crcValue: the value to be calculated
1746
1747 **Return:**
1748
1749 Succeed: calculated result
1750
1751 Failed: multi, error code
1752 )))
1753
1754 **For example:**
1755
1756 {{code language="LUA"}}
1757 function crcTest.main()
1758
1759 local param = {
1760
1761 name = '',
1762
1763 width = 64,
1764
1765 poly = 0x42F0E1EBA9EA3693,
1766
1767 init = 0xFFFFFFFFFFFFFFFF,
1768
1769 xorout = 0xFFFFFFFFFFFFFFFF,
1770
1771 refin = 1,
1772
1773 refout = 1
1774
1775 }
1776
1777 crc64,err = crc.init(param)
1778
1779 if not crc64 then
1780
1781 print("Crc init failed:", err)
1782 else
1783
1784 crcvalue = crc64:calc("123456789")
1785
1786 print(string.format("crc64 calc :0X%16X", crcvalue))
1787
1788 end
1789
1790 end
1791 {{/code}}
1792
1793 = **10 Special function for V-NET** =
1794
1795 == **normal_get_alldata()** ==
1796
1797 **Function: **Obtain the data of all the monitoring points
1798
1799 **Parameter: None**
1800
1801 **Return:**
1802
1803 Succeed: table two-dimensional arrays, as follows:
1804
1805 * Each item is a monitoring point and contains 4 attributes:
1806 ** 1: ID
1807 ** 2: status
1808 ** 3: tag name
1809 ** 4: value
1810 * Status contains 3 enumerated values
1811 ** 0: offline
1812 ** 1: online
1813 ** 2: timeout
1814 * Customization returns an empty table if there is no configuration, otherwise returns "field name/field content"
1815
1816 **For example:**
1817
1818 {{code language="LUA"}}
1819 {
1820
1821 [1]= {[1]=1234, [2]=1, [3]='temp', [4]='23.5'},
1822
1823 [2]= {[1]=1235, [2]=1, [3]='humi', [4]='67'},
1824
1825 ...
1826
1827 [n]= {[1]=xxxx, [2]=x, [3]='xxxx', [4]='xx.x'},
1828
1829 }
1830
1831 Failed: table, empty table
1832 {{/code}}
1833
1834 == **normal_setdata_byname(string name, string data)** ==
1835
1836 **Function:** Write data to the monitoring point name
1837
1838 **Parameter:**
1839
1840 name: the name of monitoring point
1841
1842 data: the data to be written
1843
1844 **Return:**
1845
1846 Succeed: string: The value of the monitor point before it is written
1847
1848 Failed: nil
1849
1850 == **normal_getdata_byname(string name)** ==
1851
1852 **Function:** Read the data of the monitoring point name
1853
1854 **Parameter:**
1855
1856 name: the name of monitoring point
1857
1858 **Return:**
1859
1860 Succeed: string
1861
1862 Failed: nil
1863
1864 = **11 MySQL database operation** =
1865
1866 == **luaMySql.init(string sourcename, string username, string password, string host, number port, string character)** ==
1867
1868 **Function:** Configure database connection parameters
1869
1870 **Parameter:**
1871
1872 sourcename: the name of database
1873
1874 username: the username of the connection
1875
1876 password: the password of the connection
1877
1878 host: the host name of the connection
1879
1880 port: the host port of the connection
1881
1882 character: the character set of the connection
1883
1884 **Return:**
1885
1886 Succeed: string
1887
1888 Failed: multi
1889
1890 == **luaMySql.exec(string statement)** ==
1891
1892 **Function:** Execute the given SQL statement without returning the result set (add, delete, change)
1893
1894 **Parameter:**
1895
1896 statement: the given SQL statement
1897
1898 **Return:**
1899
1900 Succeed: status: returns the number of rows affected by SQL statement execution.
1901
1902 Failed: nil, errorString
1903
1904 == **luaMySql.execWithResult(string statement)** ==
1905
1906 **Function:** Execute the given SQL statement returning the result set (check)
1907
1908 **Parameter:**
1909
1910 statement: the given SQL statement
1911
1912 **Return:**
1913
1914 Succeed: table: returns the result set
1915
1916 Failed: nil, errorString
1917
1918 **For example:**
1919
1920 {{code language="LUA"}}
1921 mysql = require"mysqlclient"
1922
1923 function DataInitRight()
1924
1925 local dbName = "db_lua1"
1926
1927 local user = "root"
1928
1929 local pwd = "123456"
1930
1931 local host = "192.168.56.186"
1932
1933 local port = 3306
1934 local character = "UTF8"
1935
1936 mysql.init(dbName, user, pwd, host, port, character)
1937
1938 end
1939
1940 function ExecFunc()
1941
1942 status, errorString = mysql.exec("delete from tb_lua1 where mykey =
1943
1944 10;")
1945
1946 if nil == status then
1947
1948 print("ExecFunc() error:", errorString)
1949
1950 return -1
1951
1952 else
1953
1954 print("the number of rows affected by the command:", status)
1955
1956 end
1957
1958 return 0
1959
1960 end
1961
1962 function ExecWithResultFunc()
1963
1964 status, errorString = mysql.execWithResult("select * from tb_lua1;")
1965
1966 if nil == status then
1967
1968 print("ExecWithResultFunc() error:", errorString)
1969
1970 return -1
1971
1972 else
1973
1974 print("ExecWithResultFunc()
1975
1976 success
1977
1978 : status
1979
1980 type
1981
1982 =
1983
1984 ",
1985
1986 type(status))
1987
1988 print("ExecWithResultFunc() success : status len = ", #status)
1989
1990 local num = #status
1991
1992 local i = 1
1993
1994 if num > 0 then
1995
1996 for i = 1, num, 1 do
1997
1998 local var = string.format("select result[%d] :mykey = %d,
1999
2000 value = %s", i, status[i].mykey, status[i].value)
2001
2002 print(var)
2003
2004 end
2005
2006 end
2007
2008 print("---------------")
2009
2010 end
2011
2012 return 0
2013 end
2014
2015 function luaMysql_apiTest.main()
2016
2017 print("script running ...")
2018
2019 DataInitRight()
2020
2021 --use exec demo
2022
2023 if ExecFunc() < 0 then
2024
2025 return
2026
2027 end
2028
2029 --use execWithResult demo
2030
2031 if ExecWithResultFunc() < 0 then
2032
2033 return
2034
2035 end
2036
2037 print("script running success")
2038
2039 end
2040 {{/code}}
2041
2042 = **12 Message summary algorithm** =
2043
2044 == **hmac(string hash_func, string key, string message)** ==
2045
2046 **Function:** HMAC calculate
2047
2048 **Function name**
2049
2050 hash_func:
2051
2052 * [md5, sha1, sha224, sha256, sha384, sha512]
2053 * [sha512_224, sha512_256, sha3_224, sha3_256]
2054 * [sha3_384, sha3_512]
2055
2056 **Parameter:**
2057
2058 key: the key
2059
2060 message: message content
2061
2062 **Return:**
2063
2064 Succeed: string, calculation result
2065
2066 Failed: nil
2067
2068 **For example:**
2069
2070 {{code language="LUA"}}
2071 local sha = require"sha2"
2072
2073 function hmac_test.main()
2074
2075 local hmac = sha.hmac
2076
2077 print(hmac(sha.sha1,
2078
2079 "your key", "your message"))
2080
2081 end
2082 {{/code}}
2083
2084 == **sha(string message** ==
2085
2086 **Function:** SHA calculate
2087
2088 **Function name:**
2089
2090 sha:
2091
2092 * sha1, sha224, sha256, sha384, sha512]
2093 * [sha512_224, sha512_256, sha3_224, sha3_256]
2094 * [sha3_384, sha3_512]
2095
2096 **Parameter:**
2097
2098 key: the key
2099
2100 message: message content
2101
2102 **Return:**
2103
2104 Succeed: string, calculation result
2105
2106 Failed: nil
2107
2108 For example:
2109
2110 {{code language="LUA"}}
2111 local sha = require"sha2"
2112
2113 function sha_test.main()
2114
2115 local sha256 = sha.sha256
2116
2117 print(sha256("your message"))
2118
2119 end
2120 {{/code}}