Wiki source code of 2 Script

Version 40.1 by Hunter on 2023/03/17 16:04

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.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 As for How to get the botToken and chatID, please check the followig videos:
74
75 [[https:~~/~~/www.youtube.com/watch?v=zh6yYlnjX7k>>https://www.youtube.com/watch?v=zh6yYlnjX7k]]
76
77 [[https:~~/~~/www.youtube.com/watch?v=Pj8mwuMZZvg>>https://www.youtube.com/watch?v=Pj8mwuMZZvg]]
78
79 {{code language="Lua"}}
80 local tempBit = 0
81 local tempWord = 0
82
83 local botToken = "5504549693:AAEy6a5G-sOF3CINONxMNABeYnoS4ABVlfg"
84 local chatID = "-641959124"--The chat id from Channel or Group
85
86 local https = require("https")
87 local json = require("json")
88
89 -- Send http.get request and return response result
90 function getHttpsUrl(url)
91 local body = {}
92 local bodyJson = json.encode(body)
93 local header = {}
94 header["content-type"] = "application/json"
95 local result_table, code, headers, status = https.request(url, bodyJson)
96 print("code:"..code)
97 if code~= 200 then
98 return
99 else
100 return body
101 end
102 end
103
104 function sendAlarm(telegramBotToken, message, telegramChatID)
105 local url = "https://api.telegram.org/bot"..telegramBotToken.."/sendMessage?text="..message.."&chat_id="..telegramChatID
106 --local url = 'http://v-box.net'
107 --local url = 'https://www.google.com/'
108 print("Get the link:"..url)
109 getHttpsUrl(url)
110 end
111
112
113 function AlarmNotificate.main()
114 local bitValue = addr_getbit("@HDX");
115 local message = ''
116 print("b=="..bitValue)
117 if bitValue == 1 and bitValue ~= tempBit then
118 message = 'Alarm triggered, the monitoring point test value is '.. bitValue
119 sendAlarm(botToken, message, chatID)
120 print("Notification pushed of triggering alarm,"..bitValue)
121 elseif bitValue == 0 and bitValue ~= tempBit then
122 message = 'Alarm dismissed, the monitoring point test value is '.. bitValue
123 sendAlarm(botToken, message, chatID)
124 print("Notification pushed of dismissing alarm,"..bitValue)
125 end
126 tempBit = bitValue----Prevent monitoring values from continuous being sent to the platform
127
128 local wordValue = addr_getword("@HDW10")
129 print("w=="..wordValue)
130 --dosomething
131 if wordValue >= 100 and wordValue ~= tempWord and tempWord <= 100 then
132 message = 'Word alarm triggered, the word value is '.. wordValue
133 sendAlarm(botToken, message, chatID)
134 print("Notification pushed of triggering alarm,"..wordValue)
135 elseif wordValue < 100 and wordValue ~= tempWord and tempWord >= 100 then
136 message = 'Word alarm dismissed, the word value is '.. wordValue
137 sendAlarm(botToken, message, chatID)
138 print("Notification pushed of dismissing alarm,"..wordValue)
139 end
140 tempWord = wordValue----Prevent monitoring values from continuous being sent to the platform
141 end
142 {{/code}}
143
144 == **1.6 LINE Notify** ==
145
146 This example shows how to use the LINE Notify to send message into LINE group. When monitoring bit "@test" changes, it will trigger and send the message. Please replace with your own Token.
147
148 {{code}}
149 local tempBit = 0
150 local tempWord = 0
151
152 local LineToken = "08XCpubkOdwGdGgRTXF0x8umiyrALtoM0v6lBFUV6PC"
153
154 local https = require("https")
155 local json = require("json")
156 local ltn12 = require("ltn12")
157
158 -- Send http.get request and return response result
159 function getHttpsUrl(url,header,reqbody)
160 local body = {}
161 local bodyJson = json.encode(body)
162 local result_table, code, headers, status = https.request{
163 method = "POST",
164 url = url,
165 source = ltn12.source.string(reqbody),
166 headers = header,
167 sink = ltn12.sink.table(body)
168 }
169 print("code:"..code)
170 if code~= 200 then
171 return
172 else
173 return body
174 end
175 end
176
177 function getMessageUrl(lineMessage)
178 local url = "https://notify-api.line.me/api/notify"
179 local reqMess = "message="..lineMessage
180 local headers =
181 {
182 ["Authorization"] = "Bearer "..LineToken,
183 ["Content-Type"] = "application/x-www-form-urlencoded",
184 ["Content-Length"] = #reqMess
185 }
186
187 print("Get the link:"..url)
188 getHttpsUrl(url, headers, reqMess)
189 end
190
191
192 function linenotify.main()
193 local bitValue = addr_getbit("@test");
194 local message = ''
195 print("b=="..bitValue)
196 if bitValue == 1 and bitValue ~= tempBit then
197 message = 'Alarm V-Box triggered, the output is '.. bitValue
198 getMessageUrl(message)
199 print("Notification pushed of triggering alarm,"..bitValue)
200 elseif bitValue == 0 and bitValue ~= tempBit then
201 message = 'Alarm V-Box dismissed, the output is '.. bitValue
202 getMessageUrl(message)
203 print("Notification pushed of dismissing alarm,"..bitValue)
204 end
205 tempBit = bitValue----Prevent monitoring values from continuous being sent to the platform
206
207 local wordValue = addr_getword("@t2")
208 print("w=="..wordValue)
209 --dosomething
210 if wordValue >= 100 and wordValue ~= tempWord and tempWord <= 100 then
211 message = 'Alarm V-Box triggered, the temperature is '.. wordValue
212 getMessageUrl(message)
213 print("Notification pushed of triggering alarm,"..wordValue)
214 elseif wordValue < 100 and wordValue ~= tempWord and tempWord >= 100 then
215 message = 'Alarm V-Box dismissed, the temperature is '.. wordValue
216 getMessageUrl(message)
217 print("Notification pushed of dismissing alarm,"..wordValue)
218 end
219 tempWord = wordValue----Prevent monitoring values from continuous being sent to the platform
220 end
221 {{/code}}
222
223 == **1.7 Twilio WhatsApp Messaging** ==
224
225 This example shows how to use the Twilio API to send WhatsApp message to private number. When monitoring bit "@testBit" changes, it will trigger and send the message. Please replace with your own SID, Token, twilioPhoneNumber and receiverPhoneNumber.
226
227 About how to register the Twilio API, please check the following video:
228
229 [[https:~~/~~/www.youtube.com/watch?v=Id4lKichauU>>https://www.youtube.com/watch?v=Id4lKichauU]]
230
231 {{code language="Lua"}}
232 local tempBit = 0
233 local tempWord = 0
234
235 local https = require("https")
236 local json = require("json")
237 local ltn12 = require("ltn12")
238
239 local SID = 'AC1703bd710ffa98006d2bcc0b********'
240 local Token = 'd3c11897623c39e538b20263ec19****'
241
242 local twilioPhoneNumber = '+14155238886'
243 local receiverPhoneNumber = '+8615880018277'
244
245 local b='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
246 function encodingBase64(data)
247 return ((data:gsub('.', function(x)
248 local r,b='',x:byte()
249 for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end
250 return r;
251 end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x)
252 if (#x < 6) then return '' end
253 local c=0
254 for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end
255 return b:sub(c+1,c+1)
256 end)..({ '', '==', '=' })[#data%3+1])
257 end
258
259 function encodeUrl(str)
260 str = string.gsub(str, "([^%w%.%- ])", function(c)
261 return string.format("%%%02X", string.byte(c)) end)
262 return string.gsub(str, " ", "+")
263 end
264
265
266
267
268 function requestBodySplice(message, sender, receiver)
269 local reqBody = ''
270 local encodeMess = encodeUrl(message)
271 local encodeSend = encodeUrl(sender)
272 local encodeRece = encodeUrl(receiver)
273 --reqBody = "Body=Hello%20Wecon2&From=whatsapp%3A%2B14155238886&To=whatsapp%3A%2B8615880018277"
274 reqBody = string.format("Body=%s&From=whatsapp:%s&To=whatsapp:%s", encodeMess, encodeSend, encodeRece)
275 print(reqBody)
276 return reqBody
277 end
278
279
280 -- Send http.get request and return response result
281 function getHttpsUrl(url,header,reqbody)
282 local body = {}
283 local bodyJson = json.encode(body)
284 local result_table, code, headers, status = https.request{
285 method = "POST",
286 url = url,
287 source = ltn12.source.string(reqbody),
288 headers = header,
289 sink = ltn12.sink.table(body)
290 }
291 print("code:"..code)
292 if code~= 200 then
293 return
294 else
295 return body
296 end
297 end
298
299 function getMessageUrl(whatsAppMessage)
300 local auth = SID..':'..Token
301 local url = "https://api.twilio.com/2010-04-01/Accounts/"..SID.."/Messages"
302 --local reqMess = "message="..twilioMessage
303 local reqMess = requestBodySplice(whatsAppMessage, twilioPhoneNumber, receiverPhoneNumber)
304 local headers =
305 {
306 ["Authorization"] = "Basic "..encodingBase64(auth),
307 ["Content-Type"] = "application/x-www-form-urlencoded",
308 ["Content-Length"] = #reqMess
309 }
310
311 print("Get the link:"..url)
312 getHttpsUrl(url, headers, reqMess)
313 end
314
315
316
317 function Twilio.main()
318 --dosomething
319 --local auth = SID..':'..Token
320 --print(requestBodySplice("HelloWorld", twilioPhoneNumber, receiverPhoneNumber))
321 --print(encodingBase64(auth))
322 local bitValue = addr_getbit("@testBit");
323 local message = ''
324 print("b=="..bitValue)
325 if bitValue == 1 and bitValue ~= tempBit then
326 message = 'Alarm V-Box triggered, the output is '.. bitValue
327 getMessageUrl(message)
328 print("Notification pushed of triggering alarm,"..bitValue)
329 elseif bitValue == 0 and bitValue ~= tempBit then
330 message = 'Alarm V-Box dismissed, the output is '.. bitValue
331 getMessageUrl(message)
332 print("Notification pushed of dismissing alarm,"..bitValue)
333 end
334 tempBit = bitValue----Prevent monitoring values from continuous being sent to the platform
335
336 local wordValue = addr_getword("@testWord")
337 print("w=="..wordValue)
338 --dosomething
339 if wordValue >= 100 and wordValue ~= tempWord and tempWord <= 100 then
340 message = 'Alarm V-Box triggered, the temperature is '.. wordValue
341 getMessageUrl(message)
342 print("Notification pushed of triggering alarm,"..wordValue)
343 elseif wordValue < 100 and wordValue ~= tempWord and tempWord >= 100 then
344 message = 'Alarm V-Box dismissed, the temperature is '.. wordValue
345 getMessageUrl(message)
346 print("Notification pushed of dismissing alarm,"..wordValue)
347 end
348 tempWord = wordValue----Prevent monitoring values from continuous being sent to the platform
349 end
350 {{/code}}
351
352 == **1.8 How to parse value from HTTP response body** ==
353
354 This example use [[https:~~/~~/www.weatherapi.com/>>https://www.weatherapi.com/]] as example, to show how to parse value from HTTP response body. When we input the city name into address "@HDW5050":
355
356 (% style="text-align:center" %)
357 [[image:InputHTTPparameter.png]]
358
359 Then the response body would be like as following:
360
361 {{code language="json"}}
362 {
363 "location": {
364 "name": "Madrid",
365 "region": "Madrid",
366 "country": "Spain",
367 "lat": 40.4,
368 "lon": -3.68,
369 "tz_id": "Europe/Madrid",
370 "localtime_epoch": 1669022636,
371 "localtime": "2022-11-21 10:23"
372 },
373 "current": {
374 "last_updated_epoch": 1669022100,
375 "last_updated": "2022-11-21 10:15",
376 "temp_c": 13.0,
377 "temp_f": 55.4,
378 "is_day": 1,
379 "condition": {
380 "text": "Partly cloudy",
381 "icon": "//cdn.weatherapi.com/weather/64x64/day/116.png",
382 "code": 1003
383 },
384 "wind_mph": 11.9,
385 "wind_kph": 19.1,
386 "wind_degree": 210,
387 "wind_dir": "SSW",
388 "pressure_mb": 1015.0,
389 "pressure_in": 29.97,
390 "precip_mm": 0.0,
391 "precip_in": 0.0,
392 "humidity": 88,
393 "cloud": 75,
394 "feelslike_c": 10.8,
395 "feelslike_f": 51.4,
396 "vis_km": 10.0,
397 "vis_miles": 6.0,
398 "uv": 3.0,
399 "gust_mph": 22.1,
400 "gust_kph": 35.6
401 }
402 }
403 {{/code}}
404
405 (% class="wikigeneratedid" %)
406 So we decode json into lua object to assign the value into addresses HDW6060(temperature), HDW7070(humidity), the code example like follows:
407
408 {{code language="lua"}}
409 local APIkey = '70faaecf926b4341b1974006221711'
410
411
412 local http = require("socket.http")
413 local json = require("json")
414
415 -- Send http.get request and return response result
416 function getHttpsUrl(url)
417 local result_table, code, headers, status = http.request(url)
418 print("code:"..code)
419 if code~= 200 then
420 return
421 else
422 return result_table
423 end
424 end
425
426 function sendAPI(key, city)
427 local url = "http://api.weatherapi.com/v1/current.json?key="..key.."&q="..city.."&aqi=no"
428 --local url = 'http://v-box.net'
429 --local url = 'https://www.google.com/'
430 --http://api.weatherapi.com/v1/current.json?key=70faaecf926b4341b1974006221711&q=Barcelona&aqi=no
431 print("Get the link:"..url)
432 local body = getHttpsUrl(url)
433 --print(body)
434 local jsonBody = json.decode(body)
435 --print(jsonBody["current"]["temp_c"])
436 --print(type(jsonBody["current"]["temp_c"]))
437 --print(type(jsonBody["current"]["humidity"]))
438 addr_setfloat("@HDW6060", jsonBody["current"]["temp_c"])
439 addr_setword("@HDW7070", jsonBody["current"]["humidity"])
440 end
441
442
443 function Weather.main()
444 local cityName = addr_getstring("@HDW5050",6)
445 print("cityName: "..cityName)
446 sendAPI(APIkey, cityName)
447 end
448 {{/code}}
449
450 = **2 V-Box connect with third part server** =
451
452 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.
453
454 (% class="mark" %)1.Europe server:eu.v-box.net
455
456 (% class="mark" %)2.Asean server:asean.v-box.net
457
458 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
459
460 OpenCloud platform is used in configuring the script.Then V-Box can connect with third part server.
461
462 Both mode can support script  to connect with third part server.the difference:
463
464 (% class="mark" %)1.If you want to store in WECON server ,please use V-NET.
465
466 (% class="mark" %)2.If your server requires SSL certificate to log in,please use OpenCloud.Because only OpenCloud platform can support to upload certificate
467
468 {{info}}
469 **✎Note: **Before program the script of MQTT, please make sure the server(MQTT broker) can be connected through MQTT Client tool.
470 {{/info}}
471
472 (% class="wikigeneratedid" %)
473 Tool link: **[[MQTT.fx>>http://mqttfx.jensd.de/index.php/download]]**
474
475 == **2.1 V-Box connect with test server(General Example)** ==
476
477 {{code language="lua"}}
478 --MQTT configuration table
479 local MQTT_CFG={}
480 MQTT_CFG.username = "weconsupport"
481 MQTT_CFG.password = "123456"
482 MQTT_CFG.netway = 0
483 MQTT_CFG.keepalive = 60
484 MQTT_CFG.cleansession = 1
485 --TCP URL
486 MQTT_URL = "tcp://mq.tongxinmao.com:1883"
487 --Client ID
488 MQTT_CLIENT_ID = "V-BOXH-AG"
489
490 --Generate UUID
491 function uuid()
492 local seed = {'e','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}
493 local tb = {}
494 for i=1, 32 do
495 table.insert(tb, seed[math.random(1,16)])
496 end
497 local sid=table.concat(tb)
498 return string.format('%s',
499 string.sub(sid,1,32)
500 )
501 end
502
503
504 --Topic name to subscribed
505 local SUBSCRIBE_TOPIC = 'testtopic/test/no1/123456'
506
507 --Topic name to be published
508 local PUBLISH_TOPIC = 'testtopic/test/no1/7890'
509
510
511 --real time
512 local LAST_TIME = 0
513
514
515 --initialize mqtt
516 function mqtt_init()
517 print(string.format("mqtt init mqtt_url:%s mqtt_clientid:%s", MQTT_URL, MQTT_CLIENT_ID))
518 if g_mq then
519 mqtt.close() --Close mqtt object
520 end
521 g_mq, err = mqtt.create(MQTT_URL, MQTT_CLIENT_ID) -- create mqtt object,and declare it as a global variable
522 if g_mq then
523 g_mq:on("message", mqtt_msg_callback) -- Register a callback for receiving messages
524 g_mq:on("offline", mqtt_msg_offline) -- Register a callback for offline
525 print("mqtt init success")
526 else
527 print("mqtt init failed:", err)
528 end
529 end
530
531 -- connect to mqtt
532 function mqtt_connect()
533 print("mqtt connecting...")
534 local stat, err = g_mq:connect(MQTT_CFG)
535 if stat == nil then
536 print("mqtt connect failed:", err)
537 return
538 else
539 print("mqtt connected")
540 end
541 g_mq:subscribe(SUBSCRIBE_TOPIC, 0)
542 end
543
544 --Offline callback function
545 function mqtt_msg_offline(cause)
546 print("mqtt offline, cause:", cause)
547 end
548
549 -- Received message callback function
550 function mqtt_msg_callback(topic, msg)
551 print("topic:", topic)
552 print("msg:", msg)
553 local objMsg = json.decode(msg)
554 local water = objMsg.data.waterlevel
555 local temp = objMsg.data.temperature
556 addr_setword("@HDW20",water)
557 addr_setword("@HDW10",temp)
558 end
559
560 --Send data (data upload to platform and encapsulate it with custom functions)
561 function send_data()
562 local pub_data = {
563 timestamp = os.time(),
564 messageId = 1,
565 event = 'test_data',
566 mfrs = 'V-Box',
567 data = {
568 id = uuid(),
569 waterlevel = addr_getword("@HDW10"),
570 temperature = addr_getword("@HDW20")
571 }
572 }
573 return g_mq:publish(PUBLISH_TOPIC, json.encode(pub_data), 0, 0)
574 end
575
576
577 --main function fixed timed execution
578 function MQTT.main()
579 --dosomething
580 print(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " main start")
581 --determine the mqtt object whether exist
582 if g_mq then
583 --determine the mqtt object whether has been connected or not
584 if g_mq:isconnected() then
585 send_data()
586 else
587 --if exceed 5 sec not connect, reconnect once
588 if os.time() - LAST_TIME > 5 then
589 LAST_TIME = os.time()
590 --reinitial the mqtt object
591 mqtt_init()
592 --connect to mqtt or reconnect
593 mqtt_connect()
594 end
595 end
596 else
597 --mqtt object does not exist so create new one
598 mqtt_init()
599 end
600 print(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " main end")
601 end
602 {{/code}}
603
604 == **2.2 V-Box connect with customer server:grouprobotinfo.com** ==
605
606 This demo does not use SSL certification. Script is as below
607
608 Demo1:
609
610 {{code language="lua"}}
611 -- Meta class
612 --main
613 function mq.main()
614 if not mq.m then
615 local err = ""
616
617 mq.m, err = mqtt.create("tcp://grouprobotinfo.com:1883", "ClienID") -- create connection
618 if mq.m then
619 mq.config = {
620 username = "",-- ID
621 password = "",-- password
622 netway = 1, -- Ethernet connection, WIFI=1
623 -- keepalive = 100, -- Optional, set the connection heartbeat interval for 100 seconds.
624 -- cleansession = 0, -- Optional, keep session
625 }
626 mq.m:on("message", function(topic, msg) -- Register for receiving message callbacks
627 local str = string.format("%s:%s", topic, msg)
628 -- print("mqtt msg:", str) -- Print out the received topics and content
629 end)
630 mq.m:on("offline", function (cause) -- Register for lost connection callbacks
631 -- addr_setstring("@xxx", "cause"..(cause or " got nil"))
632 end)
633 mq.m:on("arrived", function() -- Registration for sending messages to callbacks
634 print("msg arrived")
635 end)
636 else
637 print("mqtt create failed:", err) -- Create object failed
638 end
639 else
640 if mq.m:isconnected() then -- If online, post a message
641 local phaseStatus ="unknow"
642 if addr_getbit("@Standby")== 1 then
643 phaseStatus = "Standby"
644 elseif addr_getbit("@Pre-Freeze")==1 then
645 phaseStatus= "Pre-Freeze"
646 elseif addr_getbit("@Prepare")==1 then
647 phaseStatus ="Prepare"
648 elseif addr_getbit("@Primary Dry")==1 then
649 phaseStatus = "Primary dry"
650 elseif addr_getbit("@Secondary Dry")==1 then
651 phaseStatus = "Secondary Dry"
652 end
653 --print(addr_getbit("@Primary Dry"))
654 -------------------------------------------------------------------------------------------------------------------------
655 local activating ="unknow"
656 if addr_getbit("@Compressor")==1 then
657 activating = ",".."Compressor"
658 end
659 if addr_getbit("@Silicone Pump")==1 then
660 activating = activating..",".."Silicone Pump"
661 end
662 if addr_getbit("@Vacuum Pump")==1 then
663 activating = activating..",".."Vacuum Pump"
664 end
665 if addr_getbit("@Root Pump")==1 then
666 activating = activating..",".."Root Pump"
667 end
668 if addr_getbit("@Heater")==1 then
669 activating = activating..",".."Heater"
670 end
671 if addr_getbit("@Valve Silicone")==1 then
672 activating = activating..",".."Valve Silicone"
673 end
674 if addr_getbit("@Valve Ice Condenser")==1 then
675 activating = activating..",".."Valve Ice Condenser"
676 end
677 if addr_getbit("@Valve Vacuum Pump")==1 then
678 activating = activating..",".."Valve Vacuum Pump"
679 end
680 local pr_activating =string.sub(activating,2)
681 -- print(pr_activating)
682 local status_text ="unknow"
683 if addr_getbit("@Status Run")==1 then
684 status_text = "RUNNING"
685 else
686 status_text = "STOP"
687 end
688 -------------------------------------------------------------------------------------------------------------------------
689 local js = {type="status",
690 mc_name ="FD300",
691 status=status_text,
692 elapsed_time={
693 hour=addr_getword("@Elapsed Time (Hour)"),
694 min=addr_getword("@Elapsed Time (Minute)"),
695 sec=addr_getword("@Elapsed Time (Second)")
696 },
697 phase = phaseStatus,
698 step = addr_getword("@Step"),
699 activating_output = pr_activating,
700 sv=addr_getshort("@SV Silicone")/10,
701 pv=addr_getshort("@PV Silicone")/10,
702 product1=addr_getshort("@Product 1")/10,
703
704 product2=addr_getshort("@Product 2")/10,
705 product3=addr_getshort("@Product 3")/10,
706 product4=addr_getshort("@Product 4")/10,
707 ice1=addr_getshort("@Ice condenser 1")/10,
708 ice2=addr_getshort("@Ice condenser 2")/10,
709 vacuum=addr_getfloat("@Vacuum")
710 }
711 local jsAlarm = { HPC = addr_getbit("@B_25395#W0.00"),
712 ODPC = addr_getbit("@B_25395#W0.01"),
713 MTPC=addr_getbit("@B_25395#W0.02"),
714 HTT = addr_getbit("@B_25395#W1.03"),
715 CPC = addr_getbit("@B_25395#W0.08"),
716 CPSP =addr_getbit("@B_25395#W1.00"),
717 CPVP =addr_getbit("@B_25395#W0.10"),
718 CPRP =addr_getbit("@B_25395#W0.11"),
719 HP =addr_getbit("@B_25395#W1.01"),
720 PP= addr_getbit("@B_25395#W1.02"),
721 PO=addr_getbit("@B_25395#W0.07"),
722 FSE=addr_getbit("@B_25395#W2.04"),
723 AVVSVV=addr_getbit("@B_25395#W1.12"),
724 ICHT=addr_getbit("@B_25395#W3.06")
725 }
726 -- ("@B_25395#CIO1.02")
727 mq.m:publish("mqtt-v-box-epsilon-fd300", json.encode(js) , 0, 0)
728 mq.m:publish("mqtt-v-box-epsilon-alarm-fd300", json.encode(jsAlarm) , 0, 0)
729 else
730 local stat, err = mq.m:connect(mq.config) -- connection
731 if stat == nil then --Determine whether to connect
732 print("mqtt connect failed:", err)
733 return -- Connection failed, return directly
734 end
735 mq.m:subscribe("mqtt-v-box-epsilon", 0)-- Subscribe to topics
736
737 end
738 -- mq.m:unsubscribe("stc/test")
739 -- mq.m:disconnect() -- close matt
740 -- mq.m:close() -- close clase
741 end
742 end
743 {{/code}}
744
745 == **2.3 V-Box connect with Azure platform** ==
746
747 In this demo,V-Box connects with Azure by SSL certification.
748
749 Video link: [[https:~~/~~/youtu.be/cdI6rIQcpMY?list=PL_Bpnb2RgaksCic9HCcVAZhU9sYwCRKzW>>https://youtu.be/cdI6rIQcpMY?list=PL_Bpnb2RgaksCic9HCcVAZhU9sYwCRKzW]]
750
751 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]]
752
753 Script is as below
754
755 (% class="box infomessage" %)
756 (((
757 ~-~-https:~/~/support.huaweicloud.com/qs-IoT/iot_05_0005.html mqtt.fx monitor to connect azure iot
758 sprint = print
759
760 ~-~-Get custom configuration parameters (vbox custom information)
761 ~-~-local CUSTOM = bns_get_config("bind")
762 ~-~-local DS_ID = CUSTOM.DSID or "60a71ccbbbe12002c08f3a1a_WECON"
763
764
765 ~-~-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)
766 local MQTT_URL, MQTT_CLIENTID, MQTT_CFG, MQTT_LWT, MQTT_CART = mqtt.setup_cfg()
767
768 ~-~-MQTT_CFG.username = '60a71ccbbbe12002c08f3a1a_WECON'
769 ~-~-MQTT_CFG.password='wecon123'
770 ~-~-MQTT_CLIENTID = '60a71ccbbbe12002c08f3a1a_WECON_0_0_2021052110usernxame:60a71ccbbbe12002c08f3a1a_WECONpassword:a0a951581855aa8e0262129da6cf1b43f2c0ecfac4fa56117fc5a20c90be169a'
771
772 ~-~-publish to topics
773 local pub_RE_TOPIC = string.format('devices/wecon_02/messages/events/')
774 ~-~-Subscribe topics
775 local Subscribe_RE_TOPIC1 = string.format('devices/wecon_02/messages/devicebound/#')
776
777 ~-~-variable
778 local last_time = 0
779
780
781 ~-~-Timing main function
782 function Azure.main()
783
784 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " Azureiot.main start")
785 if g_mq then
786 if g_mq:isconnected() then
787 send_Data()
788 else
789 if os.time() - last_time > 20 then
790 last_time = os.time()
791 mymqtt_connect()
792 end
793 end
794 else
795 mymqtt_init()
796 end
797 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " Azureiot.main end")
798 end
799
800 ~-~- Initialize MQTT
801 function mymqtt_init()
802 sprint(string.format("mqtt init mqtt_url:%s mqtt_clientid:%s", MQTT_URL, MQTT_CLIENTID))
803 g_mq, err = mqtt.create(MQTT_URL, MQTT_CLIENTID) ~-~- Create the object and declare it as a global variable
804 if g_mq then
805 g_mq:on("message", mymqtt_msg_callback) ~-~- Register to receive message callbacks
806 sprint("mqtt init success")
807 else
808 sprint("mqtt init failed:", err)
809 end
810 end
811
812 ~-~- Connect to MQTT server
813 function mymqtt_connect()
814 sprint("mqtt connecting...")
815 local stat, err = g_mq:connect(MQTT_CFG,MQTT_LWT, MQTT_CART)
816 if stat == nil then
817 sprint("mqtt connect failed:", err)
818 return
819 else
820 sprint("mqtt connected")
821 end
822 g_mq:subscribe(Subscribe_RE_TOPIC1, 0) 
823 end
824
825 ~-~- Receive MQTT message callback function
826 function mymqtt_msg_callback(topic, msg)
827 print("topic:",topic)
828 print("revdata:",msg)
829 ~-~- local revData = json.decode(msg)
830 ~-~- if topic == Subscribe_RE_TOPIC1 then ~-~-Process topic information subscribed from the cloud
831 ~-~- if string.match(topic,Subscribe_RE_TOPIC1) then
832 ~-~- print("topi11:",topic)
833 setValue(revData)
834 ~-~- end
835 end
836
837 ~-~-Process the received data
838 ~-~-function setValue(revData)
839 ~-~- if revData ~~=nil then 
840 ~-~- for i,v in pairs(revData) do
841 ~-~- print("Data received:",i,v)
842 ~-~- end
843 ~-~- end
844 ~-~-end
845
846 ~-~-Get real-time data
847 function getData()
848 local jdata = {}
849 local addr = bns_get_alldata()
850 print(json.encode(addr))
851 for i,v in pairs(addr) do
852 if v[2] == 1 then
853 jdata[v[3]] = v[4]
854 end
855 end
856 return jdata
857 end
858
859
860 ~-~-send data
861 function send_Data()
862 local pub_data = {100
863 ~-~- services=~{~{
864 \\ ~-~-serviceId ='Temperature',
865 ~-~- properties={
866 ~-~- value = 55
867 ~-~- },
868 ~-~- }}
869 }
870 sprint(json.encode(pub_data))
871 print("..........",pub_RE_TOPIC)
872 return g_mq:publish(pub_RE_TOPIC, json.encode(pub_data), 0, 0)
873 end
874 )))
875
876 == **2.4 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)** ==
877
878 1.Register a account: [[https:~~/~~/www.huaweicloud.com/intl/en-us/s/JUlPVERNJQ>>https://www.huaweicloud.com/intl/en-us/s/JUlPVERNJQ]]
879
880 2.log in the Huawei IOTDA
881
882 [[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]]
883
884 3.Create product
885
886 (% style="text-align:center" %)
887 [[image:1624433478954-859.png||height="497" width="1100" class="img-thumbnail"]]
888
889 4.Product name,manufacturer,device type and industry,set according to your own needs.
890
891 Protocol: MQTT
892
893 Data Type: JSON
894
895 After finishing configuration,please click "OK"
896
897 (% style="text-align:center" %)
898 [[image:1624433531968-337.png||height="568" width="700" class="img-thumbnail"]]
899
900 5.Device
901
902 After product register,continue to configure "individual register".Click "Device"~-~->"individual register"
903
904 (% style="text-align:center" %)
905 [[image:1624434757597-117.png||class="img-thumbnail"]]
906
907 **Notes for registering device:**
908
909 Product: Previous product registration.
910
911 Node ID, Device Name: set according to your own needs.
912
913 Secret: need to be configured, will be used when connecting later
914
915 After configuration, click OK to generate a device ID and password, which will be used for device access later.
916
917 (% style="text-align:center" %)
918 [[image:1624436421499-613.png||height="499" width="700" class="img-thumbnail"]]
919
920 (% style="text-align:center" %)
921 [[image:1624437798012-126.png||height="366" width="500" class="img-thumbnail"]]
922
923 6. Connection authentication (use MQTT.fx tool to access the IoT platform)
924
925 (1)Open mqttClientIdGenerator tool Java(TM) Platform SE binary
926
927 **[[Download>>https://wecon-disk.oss-ap-southeast-1.aliyuncs.com/Download/WIKI/V-BOX/Demo/Huawei/mqttClientIdGenerator-19.2.0.zip]]**
928
929 (% style="text-align:center" %)
930 [[image:1624437573798-815.png||height="351" width="700" class="img-thumbnail"]]
931
932 (2)Fill in the device ID and secret (deviceid and secret generated when registering the device) to generate connection message
933
934 Client ID, user name, password
935
936 (% style="text-align:center" %)
937 [[image:1624437756866-251.png||height="405" width="700" class="img-thumbnail"]]
938
939 (3) Download certificate file"North-Beijing4"
940
941 [[https:~~/~~/support.huaweicloud.com/en-us/devg-iothub/iot_02_1004.html>>https://support.huaweicloud.com/en-us/devg-iothub/iot_02_1004.html]]
942
943 (% style="text-align:center" %)
944 [[image:1624438225398-363.png||height="403" width="800" class="img-thumbnail"]]
945
946 (% style="text-align:center" %)
947 [[image:1624438260025-610.png||height="408" width="700" class="img-thumbnail"]]
948
949 7.Run MQTTfx tool to connect with Huawei
950
951 Download link: [[http:~~/~~/mqttfx.jensd.de/index.php/download>>url:http://mqttfx.jensd.de/index.php/download]]
952
953 (1)Click on the setting ICON
954
955 (% style="text-align:center" %)
956 [[image:1624438821280-974.png||height="198" width="500" class="img-thumbnail"]]
957
958 (2)Fill in IIOT MQTT device access address, and configure authentication parameters.
959 First: It is the server and port connected to Huawei IOT, which can be viewed through the overview of the interface.
960
961 (% style="text-align:center" %)
962 [[image:1624439086268-985.png||class="img-thumbnail"]]
963
964 Domain name:iot-mqtts.cn-north-4.myhuaweicloud.com
965
966 Port: 8883
967
968 Client ID: check step 6
969
970 (% style="text-align:center" %)
971 [[image:1624439672168-492.png||height="458" width="600" class="img-thumbnail"]]
972
973 (3)Upload SSL certificate file,check step 6
974
975 Select folder java~-~->DigiCertGlobalRootCA.crt.pem and click OK or apply button
976
977 (% style="text-align:center" %)
978 [[image:1624439912938-659.png||height="458" width="600" class="img-thumbnail"]]
979
980 (4)Connect and test publish and subscribe
981
982 (% style="text-align:center" %)
983 [[image:1624440014872-688.png||height="232" width="700" class="img-thumbnail"]]
984
985 (% style="text-align:center" %)
986 [[image:1624440026937-386.png||height="215" width="700" class="img-thumbnail"]]
987
988 Huawei publish topic format: $oc/devices/{device_id}/sys/properties/report
989
990 (% style="text-align:center" %)
991 [[image:1624440404119-815.png||class="img-thumbnail"]]
992
993 Huawei subscribe topic format: **$oc/devices/{device_id}/sys/commands/#**
994
995 (% style="text-align:center" %)
996 [[image:1624447157493-672.png||class="img-thumbnail"]]
997
998 (% style="text-align:center" %)
999 [[image:1624447209982-715.png||class="img-thumbnail"]]
1000
1001 (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:
1002 ①Select the corresponding product from Huawei products to view
1003
1004 (% style="text-align:center" %)
1005 [[image:1624440647663-632.png||class="img-thumbnail"]]
1006
1007 ②Custom model: used to display the service ID name of the configuration report.
1008
1009 (% style="text-align:center" %)
1010 [[image:1624440793982-974.png||height="410" width="700" class="img-thumbnail"]]
1011
1012 (% style="text-align:center" %)
1013 [[image:1624440883015-105.png||height="370" width="600" class="img-thumbnail"]]
1014
1015 ③Add property, ID of monitoring point, and data format:
1016
1017 (% style="text-align:center" %)
1018 [[image:1624441052296-108.png||height="477" width="600" class="img-thumbnail"]]
1019
1020 ④After the configuration is complete, check the received data on the device
1021
1022 (% style="text-align:center" %)
1023 [[image:1624441186851-536.png||height="434" width="700" class="img-thumbnail"]]
1024
1025 == **2.5 V-Box connect with Huawei platform** ==
1026
1027 In this demo,V-Box connects with Huawei by SSL certification.
1028
1029 1.Create a project access for Huawei IOT
1030
1031 2.configure MQTT configuration
1032
1033 (% style="text-align:center" %)
1034 [[image:1624506363847-661.png||height="507" width="1000" class="img-thumbnail"]]
1035
1036 3.Create a script with the demo as below.
1037
1038 Script is as below
1039
1040 (% class="box infomessage" %)
1041 (((
1042 (% class="box infomessage" %)
1043 (((
1044 ~-~- mqtt.fx simulated access to Huawei Cloud IoT platform refer to 2.4
1045 sprint = print
1046
1047 ~-~-Get custom configuration parameters (gateway customization information)
1048 local CUSTOM = bns_get_config("bind")
1049 local DS_ID = CUSTOM.DSID or "5dfa0700df1ae506179afb9c_wecon"
1050
1051
1052 ~-~-OpenCloud mode interface, obtain MQTT information configured on cloud platform: (5 returned, respectively server address, client ID, connection table, last word table, certificate table)
1053 local MQTT_URL, MQTT_CLIENTID, MQTT_CFG, MQTT_LWT, MQTT_CART = mqtt.setup_cfg()
1054
1055 MQTT_CFG.username =DS_ID
1056 MQTT_CFG.password='d030d92338fcc18cd10fabb3003a4a0f6620fa6822cd3c23b1d9bc790200c6e7'
1057 MQTT_CLIENTID = '5dfa0700df1ae506179afb9c_wecon_0_0_2019121819'
1058
1059 ~-~-publish topic format:$oc/devices/{device id}/sys/properties/report
1060
1061 local pub_RE_TOPIC = string.format('$oc/devices/60a71ccbbbe12002c08f3a1a_WECON/sys/properties/report')
1062
1063 ~-~-variate
1064 local last_time = 0
1065
1066
1067 ~-~-Timing principal function
1068 function hwyiot.main()
1069
1070 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " hwyiot.main start")
1071 if g_mq then
1072 if g_mq:isconnected() then
1073 send_Data()
1074 else
1075 if os.time() - last_time > 20 then
1076 last_time = os.time()
1077 mymqtt_connect()
1078 end
1079 end
1080 else
1081 mymqtt_init()
1082 end
1083 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " hwyiot.main end")
1084 end
1085
1086 ~-~- initializationMQTT
1087 function mymqtt_init()
1088 sprint(string.format("mqtt init mqtt_url:%s mqtt_clientid:%s", MQTT_URL, MQTT_CLIENTID))
1089 g_mq, err = mqtt.create(MQTT_URL, MQTT_CLIENTID) ~-~- Create the object and declare it as a global variable
1090 if g_mq then
1091 g_mq:on("message", mymqtt_msg_callback) ~-~- Register to receive message callbacks
1092 sprint("mqtt init success")
1093 else
1094 sprint("mqtt init failed:", err)
1095 end
1096 end
1097
1098 ~-~- Connect to the MQTT server
1099 function mymqtt_connect()
1100 sprint("mqtt connecting...")
1101 local stat, err = g_mq:connect(MQTT_CFG,MQTT_LWT, MQTT_CART)
1102 if stat == nil then
1103 sprint("mqtt connect failed:", err)
1104 return
1105 else
1106 sprint("mqtt connected")
1107 end
1108
1109 ~-~-subscribe topic format:$oc/devices/{device_id}/sys/commands/#
1110
1111 g_mq:subscribe('$oc/devices/60a71ccbbbe12002c08f3a1a_WECON/sys/commands/#', 0) 
1112 end
1113
1114 ~-~- Receive the message callback function
1115 function mymqtt_msg_callback(topic, msg)
1116 sprint("recv data!")
1117 sprint("topic:msg", topic,msg)
1118 print(msg)
1119 local revData = json.decode(msg)
1120 \\end
1121
1122 ~-~-Send data
1123 function send_Data()
1124 local pub_data = {
1125 msgType = 'deviceReq',
1126 data = ~{~{
1127 serviceId ='Battery',
1128 serviceData={
1129 batteryLevel = 55
1130 }
1131 }}
1132 }
1133 return g_mq:publish(pub_RE_TOPIC, json.encode(pub_data), 0, 0)
1134 end
1135 )))
1136 )))
1137
1138 4.Download project access into V-Box to test in debug page
1139
1140 (% style="text-align:center" %)
1141 [[image:1624506710354-406.png||height="658" width="1000" class="img-thumbnail"]]
1142
1143 (% style="text-align:center" %)
1144 [[image:1624506666650-161.png||height="547" width="1000" class="img-thumbnail"]]
1145
1146 == **2.6 V-Box connect with AWS platform** ==
1147
1148 === **Log in AWS** ===
1149
1150 Login aws account and click“Connect an IoT device”
1151
1152 [[image:image-20220709165402-1.png]]
1153
1154 [[image:image-20220709165402-2.png]]
1155
1156
1157 === **Create policy** ===
1158
1159 Click “Secure”~-~-->“Policies”~-~-->“Create policy”~-~-->Click “Create”
1160
1161 [[image:image-20220709165402-3.png]]
1162
1163 Name the policy~-~-->Click “JSON”~-~-->Copy the following content~-~-->Click “Create”
1164
1165 [[image:image-20220709165402-5.png]]
1166
1167 [[image:image-20220709165402-4.png]]
1168
1169 {{code language="java"}}
1170 {
1171   "Version": "2012-10-17",
1172   "Statement": [
1173     {
1174       "Effect": "Allow",
1175       "Action": [
1176         "iot:Connect",
1177         "iot:Publish",
1178         "iot:Subscribe",
1179         "iot:Receive",
1180         "greengrass:Discover"
1181       ],
1182       "Resource": "*"
1183     }
1184   ]
1185 }
1186 {{/code}}
1187
1188 === **Create things** ===
1189
1190 Click “Manage”~-~-->“Things”~-~-->“Create things”~-~-->“Create single thing”
1191
1192 [[image:image-20220709165402-6.png]]
1193
1194 [[image:image-20220709165402-7.png]]
1195
1196 Name the thing~-~-->Click “Next”
1197
1198 [[image:image-20220709165402-8.png]]
1199
1200 Select the way to create certificate
1201
1202 [[image:image-20220709165402-9.png]]
1203
1204 Select policy
1205
1206 [[image:image-20220709165402-10.png]]
1207
1208 [[image:image-20220709165402-11.png]]
1209
1210
1211 === **Test with MQTT.fx tool** ===
1212
1213 Click “View Setting” to get the “Broker Adress”
1214
1215 [[image:image-20220709165402-13.png]]
1216
1217 [[image:image-20220709165402-12.png]]
1218
1219 Create one connection in MQTT.fx tool, set broker port as 8883.
1220
1221 [[image:image-20220709165402-14.png]]
1222
1223 Upload the CA File, Client Certificate File, Client Key File
1224
1225 [[image:image-20220709165402-15.png]]
1226
1227 Publish message to topic “TEST”
1228
1229 [[image:image-20220709165402-17.png]]
1230
1231 Click”Test”~-~-->”MQTT test client”~-~-->”Subscrible to a topic”, to get message publish from MQTT.fx tool.
1232
1233 [[image:image-20220709173500-1.png]]
1234
1235 And we can also send message form AWS platform to MQTT.fx tool.
1236
1237 [[image:image-20220709165402-18.png]]
1238
1239 === **Configurate in CloudTool** ===
1240
1241 Copy the same setting in MQTT.fx to MQTT configuration
1242
1243 [[image:image-20220709165402-19.png]]
1244
1245 Add a lua script and copy the lua demo into it.
1246
1247 [[image:image-20220709165402-20.png]]
1248
1249 {{info}}
1250 **✎Note:** Before using the following demo script, please make sure the V-Box firmware is newer than 22110701
1251 {{/info}}
1252
1253 {{code language="lua"}}
1254 sprint = print
1255
1256 --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)
1257
1258 local MQTT_URL, MQTT_CLIENTID, MQTT_CFG, MQTT_LWT, MQTT_CART = mqtt.setup_cfg()
1259
1260 --publish to topics
1261
1262 local pub_RE_TOPIC = string.format('TEST')
1263
1264 --Subscribe topics
1265
1266 local Subscribe_RE_TOPIC1 = string.format('TEST')
1267
1268 --variable
1269
1270 local last_time = 0
1271
1272 --Timing main function
1273
1274 function aws.main()
1275
1276 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " aws.main start")
1277
1278 if g_mq then
1279
1280 if g_mq:isconnected() then
1281
1282 send_Data()
1283
1284 else
1285
1286 if os.time() - last_time > 5 then
1287
1288 last_time = os.time()
1289
1290 mymqtt_connect()
1291
1292 end
1293
1294 end
1295
1296 else
1297
1298 mymqtt_init()
1299
1300 end
1301
1302 sprint(os.date("%Y-%m-%d %H:%M %S", os.time()) .. " aws.main end")
1303
1304 end
1305
1306
1307
1308 -- Initialize MQTT
1309
1310 function mymqtt_init()
1311
1312 sprint(string.format("mqtt init mqtt_url:%s mqtt_clientid:%s", MQTT_URL, MQTT_CLIENTID))
1313
1314 g_mq, err = mqtt.create(MQTT_URL, MQTT_CLIENTID, 1) -- Create the object and declare it as a global variable, 1 means using the domain to connect
1315
1316 if g_mq then
1317
1318 g_mq:on("message", mymqtt_msg_callback) -- Register to receive message callbacks
1319
1320 sprint("mqtt init success")
1321
1322 else
1323
1324 sprint("mqtt init failed:", err)
1325
1326 end
1327
1328 end
1329
1330 -- Connect to MQTT server
1331
1332 function mymqtt_connect()
1333
1334 sprint("mqtt connecting...")
1335
1336 local stat, err = g_mq:connect(MQTT_CFG,MQTT_LWT, MQTT_CART)
1337
1338 if stat == nil then
1339
1340 sprint("mqtt connect failed:", err)
1341
1342 return
1343
1344 else
1345
1346 sprint("mqtt connected")
1347
1348 end
1349
1350 g_mq:subscribe(Subscribe_RE_TOPIC1, 0)
1351
1352 end
1353
1354 -- Receive MQTT message callback function
1355
1356 function mymqtt_msg_callback(topic, msg)
1357
1358 print("topic:",topic)
1359
1360 print("revdata:",msg)
1361
1362 local revData = json.decode(msg)
1363
1364 print (revData)
1365
1366 if topic == Subscribe_RE_TOPIC1 then --Process topic information subscribed from the cloud
1367
1368 if string.match(topic,Subscribe_RE_TOPIC1) then
1369
1370 --if revData ~= nil then
1371
1372 for k,v in pairs (revData) do
1373
1374 print("printing revdata after kv here")
1375
1376 print (k,v)
1377
1378 end
1379
1380 print ("current state is",fanstate)
1381
1382 --end
1383
1384 end
1385
1386 end
1387
1388 end
1389
1390
1391
1392 --Get real-time data
1393
1394 function getData()
1395
1396 local jdata = {}
1397
1398 local addr = bns_get_alldata()
1399
1400 print(json.encode(addr))
1401
1402 for i,v in pairs(addr) do
1403
1404 if v[2] == 1 then
1405
1406 jdata[v[3]] = v[4]
1407
1408 end
1409
1410 end
1411
1412 return jdata
1413
1414 end
1415
1416 --send data
1417
1418 function send_Data()
1419
1420 local pub_data =
1421 {
1422 123
1423 }
1424
1425 sprint(json.encode(pub_data))
1426
1427 print("..........",pub_RE_TOPIC)
1428
1429 return g_mq:publish(pub_RE_TOPIC, json.encode(pub_data), 0, 0)
1430
1431 end
1432 {{/code}}
1433
1434 Get message in AWS
1435
1436 [[image:image-20220709165402-21.png]]