Changes for page 01 Lua Functions
Last modified by Theodore Xu on 2023/10/26 10:51
Summary
-
Page properties (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -140,7 +140,7 @@ 140 140 141 141 Table 2-1 142 142 143 -(% class="box errormessage" %)143 +(% class="box infomessage" %) 144 144 ((( 145 145 **✎Note: **If HLword enters any other value, it will be treated as invalid. 146 146 ))) ... ... @@ -608,11 +608,12 @@ 608 608 Attempting to use a script to open a serial port in an unsupported mode will result in an error directly, as below. 609 609 610 610 |((( 611 +{{code language="LUA"}} 611 611 local setup = { 612 612 613 613 name = "COM2", 614 614 615 -mode = 422, ~-~- COM2 does not support RS422616 +mode = 422, -- COM2 does not support RS422 616 616 617 617 ... 618 618 ... ... @@ -619,6 +619,7 @@ 619 619 } 620 620 621 621 serial.open(setup) 623 +{{/code}} 622 622 ))) 623 623 624 624 **Data bit:** ... ... @@ -752,12 +752,10 @@ 752 752 753 753 **QoS value:** 754 754 755 -0: Only push messages once, messages may be lost or duplicated. It can be used for environmental sensor data, it doesn't matter if lose a record, because there will be a second push message soon. This method is mainly used for normal APP push, but if the user smart device is not connected when the message is pushed, the message will be discarded, and the smart device will not be received when it is networked again. 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. 756 756 757 -1: The message is delivered at least once, but the message may be delivered repeatedly. 758 - 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 761 **Retain flag:** 762 762 763 763 0: not reserved; ... ... @@ -765,13 +765,11 @@ 765 765 1: reserved 766 766 767 767 ((( 768 -== ** 4.1mqtt.create(string serverurl, string clientid)** ==768 +== **mqtt.create(string serverurl, string clientid)** == 769 769 ))) 770 770 771 -**Function:** 771 +**Function:** Create an MQTT object 772 772 773 -Create an MQTT object 774 - 775 775 **Parameters:** 776 776 777 777 //serverurl //Server url ... ... @@ -793,17 +793,13 @@ 793 793 Failed: multi 794 794 795 795 ((( 796 -== ** 4.2mqtt.close(mqtt obj)** ==794 +== **mqtt.close(mqtt obj)** == 797 797 ))) 798 798 799 -**Function:** 797 +**Function:** Close the specified MQTT object (if the connected server will be disconnected automatically) 800 800 801 - ClosehepecifiedMQTT object(iftheconnectedserverwill be disconnectedautomatically)799 +**Parameters: **//Obj //is the objeced returned by mqtt.create 802 802 803 -**Parameters:** 804 - 805 -//Obj //is the objeced returned by mqtt.create 806 - 807 807 **Return:** 808 808 809 809 Succeed: true ... ... @@ -811,32 +811,25 @@ 811 811 Failed: multi 812 812 813 813 ((( 814 -== ** 4.3mqtt:connect(table conn[, table lwt, table cart])** ==808 +== **mqtt:connect(table conn[, table lwt, table cart])** == 815 815 ))) 816 816 817 -**Function:** 811 +**Function:**Establish a connection to the server 818 818 819 -Establish a connection to the server 820 - 821 821 **Parameters:** 822 822 823 823 //conn //is a Lua table and needs to contain the following fields 824 824 825 -//string conn.username//, user name 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 826 827 -//string conn.password//, password 828 - 829 -//number [conn.netway=0]//, networking method, if set error number will use Ethernet method 830 - 831 -* 0: Ethernet 832 -* 1: WIFI 833 -* 2: 4G 834 -* 3: 2G 835 - 836 -//number [conn.keepalive=60]//, keep connected heartbeat interval, in seconds 837 - 838 -//number [conn.cleansession=1]//, empty the session as described below: 839 - 840 840 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: 841 841 842 842 * 1 (Empty): If a session exists and is 1, the previous session messages on the client and server are emptied. ... ... @@ -844,14 +844,11 @@ 844 844 845 845 //lwt// (Last Will and Testament) is a Lua table and needs to contain the following fields 846 846 847 -//string lwt.topic//, topic 834 +* //string lwt.topic//, topic 835 +* //string lwt.message//, message 836 +* //number [lwt.qos=0]//, qos value 837 +* //number [lwt.retain=0]//, retain flag 848 848 849 -//string lwt.message//, message 850 - 851 -//number [lwt.qos=0]//, qos value 852 - 853 -//number [lwt.retain=0]//, retain flag 854 - 855 855 **Return:** 856 856 857 857 Succeed: true ... ... @@ -859,17 +859,13 @@ 859 859 Failed: multi 860 860 861 861 ((( 862 -== ** 4.4mqtt:disconnect([number timeout])** ==846 +== **mqtt:disconnect([number timeout])** == 863 863 ))) 864 864 865 -**Function:** 849 +**Function:** Disconnect from the MQTT server 866 866 867 -Disconnect fromtheMQTTserver851 +**Parameters: **//[timeout=10000] //Disconnect waiting timeout, in milliseconds 868 868 869 -**Parameters:** 870 - 871 -//[timeout=10000] //Disconnect waiting timeout, in milliseconds 872 - 873 873 **Return:** 874 874 875 875 Succeed: true ... ... @@ -877,17 +877,13 @@ 877 877 Failed: multi 878 878 879 879 ((( 880 -== ** 4.5mqtt:isconnected()** ==860 +== **mqtt:isconnected()** == 881 881 ))) 882 882 883 -**Function:** 863 +**Function:** Test whether or not a client is currently connected to the MQTT server 884 884 885 - Test whetheror notaclientis currently connectedto the MQTT server865 +**Parameters:** None 886 886 887 -**Parameters:** 888 - 889 -None 890 - 891 891 **Return:** 892 892 893 893 Succeed: true ~-~-Connected ... ... @@ -895,13 +895,11 @@ 895 895 Failed: false ~-~- Unconnected and other unknowns 896 896 897 897 ((( 898 -== ** 4.6mqtt:subscribe(string topic, number qos)** ==874 +== **mqtt:subscribe(string topic, number qos)** == 899 899 ))) 900 900 901 -**Function:** 877 +**Function: **Subscribe to the topic (before the subscription, the user must first call the connect method to connect to the server) 902 902 903 -Subscribe to the topic (before the subscription, the user must first call the connect method to connect to the server) 904 - 905 905 **Parameters:** 906 906 907 907 //topic//, topic name ... ... @@ -915,13 +915,11 @@ 915 915 Failed: multi 916 916 917 917 ((( 918 -== ** 4.7mqtt:unsubscribe(string topic)** ==892 +== **mqtt:unsubscribe(string topic)** == 919 919 ))) 920 920 921 -**Function:** 895 +**Function:** Unsubscribe topic 922 922 923 -Unsubscribe topic 924 - 925 925 **Parameters:** 926 926 927 927 //topic//, topic name ... ... @@ -933,13 +933,11 @@ 933 933 Failed: multi 934 934 935 935 ((( 936 -== ** 4.8mqtt:publish(string topic, string message, number qos, number retain[, number timeout])** ==908 +== **mqtt:publish(string topic, string message, number qos, number retain[, number timeout])** == 937 937 ))) 938 938 939 -**Function:** 911 +**Function:** Publish message 940 940 941 -Publish message 942 - 943 943 **Parameters:** 944 944 945 945 //topic//, topic name ... ... @@ -959,17 +959,13 @@ 959 959 Failed: multi 960 960 961 961 ((( 962 -== ** 4.9mqtt:close()** ==932 +== **mqtt:close()** == 963 963 ))) 964 964 965 -**Function:** 935 +**Function:** Close the mqtt object (the connection to the server will be automatically disconnected) 966 966 967 - Close themqtt object(theconnection to the server will be automatically disconnected)937 +**Parameters:** None 968 968 969 -**Parameters:** 970 - 971 -None 972 - 973 973 **Return:** 974 974 975 975 Succeed: true ... ... @@ -977,13 +977,11 @@ 977 977 Failed: multi 978 978 979 979 ((( 980 -== ** 4.10mqtt:on(string method, function callback)** ==946 +== **mqtt:on(string method, function callback)** == 981 981 ))) 982 982 983 -**Function:** 949 +**Function:** Register event callback function 984 984 985 -Register event callback function 986 - 987 987 **Parameters:** 988 988 989 989 //method//, It can be message/arrived/offline, these 3 types of events ... ... @@ -996,20 +996,17 @@ 996 996 997 997 Parameter: 998 998 999 -//Topic//, topic name 963 +* //Topic//, topic name 964 +* //Message//, content 1000 1000 1001 - //Message//, content966 +**2."arrived" is published by publish, this function will be called after the publication arrives** 1002 1002 1003 -**2.**"arrived" is published by publish, this function will be called after the publication arrives 1004 - 1005 1005 //Callback// prototype~:// function ()// 1006 1006 1007 -Parameter: 970 +Parameter: None 1008 1008 1009 - None972 +**3.This function will be called after the "offline" connection is lost** 1010 1010 1011 -**3.**This function will be called after the "offline" connection is lost 1012 - 1013 1013 //Callback// prototype~:// function (string cause)// 1014 1014 1015 1015 Parameter: ... ... @@ -1023,17 +1023,13 @@ 1023 1023 Failed: multi 1024 1024 1025 1025 ((( 1026 -== ** 4.11mqtt:setup_cfg()** ==987 +== **mqtt:setup_cfg()** == 1027 1027 ))) 1028 1028 1029 -**Function:** 990 +**Function:** Cloud mode interface, to obtain MQTT information configured by the cloud platform 1030 1030 1031 - Cloudmodeinterface, toobtainMQTT information configured by the cloud platform992 +**Parameters:** None 1032 1032 1033 -**Parameters:** 1034 - 1035 -None 1036 - 1037 1037 **Return:** 1038 1038 1039 1039 //serverurl, clientid, conn, lwt, cart //(5 returns, respectively, server address, client ID, connection table, last word table, certificate table) ... ... @@ -1051,39 +1051,27 @@ 1051 1051 Lua only has a table data structure, so all arrays and key-value objects of json will be returned as a table. 1052 1052 1053 1053 ((( 1054 -== ** 5.1json.encode( lua_object )** ==1011 +== **json.encode( lua_object )** == 1055 1055 ))) 1056 1056 1057 -**Function:** 1014 +**Function: **Convert lua data type to json string 1058 1058 1059 - Convertlua data typetojson string1016 +**Parameters: **Lua data type (including boolean, number, string, table) 1060 1060 1061 -** Parameters:**1018 +**Return:** Json format string 1062 1062 1063 -Lua data type (including boolean, number, string, table) 1064 - 1065 -**Return:** 1066 - 1067 -Json format string 1068 - 1069 1069 ((( 1070 -== ** 5.2json.decode(string json_string)** ==1021 +== **json.decode(string json_string)** == 1071 1071 ))) 1072 1072 1073 -**Function:** 1024 +**Function:** Convert json string to lua data type 1074 1074 1075 - Convert jsonluadata type1026 +**Parameters: **//json_string//, string of json data structure 1076 1076 1077 -** Parameters:**1028 +**Return: **Lua data type 1078 1078 1079 -//json_string//, string of json data structure 1080 - 1081 -**Return:** 1082 - 1083 -Lua data type 1084 - 1085 1085 ((( 1086 -== ** 5.3json.null** ==1031 +== **json.null** == 1087 1087 ))) 1088 1088 1089 1089 **Function:** ... ... @@ -1090,32 +1090,24 @@ 1090 1090 1091 1091 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. 1092 1092 1093 -**Parameters:** 1038 +**Parameters:** None 1094 1094 1095 -None 1040 +**Return: **None 1096 1096 1097 -**Return:** 1098 - 1099 -None 1100 - 1101 1101 = **6 Cloud mode** = 1102 1102 1103 1103 The cloud interface is only used in cloud mode, and V-NET mode is not available. 1104 1104 1105 1105 ((( 1106 -== ** 6.1bns_get_alldata()** ==1047 +== **bns_get_alldata()** == 1107 1107 ))) 1108 1108 1109 -**Function:** 1050 +**Function:** Obtain all monitoring points (point table) data configured by the end user 1110 1110 1111 - Obtain allmonitoringpoints(point table)dataconfiguredbythe enduser1052 +**✎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 1112 1112 1113 - Note: Assuming thereareiming scripts A and B with a period of 1second, if this function is called in script A, the data will not be obtained if called in script B1054 +**Parameters:** None 1114 1114 1115 -**Parameters:** 1116 - 1117 -None 1118 - 1119 1119 **Return:** 1120 1120 1121 1121 Succeed: table two-dimensional array, the structure is as follows ... ... @@ -1128,8 +1128,9 @@ 1128 1128 1129 1129 If there is no custom configuration, return an empty table, otherwise, return with "field name/field content" 1130 1130 1131 - E.g:1068 +**For example:** 1132 1132 1070 +{{code language="LUA"}} 1133 1133 { 1134 1134 1135 1135 [1]= {[1]=1234, [2]=1, [3]='temp', [4]='23.5', [5]={"fruit"="apple"}}, ... ... @@ -1142,16 +1142,15 @@ 1142 1142 1143 1143 } 1144 1144 1145 -Failed: //table// empty table 1083 +Failed: table empty table 1084 +{{/code}} 1146 1146 1147 1147 ((( 1148 -== ** 6.2bns_get_config(string from)** ==1087 +== **bns_get_config(string from)** == 1149 1149 ))) 1150 1150 1151 -**Function:** 1090 +**Function:** Obtain custom configuration parameters with the specified from type 1152 1152 1153 -Obtain custom configuration parameters with the specified from type 1154 - 1155 1155 **parameter:** 1156 1156 1157 1157 from type, there are the following two categories, the string must be all lowercase ... ... @@ -1169,13 +1169,11 @@ 1169 1169 Failed~:// table// empty table 1170 1170 1171 1171 ((( 1172 -== ** 6.3bns_get_data(string name, string data)** ==1109 +== **bns_get_data(string name, string data)** == 1173 1173 ))) 1174 1174 1175 -**Function:** 1112 +**Function:**write data to the name of the monitoring point 1176 1176 1177 -write data to the name of the monitoring point 1178 - 1179 1179 **parameter:** 1180 1180 1181 1181 //name //The name of the monitoring point ... ... @@ -1189,7 +1189,7 @@ 1189 1189 Failed: nil 1190 1190 1191 1191 ((( 1192 -== ** 6.4bns_get_data(string name)** ==1127 +== **bns_get_data(string name)** == 1193 1193 ))) 1194 1194 1195 1195 **Function:** ... ... @@ -1207,17 +1207,13 @@ 1207 1207 Failed: nil 1208 1208 1209 1209 ((( 1210 -== ** 6.5bns_get_datadesc()** ==1145 +== **bns_get_datadesc()** == 1211 1211 ))) 1212 1212 1213 -**Function:** 1148 +**Function: **Obtain all configured communication ports and monitoring point information 1214 1214 1215 - Obtain all configured communication portsand monitoring point information1150 +**Parameters:** None 1216 1216 1217 -**Parameters:** 1218 - 1219 -None 1220 - 1221 1221 **Return:** 1222 1222 1223 1223 Succeed: table three-dimensional array, the structure is as follows ... ... @@ -1230,13 +1230,15 @@ 1230 1230 1231 1231 Type (1: switch, 2: number, 3: string) 1232 1232 1233 -E.g: 1234 - { 1164 +**For example:** 1235 1235 1236 -[1]={~-~-The first communication port 1166 +{{code language="LUA"}} 1167 +{ 1237 1237 1238 -[1]={ ~-~-monitoring point array of the first communication port1169 +[1]={--The first communication port 1239 1239 1171 +[1]={--monitoring point array of the first communication port 1172 + 1240 1240 [1]={[1]=11,[2]='data1',[3]=3,[4]=2}, 1241 1241 1242 1242 [2]={[1]=12,[2]='data2',[3]=3,[4]=2}, ... ... @@ -1243,23 +1243,23 @@ 1243 1243 1244 1244 ... 1245 1245 1246 -[n]={[1]=xx,[2]='datan',[3]=x,[4]=x}, ~-~-n monitoring points1179 +[n]={[1]=xx,[2]='datan',[3]=x,[4]=x},--n monitoring points 1247 1247 1248 1248 }, 1249 1249 1250 -[2]=14, ~-~-ID1183 +[2]=14, --ID 1251 1251 1252 -[3]='Modbus TCP' ~-~-n monitoring points1185 +[3]='Modbus TCP' --n monitoring points 1253 1253 1254 1254 }, 1255 1255 1256 -[2]={ ~-~-The second communication port1189 +[2]={--The second communication port 1257 1257 1258 -[1]={}, ~-~-The monitoring point of the second communication port is not configured and is empty1191 +[1]={},--The monitoring point of the second communication port is not configured and is empty 1259 1259 1260 -[2]=15, ~-~-ID1193 +[2]=15, --ID 1261 1261 1262 -[3]='WECON' ~-~-communication protocol name1195 +[3]='WECON' --communication protocol name 1263 1263 1264 1264 }, 1265 1265 ... ... @@ -1266,21 +1266,18 @@ 1266 1266 ...n communication ports and so on 1267 1267 1268 1268 } 1202 +{{/code}} 1269 1269 1270 1270 Failed~:// table// empty table 1271 1271 1272 1272 ((( 1273 -== ** 6.6bns_get_machineinfo()** ==1207 +== **bns_get_machineinfo()** == 1274 1274 ))) 1275 1275 1276 -**Function:** 1210 +**Function:** get machine information 1277 1277 1278 - get machine information1212 +**Parameters:** None 1279 1279 1280 -**Parameters:** 1281 - 1282 -None 1283 - 1284 1284 **Return:** 1285 1285 1286 1286 Succeed: 3 string type results (model, machine code, software version) ... ... @@ -1288,13 +1288,11 @@ 1288 1288 Failed: nil 1289 1289 1290 1290 ((( 1291 -== ** 6.7bns_get_groupdata(string name)** ==1221 +== **bns_get_groupdata(string name)** == 1292 1292 ))) 1293 1293 1294 -**Function:** 1224 +**Function:** Get all monitoring point data under the specified group name 1295 1295 1296 -Get all monitoring point data under the specified group name 1297 - 1298 1298 **parameter:** 1299 1299 1300 1300 //Name // group name ... ... @@ -1306,17 +1306,13 @@ 1306 1306 Failed: //table// empty table 1307 1307 1308 1308 ((( 1309 -== ** 6.8bns_get_groupdesc()** ==1237 +== **bns_get_groupdesc()** == 1310 1310 ))) 1311 1311 1312 -**Function:** 1240 +**Function:** Get all group information 1313 1313 1314 - Getall group information1242 +**Parameters:** None 1315 1315 1316 -**Parameters:** 1317 - 1318 -None 1319 - 1320 1320 **Return:** 1321 1321 1322 1322 Succeed: //table// two-dimensional array, the structure is as follows ... ... @@ -1330,17 +1330,13 @@ 1330 1330 Failed: //table // empty table 1331 1331 1332 1332 ((( 1333 -== ** 6.9bns_get_onecache(string msg)** ==1257 +== **bns_get_onecache(string msg)** == 1334 1334 ))) 1335 1335 1336 -**Function:** 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. 1337 1337 1338 - Saveassageto thecache file, which can be storedafter power failure. Store up to 2000 items,delete the old and save the new in arollingmanner when it is full.1262 +**Parameters: **//msg// String 1339 1339 1340 -**Parameters:** 1341 - 1342 -//msg// String 1343 - 1344 1344 **Return:** 1345 1345 1346 1346 Succeed: true ... ... @@ -1348,23 +1348,20 @@ 1348 1348 Failed: nil 1349 1349 1350 1350 ((( 1351 -== ** 6.10bns_get_allcache()** ==1271 +== **bns_get_allcache()** == 1352 1352 ))) 1353 1353 1354 -**Function:** 1274 +**Function:** Get all the cached content (once the internal cache file will be emptied) 1355 1355 1356 - Getall the cached content (oncethe internal cache file will be emptied)1276 +**Parameters:** None 1357 1357 1358 -**Parameters:** 1359 - 1360 -None 1361 - 1362 1362 **Return:** 1363 1363 1364 1364 Succeed: //table// one-dimensional array 1365 1365 1366 - E.g:1282 +**For example:** 1367 1367 1284 +{{code language="LUA"}} 1368 1368 { 1369 1369 1370 1370 [1]="This is the oldest message", - the first is the oldest message ... ... @@ -1376,6 +1376,7 @@ 1376 1376 [n]="This is the latest message", - the last is the latest message 1377 1377 1378 1378 } 1296 +{{/code}} 1379 1379 1380 1380 Failede: nil 1381 1381 ... ... @@ -1386,194 +1386,232 @@ 1386 1386 Network communication includes Http request interface, this document does not provide interface description, please refer to the online document for how to use it. 1387 1387 1388 1388 ((( 1389 -== ** 7.1http request** ==1307 +== **http request** == 1390 1390 ))) 1391 1391 1392 1392 [[http:~~/~~/w3.impa.br/~~~~diego/software/luasocket/http.html#request>>url:http://w3.impa.br/~~diego/software/luasocket/http.html#request]] 1393 1393 1394 -((( 1395 -= **8 Internal register** = 1396 -))) 1312 +== **https request** == 1397 1397 1398 - The internal registersof the box aredivided into bit addresses and word addresses, which can be accessed in two ways (taking HDW as an example):1314 +**For example:** 1399 1399 1400 -**~1. **Access by word, prefix @W_HDW, 1316 +{{code language="LUA"}} 1317 +local json = require("json") 1401 1401 1402 - For example:@W_HDW0 represents the firstword ofthesystemdataarea, @W_HDW1represents the second word ofthe system data area.1319 +local https = require("https") 1403 1403 1404 - **2. **Accessinbitmode,theprefix is@B_HDX, thenumber in front of "." indicates the number of the word,and the number behind is the bit number of the word.1321 +functions https_demo.main() 1405 1405 1406 - For example: @B_HDX1020.12, its meaning is toaccess the system dataarea in bit mode, the specificlocationisthe 13th bitof the 1020th word.1323 +local url = "https://XXXXXXXXXXXXXXXXXXXXXXXXXX" 1407 1407 1408 - **✎Note:**1325 +local body = {} 1409 1409 1410 - **~1. **The address in @B_HDX is taken from the wordin @W_HDW, so payspecialattention when using the address.1327 +body["XXXXXX"] = "XXXXX" 1411 1411 1412 - For example, @B_HDX1020.12 is to access the 13thbitof 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.1329 +body["XXXXXXX"] = "XXXXXXXXXXX" 1413 1413 1414 - **2.**Theaddressof thebit address@B_HDXhasa decimal point, whilethe wordaddress is an integer.1331 +local bodyJson = json.encode(body) 1415 1415 1416 -((( 1417 -== **8.1 Data storage area(HDW/HDX)** == 1418 -))) 1333 +local header = {} 1419 1419 1420 - Thesystem storagearea (HDW)oftheV-BOX is usedto storetemporarydata:1335 +header["content-type"] = "application/json" 1421 1421 1422 - ~1. Accessbyword,thenumberrange is:"@W_HDW0"-"@W_HDW299999".1337 +local result_table, code, headers, status = https.request(url, 1423 1423 1424 - 2. Access inbit mode, the number range is: "@B_HDX0.0"-"@B_HDX299999.15".1339 +bodyJson) 1425 1425 1426 -((( 1427 -== **8.2 Special data area (HSW/HSX)** == 1428 -))) 1341 +if code == 200 then 1429 1429 1430 - **✎Note:**1343 +print("https suc") 1431 1431 1432 - //HSW// is a system specialregister, so please refer to the system special register table duringuse. Do notuse addresses that are not mentioned in the table, andusethe addresses stated in the table with caution (example: restart ("@W_HSW0") Writing a value of 1 will cause V-BOX to restart).1345 +return true 1433 1433 1434 - //Without any conditions. Direct use ("@W_HSW0") will causethe 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.1347 +else 1435 1435 1436 - 1.The system data area (HSW) of the box is used for system specialregisters(system reserved). Use //addr_getword// to obtain the following registerinformation:1349 +print("https fail") 1437 1437 1438 -(% class="table-bordered" %) 1439 -|address|function|Read and write status: read only, write only, read and write 1440 -|@W_HSW0|restart|read and write 1441 -|@W_HSW1|Box time: year|read and write 1442 -|@W_HSW2|Box time: month|read and write 1443 -|@W_HSW3|Box time: day|read and write 1444 -|@W_HSW4|Box time: hour|read and write 1445 -|@W_HSW5|Box time: minute|read and write 1446 -|@W_HSW6|Box time: second|read and write 1447 -|@W_HSW7|Box time: week|read and write 1448 -|@W_HSW8|Ethernet IP1|read only 1449 -|@W_HSW9|Ethernet IP2|read only 1450 -|@W_HSW10|Ethernet IP3|read only 1451 -|@W_HSW11|Ethernet IP4|read only 1452 -|@W_HSW12|Ethernet Mask 1|read only 1453 -|@W_HSW13|Ethernet Mask 2|read only 1454 -|@W_HSW14|Ethernet Mask 3|read only 1455 -|@W_HSW15|Ethernet Mask 4|read only 1456 -|@W_HSW16|Ethernet Gateway 1|read only 1457 -|@W_HSW17|Ethernet Gateway 2|read only 1458 -|@W_HSW18|Ethernet Gateway 3|read only 1459 -|@W_HSW19|Ethernet Gateway 4|read only 1460 -|@W_HSW21|Ethernet MAC1|read only 1461 -|@W_HSW22|Ethernet MAC2|read only 1462 -|@W_HSW23|Ethernet MAC3|read only 1463 -|@W_HSW24|Ethernet MAC4|read only 1464 -|@W_HSW25|Ethernet MAC3|read only 1465 -|@W_HSW26|Ethernet MAC4|read only 1466 -|@W_HSW128|WIFI IP1|read only 1467 -|@W_HSW129|WIFI IP2|read only 1468 -|@W_HSW130|WIFI IP3|read only 1469 -|@W_HSW131|WIFI IP4|read only 1470 -|@W_HSW132|WIFI Mask 1|read only 1471 -|@W_HSW133|WIFI Mask 2|read only 1472 -|@W_HSW134|WIFI Mask 3|read only 1473 -|@W_HSW135|WIFI Mask 4|read only 1474 -|@W_HSW136|WIFI Gateway 1|read only 1475 -|@W_HSW137|WIFI Gateway 2|read only 1476 -|@W_HSW138|WIFI Gateway 3|read only 1477 -|@W_HSW139|WIFI Gateway 4|read only 1478 -|@W_HSW140|WIFI MAC1|read only 1479 -|@W_HSW141|WIFI MAC2|read only 1480 -|@W_HSW142|WIFI MAC3|read only 1481 -|@W_HSW143|WIFI MAC4|read only 1482 -|@W_HSW144|WIFI MAC5|read only 1483 -|@W_HSW145|WIFI MAC6|read only 1484 -|@W_HSW146|WIFI Signal value|read only 1485 -|@W_HSW148|4G IP1|read only 1486 -|@W_HSW149|4G IP2|read only 1487 -|@W_HSW150|4G IP3|read only 1488 -|@W_HSW151|4G IP4|read only 1489 -|@W_HSW152|4G Mask 1|read only 1490 -|@W_HSW153|4G Mask 2|read only 1491 -|@W_HSW154|4G Mask 3|read only 1492 -|@W_HSW155|4G Mask 4|read only 1493 -|@W_HSW156|4G Gateway 1|read only 1494 -|@W_HSW157|4G Gateway 2|read only 1495 -|@W_HSW158|4G Gateway 3|read only 1496 -|@W_HSW159|4G Gateway 4|read only 1497 -|@W_HSW160|4G MAC1|read only 1498 -|@W_HSW161|4G MAC2|read only 1499 -|@W_HSW162|4G MAC3|read only 1500 -|@W_HSW163|4G MAC4|read only 1501 -|@W_HSW164|4G MAC5|read only 1502 -|@W_HSW165|4G MAC6|read only 1503 -|@W_HSW166|4G Signal value|read only 1351 +return nil 1504 1504 1505 - 2. Other1353 +end 1506 1506 1507 -2.1 Access password: addr_getstring("@W_HSW27", 16) 1355 +end 1356 +{{/code}} 1508 1508 1509 -2.2 Machine code: addr_getstring("@W_HSW60", 64) 1358 +((( 1359 += **8 Internal register** = 1360 +))) 1510 1510 1511 - 2.3Positioningmethod (@W_HSW167):(readonly)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): 1512 1512 1513 - ~1. Latitudeandlongitude1364 +**Access by word, prefix @W_HDW.** 1514 1514 1515 - Longitude:addr_getdouble("@W_HSW168")(readonly)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. 1516 1516 1517 - Latitude:addr_getdouble("@W_HSW172")(readonly)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.** 1518 1518 1519 -2. Base stationpositioning1370 +**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. 1520 1520 1521 -LAC: addr_getdword("@W_HSW168") (read only) 1372 +(% class="box infomessage" %) 1373 +((( 1374 +**✎Note: ** 1522 1522 1523 -CI: addr_getdword("@W_HSW172") (read only) 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 +))) 1524 1524 1525 -2.4 Convert base station to latitude and longitude via API 1526 1526 1527 -Longitude: addr_getdouble("@W_HSW187") (read only) 1382 +((( 1383 +== **Data storage area(HDW/HDX)** == 1384 +))) 1528 1528 1529 - Latitude:addr_getdouble("@W_HSW183")(read only)1386 +The system storage area (HDW) of the V-BOX is used to store temporary data: 1530 1530 1531 -2.5 Operator information: addr_getdword("@W_HSW181") (read only) 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". 1532 1532 1533 -2.6 Networking mode: addr_getword("@W_HSW177") (read only) 1391 +((( 1392 +== **Special data area (HSW/HSX)** == 1534 1534 1535 -0: Ethernet, 1: WIFI, 2: 4G, 3: 2G 1394 +(% class="box infomessage" %) 1395 +((( 1396 +**✎Note: ** 1536 1536 1537 -2.7 Map fence flag: addr_getword("@W_HSW178") (read only) 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 +))) 1538 1538 1539 - 0:Nomapfence is drawn1403 +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: 1540 1540 1541 -1: Draw a map fence and the box is in the fence 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 1542 1542 1543 - 2: Draw a map fence andthebox isnot in the fence1472 +**Others** 1544 1544 1545 -2.8 SIM card status addr_getword("@W_HSW179") (read only) 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) 1546 1546 1547 -1: No card detected 1511 +((( 1512 +== **Power-down storage area (HAW/HAX)** == 1548 1548 1549 - 2:Cardinsertion detected1514 +The system storage area (HAW) is used for the system power-down hold registers: 1550 1550 1551 -3: The card status is abnormal 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". 1552 1552 1553 -2.9 MQTT status addr_getword("@W_HSW180") (read only) 1554 - 1555 -1: online, 2: offline 1556 - 1557 -2.10 IO interface, X is read only, Y is read and write (H series) 1558 - 1559 -addr_getbit(addr1), addr_setbit(addr2) 1560 - 1561 -addr1:"@B_Y0" "@B_Y1" "@B_X0" "@B_X1" 1562 - 1563 -addr2:"@B_Y0" "@B_Y1" 1564 - 1519 +(% class="box infomessage" %) 1565 1565 ((( 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 + 1566 1566 = **9 General Functions** = 1567 1567 ))) 1568 1568 1569 1569 ((( 1570 -== ** 9.1send_sms_ira(string number, string message)** ==1528 +== **send_sms_ira(string number, string message)** == 1571 1571 ))) 1572 1572 1573 -**Function:** 1531 +**Function:** Use IRA character set to send English text messages 1574 1574 1575 -Use IRA character set to send English text messages 1576 - 1577 1577 **Parameters:** 1578 1578 1579 1579 //number: //number (up to 32 characters, the excess will be discarded) ... ... @@ -1587,7 +1587,7 @@ 1587 1587 Failed: multi 1588 1588 1589 1589 ((( 1590 -== ** 9.2send_sms_ucs2(string number, string message)** ==1546 +== **send_sms_ucs2(string number, string message)** == 1591 1591 ))) 1592 1592 1593 1593 **Function:** ... ... @@ -1607,13 +1607,11 @@ 1607 1607 Failed: multi 1608 1608 1609 1609 ((( 1610 -== ** 9.3sms_get_state(number id)** ==1566 +== **sms_get_state(number id)** == 1611 1611 ))) 1612 1612 1613 -**Function:** 1569 +**Function:** Get the status of the SMS 1614 1614 1615 -Get the status of the SMS 1616 - 1617 1617 **parameter:** 1618 1618 1619 1619 //id~:// SMS corresponding id ... ... @@ -1625,13 +1625,11 @@ 1625 1625 Failed: multi 1626 1626 1627 1627 ((( 1628 -== ** 9.4jwt_encode(table head, table payload, string aud, number iat, number exp, string key, int jwttype)** ==1582 +== **jwt_encode(table head, table payload, string aud, number iat, number exp, string key, int jwttype)** == 1629 1629 ))) 1630 1630 1631 -**Function:** 1585 +**Function:** Convert data to JWT format 1632 1632 1633 -Convert data to JWT format 1634 - 1635 1635 **parameter:** 1636 1636 1637 1637 //aud: //project name ... ... @@ -1676,19 +1676,20 @@ 1676 1676 1677 1677 //key~:// the private key required for encryption 1678 1678 1679 -For example: 1631 +**For example:** 1680 1680 1633 +{{code language="LUA"}} 1681 1681 function jwt.main() 1682 1682 1683 -local PRIVATE_KEY = ~[~[~-~- Please enter the secret key~-~-]]1636 +local PRIVATE_KEY = [[-- Please enter the secret key--]] 1684 1684 1685 1685 local JWTType=0 1686 1686 1687 -local payload = ~{~{key="test1",value="test1",type="0"},1640 +local payload = {{key="test1",value="test1",type="0"}, 1688 1688 1689 1689 {key="test",value="123122131",type="1"}} 1690 1690 1691 -local head = ~{~{ key="name",value="data",type="0"},1644 +local head = {{ key="name",value="data",type="0"}, 1692 1692 1693 1693 {key="test2",value="test2",type="0"}} 1694 1694 ... ... @@ -1703,15 +1703,14 @@ 1703 1703 print(en) 1704 1704 1705 1705 End 1659 +{{/code}} 1706 1706 1707 1707 ((( 1708 -== ** 9.5convertohex(number type, number value)** ==1662 +== **convertohex(number type, number value)** == 1709 1709 ))) 1710 1710 1711 -**Function:** 1665 +**Function:** Convert data into hexadecimal data 1712 1712 1713 -Convert data into hexadecimal data 1714 - 1715 1715 **parameter:** 1716 1716 1717 1717 //type~:// incoming data type 0:word 1:dword 2:float ... ... @@ -1724,106 +1724,445 @@ 1724 1724 1725 1725 Failed: multi 1726 1726 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 + 1727 1727 ((( 1728 -== **9.6 set_network(table config)** == 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 1729 1729 ))) 1730 1730 1731 -**F unction:**1754 +**For example:** 1732 1732 1733 -Set V-BOX network, take effect after restart 1756 +{{code language="LUA"}} 1757 +function crcTest.main() 1734 1734 1735 - **parameter:**1759 +local param = { 1736 1736 1737 - //config~:// incoming networkconfigurationtable1761 +name = '', 1738 1738 1739 -1. connectMode: the way V-BOX connects to the server, 0: Ethernet, 1: WIFI, 2: 4G, 3: 2G, it is not allowed to be empty. 1740 -1. ethernetEnable: Whether to enable Ethernet, 1: enable, 0: disable, and it is not allowed to be empty. 1741 -1. ethernetLanIp: Set the LAN IP address. Only V-BOX with three network ports support this configuration, and other models of V-BOX do not support setting LAN IP. This item is allowed to be empty. 1742 -1. ethernetIpMode: Whether to enable Ethernet static IP, 1: Enable static IP, 0: DHCP, not allowed to be empty. 1743 -1. ethernetIp: The IP address needs to be configured when the Ethernet static IP is used, and it is not allowed to be empty. 1744 -1. ethernetNetmask: The subnet mask needs to be configured when Ethernet static IP is used, and it is not allowed to be empty. 1745 -1. ethernetGateway: The gateway can be configured when Ethernet static IP is used. 1763 +width = 64, 1746 1746 1747 -1. When using the Ethernet network, if the Gateway is empty, V-BOX will not connect to the server. 1748 -1. If you only use Ethernet to directly connect to the PLC for communication, you do not need to configure a gateway. 1765 +poly = 0x42F0E1EBA9EA3693, 1749 1749 1750 -1. ethernetFirstDns: You can configure the preferred DNS server when the Ethernet static IP is used, and it is allowed to be empty. If you use the Ethernet network and do not fill in the DNS server, V-BOX will not be connected to the server. 1751 -1. ethernetSpareDns: Alternate DNS server can be configured when the Ethernet static IP is used, and it is allowed to be empty. 1752 -1. wifiEnable: Whether to enable WIFI, 1: enable, 0: disable, it is not allowed to be empty. If it is a model that does not include WIFI, directly disable it. 1753 -1. wifiName: WIFI name, if WIFI is enabled, it is not allowed to be empty. 1754 -1. wifiPassword: WIFI password, it is allowed to be empty. 1755 -1. wifiIpMode: Whether to enable WIFI static IP, 1: Enable static IP, 0: DHCP, not allowed to be empty. 1756 -1. wifiIp: IP address needs to be configured when WIFI static IP is used, it is not allowed to be empty. 1757 -1. wifiNetmask: The subnet mask needs to be configured when WIFI static IP is used, and it is not allowed to be empty. 1758 -1. wifiGateway: The gateway can be configured when WIFI static IP is used, and it is not allowed to be empty. 1759 -1. wifiFirstDns: You can configure the preferred DNS server when the WIFI static IP is used, and it is allowed to be empty. If you use the WIFI network and do not fill in the DNS server, V-BOX will not be connected to the server. 1760 -1. wifiSpareDns: Alternate DNS server can be configured when the WIFI static IP is used, and it is allowed to be empty. 1761 -1. mobileEnable: Whether to enable the mobile network, 1: enable, 0: disable, it is not allowed to be empty, if it does not include 4G models, directly disable it. 1762 -1. mobileApnMode: Whether to manually configure the APN, 0: Use the default APN, 1: Manually configure the APN, it is not allowed to be empty. 1763 -1. apnName: APN name, if you choose to manually configure APN, it is not allowed to be empty. 1764 -1. apnPassword: APN username, it is allowed to be empty. 1765 -1. apnUserName: APN number, it is allowed to be empty. 1766 -1. apnNumber: APN number, it is allowed to be empty. 1767 +init = 0xFFFFFFFFFFFFFFFF, 1767 1767 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 + 1768 1768 **Return:** 1769 1769 1770 -Succeed: t rue1803 +Succeed: table two-dimensional arrays, as follows: 1771 1771 1772 -Faied: multi 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" 1773 1773 1774 -((( 1775 -== **9.7 remote_com_start(string config)** == 1776 -))) 1816 +**For example:** 1777 1777 1778 -**Function:** 1818 +{{code language="LUA"}} 1819 +{ 1779 1779 1780 - startserialportpass-through1821 +[1]= {[1]=1234, [2]=1, [3]='temp', [4]='23.5'}, 1781 1781 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 + 1782 1782 **Parameter:** 1783 1783 1784 - //config: //incoming serialportparameterconfiguration,JSON format1840 +name: the name of monitoring point 1785 1785 1786 -1. type:0, serial port pass-through 1787 -1. port: serial port number marked on the V-BOX 1788 -1. comtype:0-RS232, 1-RS485, 2-RS422 1789 -1. baudrate: Baud Rate 1790 -1. data_length: Data Bits 1791 -1. stop_bit: Stop Bit 1792 -1. check_bit: Check Bit 1842 +data: the data to be written 1793 1793 1794 1794 **Return:** 1795 1795 1796 -Succeed: true 1846 +Succeed: string: The value of the monitor point before it is written 1797 1797 1798 -Failed: multi1848 +Failed: nil 1799 1799 1800 -((( 1801 -== **9.8 remote_com_stop()** == 1802 -))) 1850 +== **normal_getdata_byname(string name)** == 1803 1803 1804 -**Function:** 1852 +**Function:** Read the data of the monitoring point name 1805 1805 1806 - close serial port pass-through1854 +**Parameter:** 1807 1807 1856 +name: the name of monitoring point 1857 + 1808 1808 **Return:** 1809 1809 1810 -Succeed: tr ue1860 +Succeed: string 1811 1811 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 + 1812 1812 Failed: multi 1813 1813 1814 -((( 1815 -== **9.9 remote_com_state()** == 1816 -))) 1890 +== **luaMySql.exec(string statement)** == 1817 1817 1818 -**Function:** 1892 +**Function:** Execute the given SQL statement without returning the result set (add, delete, change) 1819 1819 1820 - query the serial port pass-through status and pass-through server domain nameand port1894 +**Parameter:** 1821 1821 1896 +statement: the given SQL statement 1897 + 1822 1822 **Return:** 1823 1823 1824 -Succeed: 1900 +Succeed: status: returns the number of rows affected by SQL statement execution. 1825 1825 1826 -1. number, current pass-through status: 0-none 1,2-starting pass-through 3-penetrating 4,5-finishing pass-through 6-pass-through error 1827 -1. string, pass-through server domain name and port number, xxxx (domain name): xxx (port number) 1902 +Failed: nil, errorString 1828 1828 1829 -Failed: multi 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}}