Wiki source code of 2 Script

Version 9.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 | |[[image:image-20220709163750-16.png]]
802
803 Create one connection in MQTT.fx tool, set broker port as 8883.
804
805 Upload the CA File, Client Certificate File, Client Key File
806
807
808 |
809 | |[[image:image-20220709163750-17.png]]
810
811 Publish message to topic “TEST”
812
813
814 |
815 | |[[image:image-20220709163750-18.png]]
816
817 |
818 | |[[image:image-20220709163750-19.png]]
819
820 Click”Test”~-~-->”MQTT test client”~-~-->”Subscrible to a topic”, to get message publish from MQTT.fx tool.
821
822 And we can also send message form AWS platform to MQTT.fx tool.
823
824
825 |
826 | |[[image:image-20220709163750-20.png]]
827
828 1. **Configurate in CloudTool**
829
830 Copy the same setting in MQTT.fx to MQTT configuration
831
832
833 |
834 | |[[image:image-20220709163750-21.png]]
835
836 Add a lua script and copy the lua demo into it.
837
838
839 |
840 | |[[image:image-20220709163750-22.png]]
841
842 sprint = print
843
844 ~-~-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)
845
846 local MQTT_URL, MQTT_CLIENTID, MQTT_CFG, MQTT_LWT, MQTT_CART = mqtt.setup_cfg()
847
848 ~-~-publish to topics
849
850 local pub_RE_TOPIC = string.format('TEST')
851
852 ~-~-Subscribe topics
853
854 local Subscribe_RE_TOPIC1 = string.format('TEST')
855
856 ~-~-variable
857
858 local last_time = 0
859
860 ~-~-Timing main function
861
862 function aws.main()
863
864 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " aws.main start")
865
866 if g_mq then
867
868 if g_mq:isconnected() then
869
870 send_Data()
871
872 else
873
874 if os.time() - last_time > 5 then
875
876 last_time = os.time()
877
878 mymqtt_connect()
879
880 end
881
882 end
883
884 else
885
886 mymqtt_init()
887
888 end
889
890 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " aws.main end")
891
892 end
893
894
895 ~-~- Initialize MQTT
896
897 function mymqtt_init()
898
899 sprint(string.format("mqtt init mqtt_url:%s mqtt_clientid:%s", MQTT_URL, MQTT_CLIENTID))
900
901 g_mq, err = mqtt.create(MQTT_URL, MQTT_CLIENTID) ~-~- Create the object and declare it as a global variable
902
903 if g_mq then
904
905 g_mq:on("message", mymqtt_msg_callback) ~-~- Register to receive message callbacks
906
907 sprint("mqtt init success")
908
909 else
910
911 sprint("mqtt init failed:", err)
912
913 end
914
915 end
916
917 ~-~- Connect to MQTT server
918
919 function mymqtt_connect()
920
921 sprint("mqtt connecting...")
922
923 local stat, err = g_mq:connect(MQTT_CFG,MQTT_LWT, MQTT_CART)
924
925 if stat == nil then
926
927 sprint("mqtt connect failed:", err)
928
929 return
930
931 else
932
933 sprint("mqtt connected")
934
935 end
936
937 g_mq:subscribe(TEST, 0)
938
939 end
940
941 ~-~- Receive MQTT message callback function
942
943 function mymqtt_msg_callback(topic, msg)
944
945 print("topic:",topic)
946
947 print("revdata:",msg)
948
949 local revData = json.decode(msg)
950
951 print (revData)
952
953 if topic == Subscribe_RE_TOPIC1 then ~-~-Process topic information subscribed from the cloud
954
955 if string.match(topic,Subscribe_RE_TOPIC1) then
956
957 ~-~-if revData ~~= nil then
958
959 for k,v in pairs (revData) do
960
961 print("printing revdata after kv here")
962
963 print (k,v)
964
965 end
966
967 print ("current state is",fanstate)
968
969 ~-~-end
970
971 end
972
973 end
974
975 end
976
977
978 ~-~-Get real-time data
979
980 function getData()
981
982 local jdata = {}
983
984 local addr = bns_get_alldata()
985
986 print(json.encode(addr))
987
988 for i,v in pairs(addr) do
989
990 if v[2] == 1 then
991
992 jdata[v[3]] = v[4]
993
994 end
995
996 end
997
998 return jdata
999
1000 end
1001
1002 ~-~-send data
1003
1004 function send_Data()
1005
1006 local pub_data =
1007
1008 {
1009
1010 123
1011
1012 }
1013
1014 sprint(json.encode(pub_data))
1015
1016 print("..........",pub_RE_TOPIC)
1017
1018 return g_mq:publish(pub_RE_TOPIC, json.encode(pub_data), 0, 0)
1019
1020 end
1021
1022
1023
1024 Get message in AWS
1025
1026
1027 |
1028 | |[[image:image-20220709163750-23.png]]