Wiki source code of 01 Lua Functions

Last modified by Theodore Xu on 2023/10/26 10:51

Hide last authors
Stone Wu 5.7 1 = **1 Interface description** =
Leo Wei 1.1 2
Stone Wu 5.5 3 == **Data type definition** ==
Leo Wei 1.1 4
Leo 2.3 5 |=**Type**|=**Description**
6 |=nil|Null
Stone Wu 5.5 7 |=boolean|Boolean (the value is true or false)
8 |=number|Integer or floating point (signed or unsigned)
Leo 2.3 9 |=string|String
10 |=table|Table
11 |=function|Functions
12
Stone Wu 5.5 13 == **Built-in function library clipping** ==
Leo Wei 1.1 14
15 Full features supported: coroutine/debug/ math/ package/ string/ table/ utf8
16
Stone Wu 5.5 17 //Some features supported (available in []):** **os[clock/ date/ difftime/ time]//
Leo Wei 1.1 18
Stone Wu 5.5 19 //Not supported: io/ file//
Leo Wei 1.1 20
Stone Wu 5.5 21 == **Return value description** ==
Leo Wei 1.1 22
23 The function return type multi means multiple return values (at least 2), usually:
24
Stone Wu 5.5 25 //1st: nil//
Leo Wei 1.1 26
Stone Wu 5.5 27 //2nd: the error message//
Leo Wei 1.1 28
29 (((
Stone Wu 5.5 30 == **Function parameter description** ==
Leo Wei 1.1 31 )))
32
Stone Wu 5.5 33 Suppose a function prototype is defined:
Leo Wei 1.1 34
Stone Wu 5.5 35 {{code language="LUA"}}
36 student(string name, number age[, number class])
Leo Wei 1.1 37
Stone Wu 5.5 38 Function:
Leo Wei 1.1 39
40 Register a student
41
Stone Wu 5.5 42 Parameters:
Leo Wei 1.1 43
Stone Wu 5.5 44 name: student name
Leo Wei 1.1 45
Stone Wu 5.5 46 age: student age
Leo Wei 1.1 47
Stone Wu 5.5 48 [class=1]: Student class
Leo Wei 1.1 49
Stone Wu 5.5 50 Return:
Leo Wei 1.1 51
52 Succeed: true
53
54 Failed: multi
Stone Wu 5.5 55 {{/code}}
Leo Wei 1.1 56
Stone Wu 5.5 57 **Explanation**
Leo Wei 1.1 58
Stone Wu 5.5 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.**
Leo Wei 1.1 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
Stone Wu 5.5 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.
Leo Wei 1.1 94
Stone Wu 5.7 95 == **Modification of print function** ==
Leo Wei 1.1 96
Stone Wu 5.6 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.
Leo Wei 1.1 98
Stone Wu 5.6 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;
Leo Wei 1.1 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 (((
Stone Wu 5.7 108 = **2 Address operation** =
Leo Wei 1.1 109 )))
110
Leo 4.1 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)
Leo 3.2 114 )))|(((
Leo 4.1 115 0
Leo Wei 1.1 116 )))
Leo 4.1 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
Leo 3.2 128 | | | | |(((
Leo 4.1 129 78563412
130 )))|7
Leo 3.2 131 | | | | |(((
Leo 4.1 132 56781234
133 )))|8
Leo 3.2 134 | | | | |(((
Leo 4.1 135 65872143
136 )))|9
Leo 3.2 137 | | | | |(((
Leo 4.1 138 43218765
139 )))|10
Leo Wei 1.1 140
Stone Wu 5.8 141 Table 2-1
Leo Wei 1.1 142
Stone Wu 7.1 143 (% class="box infomessage" %)
Stone Wu 5.8 144 (((
145 **✎Note: **If HLword enters any other value, it will be treated as invalid.
146 )))
Leo Wei 1.1 147
Stone Wu 5.8 148 == **addr_getshort(string addr[, number type, number hlword])** ==
Leo Wei 1.1 149
Stone Wu 5.8 150 **Function:** Read 16-bit signed decimal address
Leo Wei 1.1 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 (((
Stone Wu 5.8 169 == **addr_setshort(string addr, number num[, number type, number hlword])** ==
Leo Wei 1.1 170 )))
171
Stone Wu 5.8 172 **Function:** Write 16-bit signed decimal address
Leo Wei 1.1 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 (((
Stone Wu 5.8 191 == **addr_getword(string addr[, number type, number hlword])** ==
Leo Wei 1.1 192 )))
193
Stone Wu 5.8 194 **Function:** Read 16-bit unsigned decimal address
Leo Wei 1.1 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 (((
Stone Wu 5.8 211 == **addr_setword(string addr, number num[, number type, number hlword])** ==
Leo Wei 1.1 212 )))
213
Stone Wu 5.8 214 **Function:**Write 16-bit unsigned decimal address
Leo Wei 1.1 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 (((
Stone Wu 5.8 233 == **addr_getint(string addr[, number type, number hlword])** ==
Leo Wei 1.1 234 )))
235
Stone Wu 5.8 236 **Function:** Read 32-bit signed decimal address
Leo Wei 1.1 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 (((
Stone Wu 5.8 253 == **addr_setint(string addr, number num[, number type, number hlword])** ==
Leo Wei 1.1 254 )))
255
Stone Wu 5.8 256 **Function:** Write 32-bit signed decimal address
Leo Wei 1.1 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 (((
Stone Wu 5.8 275 == **addr_getdword(string addr[, number type, number hlword])** ==
Leo Wei 1.1 276 )))
277
Stone Wu 5.8 278 **Function:** Read 32-bit unsigned decimal address
Leo Wei 1.1 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 (((
Stone Wu 5.8 295 == **addr_setdword(string addr, number num[, number type, number hlword])** ==
Leo Wei 1.1 296 )))
297
Stone Wu 5.8 298 **Function:** Write 32-bit unsigned decimal address
Leo Wei 1.1 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 (((
Stone Wu 5.8 317 == **addr_getbit(string addr[, number type])** ==
Leo Wei 1.1 318 )))
319
Stone Wu 5.8 320 **Function:** Read a bit of the register address
Leo Wei 1.1 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 (((
Stone Wu 5.8 337 == **addr_setbit(string addr, number num[, number type])** ==
Leo Wei 1.1 338 )))
339
Stone Wu 5.8 340 **Function:** Write a bit of the register address
Leo Wei 1.1 341
342 **Parameters:**
343
344 //addr//: address
345
346 //num//: value
347
Leo 3.2 348 [type = 0]not read through 1: read through
Leo Wei 1.1 349
350 [hlword = 0]  Don't convert,See Form 2.1
351
352 **Return:**
353
354 Succeed: true
355
356 Failed: multi
357
358 (((
Stone Wu 5.8 359 == **addr_getfloat(string addr[, number type, number hlword])** ==
Leo Wei 1.1 360 )))
361
Stone Wu 5.8 362 **Function:** Read 32-bit floating address
Leo Wei 1.1 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 (((
Stone Wu 5.8 379 == **addr_setfloat(string addr, number num[, number type, number hlword])** ==
Leo Wei 1.1 380 )))
381
Stone Wu 5.8 382 **Function:** Write 32-bit floating address
Leo Wei 1.1 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 (((
Stone Wu 5.8 401 == **addr_getdouble(string addr[, number type, number hlword])** ==
Leo Wei 1.1 402 )))
403
Stone Wu 5.8 404 **Function:** Read 64-bit floating address
Leo Wei 1.1 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 (((
Stone Wu 5.8 421 == **addr_setdouble(string addr, number num[, number type, number hlword])** ==
Leo Wei 1.1 422 )))
423
Stone Wu 5.8 424 **Function:** Write 64-bit floating address
Leo Wei 1.1 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 (((
Stone Wu 5.8 443 == **addr_getstring(string addr, number length[, number type, number hlbyte])** ==
Leo Wei 1.1 444 )))
445
Stone Wu 5.8 446 **Function:** Read the specified length string from address
Leo Wei 1.1 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 (((
Stone Wu 5.8 465 == **addr_setstring(string addr, string str[, number type, number hlbyte])** ==
Leo Wei 1.1 466 )))
467
Stone Wu 5.8 468 **Function:** Write the specified length string to address
Leo Wei 1.1 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 (((
Stone Wu 5.8 487 == **addr_bmov(string dst, string src, number length)** ==
Leo Wei 1.1 488 )))
489
Stone Wu 5.8 490 **Function:** Copy data from source address to destination address
Leo Wei 1.1 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 (((
Stone Wu 5.8 507 == **addr_fill(string addr, number num, number length)** ==
Leo Wei 1.1 508 )))
509
Stone Wu 5.8 510 **Function:** Write the same value to consecutive addresses
Leo Wei 1.1 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 (((
Stone Wu 5.8 527 == **addr_newnoaddr(string addr, number offset)** ==
Leo Wei 1.1 528 )))
529
Stone Wu 5.8 530 **Function:** Offset address value relative to //addr//
Leo Wei 1.1 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 (((
Stone Wu 5.8 545 == **addr_newstataddr(string addr, number offset)** ==
Leo Wei 1.1 546 )))
547
Stone Wu 5.8 548 **Function:** Offset station number relative to //addr //station number
Leo Wei 1.1 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
Stone Wu 5.8 562 == **addr_gethex64(string addr[, number type, number hlword])** ==
Leo Wei 1.1 563
Stone Wu 5.8 564 **Function:** Read 64-bit hexadecimal numbers
Leo Wei 1.1 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
Stone Wu 5.8 580 == **addr_sethex64(string addr, number num[, number type, number hlword])** ==
Leo Wei 1.1 581
Stone Wu 5.8 582 **Function:** Write 64-bit hexadecimal addresses
Leo Wei 1.1 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
Stone Wu 5.8 604 **Serial port name and mode**
Leo Wei 1.1 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
Stone Wu 5.8 608 Attempting to use a script to open a serial port in an unsupported mode will result in an error directly, as below.
Leo Wei 1.1 609
610 |(((
Stone Wu 8.1 611 {{code language="LUA"}}
Leo Wei 1.1 612 local setup = {
613
614 name = "COM2",
615
Stone Wu 8.1 616 mode = 422, -- COM2 does not support RS422
Leo Wei 1.1 617
618 ...
619
620 }
621
622 serial.open(setup)
Stone Wu 8.1 623 {{/code}}
Leo Wei 1.1 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 (((
Stone Wu 5.9 632 == **serial.open(table setup)** ==
Leo Wei 1.1 633 )))
634
Stone Wu 5.9 635 **Function:** Enable one serial port
Leo Wei 1.1 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 (((
Stone Wu 5.9 670 == **serial.close(serial obj)** ==
Leo Wei 1.1 671 )))
672
Stone Wu 5.9 673 **Function:** Disable the serial port
Leo Wei 1.1 674
Stone Wu 5.9 675 **Parameters: **//Obj //is the object returned by serial.open
Leo Wei 1.1 676
677 **Return:**
678
679 Succeed: true
680
681 Failed: multi
682
683 (((
Stone Wu 5.9 684 == **serial:read(number bytes[, number timeout])** ==
Leo Wei 1.1 685 )))
686
Stone Wu 5.9 687 **Function:** Read the specified byte length serial port data
Leo Wei 1.1 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 (((
Stone Wu 5.9 702 == **serial:write(string data)** ==
Leo Wei 1.1 703 )))
704
Stone Wu 5.9 705 **Function:** Write the specified byte length to serial port data
Leo Wei 1.1 706
Stone Wu 5.9 707 **Parameters: **
Leo Wei 1.1 708
709 //data//: serial port data
710
711 **Return:**
712
713 Succeed: true
714
715 Failed: multi
716
717 (((
Stone Wu 5.9 718 == **serial:flush([number flag])** ==
Leo Wei 1.1 719 )))
720
Stone Wu 5.9 721 **Function:** Clear the serial port buffer
Leo Wei 1.1 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 (((
Stone Wu 5.9 734 == **serial:close()** ==
Leo Wei 1.1 735 )))
736
Stone Wu 5.9 737 **Function:** Close the serial port object
Leo Wei 1.1 738
Stone Wu 5.9 739 **Parameters:** None
Leo Wei 1.1 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
Stone Wu 5.10 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.
Leo Wei 1.1 760
761 **Retain flag:**
762
763 0: not reserved;
764
765 1: reserved
766
767 (((
Stone Wu 5.10 768 == **mqtt.create(string serverurl, string clientid)** ==
Leo Wei 1.1 769 )))
770
Stone Wu 5.10 771 **Function:** Create an MQTT object
Leo Wei 1.1 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 (((
Stone Wu 5.10 794 == **mqtt.close(mqtt obj)** ==
Leo Wei 1.1 795 )))
796
Stone Wu 5.10 797 **Function:** Close the specified MQTT object (if the connected server will be disconnected automatically)
Leo Wei 1.1 798
Stone Wu 5.10 799 **Parameters: **//Obj //is the objeced returned by mqtt.create
Leo Wei 1.1 800
801 **Return:**
802
803 Succeed: true
804
805 Failed: multi
806
807 (((
Stone Wu 5.10 808 == **mqtt:connect(table conn[, table lwt, table cart])** ==
Leo Wei 1.1 809 )))
810
Stone Wu 5.10 811 **Function:**Establish a connection to the server
Leo Wei 1.1 812
813 **Parameters:**
814
815 //conn //is a Lua table and needs to contain the following fields
816
Stone Wu 5.10 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:
Leo Wei 1.1 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
Stone Wu 5.10 834 * //string lwt.topic//, topic
835 * //string lwt.message//, message
836 * //number [lwt.qos=0]//, qos value
837 * //number [lwt.retain=0]//, retain flag
Leo Wei 1.1 838
839 **Return:**
840
841 Succeed: true
842
843 Failed: multi
844
845 (((
Stone Wu 5.10 846 == **mqtt:disconnect([number timeout])** ==
Leo Wei 1.1 847 )))
848
Stone Wu 5.10 849 **Function:** Disconnect from the MQTT server
Leo Wei 1.1 850
Stone Wu 5.10 851 **Parameters: **//[timeout=10000] //Disconnect waiting timeout, in milliseconds
Leo Wei 1.1 852
853 **Return:**
854
855 Succeed: true
856
857 Failed: multi
858
859 (((
Stone Wu 5.10 860 == **mqtt:isconnected()** ==
Leo Wei 1.1 861 )))
862
Stone Wu 5.10 863 **Function:** Test whether or not a client is currently connected to the MQTT server
Leo Wei 1.1 864
Stone Wu 5.10 865 **Parameters:** None
Leo Wei 1.1 866
867 **Return:**
868
869 Succeed: true ~-~-Connected
870
871 Failed: false ~-~- Unconnected and other unknowns
872
873 (((
Stone Wu 5.10 874 == **mqtt:subscribe(string topic, number qos)** ==
Leo Wei 1.1 875 )))
876
Stone Wu 5.10 877 **Function: **Subscribe to the topic (before the subscription, the user must first call the connect method to connect to the server)
Leo Wei 1.1 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 (((
Stone Wu 5.10 892 == **mqtt:unsubscribe(string topic)** ==
Leo Wei 1.1 893 )))
894
Stone Wu 5.10 895 **Function:** Unsubscribe topic
Leo Wei 1.1 896
897 **Parameters:**
898
899 //topic//, topic name
900
901 **Return:**
902
903 Succeed: true
904
905 Failed: multi
906
907 (((
Stone Wu 5.10 908 == **mqtt:publish(string topic, string message, number qos, number retain[, number timeout])** ==
Leo Wei 1.1 909 )))
910
Stone Wu 5.10 911 **Function:** Publish message
Leo Wei 1.1 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 (((
Stone Wu 5.10 932 == **mqtt:close()** ==
Leo Wei 1.1 933 )))
934
Stone Wu 5.10 935 **Function:** Close the mqtt object (the connection to the server will be automatically disconnected)
Leo Wei 1.1 936
Stone Wu 5.10 937 **Parameters:** None
Leo Wei 1.1 938
939 **Return:**
940
941 Succeed: true
942
943 Failed: multi
944
945 (((
Stone Wu 5.10 946 == **mqtt:on(string method, function callback)** ==
Leo Wei 1.1 947 )))
948
Stone Wu 5.10 949 **Function:** Register event callback function
Leo Wei 1.1 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
Stone Wu 5.11 963 * //Topic//, topic name
964 * //Message//, content
Leo Wei 1.1 965
Stone Wu 5.11 966 **2."arrived" is published by publish, this function will be called after the publication arrives**
Leo Wei 1.1 967
968 //Callback// prototype~:// function ()//
969
Stone Wu 5.11 970 Parameter: None
Leo Wei 1.1 971
Stone Wu 5.11 972 **3.This function will be called after the "offline" connection is lost**
Leo Wei 1.1 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 (((
Stone Wu 5.11 987 == **mqtt:setup_cfg()** ==
Leo Wei 1.1 988 )))
989
Stone Wu 5.11 990 **Function:** Cloud mode interface, to obtain MQTT information configured by the cloud platform
Leo Wei 1.1 991
Stone Wu 5.11 992 **Parameters:** None
Leo Wei 1.1 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 (((
Stone Wu 5.11 1011 == **json.encode( lua_object )** ==
Leo Wei 1.1 1012 )))
1013
Stone Wu 5.11 1014 **Function: **Convert lua data type to json string
Leo Wei 1.1 1015
Stone Wu 5.11 1016 **Parameters: **Lua data type (including boolean, number, string, table)
Leo Wei 1.1 1017
Stone Wu 5.11 1018 **Return:** Json format string
Leo Wei 1.1 1019
1020 (((
Stone Wu 5.11 1021 == **json.decode(string json_string)** ==
Leo Wei 1.1 1022 )))
1023
Stone Wu 5.11 1024 **Function:** Convert json string to lua data type
Leo Wei 1.1 1025
Stone Wu 5.11 1026 **Parameters: **//json_string//, string of json data structure
Leo Wei 1.1 1027
Stone Wu 5.11 1028 **Return: **Lua data type
Leo Wei 1.1 1029
1030 (((
Stone Wu 5.11 1031 == **json.null** ==
Leo Wei 1.1 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
Stone Wu 5.11 1038 **Parameters:** None
Leo Wei 1.1 1039
Stone Wu 5.11 1040 **Return: **None
Leo Wei 1.1 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 (((
Stone Wu 5.11 1047 == **bns_get_alldata()** ==
Leo Wei 1.1 1048 )))
1049
Stone Wu 5.11 1050 **Function:** Obtain all monitoring points (point table) data configured by the end user
Leo Wei 1.1 1051
Stone Wu 5.11 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
Leo Wei 1.1 1053
Stone Wu 5.11 1054 **Parameters:** None
Leo Wei 1.1 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
Stone Wu 8.1 1068 **For example:**
Leo Wei 1.1 1069
Stone Wu 8.1 1070 {{code language="LUA"}}
Leo Wei 1.1 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
Stone Wu 8.1 1083 Failed: table empty table
1084 {{/code}}
Leo Wei 1.1 1085
1086 (((
Stone Wu 5.11 1087 == **bns_get_config(string from)** ==
Leo Wei 1.1 1088 )))
1089
Stone Wu 5.11 1090 **Function:** Obtain custom configuration parameters with the specified from type
Leo Wei 1.1 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 (((
Stone Wu 5.11 1109 == **bns_get_data(string name, string data)** ==
Leo Wei 1.1 1110 )))
1111
Stone Wu 5.11 1112 **Function:**write data to the name of the monitoring point
Leo Wei 1.1 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 (((
Stone Wu 5.11 1127 == **bns_get_data(string name)** ==
Leo Wei 1.1 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 (((
Stone Wu 5.11 1145 == **bns_get_datadesc()** ==
Leo Wei 1.1 1146 )))
1147
Stone Wu 5.11 1148 **Function: **Obtain all configured communication ports and monitoring point information
Leo Wei 1.1 1149
Stone Wu 5.11 1150 **Parameters:** None
Leo Wei 1.1 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
Stone Wu 8.1 1164 **For example:**
Leo Wei 1.1 1165
Stone Wu 8.1 1166 {{code language="LUA"}}
1167 {
Leo Wei 1.1 1168
Stone Wu 8.1 1169 [1]={--The first communication port
Leo Wei 1.1 1170
Stone Wu 8.1 1171 [1]={--monitoring point array of the first communication port
1172
Leo Wei 1.1 1173 [1]={[1]=11,[2]='data1',[3]=3,[4]=2},
1174
1175 [2]={[1]=12,[2]='data2',[3]=3,[4]=2},
1176
1177 ...
1178
Stone Wu 8.1 1179 [n]={[1]=xx,[2]='datan',[3]=x,[4]=x},--n monitoring points
Leo Wei 1.1 1180
1181 },
1182
Stone Wu 8.1 1183 [2]=14, --ID
Leo Wei 1.1 1184
Stone Wu 8.1 1185 [3]='Modbus TCP' --n monitoring points
Leo Wei 1.1 1186
1187 },
1188
Stone Wu 8.1 1189 [2]={--The second communication port
Leo Wei 1.1 1190
Stone Wu 8.1 1191 [1]={},--The monitoring point of the second communication port is not configured and is empty
Leo Wei 1.1 1192
Stone Wu 8.1 1193 [2]=15, --ID
Leo Wei 1.1 1194
Stone Wu 8.1 1195 [3]='WECON' --communication protocol name
Leo Wei 1.1 1196
1197 },
1198
1199 ...n communication ports and so on
1200
1201 }
Stone Wu 8.1 1202 {{/code}}
Leo Wei 1.1 1203
1204 Failed~:// table// empty table
1205
1206 (((
Stone Wu 5.11 1207 == **bns_get_machineinfo()** ==
Leo Wei 1.1 1208 )))
1209
Stone Wu 5.11 1210 **Function:** get machine information
Leo Wei 1.1 1211
Stone Wu 5.11 1212 **Parameters:** None
Leo Wei 1.1 1213
1214 **Return:**
1215
1216 Succeed: 3 string type results (model, machine code, software version)
1217
1218 Failed: nil
1219
1220 (((
Stone Wu 5.11 1221 == **bns_get_groupdata(string name)** ==
Leo Wei 1.1 1222 )))
1223
Stone Wu 5.11 1224 **Function:** Get all monitoring point data under the specified group name
Leo Wei 1.1 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 (((
Stone Wu 5.11 1237 == **bns_get_groupdesc()** ==
Leo Wei 1.1 1238 )))
1239
Stone Wu 5.11 1240 **Function:** Get all group information
Leo Wei 1.1 1241
Stone Wu 5.11 1242 **Parameters:** None
Leo Wei 1.1 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 (((
Stone Wu 5.11 1257 == **bns_get_onecache(string msg)** ==
Leo Wei 1.1 1258 )))
1259
Stone Wu 5.11 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.
Leo Wei 1.1 1261
Stone Wu 5.11 1262 **Parameters: **//msg// String
Leo Wei 1.1 1263
1264 **Return:**
1265
1266 Succeed: true
1267
1268 Failed: nil
1269
1270 (((
Stone Wu 5.11 1271 == **bns_get_allcache()** ==
Leo Wei 1.1 1272 )))
1273
Stone Wu 5.11 1274 **Function:** Get all the cached content (once the internal cache file will be emptied)
Leo Wei 1.1 1275
Stone Wu 5.11 1276 **Parameters:** None
Leo Wei 1.1 1277
1278 **Return:**
1279
1280 Succeed: //table// one-dimensional array
1281
Stone Wu 8.1 1282 **For example:**
Leo Wei 1.1 1283
Stone Wu 8.1 1284 {{code language="LUA"}}
Leo Wei 1.1 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 }
Stone Wu 8.1 1296 {{/code}}
Leo Wei 1.1 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 (((
Stone Wu 5.11 1307 == **http request** ==
Leo Wei 1.1 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
Stone Wu 5.12 1312 == **https request** ==
Stone Wu 5.11 1313
Stone Wu 8.1 1314 **For example:**
Stone Wu 5.11 1315
Stone Wu 5.12 1316 {{code language="LUA"}}
Stone Wu 5.11 1317 local json = require("json")
1318
1319 local https = require("https")
1320
1321 functions https_demo.main()
1322
Stone Wu 5.12 1323 local url = "https://XXXXXXXXXXXXXXXXXXXXXXXXXX"
Stone Wu 5.11 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
Stone Wu 5.12 1356 {{/code}}
Stone Wu 5.11 1357
Leo Wei 1.1 1358 (((
Theodore Xu 21.1 1359
Leo Wei 1.1 1360 )))
1361
Stone Wu 5.12 1362 (((
Theodore Xu 21.1 1363 = **8 General Functions** =
Stone Wu 5.13 1364 )))
Leo Wei 1.1 1365
Stone Wu 5.13 1366 (((
Stone Wu 5.17 1367 == **send_sms_ira(string number, string message)** ==
Leo Wei 1.1 1368 )))
1369
Stone Wu 5.17 1370 **Function:** Use IRA character set to send English text messages
Leo Wei 1.1 1371
1372 **Parameters:**
1373
1374 //number: //number (up to 32 characters, the excess will be discarded)
1375
1376 //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)
1377
1378 **Return:**
1379
1380 Succeed: SMS corresponding id, used to get whether the SMS was sent successfully
1381
1382 Failed: multi
1383
1384 (((
Stone Wu 8.1 1385 == **send_sms_ucs2(string number, string message)** ==
Leo Wei 1.1 1386 )))
1387
1388 **Function:**
1389
1390 Use UCS2 character set to send SMS in Chinese and other languages, such as Korean, Japanese, etc.
1391
1392 **Parameters:**
1393
1394 //number: //number (up to 32 characters, the excess will be discarded)
1395
1396 //message~:// SMS content (Only 70 Chinese characters at most, the part exceeding the length will be discarded)
1397
1398 **Return:**
1399
1400 Succeed: SMS corresponding id, used to get whether the SMS was sent successfully
1401
1402 Failed: multi
1403
1404 (((
Stone Wu 5.17 1405 == **sms_get_state(number id)** ==
Leo Wei 1.1 1406 )))
1407
Stone Wu 5.17 1408 **Function:** Get the status of the SMS
Leo Wei 1.1 1409
1410 **parameter:**
1411
1412 //id~:// SMS corresponding id
1413
1414 **Return:**
1415
1416 Succeed: SMS status (1: not sent, 2: sent successfully, 3: failed to send)
1417
1418 Failed: multi
1419
1420 (((
Stone Wu 5.17 1421 == **jwt_encode(table head, table payload, string aud, number iat, number exp, string key, int jwttype)** ==
Leo Wei 1.1 1422 )))
1423
Stone Wu 5.18 1424 **Function:** Convert data to JWT format
Leo Wei 1.1 1425
1426 **parameter:**
1427
1428 //aud: //project name
1429
1430 //iat: //The valid period start timestamp of the JWT data format
1431
1432 //exp~:// the expiration time stamp of the JWT data format
1433
1434 //head~:// head information table
1435
1436 key: key in JSON format
1437
1438 value: value in JSON format
1439
1440 type:value type, 0:string,1:integer,2:number,3:boolean
1441
1442 {
1443
1444 {key="test1",value="test1",type="0"}
1445
1446 }
1447
1448 payload: payload information table
1449
1450 The format is consistent with the header information table
1451
1452 {
1453
1454 {key="test",value="test",type="0"}
1455
1456 }
1457
1458 //jwttype: //encryption type
1459
1460 0:RS256 1:RS384 2:RS512
1461
1462 3: PS256 4: PS384 5: PS512
1463
1464 6:HS256 7:HS384 8:HS512
1465
1466 9:ES256 10:ES384 11:ES512
1467
1468 //key~:// the private key required for encryption
1469
Stone Wu 5.18 1470 **For example:**
Leo Wei 1.1 1471
Stone Wu 5.18 1472 {{code language="LUA"}}
Leo Wei 1.1 1473 function jwt.main()
1474
Stone Wu 5.18 1475 local PRIVATE_KEY = [[-- Please enter the secret key--]]
Leo Wei 1.1 1476
1477 local JWTType=0
1478
Stone Wu 5.18 1479 local payload = {{key="test1",value="test1",type="0"},
Leo Wei 1.1 1480
1481 {key="test",value="123122131",type="1"}}
1482
Stone Wu 5.18 1483 local head = {{ key="name",value="data",type="0"},
Leo Wei 1.1 1484
1485 {key="test2",value="test2",type="0"}}
1486
1487 local aud = "project"
1488
1489 local iat = 123122131
1490
1491 local exp1 = 123122331
1492
1493 local en = jwt_encode(head,payload,aud,iat,exp1,PRIVATE_KEY,JWTType);
1494
1495 print(en)
1496
1497 End
Stone Wu 5.18 1498 {{/code}}
Leo Wei 1.1 1499
1500 (((
Stone Wu 5.18 1501 == **convertohex(number type, number value)** ==
Leo Wei 1.1 1502 )))
1503
Stone Wu 5.18 1504 **Function:** Convert data into hexadecimal data
Leo Wei 1.1 1505
1506 **parameter:**
1507
1508 //type~:// incoming data type 0:word 1:dword 2:float
1509
1510 //value~:// the data to be converted
1511
1512 **Return:**
1513
1514 Succeed: the converted hexadecimal data
1515
1516 Failed: multi
1517
Stone Wu 5.18 1518 == **crc.init(table prarm)** ==
1519
1520 **Function:** Initialize the CRC
1521
1522 **Parameters:**
1523
1524 prarm is a Lua table and needs to contain the following fields.
1525
1526 * 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.
1527 * number prarm.width: the width, i.e. the number of CRC bits.
Stone Wu 5.19 1528 * 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.
1529 * number [prarm.init]: the initialization preset value of the register (crc) at the beginning of the algorithm in hexadecimal.
Stone Wu 5.20 1530 * number [prarm.xorout]: the final CRC value obtained after heterodyning the calculation result with this parameter.
1531 * number [prarm.refin]: whether each byte of the data to be measured is inverted by bit, true or false.
1532 * number [prarm.refout]: after the calculation or before the heterodyning output, whether the whole data is inverted by bit, true or false.
Stone Wu 5.18 1533
Stone Wu 8.1 1534 **Return:**
Stone Wu 5.20 1535
1536 Success: crc object
1537
1538 Failure: multi, error code
1539
Leo Wei 1.1 1540 (((
Stone Wu 5.28 1541 |=Parameter model name|=poly|=init|=xorout|=refin|=refout
1542 |crc8|0x07|0x00|0x00|false|false
1543 |crc8_cdma2000|0x9B|0xFF|0x00|false|false
1544 |crc8_darc|0x39|0x00|0x00|true|true
1545 |crc8_dvb_s2|0xD5|0x00|0x00|false|false
1546 |crc8_ebu|0x1D|0xFF|0x00|true|true
1547 |crc8_i_code|0x1D|0xFD|0x00|false|false
1548 |crc8_itu|0x07|0x00|0x55|false|false
1549 |crc8_maxim|0x31|0x00|0x00|true|true
1550 |crc8_rohc|0x07|0xFF|0x00|true|true
1551 |crc8_wcdma|0x9B|0x00|0x00|true|true
1552 |crc8_sae_j1850|0x1D|0xFF|0xFF|false|false
1553 |crc8_opensafety|0x2F|0x00|0x00|false|false
1554 |crc16_tms37157|0x1021|0x3791|0x0000|true|true
1555 |crc16_a|0x1021|0x6363|0x0000|true|true
1556 |crc16_riello|0x1021|0x554D|0x0000|true|true
1557 |crc16_ccitt_false|0x1021|0xFFFF|0x0000|false|false
1558 |crc16_arc|0x8005|0x0000|0x0000|true|true
1559 |crc16_arc_ccitt|0x1021|0x1D0F|0x0000|false|false
1560 |crc16_buypass|0x8005|0x0000|0x0000|false|false
1561 |crc16_cdma2000|0xC867|0xFFFF|0x0000|false|false
1562 |crc16_dds110|0x8005|0x800D|0x0000|false|false
1563 |crc16_dect_r|0x0589|0x0000|0x0001|false|false
1564 |crc16_dect_x|0x0589|0x0000|0x0000|false|false
1565 |crc16_dnp|0x3D65|0x0000|0xFFFF|true|true
1566 |crc16_en_13757|0x3D65|0x0000|0xFFFF|false|false
1567 |crc16_genibus|0x1021|0xFFFF|0xFFFF|false|false
1568 |crc16_maxim|0x8005|0x0000|0xFFFF|true|true
1569 |crc16_mcrf4xx|0x1021|0xFFFF|0x0000|true|true
1570 |crc16_t10_dif|0x8BB7|0x0000|0x0000|false|false
1571 |crc16_teledisk|0xA097|0x0000|0x0000|false|false
1572 |crc16_usb|0x8005|0xFFFF|0xFFFF|true|true
1573 |crc16_kermit|0x1021|0x0000|0x0000|true|true
Leo Wei 1.1 1574
Stone Wu 5.28 1575 (% class="wikigeneratedid" %)
1576 Table 9-1
Leo Wei 1.1 1577
Stone Wu 5.28 1578 == **crc:calc(string crcValue)** ==
Leo Wei 1.1 1579
Stone Wu 5.28 1580 **Function:** Calculate CRC result
Leo Wei 1.1 1581
Stone Wu 5.29 1582 **Parameter:**
Leo Wei 1.1 1583
Stone Wu 5.28 1584 crcValue: the value to be calculated
Leo Wei 1.1 1585
1586 **Return:**
1587
Stone Wu 5.29 1588 Succeed: calculated result
Leo Wei 1.1 1589
Stone Wu 5.29 1590 Failed: multi, error code
Leo Wei 1.1 1591 )))
1592
Stone Wu 8.1 1593 **For example:**
Stone Wu 5.29 1594
1595 {{code language="LUA"}}
1596 function crcTest.main()
1597
1598 local param = {
1599
1600 name = '',
1601
1602 width = 64,
1603
1604 poly = 0x42F0E1EBA9EA3693,
1605
1606 init = 0xFFFFFFFFFFFFFFFF,
1607
1608 xorout = 0xFFFFFFFFFFFFFFFF,
1609
1610 refin = 1,
1611
1612 refout = 1
1613
1614 }
1615
1616 crc64,err = crc.init(param)
1617
1618 if not crc64 then
1619
1620 print("Crc init failed:", err)
1621 else
1622
1623 crcvalue = crc64:calc("123456789")
1624
1625 print(string.format("crc64 calc :0X%16X", crcvalue))
1626
1627 end
1628
1629 end
1630 {{/code}}
1631
Theodore Xu 21.1 1632 = **9 Special function for V-NET** =
Stone Wu 5.29 1633
Stone Wu 5.31 1634 == **normal_get_alldata()** ==
Stone Wu 5.29 1635
1636 **Function: **Obtain the data of all the monitoring points
1637
1638 **Parameter: None**
1639
1640 **Return:**
1641
1642 Succeed: table two-dimensional arrays, as follows:
1643
Stone Wu 5.30 1644 * Each item is a monitoring point and contains 4 attributes:
1645 ** 1: ID
1646 ** 2: status
1647 ** 3: tag name
1648 ** 4: value
1649 * Status contains 3 enumerated values
1650 ** 0: offline
1651 ** 1: online
1652 ** 2: timeout
1653 * Customization returns an empty table if there is no configuration, otherwise returns "field name/field content"
Stone Wu 5.29 1654
Stone Wu 8.1 1655 **For example:**
Stone Wu 5.30 1656
Stone Wu 8.1 1657 {{code language="LUA"}}
Stone Wu 5.30 1658 {
1659
1660 [1]= {[1]=1234, [2]=1, [3]='temp', [4]='23.5'},
1661
1662 [2]= {[1]=1235, [2]=1, [3]='humi', [4]='67'},
1663
1664 ...
1665
1666 [n]= {[1]=xxxx, [2]=x, [3]='xxxx', [4]='xx.x'},
1667
1668 }
1669
1670 Failed: table, empty table
Stone Wu 8.1 1671 {{/code}}
Stone Wu 5.31 1672
1673 == **normal_setdata_byname(string name, string data)** ==
1674
1675 **Function:** Write data to the monitoring point name
1676
1677 **Parameter:**
1678
Stone Wu 5.32 1679 name: the name of monitoring point
Stone Wu 5.31 1680
Stone Wu 5.32 1681 data: the data to be written
1682
Stone Wu 5.31 1683 **Return:**
1684
Stone Wu 5.32 1685 Succeed: string: The value of the monitor point before it is written
Stone Wu 5.31 1686
Stone Wu 5.39 1687 Failed: nil
Stone Wu 5.32 1688
1689 == **normal_getdata_byname(string name)** ==
1690
1691 **Function:** Read the data of the monitoring point name
1692
1693 **Parameter:**
1694
1695 name: the name of monitoring point
1696
1697 **Return:**
1698
1699 Succeed: string
1700
Stone Wu 5.39 1701 Failed: nil
Stone Wu 5.32 1702
Theodore Xu 21.1 1703 = **10 Message summary algorithm** =
Stone Wu 5.36 1704
1705 == **hmac(string hash_func, string key, string message)** ==
1706
Stone Wu 5.39 1707 **Function:** HMAC calculate
Stone Wu 5.36 1708
Stone Wu 5.39 1709 **Function name**
1710
Stone Wu 5.40 1711 hash_func:
Stone Wu 5.39 1712
1713 * [md5, sha1, sha224, sha256, sha384, sha512]
1714 * [sha512_224, sha512_256, sha3_224, sha3_256]
1715 * [sha3_384, sha3_512]
1716
Stone Wu 5.35 1717 **Parameter:**
1718
Stone Wu 5.39 1719 key: the key
Stone Wu 5.35 1720
Stone Wu 5.39 1721 message: message content
1722
Stone Wu 5.35 1723 **Return:**
1724
Stone Wu 5.39 1725 Succeed: string, calculation result
Stone Wu 5.35 1726
Stone Wu 5.39 1727 Failed: nil
1728
Stone Wu 8.1 1729 **For example:**
Stone Wu 5.39 1730
1731 {{code language="LUA"}}
1732 local sha = require"sha2"
1733
1734 function hmac_test.main()
1735
1736 local hmac = sha.hmac
1737
1738 print(hmac(sha.sha1,
1739
1740 "your key", "your message"))
1741
1742 end
1743 {{/code}}
1744
1745 == **sha(string message** ==
1746
1747 **Function:** SHA calculate
1748
Stone Wu 5.40 1749 **Function name:**
Stone Wu 5.39 1750
Stone Wu 5.40 1751 sha:
Stone Wu 5.39 1752
Stone Wu 5.40 1753 * sha1, sha224, sha256, sha384, sha512]
Stone Wu 5.39 1754 * [sha512_224, sha512_256, sha3_224, sha3_256]
1755 * [sha3_384, sha3_512]
1756
Stone Wu 5.40 1757 **Parameter:**
1758
Stone Wu 5.39 1759 key: the key
1760
1761 message: message content
1762
1763 **Return:**
1764
1765 Succeed: string, calculation result
1766
1767 Failed: nil
Stone Wu 5.40 1768
1769 For example:
1770
1771 {{code language="LUA"}}
1772 local sha = require"sha2"
1773
1774 function sha_test.main()
1775
1776 local sha256 = sha.sha256
1777
1778 print(sha256("your message"))
1779
1780 end
1781 {{/code}}