Wiki source code of 2 Script

Version 6.1 by Jim(Forgotten) on 2022/07/09 16:45

Hide last authors
Leo Wei 1.1 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" %)
Hunter 5.1 10 [[image:1624245865976-320.png||height="182" width="1000" class="img-thumbnail"]]
Leo Wei 1.1 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
Leo 4.1 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]]
Leo Wei 1.1 17
18 == **1.2 Arithmetic** ==
19
20 (% style="text-align:center" %)
Hunter 5.1 21 [[image:1624249623612-177.png||height="337" width="400" class="img-thumbnail"]]
Leo Wei 1.1 22
Hunter 5.1 23 == **1.3 Set 100 to D0~-~-D19** ==
Leo Wei 1.1 24
25 (% style="text-align:center" %)
Hunter 5.1 26 [[image:1624249693457-742.png||height="135" width="400" class="img-thumbnail"]]
Leo Wei 1.1 27
Hunter 5.1 28 == **1.4 Short message** ==
Leo Wei 1.1 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" %)
Hunter 5.1 35 [[image:1645535936750-316.png||height="385" width="400" class="img-thumbnail"]]
Leo Wei 1.1 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
Hunter 5.1 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
Leo Wei 1.1 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,
Hunter 5.1 259
Leo Wei 1.1 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")
Hunter 5.1 266
Leo Wei 1.1 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")
Hunter 5.1 282
Leo Wei 1.1 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" %)
Hunter 5.1 444 [[image:1624433478954-859.png||height="497" width="1100" class="img-thumbnail"]]
Leo Wei 1.1 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" %)
Hunter 5.1 455 [[image:1624433531968-337.png||height="568" width="700" class="img-thumbnail"]]
Leo Wei 1.1 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" %)
Hunter 5.1 475 [[image:1624436421499-613.png||height="499" width="700" class="img-thumbnail"]]
Leo Wei 1.1 476
477 (% style="text-align:center" %)
Hunter 5.1 478 [[image:1624437798012-126.png||height="366" width="500" class="img-thumbnail"]]
Leo Wei 1.1 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" %)
Hunter 5.1 487 [[image:1624437573798-815.png||height="351" width="700" class="img-thumbnail"]]
Leo Wei 1.1 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" %)
Hunter 5.1 494 [[image:1624437756866-251.png||height="405" width="700" class="img-thumbnail"]]
Leo Wei 1.1 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" %)
Hunter 5.1 501 [[image:1624438225398-363.png||height="403" width="800" class="img-thumbnail"]]
Leo Wei 1.1 502
503 (% style="text-align:center" %)
Hunter 5.1 504 [[image:1624438260025-610.png||height="408" width="700" class="img-thumbnail"]]
Leo Wei 1.1 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" %)
Hunter 5.1 513 [[image:1624438821280-974.png||height="198" width="500" class="img-thumbnail"]]
Leo Wei 1.1 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" %)
Hunter 5.1 528 [[image:1624439672168-492.png||height="458" width="600" class="img-thumbnail"]]
Leo Wei 1.1 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" %)
Hunter 5.1 535 [[image:1624439912938-659.png||height="458" width="600" class="img-thumbnail"]]
Leo Wei 1.1 536
537 (4)Connect and test publish and subscribe
538
539 (% style="text-align:center" %)
Hunter 5.1 540 [[image:1624440014872-688.png||height="232" width="700" class="img-thumbnail"]]
Leo Wei 1.1 541
542 (% style="text-align:center" %)
Hunter 5.1 543 [[image:1624440026937-386.png||height="215" width="700" class="img-thumbnail"]]
Leo Wei 1.1 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" %)
Hunter 5.1 567 [[image:1624440793982-974.png||height="410" width="700" class="img-thumbnail"]]
Leo Wei 1.1 568
569 (% style="text-align:center" %)
Hunter 5.1 570 [[image:1624440883015-105.png||height="370" width="600" class="img-thumbnail"]]
Leo Wei 1.1 571
572 ③Add property, ID of monitoring point, and data format:
573
574 (% style="text-align:center" %)
Hunter 5.1 575 [[image:1624441052296-108.png||height="477" width="600" class="img-thumbnail"]]
Leo Wei 1.1 576
577 ④After the configuration is complete, check the received data on the device
578
579 (% style="text-align:center" %)
Hunter 5.1 580 [[image:1624441186851-536.png||height="434" width="700" class="img-thumbnail"]]
Leo Wei 1.1 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" %)
Hunter 5.1 591 [[image:1624506363847-661.png||height="507" width="1000" class="img-thumbnail"]]
Leo Wei 1.1 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" %)
Hunter 5.1 698 [[image:1624506710354-406.png||height="658" width="1000" class="img-thumbnail"]]
Leo Wei 1.1 699
700 (% style="text-align:center" %)
Hunter 5.1 701 [[image:1624506666650-161.png||height="547" width="1000" class="img-thumbnail"]]
Leo Wei 1.1 702
703 == **2.5 V-Box connect with AWS platform** ==
704
Jim(Forgotten) 6.1 705 === **Log in AWS** ===
706
707 Login aws account and click“Connect an IoT device”
708
709 [[image:image-20220709163750-3.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
790
791
792
793
794 1. **Test with MQTT.fx tool**
795
796 Click “View Setting” to get the “Broker Adress”
797
798
799 |
800 | |[[image:image-20220709163750-14.png]]
801
802 |
803 | |[[image:image-20220709163750-15.png]]
804
805
806
807
808
809
810
811
812 |
813 | |[[image:image-20220709163750-16.png]]
814
815 Create one connection in MQTT.fx tool, set broker port as 8883.
816
817 Upload the CA File, Client Certificate File, Client Key File
818
819
820 |
821 | |[[image:image-20220709163750-17.png]]
822
823
824 Publish message to topic “TEST”
825
826
827 |
828 | |[[image:image-20220709163750-18.png]]
829
830 |
831 | |[[image:image-20220709163750-19.png]]
832
833 Click”Test”~-~-->”MQTT test client”~-~-->”Subscrible to a topic”, to get message publish from MQTT.fx tool.
834
835 And we can also send message form AWS platform to MQTT.fx tool.
836
837
838 |
839 | |[[image:image-20220709163750-20.png]]
840
841
842 1. **Configurate in CloudTool**
843
844 Copy the same setting in MQTT.fx to MQTT configuration
845
846
847 |
848 | |[[image:image-20220709163750-21.png]]
849
850 Add a lua script and copy the lua demo into it.
851
852
853 |
854 | |[[image:image-20220709163750-22.png]]
855
856
857
858 sprint = print
859
860 ~-~-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)
861
862 local MQTT_URL, MQTT_CLIENTID, MQTT_CFG, MQTT_LWT, MQTT_CART = mqtt.setup_cfg()
863
864 ~-~-publish to topics
865
866 local pub_RE_TOPIC = string.format('TEST')
867
868 ~-~-Subscribe topics
869
870 local Subscribe_RE_TOPIC1 = string.format('TEST')
871
872 ~-~-variable
873
874 local last_time = 0
875
876 ~-~-Timing main function
877
878 function aws.main()
879
880 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " aws.main start")
881
882 if g_mq then
883
884 if g_mq:isconnected() then
885
886 send_Data()
887
888 else
889
890 if os.time() - last_time > 5 then
891
892 last_time = os.time()
893
894 mymqtt_connect()
895
896 end
897
898 end
899
900 else
901
902 mymqtt_init()
903
904 end
905
906 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " aws.main end")
907
908 end
909
910
911 ~-~- Initialize MQTT
912
913 function mymqtt_init()
914
915 sprint(string.format("mqtt init mqtt_url:%s mqtt_clientid:%s", MQTT_URL, MQTT_CLIENTID))
916
917 g_mq, err = mqtt.create(MQTT_URL, MQTT_CLIENTID) ~-~- Create the object and declare it as a global variable
918
919 if g_mq then
920
921 g_mq:on("message", mymqtt_msg_callback) ~-~- Register to receive message callbacks
922
923 sprint("mqtt init success")
924
925 else
926
927 sprint("mqtt init failed:", err)
928
929 end
930
931 end
932
933 ~-~- Connect to MQTT server
934
935 function mymqtt_connect()
936
937 sprint("mqtt connecting...")
938
939 local stat, err = g_mq:connect(MQTT_CFG,MQTT_LWT, MQTT_CART)
940
941 if stat == nil then
942
943 sprint("mqtt connect failed:", err)
944
945 return
946
947 else
948
949 sprint("mqtt connected")
950
951 end
952
953 g_mq:subscribe(TEST, 0)
954
955 end
956
957 ~-~- Receive MQTT message callback function
958
959 function mymqtt_msg_callback(topic, msg)
960
961 print("topic:",topic)
962
963 print("revdata:",msg)
964
965 local revData = json.decode(msg)
966
967 print (revData)
968
969 if topic == Subscribe_RE_TOPIC1 then ~-~-Process topic information subscribed from the cloud
970
971 if string.match(topic,Subscribe_RE_TOPIC1) then
972
973 ~-~-if revData ~~= nil then
974
975 for k,v in pairs (revData) do
976
977 print("printing revdata after kv here")
978
979 print (k,v)
980
981 end
982
983 print ("current state is",fanstate)
984
985 ~-~-end
986
987 end
988
989 end
990
991 end
992
993
994 ~-~-Get real-time data
995
996 function getData()
997
998 local jdata = {}
999
1000 local addr = bns_get_alldata()
1001
1002 print(json.encode(addr))
1003
1004 for i,v in pairs(addr) do
1005
1006 if v[2] == 1 then
1007
1008 jdata[v[3]] = v[4]
1009
1010 end
1011
1012 end
1013
1014 return jdata
1015
1016 end
1017
1018 ~-~-send data
1019
1020 function send_Data()
1021
1022 local pub_data =
1023
1024 {
1025
1026 123
1027
1028 }
1029
1030 sprint(json.encode(pub_data))
1031
1032 print("..........",pub_RE_TOPIC)
1033
1034 return g_mq:publish(pub_RE_TOPIC, json.encode(pub_data), 0, 0)
1035
1036 end
1037
1038
1039
1040 Get message in AWS
1041
1042
1043 |
1044 | |[[image:image-20220709163750-23.png]]