Wiki source code of 2 Script

Version 8.1 by Jim(Forgotten) on 2022/07/09 16:48

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:图片1.png]]
710
711 [[image:image-20220709163750-4.png]]
712
713 === **Create policy** ===
714
715 Click “Secure”~-~-->“Policies”~-~-->“Create policy”~-~-->Click “Create”
716
717 [[image:image-20220709163750-5.png]]
718
719 Name the policy~-~-->Click “JSON”~-~-->Copy the following content~-~-->Click “Create”
720
721 [[image:image-20220709163750-7.png]]
722
723 [[image:image-20220709163750-6.png]]
724
725 {
726
727 "Version": "2012-10-17",
728
729 "Statement": [
730
731 {
732
733 "Effect": "Allow",
734
735 "Action": [
736
737 "iot:Connect",
738
739 "iot:Publish",
740
741 "iot:Subscribe",
742
743 "iot:Receive",
744
745 "greengrass:Discover"
746
747 ],
748
749 "Resource": "*"
750
751 }
752
753 ]
754
755 }
756
757 === **Create things** ===
758
759 Click “Manage”~-~-->“Things”~-~-->“Create things”~-~-->“Create single thing”
760
761 [[image:image-20220709163750-8.png]]
762
763 [[image:image-20220709163750-9.png]]
764
765 Name the thing~-~-->Click “Next”
766
767 [[image:image-20220709163750-10.png]]
768
769 Select the way to create certificate
770
771 [[image:image-20220709163750-11.png]]
772
773 Select policy
774
775
776
777
778
779
780
781
782
783
784
785
786 |
787 | |[[image:image-20220709163750-13.png]]
788
789 1. **Test with MQTT.fx tool**
790
791 Click “View Setting” to get the “Broker Adress”
792
793
794 |
795 | |[[image:image-20220709163750-14.png]]
796
797 |
798 | |[[image:image-20220709163750-15.png]]
799
800
801 |
802 | |[[image:image-20220709163750-16.png]]
803
804 Create one connection in MQTT.fx tool, set broker port as 8883.
805
806 Upload the CA File, Client Certificate File, Client Key File
807
808
809 |
810 | |[[image:image-20220709163750-17.png]]
811
812 Publish message to topic “TEST”
813
814
815 |
816 | |[[image:image-20220709163750-18.png]]
817
818 |
819 | |[[image:image-20220709163750-19.png]]
820
821 Click”Test”~-~-->”MQTT test client”~-~-->”Subscrible to a topic”, to get message publish from MQTT.fx tool.
822
823 And we can also send message form AWS platform to MQTT.fx tool.
824
825
826 |
827 | |[[image:image-20220709163750-20.png]]
828
829 1. **Configurate in CloudTool**
830
831 Copy the same setting in MQTT.fx to MQTT configuration
832
833
834 |
835 | |[[image:image-20220709163750-21.png]]
836
837 Add a lua script and copy the lua demo into it.
838
839
840 |
841 | |[[image:image-20220709163750-22.png]]
842
843 sprint = print
844
845 ~-~-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)
846
847 local MQTT_URL, MQTT_CLIENTID, MQTT_CFG, MQTT_LWT, MQTT_CART = mqtt.setup_cfg()
848
849 ~-~-publish to topics
850
851 local pub_RE_TOPIC = string.format('TEST')
852
853 ~-~-Subscribe topics
854
855 local Subscribe_RE_TOPIC1 = string.format('TEST')
856
857 ~-~-variable
858
859 local last_time = 0
860
861 ~-~-Timing main function
862
863 function aws.main()
864
865 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " aws.main start")
866
867 if g_mq then
868
869 if g_mq:isconnected() then
870
871 send_Data()
872
873 else
874
875 if os.time() - last_time > 5 then
876
877 last_time = os.time()
878
879 mymqtt_connect()
880
881 end
882
883 end
884
885 else
886
887 mymqtt_init()
888
889 end
890
891 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " aws.main end")
892
893 end
894
895
896 ~-~- Initialize MQTT
897
898 function mymqtt_init()
899
900 sprint(string.format("mqtt init mqtt_url:%s mqtt_clientid:%s", MQTT_URL, MQTT_CLIENTID))
901
902 g_mq, err = mqtt.create(MQTT_URL, MQTT_CLIENTID) ~-~- Create the object and declare it as a global variable
903
904 if g_mq then
905
906 g_mq:on("message", mymqtt_msg_callback) ~-~- Register to receive message callbacks
907
908 sprint("mqtt init success")
909
910 else
911
912 sprint("mqtt init failed:", err)
913
914 end
915
916 end
917
918 ~-~- Connect to MQTT server
919
920 function mymqtt_connect()
921
922 sprint("mqtt connecting...")
923
924 local stat, err = g_mq:connect(MQTT_CFG,MQTT_LWT, MQTT_CART)
925
926 if stat == nil then
927
928 sprint("mqtt connect failed:", err)
929
930 return
931
932 else
933
934 sprint("mqtt connected")
935
936 end
937
938 g_mq:subscribe(TEST, 0)
939
940 end
941
942 ~-~- Receive MQTT message callback function
943
944 function mymqtt_msg_callback(topic, msg)
945
946 print("topic:",topic)
947
948 print("revdata:",msg)
949
950 local revData = json.decode(msg)
951
952 print (revData)
953
954 if topic == Subscribe_RE_TOPIC1 then ~-~-Process topic information subscribed from the cloud
955
956 if string.match(topic,Subscribe_RE_TOPIC1) then
957
958 ~-~-if revData ~~= nil then
959
960 for k,v in pairs (revData) do
961
962 print("printing revdata after kv here")
963
964 print (k,v)
965
966 end
967
968 print ("current state is",fanstate)
969
970 ~-~-end
971
972 end
973
974 end
975
976 end
977
978
979 ~-~-Get real-time data
980
981 function getData()
982
983 local jdata = {}
984
985 local addr = bns_get_alldata()
986
987 print(json.encode(addr))
988
989 for i,v in pairs(addr) do
990
991 if v[2] == 1 then
992
993 jdata[v[3]] = v[4]
994
995 end
996
997 end
998
999 return jdata
1000
1001 end
1002
1003 ~-~-send data
1004
1005 function send_Data()
1006
1007 local pub_data =
1008
1009 {
1010
1011 123
1012
1013 }
1014
1015 sprint(json.encode(pub_data))
1016
1017 print("..........",pub_RE_TOPIC)
1018
1019 return g_mq:publish(pub_RE_TOPIC, json.encode(pub_data), 0, 0)
1020
1021 end
1022
1023
1024
1025 Get message in AWS
1026
1027
1028 |
1029 | |[[image:image-20220709163750-23.png]]