Wiki source code of 2 Script

Version 17.1 by Jim(Forgotten) on 2022/07/09 17:47

Show last authors
1 = **1 General Script Demo** =
2
3 == **1.1 Address Operation:Write/Read data from address A to B** ==
4
5 (((
6 For example:transfer D2 to D0
7 )))
8
9 (% style="text-align:center" %)
10 [[image:1624245865976-320.png||height="182" width="1000" class="img-thumbnail"]]
11
12 Depend on diffferent format of data.V-Box use different script functions.
13 for example. addr_setshort(addr,num) Function: Write 16-bit signed decimal address
14 addr_getshort(addr) Function:Read 16-bit signed decimal address
15 addr_getword(string addr)Function: Read 16-bit unsigned decimal address
16 More script function are in the second section of [[“V-BOX Script Interface Manual”>>doc:V-BOX.V-Net.1\.User Manual.04 Lua Script.01 Lua Functions.WebHome]]
17
18 == **1.2 Arithmetic** ==
19
20 (% style="text-align:center" %)
21 [[image:1624249623612-177.png||height="337" width="400" class="img-thumbnail"]]
22
23 == **1.3 Set 100 to D0~-~-D19** ==
24
25 (% style="text-align:center" %)
26 [[image:1624249693457-742.png||height="135" width="400" class="img-thumbnail"]]
27
28 == **1.4 Short message** ==
29
30 When the alarm condition is reached: temp1 > 5 & temp2 >10 & temp3 < 20(lasts more than 5 seconds) , then send an "alarm trigger" sms.
31
32 When the alarm condition is released,then send an "alarm release" sms.
33
34 (% style="text-align:center" %)
35 [[image:1645535936750-316.png||height="385" width="400" class="img-thumbnail"]]
36
37 Script is as below:
38
39 (% class="box infomessage" %)
40 (((
41 function sms.main()
42 ~-~-~-~-~-~-send condition~-~-~-~-~-~-
43 local temp1 = addr_getword("@Temperature1")
44 local temp2 = addr_getword("@Temperature2")
45 local temp3 = addr_getword("@Temperature3")
46 local timer = addr_getword("@Timer")
47 local tag = addr_getbit("@Tag")
48 ~-~-~-~-~-~-lasting time~-~-~-~-~-~-
49 if temp1 > 5 and temp2 > 10 and temp3 < 20 then
50 timer = timer + 1
51 addr_setword("@Timer",timer)
52 else
53 timer = 0
54 addr_setword("@Timer",timer)
55 end
56 ~-~-~-~-~-~-send sms & output Y0~-~-~-~-~-~-
57 if timer > 5 then
58 if tag == 0 then
59 send_sms_ira("19859254700","alarm trigger")
60 addr_setbit("@Tag",1)
61 end
62 elseif tag == 1 then
63 send_sms_ira("19859254700","alarm release")
64 addr_setbit("@Tag",0)
65 end
66 end
67 )))
68
69 == **1.5 Telegram notification** ==
70
71 This example shows how to use the Bot API to send message into Telegram group or channel. When monitoring bit "@HDX" changes, it will trigger and send the message. Please replace with your own Token and chat id.
72
73 {{code language="Lua"}}
74 local tempBit = 0
75 local tempWord = 0
76
77 local botToken = "5504549693:AAEy6a5G-sOF3CINONxMNABeYnoS4ABVlfg"
78 local chatID = "-641959124"--The chat id from Channel or Group
79
80 local https = require("https")
81 local json = require("json")
82
83 -- Send http.get request and return response result
84 function getHttpsUrl(url)
85 local body = {}
86 local bodyJson = json.encode(body)
87 local header = {}
88 header["content-type"] = "application/json"
89 local result_table, code, headers, status = https.request(url, bodyJson)
90 print("code:"..code)
91 if code~= 200 then
92 return
93 else
94 return body
95 end
96 end
97
98 function sendAlarm(telegramBotToken, message, telegramChatID)
99 local url = "https://api.telegram.org/bot"..telegramBotToken.."/sendMessage?text="..message.."&chat_id="..telegramChatID
100 --local url = 'http://v-box.net'
101 --local url = 'https://www.google.com/'
102 print("Get the link:"..url)
103 getHttpsUrl(url)
104 end
105
106
107 function AlarmNotificate.main()
108 local bitValue = addr_getbit("@HDX");
109 local message = ''
110 print("b=="..bitValue)
111 if bitValue == 1 and bitValue ~= tempBit then
112 message = 'Alarm triggered, the monitoring point test value is '.. bitValue
113 sendAlarm(botToken, message, chatID)
114 print("Notification pushed of triggering alarm,"..bitValue)
115 elseif bitValue == 0 and bitValue ~= tempBit then
116 message = 'Alarm dismissed, the monitoring point test value is '.. bitValue
117 sendAlarm(botToken, message, chatID)
118 print("Notification pushed of dismissing alarm,"..bitValue)
119 end
120 tempBit = bitValue----Prevent monitoring values from continuous being sent to the platform
121
122 local wordValue = addr_getword("@HDW10")
123 print("w=="..wordValue)
124 --dosomething
125 if wordValue >= 100 and wordValue ~= tempWord and tempWord <= 100 then
126 message = 'Word alarm triggered, the word value is '.. wordValue
127 sendAlarm(botToken, message, chatID)
128 print("Notification pushed of triggering alarm,"..wordValue)
129 elseif wordValue < 100 and wordValue ~= tempWord and tempWord >= 100 then
130 message = 'Word alarm dismissed, the word value is '.. wordValue
131 sendAlarm(botToken, message, chatID)
132 print("Notification pushed of dismissing alarm,"..wordValue)
133 end
134 tempWord = wordValue----Prevent monitoring values from continuous being sent to the platform
135 end
136 {{/code}}
137
138
139 = **2 V-Box connect with third part server** =
140
141 V-Box have two mode.One is for V-Net,User need to use WECON server to store data.We call this V-NET platform.
142
143 (% class="mark" %)1.Europe server:eu.v-box.net
144
145 (% class="mark" %)2.Asean server:asean.v-box.net
146
147 Second is for OpenCloud mode.It means V-Box data will transfer to third part server and do not want to store data to WECON server.We call OpenCloud paltform
148
149 OpenCloud platform is used in configuring the script.Then V-Box can connect with third part server.
150
151 Both mode can support script  to connect with third part server.the difference:
152
153 (% class="mark" %)1.If you want to store in WECON server ,please use V-NET.
154
155 (% class="mark" %)2.If your server requires SSL certificate to log in,please use OpenCloud.Because only OpenCloud platform can support to upload certificate
156
157 == **2.1 V-Box connect with customer server:grouprobotinfo.com** ==
158
159 This demo does not use SSL certification. Script is as below
160
161 Demo1:
162
163 (% class="box infomessage" %)
164 (((
165 ~-~- Meta class
166 ~-~-main
167 function mq.main()
168 if not mq.m then
169 local err = ""
170 \\ mq.m, err = mqtt.create("tcp:~/~/grouprobotinfo.com:1883", "ClienID") ~-~- create connection
171 if mq.m then
172 mq.config = {
173 username = "",~-~- ID
174 password = "",~-~- password
175 netway = 1, ~-~- Ethernet connection, WIFI=1
176 ~-~- keepalive = 100, ~-~- Optional, set the connection heartbeat interval for 100 seconds.
177 ~-~- cleansession = 0, ~-~- Optional, keep session
178 }
179 mq.m:on("message", function(topic, msg) ~-~- Register for receiving message callbacks
180 local str = string.format("%s:%s", topic, msg)
181 ~-~- print("mqtt msg:", str) ~-~- Print out the received topics and content
182 end
183 )
184 mq.m:on("offline", function (cause) ~-~- Register for lost connection callbacks
185 ~-~- addr_setstring("@xxx", "cause"..(cause or " got nil"))
186 end)
187 mq.m:on("arrived", function() ~-~- Registration for sending messages to callbacks 
188 print("msg arrived")
189 end)
190 else
191 print("mqtt create failed:", err) ~-~- Create object failed
192 end
193 else
194 if mq.m:isconnected() then ~-~- If online, post a message
195 local phaseStatus ="unknow"
196 if addr_getbit("@Standby")== 1 then
197 phaseStatus = "Standby"
198 elseif addr_getbit("@Pre-Freeze")==1 then
199 phaseStatus= "Pre-Freeze"
200 elseif addr_getbit("@Prepare")==1 then
201 phaseStatus ="Prepare"
202 elseif addr_getbit("@Primary Dry")==1 then
203 phaseStatus = "Primary dry"
204 elseif addr_getbit("@Secondary Dry")==1 then
205 phaseStatus = "Secondary Dry"
206 end
207 ~-~- print(addr_getbit("@Primary Dry"))
208 ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--
209 local activating ="unknow"
210 if addr_getbit("@Compressor")==1 then
211 activating = ",".."Compressor"
212 end
213 if addr_getbit("@Silicone Pump")==1 then
214 activating = activating..",".."Silicone Pump"
215 end
216 if addr_getbit("@Vacuum Pump")==1 then
217 activating = activating..",".."Vacuum Pump"
218 end
219 if addr_getbit("@Root Pump")==1 then
220 activating = activating..",".."Root Pump"
221 end
222 if addr_getbit("@Heater")==1 then
223 activating = activating..",".."Heater"
224 end
225 if addr_getbit("@Valve Silicone")==1 then
226 activating = activating..",".."Valve Silicone"
227 end
228 if addr_getbit("@Valve Ice Condenser")==1 then
229 activating = activating..",".."Valve Ice Condenser"
230 end
231 if addr_getbit("@Valve Vacuum Pump")==1 then
232 activating = activating..",".."Valve Vacuum Pump"
233 end
234 local pr_activating =string.sub(activating,2)
235 ~-~- print(pr_activating) 
236
237
238 local status_text ="unknow"
239 if addr_getbit("@Status Run")==1 then
240 status_text = "RUNNING"
241 else
242 status_text = "STOP"
243 end
244 ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~--
245 \\ local js = {type="status",
246 mc_name ="FD300",
247 status=status_text,
248 elapsed_time={
249 hour=addr_getword("@Elapsed Time (Hour)"),
250 min=addr_getword("@Elapsed Time (Minute)"),
251 sec=addr_getword("@Elapsed Time (Second)")
252 },
253 phase = phaseStatus,
254 step = addr_getword("@Step"),
255 activating_output = pr_activating,
256 sv=addr_getshort("@SV Silicone")/10,
257 pv=addr_getshort("@PV Silicone")/10,
258 product1=addr_getshort("@Product 1")/10,
259 \\ product2=addr_getshort("@Product 2")/10,
260 product3=addr_getshort("@Product 3")/10,
261 product4=addr_getshort("@Product 4")/10,
262 ice1=addr_getshort("@Ice condenser 1")/10,
263 ice2=addr_getshort("@Ice condenser 2")/10,
264 vacuum=addr_getfloat("@Vacuum")
265 \\ }
266 local jsAlarm = { HPC = addr_getbit("@B_25395#W0.00"),
267 ODPC = addr_getbit("@B_25395#W0.01"),
268 MTPC=addr_getbit("@B_25395#W0.02"),
269 HTT = addr_getbit("@B_25395#W1.03"),
270 CPC = addr_getbit("@B_25395#W0.08"),
271 CPSP =addr_getbit("@B_25395#W1.00"),
272 CPVP =addr_getbit("@B_25395#W0.10"),
273 CPRP =addr_getbit("@B_25395#W0.11"),
274 HP =addr_getbit("@B_25395#W1.01"),
275 PP= addr_getbit("@B_25395#W1.02"),
276 PO=addr_getbit("@B_25395#W0.07"),
277 FSE=addr_getbit("@B_25395#W2.04"),
278 AVVSVV=addr_getbit("@B_25395#W1.12"),
279 ICHT=addr_getbit("@B_25395#W3.06")
280 \\ }
281 \\ ~-~- ("@B_25395#CIO1.02")
282 mq.m:publish("mqtt-v-box-epsilon-fd300", json.encode(js) , 0, 0)
283 mq.m:publish("mqtt-v-box-epsilon-alarm-fd300", json.encode(jsAlarm) , 0, 0)
284 else
285 local stat, err = mq.m:connect(mq.config) ~-~- connection
286 if stat == nil then ~-~-Determine whether to connect
287 print("mqtt connect failed:", err)
288 return ~-~- Connection failed, return directly
289 end
290 mq.m:subscribe("mqtt-v-box-epsilon", 0)~-~- Subscribe to topics
291 \\ end
292 ~-~- mq.m:unsubscribe("stc/test")
293 ~-~- mq.m:disconnect() ~-~- close matt
294 ~-~- mq.m:close() ~-~- close clase
295 end
296 end
297 )))
298
299 == **2.2 V-Box connect with Azure platform** ==
300
301 In this demo,V-Box connects with Azure by SSL certification.
302
303 Video link: [[https:~~/~~/youtu.be/cdI6rIQcpMY?list=PL_Bpnb2RgaksCic9HCcVAZhU9sYwCRKzW>>https://youtu.be/cdI6rIQcpMY?list=PL_Bpnb2RgaksCic9HCcVAZhU9sYwCRKzW]]
304
305 Tool Download link: [[https:~~/~~/wecon-disk.oss-ap-southeast-1.aliyuncs.com/Download/WIKI/V-BOX/Demo/Azure/Azure%20tool.zip>>https://wecon-disk.oss-ap-southeast-1.aliyuncs.com/Download/WIKI/V-BOX/Demo/Azure/Azure%20tool.zip]]
306
307 Script is as below
308
309 (% class="box infomessage" %)
310 (((
311 ~-~-https:~/~/support.huaweicloud.com/qs-IoT/iot_05_0005.html mqtt.fx monitor to connect azure iot
312 sprint = print
313
314 ~-~-Get custom configuration parameters (vbox custom information)
315 ~-~-local CUSTOM = bns_get_config("bind")
316 ~-~-local DS_ID = CUSTOM.DSID or "60a71ccbbbe12002c08f3a1a_WECON"
317
318
319 ~-~-Cloud mode interface to obtain the MQTT information configured by the cloud platform: (5 returns, namely the server address, client ID, connection table, last word table, certificate table)
320 local MQTT_URL, MQTT_CLIENTID, MQTT_CFG, MQTT_LWT, MQTT_CART = mqtt.setup_cfg()
321
322 ~-~-MQTT_CFG.username = '60a71ccbbbe12002c08f3a1a_WECON'
323 ~-~-MQTT_CFG.password='wecon123'
324 ~-~-MQTT_CLIENTID = '60a71ccbbbe12002c08f3a1a_WECON_0_0_2021052110usernxame:60a71ccbbbe12002c08f3a1a_WECONpassword:a0a951581855aa8e0262129da6cf1b43f2c0ecfac4fa56117fc5a20c90be169a'
325
326 ~-~-publish to topics
327 local pub_RE_TOPIC = string.format('devices/wecon_02/messages/events/')
328 ~-~-Subscribe topics
329 local Subscribe_RE_TOPIC1 = string.format('devices/wecon_02/messages/devicebound/#')
330
331 ~-~-variable
332 local last_time = 0
333
334
335 ~-~-Timing main function
336 function Azure.main()
337
338 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " Azureiot.main start")
339 if g_mq then
340 if g_mq:isconnected() then
341 send_Data()
342 else
343 if os.time() - last_time > 20 then
344 last_time = os.time()
345 mymqtt_connect()
346 end
347 end
348 else
349 mymqtt_init()
350 end
351 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " Azureiot.main end")
352 end
353
354 ~-~- Initialize MQTT
355 function mymqtt_init()
356 sprint(string.format("mqtt init mqtt_url:%s mqtt_clientid:%s", MQTT_URL, MQTT_CLIENTID))
357 g_mq, err = mqtt.create(MQTT_URL, MQTT_CLIENTID) ~-~- Create the object and declare it as a global variable
358 if g_mq then
359 g_mq:on("message", mymqtt_msg_callback) ~-~- Register to receive message callbacks
360 sprint("mqtt init success")
361 else
362 sprint("mqtt init failed:", err)
363 end
364 end
365
366 ~-~- Connect to MQTT server
367 function mymqtt_connect()
368 sprint("mqtt connecting...")
369 local stat, err = g_mq:connect(MQTT_CFG,MQTT_LWT, MQTT_CART)
370 if stat == nil then
371 sprint("mqtt connect failed:", err)
372 return
373 else
374 sprint("mqtt connected")
375 end
376 g_mq:subscribe(Subscribe_RE_TOPIC1, 0) 
377 end
378
379 ~-~- Receive MQTT message callback function
380 function mymqtt_msg_callback(topic, msg)
381 print("topic:",topic)
382 print("revdata:",msg)
383 ~-~- local revData = json.decode(msg)
384 ~-~- if topic == Subscribe_RE_TOPIC1 then ~-~-Process topic information subscribed from the cloud
385 ~-~- if string.match(topic,Subscribe_RE_TOPIC1) then
386 ~-~- print("topi11:",topic)
387 setValue(revData)
388 ~-~- end
389 end
390
391 ~-~-Process the received data
392 ~-~-function setValue(revData)
393 ~-~- if revData ~~=nil then 
394 ~-~- for i,v in pairs(revData) do
395 ~-~- print("Data received:",i,v)
396 ~-~- end
397 ~-~- end
398 ~-~-end
399
400 ~-~-Get real-time data
401 function getData()
402 local jdata = {}
403 local addr = bns_get_alldata()
404 print(json.encode(addr))
405 for i,v in pairs(addr) do
406 if v[2] == 1 then
407 jdata[v[3]] = v[4]
408 end
409 end
410 return jdata
411 end
412
413
414 ~-~-send data
415 function send_Data()
416 local pub_data = {100
417 ~-~- services=~{~{
418 \\ ~-~-serviceId ='Temperature',
419 ~-~- properties={
420 ~-~- value = 55
421 ~-~- },
422 ~-~- }}
423 }
424 sprint(json.encode(pub_data))
425 print("..........",pub_RE_TOPIC)
426 return g_mq:publish(pub_RE_TOPIC, json.encode(pub_data), 0, 0)
427 end
428 )))
429
430 == **2.3 How to configure the Huawei platform?(✎Note: Huawei IOT DA function is only in China area.If you want this function,you need to use chinese mobile to register)** ==
431
432 1.Register a account: [[https:~~/~~/www.huaweicloud.com/intl/en-us/s/JUlPVERNJQ>>https://www.huaweicloud.com/intl/en-us/s/JUlPVERNJQ]]
433
434 2.log in the Huawei IOTDA
435
436 [[https:~~/~~/console.huaweicloud.com/iotdm/?region=cn-north-4&locale=en-us#/dm-portal/home>>https://console.huaweicloud.com/iotdm/?region=cn-north-4&locale=en-us#/dm-portal/home]]
437
438 3.Create product
439
440 (% style="text-align:center" %)
441 [[image:1624433478954-859.png||height="497" width="1100" class="img-thumbnail"]]
442
443 4.Product name,manufacturer,device type and industry,set according to your own needs.
444
445 Protocol: MQTT
446
447 Data Type: JSON
448
449 After finishing configuration,please click "OK"
450
451 (% style="text-align:center" %)
452 [[image:1624433531968-337.png||height="568" width="700" class="img-thumbnail"]]
453
454 5.Device
455
456 After product register,continue to configure "individual register".Click "Device"~-~->"individual register"
457
458 (% style="text-align:center" %)
459 [[image:1624434757597-117.png||class="img-thumbnail"]]
460
461 **Notes for registering device:**
462
463 Product: Previous product registration.
464
465 Node ID, Device Name: set according to your own needs.
466
467 Secret: need to be configured, will be used when connecting later
468
469 After configuration, click OK to generate a device ID and password, which will be used for device access later.
470
471 (% style="text-align:center" %)
472 [[image:1624436421499-613.png||height="499" width="700" class="img-thumbnail"]]
473
474 (% style="text-align:center" %)
475 [[image:1624437798012-126.png||height="366" width="500" class="img-thumbnail"]]
476
477 6. Connection authentication (use MQTT.fx tool to access the IoT platform)
478
479 (1)Open mqttClientIdGenerator tool Java(TM) Platform SE binary
480
481 **[[Download>>https://wecon-disk.oss-ap-southeast-1.aliyuncs.com/Download/WIKI/V-BOX/Demo/Huawei/mqttClientIdGenerator-19.2.0.zip]]**
482
483 (% style="text-align:center" %)
484 [[image:1624437573798-815.png||height="351" width="700" class="img-thumbnail"]]
485
486 (2)Fill in the device ID and secret (deviceid and secret generated when registering the device) to generate connection message
487
488 Client ID, user name, password
489
490 (% style="text-align:center" %)
491 [[image:1624437756866-251.png||height="405" width="700" class="img-thumbnail"]]
492
493 (3) Download certificate file"North-Beijing4"
494
495 [[https:~~/~~/support.huaweicloud.com/en-us/devg-iothub/iot_02_1004.html>>https://support.huaweicloud.com/en-us/devg-iothub/iot_02_1004.html]]
496
497 (% style="text-align:center" %)
498 [[image:1624438225398-363.png||height="403" width="800" class="img-thumbnail"]]
499
500 (% style="text-align:center" %)
501 [[image:1624438260025-610.png||height="408" width="700" class="img-thumbnail"]]
502
503 7.Run MQTTfx tool to connect with Huawei
504
505 Download link: [[http:~~/~~/mqttfx.jensd.de/index.php/download>>url:http://mqttfx.jensd.de/index.php/download]]
506
507 (1)Click on the setting ICON
508
509 (% style="text-align:center" %)
510 [[image:1624438821280-974.png||height="198" width="500" class="img-thumbnail"]]
511
512 (2)Fill in IIOT MQTT device access address, and configure authentication parameters.
513 First: It is the server and port connected to Huawei IOT, which can be viewed through the overview of the interface.
514
515 (% style="text-align:center" %)
516 [[image:1624439086268-985.png||class="img-thumbnail"]]
517
518 Domain name:iot-mqtts.cn-north-4.myhuaweicloud.com
519
520 Port: 8883
521
522 Client ID: check step 6
523
524 (% style="text-align:center" %)
525 [[image:1624439672168-492.png||height="458" width="600" class="img-thumbnail"]]
526
527 (3)Upload SSL certificate file,check step 6
528
529 Select folder java~-~->DigiCertGlobalRootCA.crt.pem and click OK or apply button
530
531 (% style="text-align:center" %)
532 [[image:1624439912938-659.png||height="458" width="600" class="img-thumbnail"]]
533
534 (4)Connect and test publish and subscribe
535
536 (% style="text-align:center" %)
537 [[image:1624440014872-688.png||height="232" width="700" class="img-thumbnail"]]
538
539 (% style="text-align:center" %)
540 [[image:1624440026937-386.png||height="215" width="700" class="img-thumbnail"]]
541
542 Huawei publish topic format: $oc/devices/{device_id}/sys/properties/report
543
544 (% style="text-align:center" %)
545 [[image:1624440404119-815.png||class="img-thumbnail"]]
546
547 Huawei subscribe topic format: **$oc/devices/{device_id}/sys/commands/#**
548
549 (% style="text-align:center" %)
550 [[image:1624447157493-672.png||class="img-thumbnail"]]
551
552 (% style="text-align:center" %)
553 [[image:1624447209982-715.png||class="img-thumbnail"]]
554
555 (5).How to configure to view the received data format intuitively, multiple products (Huawei) are required to configure the model. The specific steps are as follows:
556 ①Select the corresponding product from Huawei products to view
557
558 (% style="text-align:center" %)
559 [[image:1624440647663-632.png||class="img-thumbnail"]]
560
561 ②Custom model: used to display the service ID name of the configuration report.
562
563 (% style="text-align:center" %)
564 [[image:1624440793982-974.png||height="410" width="700" class="img-thumbnail"]]
565
566 (% style="text-align:center" %)
567 [[image:1624440883015-105.png||height="370" width="600" class="img-thumbnail"]]
568
569 ③Add property, ID of monitoring point, and data format:
570
571 (% style="text-align:center" %)
572 [[image:1624441052296-108.png||height="477" width="600" class="img-thumbnail"]]
573
574 ④After the configuration is complete, check the received data on the device
575
576 (% style="text-align:center" %)
577 [[image:1624441186851-536.png||height="434" width="700" class="img-thumbnail"]]
578
579 == **2.4 V-Box connect with Huawei platform** ==
580
581 In this demo,V-Box connects with Huawei by SSL certification.
582
583 1.Create a project access for Huawei IOT
584
585 2.configure MQTT configuration
586
587 (% style="text-align:center" %)
588 [[image:1624506363847-661.png||height="507" width="1000" class="img-thumbnail"]]
589
590 3.Create a script with the demo as below.
591
592 Script is as below
593
594 (% class="box infomessage" %)
595 (((
596 (% class="box infomessage" %)
597 (((
598 ~-~- mqtt.fx simulated access to Huawei Cloud IoT platform refer to 2.4
599 sprint = print
600
601 ~-~-Get custom configuration parameters (gateway customization information)
602 local CUSTOM = bns_get_config("bind")
603 local DS_ID = CUSTOM.DSID or "5dfa0700df1ae506179afb9c_wecon"
604
605
606 ~-~-OpenCloud mode interface, obtain MQTT information configured on cloud platform: (5 returned, respectively server address, client ID, connection table, last word table, certificate table)
607 local MQTT_URL, MQTT_CLIENTID, MQTT_CFG, MQTT_LWT, MQTT_CART = mqtt.setup_cfg()
608
609 MQTT_CFG.username =DS_ID
610 MQTT_CFG.password='d030d92338fcc18cd10fabb3003a4a0f6620fa6822cd3c23b1d9bc790200c6e7'
611 MQTT_CLIENTID = '5dfa0700df1ae506179afb9c_wecon_0_0_2019121819'
612
613 ~-~-publish topic format:$oc/devices/{device id}/sys/properties/report
614
615 local pub_RE_TOPIC = string.format('$oc/devices/60a71ccbbbe12002c08f3a1a_WECON/sys/properties/report')
616
617 ~-~-variate
618 local last_time = 0
619
620
621 ~-~-Timing principal function
622 function hwyiot.main()
623
624 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " hwyiot.main start")
625 if g_mq then
626 if g_mq:isconnected() then
627 send_Data()
628 else
629 if os.time() - last_time > 20 then
630 last_time = os.time()
631 mymqtt_connect()
632 end
633 end
634 else
635 mymqtt_init()
636 end
637 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " hwyiot.main end")
638 end
639
640 ~-~- initializationMQTT
641 function mymqtt_init()
642 sprint(string.format("mqtt init mqtt_url:%s mqtt_clientid:%s", MQTT_URL, MQTT_CLIENTID))
643 g_mq, err = mqtt.create(MQTT_URL, MQTT_CLIENTID) ~-~- Create the object and declare it as a global variable
644 if g_mq then
645 g_mq:on("message", mymqtt_msg_callback) ~-~- Register to receive message callbacks
646 sprint("mqtt init success")
647 else
648 sprint("mqtt init failed:", err)
649 end
650 end
651
652 ~-~- Connect to the MQTT server
653 function mymqtt_connect()
654 sprint("mqtt connecting...")
655 local stat, err = g_mq:connect(MQTT_CFG,MQTT_LWT, MQTT_CART)
656 if stat == nil then
657 sprint("mqtt connect failed:", err)
658 return
659 else
660 sprint("mqtt connected")
661 end
662
663 ~-~-subscribe topic format:$oc/devices/{device_id}/sys/commands/#
664
665 g_mq:subscribe('$oc/devices/60a71ccbbbe12002c08f3a1a_WECON/sys/commands/#', 0) 
666 end
667
668 ~-~- Receive the message callback function
669 function mymqtt_msg_callback(topic, msg)
670 sprint("recv data!")
671 sprint("topic:msg", topic,msg)
672 print(msg)
673 local revData = json.decode(msg)
674 \\end
675
676 ~-~-Send data
677 function send_Data()
678 local pub_data = {
679 msgType = 'deviceReq',
680 data = ~{~{
681 serviceId ='Battery',
682 serviceData={
683 batteryLevel = 55
684 }
685 }}
686 }
687 return g_mq:publish(pub_RE_TOPIC, json.encode(pub_data), 0, 0)
688 end
689 )))
690 )))
691
692 4.Download project access into V-Box to test in debug page
693
694 (% style="text-align:center" %)
695 [[image:1624506710354-406.png||height="658" width="1000" class="img-thumbnail"]]
696
697 (% style="text-align:center" %)
698 [[image:1624506666650-161.png||height="547" width="1000" class="img-thumbnail"]]
699
700 == **2.5 V-Box connect with AWS platform** ==
701
702 === **Log in AWS** ===
703
704 Login aws account and click“Connect an IoT device”
705
706 [[image:image-20220709165402-1.png]]
707
708 [[image:image-20220709165402-2.png]]
709
710
711 === **Create policy** ===
712
713 Click “Secure”~-~-->“Policies”~-~-->“Create policy”~-~-->Click “Create”
714
715 [[image:image-20220709165402-3.png]]
716
717 Name the policy~-~-->Click “JSON”~-~-->Copy the following content~-~-->Click “Create”
718
719 [[image:image-20220709165402-5.png]]
720
721 [[image:image-20220709165402-4.png]]
722
723 {{code language="java"}}
724 {
725
726   "Version": "2012-10-17",
727
728   "Statement": [
729
730     {
731
732       "Effect": "Allow",
733
734       "Action": [
735
736         "iot:Connect",
737
738         "iot:Publish",
739
740         "iot:Subscribe",
741
742         "iot:Receive",
743
744         "greengrass:Discover"
745
746       ],
747
748       "Resource": "*"
749
750     }
751
752   ]
753
754 }
755 {{/code}}
756
757 === **Create things** ===
758
759 Click “Manage”~-~-->“Things”~-~-->“Create things”~-~-->“Create single thing”
760
761 [[image:image-20220709165402-6.png]]
762
763 [[image:image-20220709165402-7.png]]
764
765 Name the thing~-~-->Click “Next”
766
767 [[image:image-20220709165402-8.png]]
768
769 Select the way to create certificate
770
771 [[image:image-20220709165402-9.png]]
772
773 Select policy
774
775 [[image:image-20220709165402-10.png]]
776
777 [[image:image-20220709165402-11.png]]
778
779
780 === **Test with MQTT.fx tool** ===
781
782 Click “View Setting” to get the “Broker Adress”
783
784 [[image:image-20220709165402-13.png]]
785
786 [[image:image-20220709165402-12.png]]
787
788 Create one connection in MQTT.fx tool, set broker port as 8883.
789
790 [[image:image-20220709165402-14.png]]
791
792 Upload the CA File, Client Certificate File, Client Key File
793
794 [[image:image-20220709165402-15.png]]
795
796 Publish message to topic “TEST”
797
798 [[image:image-20220709165402-17.png]]
799
800 Click”Test”~-~-->”MQTT test client”~-~-->”Subscrible to a topic”, to get message publish from MQTT.fx tool.
801
802 [[image:image-20220709173500-1.png]]
803
804 And we can also send message form AWS platform to MQTT.fx tool.
805
806 [[image:image-20220709165402-18.png]]
807
808 === **Configurate in CloudTool** ===
809
810 Copy the same setting in MQTT.fx to MQTT configuration
811
812 [[image:image-20220709165402-19.png]]
813
814 Add a lua script and copy the lua demo into it.
815
816 [[image:image-20220709165402-20.png]]
817
818 sprint = print
819
820 ~-~-Cloud mode interface to obtain the MQTT information configured by the cloud platform: (5 returns, namely the server address, client ID, connection table, last word table, certificate table)
821
822 local MQTT_URL, MQTT_CLIENTID, MQTT_CFG, MQTT_LWT, MQTT_CART = mqtt.setup_cfg()
823
824 ~-~-publish to topics
825
826 local pub_RE_TOPIC = string.format('TEST')
827
828 ~-~-Subscribe topics
829
830 local Subscribe_RE_TOPIC1 = string.format('TEST')
831
832 ~-~-variable
833
834 local last_time = 0
835
836 ~-~-Timing main function
837
838 function aws.main()
839
840 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " aws.main start")
841
842 if g_mq then
843
844 if g_mq:isconnected() then
845
846 send_Data()
847
848 else
849
850 if os.time() - last_time > 5 then
851
852 last_time = os.time()
853
854 mymqtt_connect()
855
856 end
857
858 end
859
860 else
861
862 mymqtt_init()
863
864 end
865
866 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " aws.main end")
867
868 end
869
870
871 ~-~- Initialize MQTT
872
873 function mymqtt_init()
874
875 sprint(string.format("mqtt init mqtt_url:%s mqtt_clientid:%s", MQTT_URL, MQTT_CLIENTID))
876
877 g_mq, err = mqtt.create(MQTT_URL, MQTT_CLIENTID) ~-~- Create the object and declare it as a global variable
878
879 if g_mq then
880
881 g_mq:on("message", mymqtt_msg_callback) ~-~- Register to receive message callbacks
882
883 sprint("mqtt init success")
884
885 else
886
887 sprint("mqtt init failed:", err)
888
889 end
890
891 end
892
893 ~-~- Connect to MQTT server
894
895 function mymqtt_connect()
896
897 sprint("mqtt connecting...")
898
899 local stat, err = g_mq:connect(MQTT_CFG,MQTT_LWT, MQTT_CART)
900
901 if stat == nil then
902
903 sprint("mqtt connect failed:", err)
904
905 return
906
907 else
908
909 sprint("mqtt connected")
910
911 end
912
913 g_mq:subscribe(TEST, 0)
914
915 end
916
917 ~-~- Receive MQTT message callback function
918
919 function mymqtt_msg_callback(topic, msg)
920
921 print("topic:",topic)
922
923 print("revdata:",msg)
924
925 local revData = json.decode(msg)
926
927 print (revData)
928
929 if topic == Subscribe_RE_TOPIC1 then ~-~-Process topic information subscribed from the cloud
930
931 if string.match(topic,Subscribe_RE_TOPIC1) then
932
933 ~-~-if revData ~~= nil then
934
935 for k,v in pairs (revData) do
936
937 print("printing revdata after kv here")
938
939 print (k,v)
940
941 end
942
943 print ("current state is",fanstate)
944
945 ~-~-end
946
947 end
948
949 end
950
951 end
952
953
954 ~-~-Get real-time data
955
956 function getData()
957
958 local jdata = {}
959
960 local addr = bns_get_alldata()
961
962 print(json.encode(addr))
963
964 for i,v in pairs(addr) do
965
966 if v[2] == 1 then
967
968 jdata[v[3]] = v[4]
969
970 end
971
972 end
973
974 return jdata
975
976 end
977
978 ~-~-send data
979
980 function send_Data()
981
982 local pub_data =
983
984 {
985
986 123
987
988 }
989
990 sprint(json.encode(pub_data))
991
992 print("..........",pub_RE_TOPIC)
993
994 return g_mq:publish(pub_RE_TOPIC, json.encode(pub_data), 0, 0)
995
996 end
997
998 Get message in AWS
999
1000 [[image:image-20220709165402-21.png]]