Show last authors
1 **~ Contents:**
2
3 {{toc/}}
4
5
6 = **1. Introduction** =
7
8
9 //The Dragino LoRaWAN gateway can communicate with [[Amazon>>url:https://portal.aws.amazon.com/]] LoRaWAN Network Server~://
10
11
12 **//Below list of the support products and Requirements~://**
13
14 1. //LoRaWAN Gateway model: [[LIG16>>url:http://www.dragino.com/products/lora-lorawan-gateway/item/171-lig16.html]], [[LG308>>url:http://www.dragino.com/products/lora-lorawan-gateway/item/140-lg308.html]], [[DLOS8>>url:http://www.dragino.com/products/lora-lorawan-gateway/item/160-dlos8.html]] [[LPS8>>url:http://www.dragino.com/products/lora-lorawan-gateway/item/148-lps8.html]]//
15 1. //Firmware version since:[[lgw~~-~~-build-v5.4.1614945073>>url:http://www.dragino.com/downloads/index.php?dir=LoRa_Gateway/LIG16/Firmware/Release/lgw--build-v5.4.1614945073-20210305-1953/]]//
16
17 **//What you'll learn in this tutorial//**
18
19
20 //1. How to register a gateway with AWS//
21
22 //2. How to register an end node with AWS//
23
24 //3. How to accept payload date with AWS//
25
26
27 = **2. Gateway Setup Instruction** =
28
29
30 == **2.1 sign up for [[an AWS >>url:https://portal.aws.amazon.com/]]account and select the area** ==
31
32
33 //Sign up for an AWS account//
34
35 [[image:image-20220524141920-1.png]]
36
37
38 //Select area//
39
40 [[image:image-20220524142008-2.png]]
41
42
43 //**Note:** Currently, AWS IoT Core for LoRaWAN is available today in US East (N. Virginia) and Europe (Ireland) Regions. if you are not in either of these areas, their options will not affect your usage.//
44
45
46 == 2.2 Step 2: [[Add an IAM role>>url:https://console.aws.amazon.com/iam/home#/roles]] ==
47
48
49 **//To add the IAM role to allow the Configuration and Update Server (CUPS) to manage gateway credentials:、//**
50
51 //**1.** Open the Roles hub of the IAM console and choose Create role.//
52
53 //**2.** If you think that you might have already added the IoTWirelessGatewayCertManagerRole role, in the search bar, enter IoTWirelessGatewayCertManagerRole.//
54
55 //If you see an IoTWirelessGatewayCertManagerRole role in the search results, you have the necessary IAM role. You can leave the procedure now.//
56
57 //If the search results are empty, you don't have the necessary IAM role. Continue the procedure to add it.//
58
59 //**3. **In Select type of trusted entity, choose Another AWS account.//
60
61 //**4.** In Account ID, enter your AWS account ID and then choose Next: Permissions.//
62
63 //**5.** In the search box, enter AWSIoTWirelessGatewayCertManager.//
64
65 //**6.** In the list of search results, select the policy named AWSIoTWirelessGatewayCertManager.//
66
67 //**7.** Choose Next: Tags, and then choose Next: Review.//
68
69 //**8.** In Role name, enter IoTWirelessGatewayCertManagerRole, and then choose to Create role.//
70
71 //**9.** To edit the new role, in the confirmation message, choose IoTWirelessGatewayCertManagerRole.//
72
73 //**10.** In Summary, choose the Trust relationships tab and then choose Edit trust relationship.//
74
75 //**11.** In the Policy Document, change the Principal property to look like this example.//
76
77
78 (% class="box" %)
79 (((
80 "Principal": {
81 "Service": "iotwireless.amazonaws.com"
82 },
83 )))
84
85 (% class="box" %)
86 (((
87 After you change the Principal property, the complete policy document should look like this example.
88 )))
89
90 (% class="box" %)
91 (((
92 {
93 "Version": "2012-10-17",
94 "Statement": [
95 {
96 "Effect": "Allow",
97 "Principal": {
98 "Service": "iotwireless.amazonaws.com"
99 },
100 "Action": "sts:AssumeRole",
101 "Condition": {}
102 }
103 ]
104 }
105
106
107 )))
108
109
110 **12.** To save your changes and exit, choose Update Trust Policy. Note: You’ve now created the IoTWirelessGatewayCertManagerRole. You won’t need to do this again.
111
112 [[image:image-20220530171729-40.png]]
113
114 tart create role
115
116
117 [[image:image-20220530172709-43.png]]
118
119
120 Choose Another AWS account
121
122
123 [[image:image-20220525172718-3.png]]
124
125 start Create policy
126
127
128 [[image:image-20220525172756-4.png]]
129
130 Choose Next review
131
132
133 [[image:image-20220525173033-7.png]]
134
135 In role name,enter AWSIoTWirelessGatewayCertManagerRole,and then choose Create role.
136
137
138 [[image:image-20220525172948-6.png]]
139
140 To edit the_new role
141
142
143 [[image:image-20220525173155-8.png]]
144
145 Choose Edit trust relationship.
146
147
148 [[image:image-20220525173226-9.png]]
149
150 Change policy Document
151
152
153 == 2.3 Step 3: Add gateway ==
154
155 Locate IoT Core in the AWS Service Control Panel, and locate the Wireless Connection in the IoT Core Control Panel to start adding the Gateway
156
157 [[image:image-20220530162125-11.png]]
158
159 Locate IoT Core in the AWS Service Control Panel
160
161
162 [[image:image-20220530162223-12.png]]
163
164
165 locate the Wireless Connection in the IoT Core Control Panel
166
167
168 == 2.4 Step 4: Get a unique Gateway ID in the gateway ==
169
170
171 Every gateway has a Gateway ID, the ID can be found at Amazon AWS IoT.
172
173 [[image:image-20220525173425-12.png]]
174
175 Gateway ID
176
177
178 **Note**:User must use the Gateway ID of the Amazon AWS IoT page as the EUI
179
180 **Notice**: In latest firmware. the AWS-IoT configured page is under LoRaWAN Basic Station page.
181
182
183 [[image:image-20220530162351-13.png]]
184
185 LoRaWAN Basic Station
186
187
188 == 2.5 Step 5: Configure the gateway and Creation gateway certificates ==
189
190 Configure the gateway and Creation gateway certificates
191
192 [[image:image-20220530162446-14.png]]
193
194 Configure the gateway
195
196
197 [[image:image-20220530162523-15.png]]
198
199 Creation gateway certificates
200
201 **Note: **User Make sure the name of the downloaded file remains the same.
202
203
204 == 2.6 Step 6: Add gateway file ==
205
206 user returns to your gateway, and start adding the three file they got to the gateway.
207
208 [[image:image-20220530162552-16.png]]
209
210 Configure the gateway
211
212
213 if the user Upload successfully you will see:
214
215 [[image:image-20220530162639-17.png]]
216
217 Uploaded successfully
218
219
220 (% style="color:red" %)**Notice: **(% style="color:black" %)User must select the correct Upload on the suffix name, otherwise the upload fails.
221
222
223 == 2.7 Step 7: Add CUPS URI ==
224
225 Users enter the CUPS endpoint copied in the previous step into the CUPS URI and click **"Save&Apply"**
226
227 [[image:image-20220530162727-18.png]]
228
229 CUPS URI
230
231
232 [[image:image-20220525173759-19.png]]
233
234 CUPS URI Setting
235
236 **Notice:** After the user hits "Save&Apply", the gateway will start Station mode on its own
237
238
239 == 2.8 Step 8:Last upLink received ==
240
241 After the above settings, the gateway should be able to connect, the figure below shows the data of the Last upLink received
242
243 [[image:image-20220525174247-20.png]]
244
245 UpLink received
246
247
248 = 3. Add wireless device =
249
250 == 3.1 step 1:Add device profile ==
251
252 === 3.1.1 CREATE DEVICE PROFILE ===
253
254 select profile in the Control Panel and add configuration adn service files.the device's configuration paranmeters depend on the LoRaWAN specification it uses.The configuration parameters are found in the device's documentation or on the device itself.
255
256 [[image:image-20220530163030-21.png]]
257
258 Add device profile
259
260
261 **Provide device data**
262
263 (% class="box" %)
264 (((
265 **Device profile name** : a descriptive name of your choice for this profile, e.g. “Workshop device profile of ”
266 **Frequency band (RFRegion)**  : please select a frequency band your device and gateway will be using. For most European countries EU868 is a right choice. For USA US915 is a right choice. If in doubt, you can review a regional parameters document, section “1.2 Quick cross reference table”.
267 **MAC version** : this parameter should specify the most recent version of LoRaWAN specification supported by your device. Unless device documentation states otherwise, please select 1.0.3.
268 **Regional parameters version**: please select RP002-1.0.1, unless specified otherwise in your device documentation
269 **MaxEIRP** : please enter the default value 15
270 **Supports class **: please select class A, unless you are aware of specific requirements to use classes B and C and your device supports it
271 )))
272
273 [[image:image-20220530163105-22.png]]
274
275 device profile
276
277 **Notice** **: **See the documentation for more information: [[https:~~/~~/docs.aws.amazon.com/iot/latest/developerguide/connect-iot-lorawan-define-profiles.html>>url:https://docs.aws.amazon.com/iot/latest/developerguide/connect-iot-lorawan-define-profiles.html]]
278
279
280 === 3.1.2 CREATE SERVICE PROFILE ===
281
282 Select “Profiles” view and click on “Add service profile”
283
284 [[image:image-20220530163201-23.png]]
285
286 Add a service profile
287
288
289 (% class="box" %)
290 (((
291 Choose a service profile name (e.g. “Default service profile”)
292 Ensure that AddGWMetaData parameter is enabled. By enabling this parameter you will receive additional metadata with each device payload, for example RSSI and SNR for the data transmission.
293 This metadata could be used for network coverage optimization.
294 Finally, scroll down and click on “Add service profile”.
295 )))
296
297
298 [[image:image-20220530163352-25.png]]
299
300 Add service profile2
301
302
303 == 3.2 Step 2:Create an IAM roles for destinations ==
304
305 AWS IoT Core for LoRaWAN destinations require IAM roles that give AWS IoT Core for LoRaWAN the permissions necessary to send data to the AWS IoT rule. If such a role is not already defined, you'll need to define it so that it will appear in the list of roles.
306
307 **To create an IAM policy for your AWS IoT Core for LoRaWAN destination role**
308
309 **1.** Open the Policies hub of the IAM console.
310
311 **2. **Choose Create policy, and choose the JSON tab.
312
313 **3. **In the editor, delete any content from the editor and paste this policy document.
314
315 (% class="box" %)
316 (((
317 {
318 "Version": "2012-10-17",
319 "Statement": [
320 {
321 "Effect": "Allow",
322 "Action": [
323 "iot:DescribeEndpoint",
324 "iot:Publish"
325 ],
326 "Resource": "*"
327 }
328 ]
329 }
330 )))
331
332 **4.** Choose Review policy, and in Name, enter a name for this policy. You'll need this name to use in the next procedure. You can also describe this policy in Description, if you want.
333
334 **5.** Choose Create policy.
335
336
337 **To create an IAM role for an AWS IoT Core for LoRaWAN destination:**
338
339 **1.** Open the Roles hub of the IAM console and choose Create role.
340
341 **2.** In Select type of trusted entity, choose Another AWS account.
342
343 **3. **In Account ID, enter your AWS account ID, and then choose Next: Permissions.
344
345 **4.** In the search box, enter the name of the IAM policy that you created in the previous procedure.
346
347 **5.** In the search results, check the IAM policy that you created in the previous procedure.
348
349 **6.** Choose Next: Tags, and then choose Next: Review.
350
351 **7. **In Role name, enter the name of this role, and then choose Create role.
352
353 **8.** In the confirmation message, choose the name of the role you created to edit the new role.
354
355 **9. **In Summary, choose the Trust relationships tab, and then choose Edit trust relationship.
356
357 **10.** In Policy Document, change the Principal property to look like this example.
358
359 (% class="box" %)
360 (((
361 "Principal": {
362 "Service": "iotwireless.amazonaws.com"
363 },
364 )))
365
366 After you change the Principal property, the complete policy document should look like this example.
367
368 (% class="box" %)
369 (((
370 {
371 "Version": "2012-10-17",
372 "Statement": [
373 {
374 "Effect": "Allow",
375 "Principal": {
376 "Service": "iotwireless.amazonaws.com"
377 },
378 "Action": "sts:AssumeRole",
379 "Condition": {}
380 }
381 ]
382 }
383 )))
384
385 **~11. **To save your changes and exit, choose Update Trust Policy.
386
387 With this role defined, you can find it in the list of roles when you configure your AWS IoT Core for LoRaWAN destinations.
388
389
390 === 3.2.1 CREATE DESTINATION ===
391
392 **Select Destinations view**
393
394 Please click on “Destinations” menu and afterwards please click on “Add destination”.
395
396 [[image:image-20220530163507-26.png]]
397
398 Select destinations
399
400
401 **Provide input**
402
403 Please provide the following input:
404
405 (% class="box" %)
406 (((
407 Please choose an IAM role that shall be used for the invocation of AWS IoT Rule.
408 Please select the destination name (e.g. “WorkshopDestination<Your name without spaces>”)
409 Please select the AWS IoT Rule name (e.g. “MyWorkshopLoRaWANRule<Your name without spaces>”)
410 )))
411
412 click on “Add destination”
413
414 [[image:image-20220530163600-27.png]]
415
416 provide input
417
418
419 === 3.2.2 CREATE IOT RULE ===
420
421 **Create Rule**
422
423 user navigating to AWS IoT , Act, Rules and clicking on “Create” button.
424
425 [[image:image-20220525193329-45.png]]
426
427 Rule create
428
429
430 //Provide a rule name'//
431
432 (((
433 Please input the same IoT Rule name you used in a previous step when creating a new AWS IoT Core for the LoRaWAN destination (e.g. “test_example”).
434 )))
435
436 [[image:image-20220524201202-2.png||height="351" width="611"]]
437
438 Enter Rule name
439
440
441 **Provide IoT SQL query statement**
442
443 Please put the following text into the rule query statement: **SELECT *, timestamp() as timestamp**
444
445 [[image:image-20220524201532-4.png||height="387" width="615"]]
446
447 Enter SQL query statement
448
449
450 **Select action “Republish to an AWS IoT Topic”**
451
452 [[image:image-20220524203543-8.png||height="637" width="601"]]
453
454
455 == 3.3 Step 3: Create a destination for end node payloadDate ==
456
457 The PayloadDate of the node will be sent to this destination
458
459 **a.** In the [[destinatons>>url:https://console.aws.amazon.com/iot/home?region=us-east-1#/wireless/destinations]],choose add destination.
460
461 **b.** In IMA Role, select the Role you created in the last step
462
463 **c.** In Destination name, give this destination a destination name.
464
465 **d.** In Rule name, give this rule a new name and remember it.
466
467 **e.** choose Add Destination.
468
469 [[image:image-20220524204934-9.png||height="663" width="627"]]
470
471 Add destination
472
473 **Note:**The destination rule configuration sent by the end node payloadDate will be in the next step
474
475
476 == 3.4 Step 4: CREATE WIRELESS DEVICE ==
477
478 Users can register end nodes with AWS
479
480
481 === 3.4.1 Open Add wireless device ===
482
483 (% class="box" %)
484 (((
485 (((
486 **a.** In Device,choose Add wireless device.
487 **b.** In Wireless device specification,select OTTA 1.0.x
488 **c. **In OTTA 1.0.x
489 **d.** In Profiles,select profilees,and choose Next
490 )))
491 )))
492
493 [[image:image-20220530164137-28.png]]
494
495 Add device
496
497
498 [[image:image-20220530164246-29.png]]
499
500 Enter device keys
501
502
503 **Select device and service profile**
504
505 (((
506 Scroll down and endure that “Associate a thing with your wireless device” option is enabled. AWS will create a thing in AWS IoT for you and associate it with this device. Things in AWS IoT can make it easier to search for and manage your devices.
507 )))
508
509 [[image:image-20220530164324-30.png]]
510
511 Seleck profile
512
513
514 === 3.4.2 Select a destination ===
515
516 **Plese select a destination you have created in one of the previous steps and choose add device**
517
518 [[image:image-20220530164504-32.png]]
519
520 Add device_choose destition
521
522
523 **REVIEW THE CREATED DEVICER**
524
525 [[image:image-20220530164440-31.png]]
526
527 Uplink Received
528
529
530 **VERIFY DEVICE CONNECTIVITY**
531
532 [[image:image-20220530164545-33.png]]
533
534 Verify device connectivity
535
536
537 === 3.4.3 Verify date ingestion ===
538
539 **Open MQTT Test Client**
540
541 [[image:image-20220530164819-36.png]]
542
543
544 Open MQTT Client
545
546
547 **Subscribe to topic**
548
549 (((
550 Please input the topic name **workshop_lorawanmessages** in “Subscription topic” field and click on “Subscribe to topic”.
551
552 Users can choose to subscribe to "**#**" ,"#" indicates to subscribe to all.
553
554 [[image:image-20220530170719-38.png]]
555 )))
556
557
558 Subscription Topic
559
560
561 **Trigger your device to send telemetry**
562
563 User can start the registered device
564
565 **Review the incoming message from uesr's device**
566
567 Please find below an explanation for some of the attributes:
568
569 (% class="box" %)
570 (((
571 **PayloadData ** : Base64-encoded payload from the device
572 **~ WirelessMetadata.FPort**           : FPort used by the device
573 **~ WirelessMetadata.LoRaWAN.DevEui**  : EUI of the device sending the data
574 **~ WirelessMetadata.LoRaWAN.Gateways**: Information on RSSI and SNR per gateway
575 )))
576
577 [[image:image-20220530170810-39.png]]
578
579 Review message
580
581
582 (% class="box" %)
583 (((
584 {
585 "WirelessDeviceId": "3ff07678-0c3d-4ed7-a01a-4e2cc927e315",
586 "PayloadData": "AAAAAAAAAAAPo2I=",
587 "WirelessMetadata": {
588 "LoRaWAN": {
589 "DataRate": "5",
590 "DevEui": "a840410801818749",
591 "FCnt": 579,
592 "FPort": 2,
593 "Frequency": "867500000",
594 "Gateways": [
595 {
596 "GatewayEui": "a84041ffff1ec39f",
597 "Rssi": -79,
598 "Snr": 7.25
599 },
600 {
601 "GatewayEui": "a84041ffff1ee2a0",
602 "Rssi": -129,
603 "Snr": -4
604 }
605 ],
606 "Timestamp": "2021-04-10T08:16:06Z"
607 }
608 },
609 "timestamp": 1618042566345
610 }
611 )))
612
613 **How to decode Base64 data into hexadecimal representation**
614
615 You can run the following command in your shell to decode Base64 payload data into their hexadecimal representation.
616
617 MacOS
618
619 (% class="box" %)
620 (((
621 $  echo -n "<Value of PayloadData>" | base64 -D | hexdump -v -e '/1 "%02x"'
622 )))
623
624 Linux
625
626 (% class="box" %)
627 (((
628 $  echo -n "<Value of PayloadData>" | base64 -d | hexdump -v -e '/1 "%02x"'
629 )))
630
631 Example
632
633 (% class="box" %)
634 (((
635 $  echo -n "7WkoOEfwfTTioxG6CatHBw==" | base64 -D | hexdump -v -e '/1 "%02x"'
636 ed69283847f07d34e2a311ba09ab4707
637 )))
638
639
640 = 4. Format a notification by using an AWS Lambda function =
641
642 == 4.1 Introduction ==
643
644 This tutorial demonstrates how to send MQTT message data to an AWS Lambda action for formatting and sending to another AWS service. In this tutorial, the AWS Lambda action uses the AWS SDK to send the formatted message to the Amazon SNS topic
645
646
647 === 4.1.1 What you'll learn in this tutorial ===
648
649 How to create and test an AWS Lambda function
650
651 How to use the AWS SDK in an AWS Lambda function to publish an Amazon SNS notification
652
653 How to use simple SQL queries and functions in a rule query statement
654
655 How to use the MQTT client to test an AWS IoT rule
656
657
658 === 4.1.2 In this tutorial, you'll: ===
659
660 (((
661 Create an AWS Lambda function that sends a text message
662 )))
663
664 (((
665 Create an AWS IoT rule with an AWS Lambda rule action
666 )))
667
668 (((
669 Test the AWS IoT rule and AWS Lambda rule action
670
671
672 )))
673
674 == 4.2 Approach A: DECODING BINARY PAYLOADS ==
675
676 === 4.2.1 Step 1 :Start deployment of a severless application with AWS Lambda function and AWS ioT Rule ===
677
678 **1:Open AWS Lambda console by clicking on [[link>>url:https://console.aws.amazon.com/lambda/home?region=us-east-1#/create/app?applicationId=arn:aws:serverlessrepo:us-east-1:614797420359:applications/aws-iot-corelorawan-sampledecoder]]**
679
680 [[image:image-20220525193652-47.png]]
681
682 Deployment Lambda
683
684
685 **2:Select a decoder**
686
687 (((
688 Please scroll down to the bottom of the page. Please provide the parameter decoder name based on the following table.
689 )))
690
691 Device Decoder name
692
693 LHT65 dragino_lht65
694
695 LBT1 dragino_lbt1
696
697 LSE01 dragino_lse01
698
699 LGT92 dragino_lgt92
700
701 LDS01 dragino_lds01
702
703 After that please check the box **“I acknowledge that this app creates resource policies.”** and click on **“Deploy”**.
704
705 [[image:image-20220530155623-1.png]]
706
707 Seleck a decoder name
708
709
710 **3:Review deployment**
711
712 (((
713 Please wait few seconds for a successful deployment. After that please click on the name of the Lambda function “TransformLoRaWANBinaryPayloadFunction”.
714 )))
715
716 [[image:image-20220530155838-2.png]]
717
718 Review deployment
719
720
721 **4. Create the test event**
722
723 Please click on “Configure the test event”
724
725 [[image:image-20220530155925-3.png]]
726
727 Create the test event
728
729
730 (((
731 In the window that opens, please provide the event name e.g. IoTCoreForLoRaWANEvent. After that please paste the following JSON content:
732 )))
733
734 (% class="box" %)
735 (((
736 {
737 "PayloadData": "<Sample PayloadData>",
738 "WirelessDeviceId": "57728ff8-5d1d-4130-9de2-f004d8722bc2",
739 "WirelessMetadata": {
740 "LoRaWAN": {
741 "DataRate": 0,
742 "DevEui": "a84041d55182720b",
743 "FPort": 2,
744 "Frequency": 867900000,
745 "Gateways": [
746 {
747 "GatewayEui": "dca632fffe45b3c0",
748 "Rssi": -76,
749 "Snr": 9.75
750 }
751 ],
752 "Timestamp": "2020-12-07T14:41:48Z"
753 }
754 }
755 }
756 )))
757
758
759 [[image:image-20220530160030-4.png]]
760
761 Create a new event
762
763
764 **5. Provide PayloadData sample**
765
766 (((
767 Please replace the string <Sample PayloadData> in the JSON document with a sample payload for the device you selected in step 2 according to this table. After that please click on “Create”.
768 )))
769
770 (% class="box" %)
771 (((
772 (((
773 Device name          Sample “PayloadData”
774 )))
775
776 (((
777 LHT65  ~-~-  y6QHxgG4AQhmf/8=
778 )))
779
780 (((
781 LSE01         ~-~-     AuHtlACmawQPVGM=
782 LGT92         ~-~-     DSEAAAEVCMUGpAA=
783 LBT1  ~-~-     DxwAAAIDQUJCQ0NEREVFRkYwMjcxMjFGNkFDMy0wNTk=
784 )))
785 )))
786
787 ~[~[File:replace <Sample PayloadDate>.png|600px|none|thumb|replace <Sample PayloadDate>]]
788
789
790 **6.Edit project Files**
791
792 The project file needs to be modified when the user needs to test or add a new decoder, feel invited to switch to the “Code” section of the AWS Lambda function and inspect the Python source code. You will find the decoders for the individual devices in the directory decoders. The AWS Lambda function handler is in file **app.py**
793
794 Users can find the required decoder in this **[[link>>url:https://github.com/aws-samples/aws-iot-core-lorawan/tree/main/transform_binary_payload]], **then added to the project.
795
796 How to modify see the figure below:
797
798 (% class="box" %)
799 (((
800 1) Add a decoder in app.py  ~-~-->  For example, add code: import dragino_lht52
801
802 2) Add the decoder name to "VALID_PAYLOAD_DECODER_NAMES"  ~-~-->  add dragino_lht52
803
804 3) Add the statement  ~-~-->  DECODER_NAME = "dragino_lht52"
805
806 **(The user can input the decoding project that needs to be tested)**
807
808 4)Comment out "DECODER_NAME = os.environ.get("DECODER_NAME")"
809
810 **(Comment out it in order to use other project files)**
811 )))
812
813 [[image:image-20220525094832-3.png||height="276" width="627"]]
814
815 After the user finishes editing, Click on the **"Deploy"**
816
817
818 **7. Run a test**
819
820 Please click on **“Test”**.
821
822 [[image:image-20220530160314-5.png]]
823
824
825 **8. Check whether the decoding succeeds **
826
827 The following example is the successful decoding of LHT52,
828
829 [[image:image-20220525100532-4.png||height="488" width="612"]]
830
831
832 **9. Note the AWS Lamdbda function ARN**
833
834 (((
835 As a preparation for the next step, please note the ARN of the deployed AWS Lambda function. We will need this ARN later to review the created AWS IoT Rule.
836 )))
837
838 [[image:image-20220530160518-6.png]]
839
840
841 === 4.2.2 Step 2:Update the Destination rule and get the device's payload ===
842
843 In this step, you update the IoT rule that forwards the device payload to your application. This rule is associated with the destination created earlier in Set up a Destination for device traffic.
844
845 (((
846 ~1. Find the IoT Rule
847
848 2. Create a Destination with IoT Rule (MyWorkshopLoRaWANRuleWithDecoder_dragino_lht65)
849
850 3. Update the destination to the device
851
852 4. Check the payload
853
854 5. Approach A with MQTT
855
856 6. Approach B with Lambda
857
858
859 )))
860
861 ==== 4.2.2.1 1. Find the IoT Rule MyWorkshopLoRaWANRuleWithDecoder_… ====
862
863 Please put the IoT Rule name prefix **MyWorkshopLoRaWANRuleWithDecoder_** into the search field and click on the search symbol. The rule named **MyWorkshopLoRaWANRuleWithDecoder_<Decoder name>** should appear:
864
865 [[image:image-20220530160632-7.png]]
866
867 Find the IoT rule
868
869
870 ==== 4.2.2.2 2. Create a Destination with IoT Rule ====
871
872 (MyWorkshopLoRaWANRuleWithDecoder_dragino_lht65)
873
874 [[image:image-20220530160712-8.png]]
875
876 Create a Destnation
877
878
879 ==== 4.2.2.3 3. Update the destination to the device ====
880
881 [[image:image-20220530160803-9.png]]
882
883 Update the destination to the device
884
885
886 ==== 4.2.2.4 4.Check the payload ====
887
888 **Approach A with MQTT**
889
890 click the rule
891
892 [[image:image-20220525184325-18.png]]
893
894 click the rule
895
896
897 Copy the Topic name
898
899 [[image:image-20220525185444-24.png]]
900
901 copy the rule name
902
903
904 Open MQTT client and subscrlibe Topic
905
906 [[image:image-20220525185554-25.png]]
907
908 Open MQTT client and subscrlibe Topic
909
910
911 Get the payload
912
913 [[image:image-20220525190308-27.png]]
914
915 Get the payload
916
917
918 **Approach B with Lamdbda**
919
920 open lamdbda console and click the application
921
922 [[image:image-20220525190617-28.png]]
923
924 open lamdbda console and click the application
925
926
927 [[image:image-20220525190749-30.png]]
928
929 open lamdbda console and click the application
930
931
932 View logs in CloudWatch
933
934 [[image:image-20220525183907-15.png]]
935
936 View logs in CloudWatch
937
938
939 [[image:image-20220525190854-31.png]]
940
941 View logs in CloudWatch
942
943
944 == 4.3 Approach B Create an AWS Lambda function that sends a text message ==
945
946 The AWS Lambda function in this tutorial receives the result of the rule query statement, inserts the elements into a text string, and sends the resulting string to Amazon SNS as the message in a notification.
947
948
949 === 4.3.1 Step.1: To create an AWS Lambda function that sends a text message ===
950
951 ==== 4.3.1.1 1.Create a new AWS Lambda function. ====
952
953 **a.** In the [[AWS Lambda console>>url:https://console.aws.amazon.com/lambda/home]], choose Create function.
954
955 [[image:image-20220525191138-32.png]]
956
957 Create function
958
959
960 (((
961 **b.** In Create function, select Use a blueprint. Search for and select the hello-world-python blueprint, and then choose **Configure**.
962 )))
963
964 [[image:image-20220525191640-33.png]]
965
966 blueprint
967
968
969 **c. **In Basic information:
970
971 (% class="box" %)
972 (((
973 1). In Function name, enter the name of this function, format-high-temp-notification.
974 2). In Execution role, choose Create a new role from AWS policy templates.
975 3). In Role name, enter the name of the new role, format-high-temp-notification-role.
976 4). In Policy templates - optional, search for and select Amazon SNS publish policy.
977 5). Choose Create function.
978 )))
979
980 [[image:image-20220525191717-34.png]]
981
982 blueprint
983
984
985 ==== 4.3.1.2 2.Modify the blueprint code to format and send an Amazon SNS notification. ====
986
987 (((
988 **a.** After you created your function, you should see the format-high-temp-notification details page. If you don't, open it from the Lambda Functions page.
989 )))
990
991 (((
992 **b.** In the format-high-temp-notification details page, choose the Configuration tab and scroll to the Function code panel.
993 )))
994
995 (((
996 **c. **In the Function code window, in the Environment pane, choose the Python file, lambda_function.py.
997 )))
998
999 (((
1000 **d.** In the Function code window, delete all of the original program code from the blueprint and replace it with this code.
1001 )))
1002
1003 (% class="box" %)
1004 (((
1005 from ~_~_future~_~_ import print_function
1006 import json
1007 import boto3
1008 print('Loading function')
1009 def lambda_handler(event, context):
1010 # Parse the JSON message
1011 eventText = json.dumps(event)
1012 # Print the parsed JSON message to the console. You can view this text in the Monitoring tab in the AWS Lambda console or in the Amazon CloudWatch Logs console.
1013 print('Received event: ', eventText)
1014 # Create an SNS client
1015 sns = boto3.client('sns')
1016 # Publish a message to the specified topic
1017 response = sns.publish (
1018 TopicArn = 'arn:aws:iam::123456789012:My_IoT_SNS_Topic',
1019 Message = eventText
1020 )
1021 print(response)
1022 )))
1023
1024 **e.** Choose Deploy.
1025
1026 **Note: **Replace the value of **TopicArn** with the ARN of the Amazon SNS topic that you created SNS topic in which [[SNS>>url:https://console.aws.amazon.com/sns/home?region=us-east-1]]
1027
1028 **Note: **If you don't have SNS topic it does't affect the use of Lambda.About how to Create SNS topic will be show next chapter
1029
1030
1031 ==== 4.3.1.3 3.In a new window, look up the Amazon Resource Name (ARN) of your Amazon SNS topic from the tutorial about how to Send an Amazon SNS notification. ====
1032
1033 (((
1034 **a. **In a new window, open the Topics page of the Amazon SNS console
1035 )))
1036
1037 (((
1038 **b.** In the Topics page, find the high_temp_notice notification topic in the list of Amazon SNS topics.
1039 )))
1040
1041 (((
1042 **c.** Find the ARN of the high_temp_notice notification topic to use in the next step.
1043
1044
1045 )))
1046
1047 ==== 4.3.1.4 4.Create a test case for your Lambda function. ====
1048
1049 **a.** In the Lambda Functionspage of the console,from **Select a test event**to select Configure test events
1050
1051 [[image:image-20220525191819-35.png]]
1052
1053 Configure test events
1054
1055
1056 (((
1057 **b. **On Configure test event, enter a name for your test event and replace the message JSON with the following:
1058 )))
1059
1060 (% class="box" %)
1061 (((
1062 {
1063 "message" : "Hello, world"
1064 }
1065 )))
1066
1067 **c.** choose Create
1068
1069 [[image:image-20220525191853-36.png]]
1070
1071 event create
1072
1073
1074 (((
1075 **d. **In the upper right of the Lambda function details page, choose Test to test your Lambda function with the message you specified in the test event.
1076 )))
1077
1078 [[image:image-20220525191938-37.png]]
1079
1080 event test
1081
1082
1083 **e.** Under your Lambda function code, on the Execution result tab, you see the output from the Lambda function.
1084
1085 [[image:image-20220525192325-38.png]]
1086
1087 event output
1088
1089
1090 Now The Lambda function table is created
1091
1092
1093 === 4.3.2 Step.2: Create Rule with Lambda function ===
1094
1095 **~1. **Browse to the AWS IoT console, and in the navigation pane, select **Act**
1096
1097 [[File:Console Act.png>>url:https://wiki.dragino.com/index.php?title=Special:Upload&wpDestFile=Console_Act.png]]
1098
1099 (% class="box" %)
1100 (((
1101 console_Act
1102 )))
1103
1104 **2. **Choose Create to create an AWS IoT rule.
1105
1106 [[image:image-20220525192403-39.png]]
1107
1108 create Rule
1109
1110
1111 **3.** On the Create a rule page, enter a name for your rule.
1112
1113 [[image:image-20220525192424-40.png]]
1114
1115 enter a Rule name
1116
1117
1118 **4.** In Rule query statement, enter the following query:
1119
1120 (% class="box" %)
1121 (((
1122 SELECT * FROM "my/lambda/topic"
1123 )))
1124
1125 [[image:image-20220525192453-41.png]]
1126
1127 enter the following query
1128
1129
1130 **5.** In Set one or more actions, select Add action.
1131
1132 [[image:image-20220525192524-42.png]]
1133
1134 Add action
1135
1136
1137 **6.** Under the select operation, select Send a Message to a Lambda Function and then select the configuration operation.
1138
1139 [[image:image-20220525192619-43.png]]
1140
1141 select operation
1142
1143
1144 = 5. For End Node =
1145
1146 == 5.1 AWS Downlink Note ==
1147
1148 Prerequisites: The node must be online in real-time before downlink.
1149
1150 [[image:image-20220525113243-2.png||height="346" width="623"]]
1151
1152 Convert the data to Base64
1153
1154 [[image:image-20220525113612-3.png||height="377" width="622"]]
1155
1156
1157 When the serial port logs of downlink are received, the Receive date is displayed
1158
1159 [[image:image-20220525115046-4.png]]
1160
1161 In addition to the above methods, there is also a downlink,This method requires a certain amount of manipulation,
1162
1163 Users can view this [[Downlink method 2>>url:https://github.com/aws-samples/aws-iot-core-lorawan/tree/main/send_downlink_payload]]
1164
1165
1166 == 5.2 Node decoder ==
1167
1168 [[Decode LHT65>>url:https://github.com/aws-samples/aws-iot-core-lorawan/tree/main/transform_binary_payload]]
1169
1170
1171 = 6. Reference =
1172
1173 * [[Video Introduction for how to use LoRaWAN AWS-IoT Core>>url:https://www.youtube.com/watch?v=eKK0M8iC6l4]]
1174 * [[AWS LoRaWAN Workshop>>url:https://iotwireless.workshop.aws/]]
Copyright ©2010-2022 Dragino Technology Co., LTD. All rights reserved
Dragino Wiki v2.0