Wiki source code of 2 Script

Version 11.1 by Jim(Forgotten) on 2022/07/09 17:01

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
260 product2=addr_getshort("@Product 2")/10,
261 product3=addr_getshort("@Product 3")/10,
262 product4=addr_getshort("@Product 4")/10,
263 ice1=addr_getshort("@Ice condenser 1")/10,
264 ice2=addr_getshort("@Ice condenser 2")/10,
265 vacuum=addr_getfloat("@Vacuum")
266
267 }
268 local jsAlarm = { HPC = addr_getbit("@B_25395#W0.00"),
269 ODPC = addr_getbit("@B_25395#W0.01"),
270 MTPC=addr_getbit("@B_25395#W0.02"),
271 HTT = addr_getbit("@B_25395#W1.03"),
272 CPC = addr_getbit("@B_25395#W0.08"),
273 CPSP =addr_getbit("@B_25395#W1.00"),
274 CPVP =addr_getbit("@B_25395#W0.10"),
275 CPRP =addr_getbit("@B_25395#W0.11"),
276 HP =addr_getbit("@B_25395#W1.01"),
277 PP= addr_getbit("@B_25395#W1.02"),
278 PO=addr_getbit("@B_25395#W0.07"),
279 FSE=addr_getbit("@B_25395#W2.04"),
280 AVVSVV=addr_getbit("@B_25395#W1.12"),
281 ICHT=addr_getbit("@B_25395#W3.06")
282
283 }
284 \\ ~-~- ("@B_25395#CIO1.02")
285 mq.m:publish("mqtt-v-box-epsilon-fd300", json.encode(js) , 0, 0)
286 mq.m:publish("mqtt-v-box-epsilon-alarm-fd300", json.encode(jsAlarm) , 0, 0)
287 else
288 local stat, err = mq.m:connect(mq.config) ~-~- connection
289 if stat == nil then ~-~-Determine whether to connect
290 print("mqtt connect failed:", err)
291 return ~-~- Connection failed, return directly
292 end
293 mq.m:subscribe("mqtt-v-box-epsilon", 0)~-~- Subscribe to topics
294 \\ end
295 ~-~- mq.m:unsubscribe("stc/test")
296 ~-~- mq.m:disconnect() ~-~- close matt
297 ~-~- mq.m:close() ~-~- close clase
298 end
299 end
300 )))
301
302 == **2.2 V-Box connect with Azure platform** ==
303
304 In this demo,V-Box connects with Azure by SSL certification.
305
306 Video link: [[https:~~/~~/youtu.be/cdI6rIQcpMY?list=PL_Bpnb2RgaksCic9HCcVAZhU9sYwCRKzW>>https://youtu.be/cdI6rIQcpMY?list=PL_Bpnb2RgaksCic9HCcVAZhU9sYwCRKzW]]
307
308 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]]
309
310 Script is as below
311
312 (% class="box infomessage" %)
313 (((
314 ~-~-https:~/~/support.huaweicloud.com/qs-IoT/iot_05_0005.html mqtt.fx monitor to connect azure iot
315 sprint = print
316
317 ~-~-Get custom configuration parameters (vbox custom information)
318 ~-~-local CUSTOM = bns_get_config("bind")
319 ~-~-local DS_ID = CUSTOM.DSID or "60a71ccbbbe12002c08f3a1a_WECON"
320
321
322 ~-~-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)
323 local MQTT_URL, MQTT_CLIENTID, MQTT_CFG, MQTT_LWT, MQTT_CART = mqtt.setup_cfg()
324
325 ~-~-MQTT_CFG.username = '60a71ccbbbe12002c08f3a1a_WECON'
326 ~-~-MQTT_CFG.password='wecon123'
327 ~-~-MQTT_CLIENTID = '60a71ccbbbe12002c08f3a1a_WECON_0_0_2021052110usernxame:60a71ccbbbe12002c08f3a1a_WECONpassword:a0a951581855aa8e0262129da6cf1b43f2c0ecfac4fa56117fc5a20c90be169a'
328
329 ~-~-publish to topics
330 local pub_RE_TOPIC = string.format('devices/wecon_02/messages/events/')
331 ~-~-Subscribe topics
332 local Subscribe_RE_TOPIC1 = string.format('devices/wecon_02/messages/devicebound/#')
333
334 ~-~-variable
335 local last_time = 0
336
337
338 ~-~-Timing main function
339 function Azure.main()
340
341 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " Azureiot.main start")
342 if g_mq then
343 if g_mq:isconnected() then
344 send_Data()
345 else
346 if os.time() - last_time > 20 then
347 last_time = os.time()
348 mymqtt_connect()
349 end
350 end
351 else
352 mymqtt_init()
353 end
354 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " Azureiot.main end")
355 end
356
357 ~-~- Initialize MQTT
358 function mymqtt_init()
359 sprint(string.format("mqtt init mqtt_url:%s mqtt_clientid:%s", MQTT_URL, MQTT_CLIENTID))
360 g_mq, err = mqtt.create(MQTT_URL, MQTT_CLIENTID) ~-~- Create the object and declare it as a global variable
361 if g_mq then
362 g_mq:on("message", mymqtt_msg_callback) ~-~- Register to receive message callbacks
363 sprint("mqtt init success")
364 else
365 sprint("mqtt init failed:", err)
366 end
367 end
368
369 ~-~- Connect to MQTT server
370 function mymqtt_connect()
371 sprint("mqtt connecting...")
372 local stat, err = g_mq:connect(MQTT_CFG,MQTT_LWT, MQTT_CART)
373 if stat == nil then
374 sprint("mqtt connect failed:", err)
375 return
376 else
377 sprint("mqtt connected")
378 end
379 g_mq:subscribe(Subscribe_RE_TOPIC1, 0) 
380 end
381
382 ~-~- Receive MQTT message callback function
383 function mymqtt_msg_callback(topic, msg)
384 print("topic:",topic)
385 print("revdata:",msg)
386 ~-~- local revData = json.decode(msg)
387 ~-~- if topic == Subscribe_RE_TOPIC1 then ~-~-Process topic information subscribed from the cloud
388 ~-~- if string.match(topic,Subscribe_RE_TOPIC1) then
389 ~-~- print("topi11:",topic)
390 setValue(revData)
391 ~-~- end
392 end
393
394 ~-~-Process the received data
395 ~-~-function setValue(revData)
396 ~-~- if revData ~~=nil then 
397 ~-~- for i,v in pairs(revData) do
398 ~-~- print("Data received:",i,v)
399 ~-~- end
400 ~-~- end
401 ~-~-end
402
403 ~-~-Get real-time data
404 function getData()
405 local jdata = {}
406 local addr = bns_get_alldata()
407 print(json.encode(addr))
408 for i,v in pairs(addr) do
409 if v[2] == 1 then
410 jdata[v[3]] = v[4]
411 end
412 end
413 return jdata
414 end
415
416
417 ~-~-send data
418 function send_Data()
419 local pub_data = {100
420 ~-~- services=~{~{
421 \\ ~-~-serviceId ='Temperature',
422 ~-~- properties={
423 ~-~- value = 55
424 ~-~- },
425 ~-~- }}
426 }
427 sprint(json.encode(pub_data))
428 print("..........",pub_RE_TOPIC)
429 return g_mq:publish(pub_RE_TOPIC, json.encode(pub_data), 0, 0)
430 end
431 )))
432
433 == **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)** ==
434
435 1.Register a account: [[https:~~/~~/www.huaweicloud.com/intl/en-us/s/JUlPVERNJQ>>https://www.huaweicloud.com/intl/en-us/s/JUlPVERNJQ]]
436
437 2.log in the Huawei IOTDA
438
439 [[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]]
440
441 3.Create product
442
443 (% style="text-align:center" %)
444 [[image:1624433478954-859.png||height="497" width="1100" class="img-thumbnail"]]
445
446 4.Product name,manufacturer,device type and industry,set according to your own needs.
447
448 Protocol: MQTT
449
450 Data Type: JSON
451
452 After finishing configuration,please click "OK"
453
454 (% style="text-align:center" %)
455 [[image:1624433531968-337.png||height="568" width="700" class="img-thumbnail"]]
456
457 5.Device
458
459 After product register,continue to configure "individual register".Click "Device"~-~->"individual register"
460
461 (% style="text-align:center" %)
462 [[image:1624434757597-117.png||class="img-thumbnail"]]
463
464 **Notes for registering device:**
465
466 Product: Previous product registration.
467
468 Node ID, Device Name: set according to your own needs.
469
470 Secret: need to be configured, will be used when connecting later
471
472 After configuration, click OK to generate a device ID and password, which will be used for device access later.
473
474 (% style="text-align:center" %)
475 [[image:1624436421499-613.png||height="499" width="700" class="img-thumbnail"]]
476
477 (% style="text-align:center" %)
478 [[image:1624437798012-126.png||height="366" width="500" class="img-thumbnail"]]
479
480 6. Connection authentication (use MQTT.fx tool to access the IoT platform)
481
482 (1)Open mqttClientIdGenerator tool Java(TM) Platform SE binary
483
484 **[[Download>>https://wecon-disk.oss-ap-southeast-1.aliyuncs.com/Download/WIKI/V-BOX/Demo/Huawei/mqttClientIdGenerator-19.2.0.zip]]**
485
486 (% style="text-align:center" %)
487 [[image:1624437573798-815.png||height="351" width="700" class="img-thumbnail"]]
488
489 (2)Fill in the device ID and secret (deviceid and secret generated when registering the device) to generate connection message
490
491 Client ID, user name, password
492
493 (% style="text-align:center" %)
494 [[image:1624437756866-251.png||height="405" width="700" class="img-thumbnail"]]
495
496 (3) Download certificate file"North-Beijing4"
497
498 [[https:~~/~~/support.huaweicloud.com/en-us/devg-iothub/iot_02_1004.html>>https://support.huaweicloud.com/en-us/devg-iothub/iot_02_1004.html]]
499
500 (% style="text-align:center" %)
501 [[image:1624438225398-363.png||height="403" width="800" class="img-thumbnail"]]
502
503 (% style="text-align:center" %)
504 [[image:1624438260025-610.png||height="408" width="700" class="img-thumbnail"]]
505
506 7.Run MQTTfx tool to connect with Huawei
507
508 Download link: [[http:~~/~~/mqttfx.jensd.de/index.php/download>>url:http://mqttfx.jensd.de/index.php/download]]
509
510 (1)Click on the setting ICON
511
512 (% style="text-align:center" %)
513 [[image:1624438821280-974.png||height="198" width="500" class="img-thumbnail"]]
514
515 (2)Fill in IIOT MQTT device access address, and configure authentication parameters.
516 First: It is the server and port connected to Huawei IOT, which can be viewed through the overview of the interface.
517
518 (% style="text-align:center" %)
519 [[image:1624439086268-985.png||class="img-thumbnail"]]
520
521 Domain name:iot-mqtts.cn-north-4.myhuaweicloud.com
522
523 Port: 8883
524
525 Client ID: check step 6
526
527 (% style="text-align:center" %)
528 [[image:1624439672168-492.png||height="458" width="600" class="img-thumbnail"]]
529
530 (3)Upload SSL certificate file,check step 6
531
532 Select folder java~-~->DigiCertGlobalRootCA.crt.pem and click OK or apply button
533
534 (% style="text-align:center" %)
535 [[image:1624439912938-659.png||height="458" width="600" class="img-thumbnail"]]
536
537 (4)Connect and test publish and subscribe
538
539 (% style="text-align:center" %)
540 [[image:1624440014872-688.png||height="232" width="700" class="img-thumbnail"]]
541
542 (% style="text-align:center" %)
543 [[image:1624440026937-386.png||height="215" width="700" class="img-thumbnail"]]
544
545 Huawei publish topic format: $oc/devices/{device_id}/sys/properties/report
546
547 (% style="text-align:center" %)
548 [[image:1624440404119-815.png||class="img-thumbnail"]]
549
550 Huawei subscribe topic format: **$oc/devices/{device_id}/sys/commands/#**
551
552 (% style="text-align:center" %)
553 [[image:1624447157493-672.png||class="img-thumbnail"]]
554
555 (% style="text-align:center" %)
556 [[image:1624447209982-715.png||class="img-thumbnail"]]
557
558 (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:
559 ①Select the corresponding product from Huawei products to view
560
561 (% style="text-align:center" %)
562 [[image:1624440647663-632.png||class="img-thumbnail"]]
563
564 ②Custom model: used to display the service ID name of the configuration report.
565
566 (% style="text-align:center" %)
567 [[image:1624440793982-974.png||height="410" width="700" class="img-thumbnail"]]
568
569 (% style="text-align:center" %)
570 [[image:1624440883015-105.png||height="370" width="600" class="img-thumbnail"]]
571
572 ③Add property, ID of monitoring point, and data format:
573
574 (% style="text-align:center" %)
575 [[image:1624441052296-108.png||height="477" width="600" class="img-thumbnail"]]
576
577 ④After the configuration is complete, check the received data on the device
578
579 (% style="text-align:center" %)
580 [[image:1624441186851-536.png||height="434" width="700" class="img-thumbnail"]]
581
582 == **2.4 V-Box connect with Huawei platform** ==
583
584 In this demo,V-Box connects with Huawei by SSL certification.
585
586 1.Create a project access for Huawei IOT
587
588 2.configure MQTT configuration
589
590 (% style="text-align:center" %)
591 [[image:1624506363847-661.png||height="507" width="1000" class="img-thumbnail"]]
592
593 3.Create a script with the demo as below.
594
595 Script is as below
596
597 (% class="box infomessage" %)
598 (((
599 (% class="box infomessage" %)
600 (((
601 ~-~- mqtt.fx simulated access to Huawei Cloud IoT platform refer to 2.4
602 sprint = print
603
604 ~-~-Get custom configuration parameters (gateway customization information)
605 local CUSTOM = bns_get_config("bind")
606 local DS_ID = CUSTOM.DSID or "5dfa0700df1ae506179afb9c_wecon"
607
608
609 ~-~-OpenCloud mode interface, obtain MQTT information configured on cloud platform: (5 returned, respectively server address, client ID, connection table, last word table, certificate table)
610 local MQTT_URL, MQTT_CLIENTID, MQTT_CFG, MQTT_LWT, MQTT_CART = mqtt.setup_cfg()
611
612 MQTT_CFG.username =DS_ID
613 MQTT_CFG.password='d030d92338fcc18cd10fabb3003a4a0f6620fa6822cd3c23b1d9bc790200c6e7'
614 MQTT_CLIENTID = '5dfa0700df1ae506179afb9c_wecon_0_0_2019121819'
615
616 ~-~-publish topic format:$oc/devices/{device id}/sys/properties/report
617
618 local pub_RE_TOPIC = string.format('$oc/devices/60a71ccbbbe12002c08f3a1a_WECON/sys/properties/report')
619
620 ~-~-variate
621 local last_time = 0
622
623
624 ~-~-Timing principal function
625 function hwyiot.main()
626
627 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " hwyiot.main start")
628 if g_mq then
629 if g_mq:isconnected() then
630 send_Data()
631 else
632 if os.time() - last_time > 20 then
633 last_time = os.time()
634 mymqtt_connect()
635 end
636 end
637 else
638 mymqtt_init()
639 end
640 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " hwyiot.main end")
641 end
642
643 ~-~- initializationMQTT
644 function mymqtt_init()
645 sprint(string.format("mqtt init mqtt_url:%s mqtt_clientid:%s", MQTT_URL, MQTT_CLIENTID))
646 g_mq, err = mqtt.create(MQTT_URL, MQTT_CLIENTID) ~-~- Create the object and declare it as a global variable
647 if g_mq then
648 g_mq:on("message", mymqtt_msg_callback) ~-~- Register to receive message callbacks
649 sprint("mqtt init success")
650 else
651 sprint("mqtt init failed:", err)
652 end
653 end
654
655 ~-~- Connect to the MQTT server
656 function mymqtt_connect()
657 sprint("mqtt connecting...")
658 local stat, err = g_mq:connect(MQTT_CFG,MQTT_LWT, MQTT_CART)
659 if stat == nil then
660 sprint("mqtt connect failed:", err)
661 return
662 else
663 sprint("mqtt connected")
664 end
665
666 ~-~-subscribe topic format:$oc/devices/{device_id}/sys/commands/#
667
668 g_mq:subscribe('$oc/devices/60a71ccbbbe12002c08f3a1a_WECON/sys/commands/#', 0) 
669 end
670
671 ~-~- Receive the message callback function
672 function mymqtt_msg_callback(topic, msg)
673 sprint("recv data!")
674 sprint("topic:msg", topic,msg)
675 print(msg)
676 local revData = json.decode(msg)
677 \\end
678
679 ~-~-Send data
680 function send_Data()
681 local pub_data = {
682 msgType = 'deviceReq',
683 data = ~{~{
684 serviceId ='Battery',
685 serviceData={
686 batteryLevel = 55
687 }
688 }}
689 }
690 return g_mq:publish(pub_RE_TOPIC, json.encode(pub_data), 0, 0)
691 end
692 )))
693 )))
694
695 4.Download project access into V-Box to test in debug page
696
697 (% style="text-align:center" %)
698 [[image:1624506710354-406.png||height="658" width="1000" class="img-thumbnail"]]
699
700 (% style="text-align:center" %)
701 [[image:1624506666650-161.png||height="547" width="1000" class="img-thumbnail"]]
702
703 == **2.5 V-Box connect with AWS platform** ==
704
705 === **Log in AWS** ===
706
707 Login aws account and click“Connect an IoT device”
708
709 [[image:image-20220709165402-1.png]]
710
711 [[image:image-20220709165402-2.png]]
712
713
714 === **Create policy** ===
715
716 Click “Secure”~-~-->“Policies”~-~-->“Create policy”~-~-->Click “Create”
717
718 [[image:image-20220709165402-3.png]]
719
720 Name the policy~-~-->Click “JSON”~-~-->Copy the following content~-~-->Click “Create”
721
722 [[image:image-20220709165402-5.png]]
723
724 [[image:image-20220709165402-4.png]]
725
726 {{code language="LUA"}}
727 {
728
729   "Version": "2012-10-17",
730
731   "Statement": [
732
733     {
734
735       "Effect": "Allow",
736
737       "Action": [
738
739         "iot:Connect",
740
741         "iot:Publish",
742
743         "iot:Subscribe",
744
745         "iot:Receive",
746
747         "greengrass:Discover"
748
749       ],
750
751       "Resource": "*"
752
753     }
754
755   ]
756
757 }
758 {{/code}}
759
760 1. **Create things**
761
762 Click “Manage”~-~-->“Things”~-~-->“Create things”~-~-->“Create single thing”
763
764
765 |
766 | |[[image:image-20220709165402-6.png]]
767
768
769 |
770 | |[[image:image-20220709165402-7.png]]
771
772 |
773 | |[[image:image-20220709165402-8.png]]
774
775 Name the thing~-~-->Click “Next”
776
777
778 Select the way to create certificate
779
780
781 |
782 | |[[image:image-20220709165402-9.png]]
783
784 Select policy
785
786
787 |
788 | |[[image:image-20220709165402-10.png]]
789
790
791
792
793
794
795
796
797
798
799 |
800 | |[[image:image-20220709165402-11.png]]
801
802
803
804
805
806
807
808 1. **Test with MQTT.fx tool**
809
810 Click “View Setting” to get the “Broker Adress”
811
812
813 |
814 | |[[image:image-20220709165402-12.png]]
815
816 |
817 | |[[image:image-20220709165402-13.png]]
818
819
820
821
822
823
824
825
826
827 |
828 | |[[image:image-20220709165402-14.png]]
829
830 Create one connection in MQTT.fx tool, set broker port as 8883.
831
832 Upload the CA File, Client Certificate File, Client Key File
833
834
835 |
836 | |[[image:image-20220709165402-15.png]]
837
838
839
840 Publish message to topic “TEST”
841
842
843 |
844 | |[[image:image-20220709165402-16.png]]
845
846 |
847 | |[[image:image-20220709165402-17.png]]
848
849 Click”Test”~-~-->”MQTT test client”~-~-->”Subscrible to a topic”, to get message publish from MQTT.fx tool.
850
851 And we can also send message form AWS platform to MQTT.fx tool.
852
853
854 |
855 | |[[image:image-20220709165402-18.png]]
856
857
858
859 1. **Configurate in CloudTool**
860
861 Copy the same setting in MQTT.fx to MQTT configuration
862
863
864 |
865 | |[[image:image-20220709165402-19.png]]
866
867 Add a lua script and copy the lua demo into it.
868
869
870 |
871 | |[[image:image-20220709165402-20.png]]
872
873
874
875
876 sprint = print
877
878 ~-~-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)
879
880 local MQTT_URL, MQTT_CLIENTID, MQTT_CFG, MQTT_LWT, MQTT_CART = mqtt.setup_cfg()
881
882 ~-~-publish to topics
883
884 local pub_RE_TOPIC = string.format('TEST')
885
886 ~-~-Subscribe topics
887
888 local Subscribe_RE_TOPIC1 = string.format('TEST')
889
890 ~-~-variable
891
892 local last_time = 0
893
894 ~-~-Timing main function
895
896 function aws.main()
897
898 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " aws.main start")
899
900 if g_mq then
901
902 if g_mq:isconnected() then
903
904 send_Data()
905
906 else
907
908 if os.time() - last_time > 5 then
909
910 last_time = os.time()
911
912 mymqtt_connect()
913
914 end
915
916 end
917
918 else
919
920 mymqtt_init()
921
922 end
923
924 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " aws.main end")
925
926 end
927
928
929 ~-~- Initialize MQTT
930
931 function mymqtt_init()
932
933 sprint(string.format("mqtt init mqtt_url:%s mqtt_clientid:%s", MQTT_URL, MQTT_CLIENTID))
934
935 g_mq, err = mqtt.create(MQTT_URL, MQTT_CLIENTID) ~-~- Create the object and declare it as a global variable
936
937 if g_mq then
938
939 g_mq:on("message", mymqtt_msg_callback) ~-~- Register to receive message callbacks
940
941 sprint("mqtt init success")
942
943 else
944
945 sprint("mqtt init failed:", err)
946
947 end
948
949 end
950
951 ~-~- Connect to MQTT server
952
953 function mymqtt_connect()
954
955 sprint("mqtt connecting...")
956
957 local stat, err = g_mq:connect(MQTT_CFG,MQTT_LWT, MQTT_CART)
958
959 if stat == nil then
960
961 sprint("mqtt connect failed:", err)
962
963 return
964
965 else
966
967 sprint("mqtt connected")
968
969 end
970
971 g_mq:subscribe(TEST, 0)
972
973 end
974
975 ~-~- Receive MQTT message callback function
976
977 function mymqtt_msg_callback(topic, msg)
978
979 print("topic:",topic)
980
981 print("revdata:",msg)
982
983 local revData = json.decode(msg)
984
985 print (revData)
986
987 if topic == Subscribe_RE_TOPIC1 then ~-~-Process topic information subscribed from the cloud
988
989 if string.match(topic,Subscribe_RE_TOPIC1) then
990
991 ~-~-if revData ~~= nil then
992
993 for k,v in pairs (revData) do
994
995 print("printing revdata after kv here")
996
997 print (k,v)
998
999 end
1000
1001 print ("current state is",fanstate)
1002
1003 ~-~-end
1004
1005 end
1006
1007 end
1008
1009 end
1010
1011
1012 ~-~-Get real-time data
1013
1014 function getData()
1015
1016 local jdata = {}
1017
1018 local addr = bns_get_alldata()
1019
1020 print(json.encode(addr))
1021
1022 for i,v in pairs(addr) do
1023
1024 if v[2] == 1 then
1025
1026 jdata[v[3]] = v[4]
1027
1028 end
1029
1030 end
1031
1032 return jdata
1033
1034 end
1035
1036 ~-~-send data
1037
1038 function send_Data()
1039
1040 local pub_data =
1041
1042 {
1043
1044 123
1045
1046 }
1047
1048 sprint(json.encode(pub_data))
1049
1050 print("..........",pub_RE_TOPIC)
1051
1052 return g_mq:publish(pub_RE_TOPIC, json.encode(pub_data), 0, 0)
1053
1054 end
1055
1056
1057
1058 Get message in AWS
1059
1060
1061 |
1062 | |[[image:image-20220709165402-21.png]]