AWS IoT Core is a totally managed service that allows you to join billions of IoT units and route trillions of messages to AWS companies with out managing infrastructure. One of many key options of AWS IoT Core is Guidelines Engine.
With Rules Engine, you’ll be able to ship knowledge out of your IoT units to different companies in AWS. This offers you the flexibility to take instant actions in your IoT knowledge, resembling triggering alarms and notifications, accumulating logs, or operating analytics and machine studying fashions. On this put up, we’ll present how one can take JSON messages coming in out of your machine and convert them to audio utilizing the Amazon Polly textual content to speech machine studying mannequin. Amazon Polly makes use of deep studying applied sciences to synthesize natural-sounding human speech, so you’ll be able to convert articles to speech. With dozens of lifelike voices throughout a broad set of languages, you should utilize Amazon Polly to construct speech-activated functions.
State of affairs
For this instance, we shall be working with cleansing robots which are navigating by means of a grocery store to scrub the flooring. The robots ship messages on an MQTT matter, robotic/<clientID>/knowledge
, each time the robots change states [running, waiting, stuck, charging]
. The messages embrace the robotic’s present state in addition to its location within the grocery store.
Right here is pattern MQTT message coming in from a robotic:
Matter: robotic/cleaning_robot_1/knowledge
{
"state": "caught",
"location": "aisle 6"
}
In our instance, the grocery store intends to inform its staff by means of wi-fi headsets each time a robotic is caught. They need the announcement to play an audio clip figuring out which robotic is caught and the place it’s positioned at, so the workers can simply navigate to the robotic and resolve the problem.
Right here is an instance of the audio the workers will hear:
sample-audio-message.mp3 (Clip taking part in: “Cleansing robotic 1 is caught on aisle 6.”)
Obtain the file and play in your pc

Determine 1 – Obtain Pattern Audio
Answer overview
To be able to present the grocery store with this resolution, you’ll need to construct the next:
- IoT machine to characterize the robotic that publishes messages when the robotic adjustments state.
- IoT machine to characterize the speaker that performs audio messages.
- IoT Rule that:
- Listens to messages on the subject
robotic/+/knowledge
. - Converts the JSON message to the specified String sentence when the robotic is in a “caught” state.
- Publishes a brand new message to matter
speaker/message
.
- Listens to messages on the subject

Determine 2 – Answer Diagram
Conditions
For this stroll by means of, you must have the next stipulations:
- An AWS account. Should you don’t have an AWS Account, follow the instructions to create one.
- A user role with administrator access (service entry related to this function might be constrained additional when the workflow goes to manufacturing).
- Latest fashionable browser (newest model of Firefox or Chrome)
- Python and Pip put in
- No specialised information is required to construct this resolution, however primary Linux and Python information will assist.
Walkthrough
Step 1: Clone the GitHub repository and obtain the AWS IoT System SDK
- Clone the GitHub repository for the pattern functions that simulate the robotic and speaker.
If you wish to do that workflow on an actual robotic and speaker, copy the robot1 and speaker1 folders to their respective units. In any other case, you’ll be able to go away each to simulate domestically in your pc.git clone https://github.com/aws-samples/iot-polly
- Set up the AWS IoT Device SDK for python.
- If you’re operating the robotic and speaker individually, you’ll need to run this command for all units.
python3 -m pip set up AWSIoTPythonSDK
Step 2: Arrange permissions for the units
Robotic
- First, arrange the correct permissions for any robots. The robots want to have the ability to connect with AWS IoT and publish to the subject
robotic/<robotID>/knowledge
. This may be finished with an IoT coverage. - Navigate to the AWS IoT Core console. Within the navigation menu, beneath Safety, select Insurance policies.
- Select Create coverage.
- For Coverage title enter
policy_robot
. - For Coverage statements select JSON after which paste within the following coverage doc:
{ "Model": "2012-10-17", "Assertion": [ { "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:<region>:<accountID>:client/${iot:Connection.Thing.ThingName}" }, { "Effect": "Allow", "Action": "iot:Publish", "Resource": "arn:aws:iot:<region>:<accountID>:topic/robot/${iot:Connection.Thing.ThingName}/data" } ] }
- Insert your
<area>
and<accountID>
into the coverage after which select Create.Determine 3 – IoT Coverage Robotic
Speaker
- Subsequent, arrange the correct permissions for the speaker machine. The speaker wants to have the ability to connect with AWS IoT and subscribe to the subject
speaker/message
. The speaker additionally wants permissions to entry Amazon Polly for changing textual content to audio. To provide an IoT machine entry to different AWS companies, you’ll need to offer the machine permission to imagine a job alias. - Select Create coverage.
- For Coverage title enter
policy_speaker
. - For Coverage statements select JSON after which paste within the following coverage:
{ "Model": "2012-10-17", "Assertion": [ { "Effect": "Allow", "Action": "iot:AssumeRoleWithCertificate", "Resource": "arn:aws:iot:<region>:<accountID>:rolealias/speaker-role-alias" }, { "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:<region>:<accountID>:client/${iot:Connection.Thing.ThingName}" }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": "arn:aws:iot:<region>:<accountID>:topicfilter/speaker/message" }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": "arn:aws:iot:<region>:<accountID>:topic/speaker/message" } ] }
- Insert your
<area>
and<accountID>
into the coverage after which select Create.Determine 4 – IoT Coverage Speaker
Step 3: Arrange permissions for Amazon Polly actions
To provide the speaker permissions to entry Amazon Polly you’ll need to create an AWS Identification and Entry Administration(IAM) function after which create an IoT function alias to connect the IAM function to an IoT factor.
- Navigate to AWS IAM console. Within the navigation menu select Roles.
- Select Create Position.
- Choose Customized belief coverage.
- Paste the next JSON coverage:
{ "Model": "2012-10-17", "Assertion": [ { "Effect": "Allow", "Principal": { "Service": "credentials.iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
- Select Subsequent.
- Underneath Permissions insurance policies, seek for
polly
and choose the checkbox for AmazonPollyReadOnlyAccess. - Select Subsequent.
- For function title, enter
speaker_role
. - Select Create function.
- Navigate to the AWS IoT Core console. Within the navigation menu, beneath Safety, select Position Aliases.
- Choose Create function alias.
- For function alias title, enter
speaker-role-alias
. - For function, choose speaker_role from the dropdown.
- Depart the credentials length as 3600 seconds (1 hour) and select Create.
Step 4: Join the units to AWS IoT Core
Create IoT issues in AWS IoT Core to your robotic and speaker units.
- Navigate to the AWS IoT Core console. Within the navigation menu, beneath Handle, select All units, Issues.
- Select Create issues.
- Select Create single factor. Select Subsequent.
- First, create the robotic. Give the robotic a Factor title of
cleaning_robot_1
. - Depart the remaining as is, and select Subsequent.
Determine 5 – Creating IoT Factor on AWS IoT Core
- Select Auto-generate a brand new certificates (really useful). Select Subsequent.
- Choose the checkbox subsequent to the policy_robot. Select Create factor.
Determine 6 – Connect Coverage
- Obtain all 4 recordsdata: System certificates, Public Key file, Non-public key file, RSA 2048 bit key: Amazon Root CA 1.
- Select Achieved.
Determine 7 – Obtain Certificates
- Transfer the 4 recordsdata to the folder within the iot-polly repository titled robot1.
- Rename the personal key and certificates recordsdata as follows:
- xxxx-private.pem.key to robot1-private.pem.key
- xxxx-certificate.pem.crt to robot1.certificates.pem.crt
- Repeat the steps above for the speaker machine with the next adjustments:
- Identify the IoT factor:
speaker_1
. - Choose the IoT coverage:
policy_speaker
. - Rename the personal key and certificates recordsdata as follows:
- xxxx-private.pem.key to speaker1-private.pem.key
- xxxx-certificate.pem.crt to speaker1.certificates.pem.crt
- Identify the IoT factor:
Step 5: Check the robotic and speaker
- Within the AWS IoT Core console navigation menu, select MQTT check shopper.
- For Subscribe to a subject, enter
robotic/+/knowledge
. - Within the navigation menu, select Settings. Copy the System knowledge endpoint.
- Enter the next instructions in your terminal. Navigate to the iot-polly repository.
cd robot1
# on a PC:
py -m venv env cd envScripts activate cd ../..
# on a Mac/Ubuntu:
python3 -m venv env supply env/bin/activate
- Substitute
<iot endpoint>
with the machine knowledge endpoint you simply copied.pip set up -r necessities.txt aws iot describe-endpoint --endpoint-type iot:Knowledge-ATS python3 robotic.py --clientId cleaning_robot_1 --endpoint <iot endpoint> --key robot1-private.pem.key --cert robot1-certificate.pem.crt --rootCA AmazonRootCA1.pem
- Navigate again to the MQTT check shopper to see a message come by means of from
robotic/cleaning_robot_1/knowledge
:{ "state": "caught", "location": "aisle 17", "robotID": "cleansing robotic 1" }
- Preserve robot1 operating within the background as you’ll come again to it later.
- In a brand new tab in your terminal, navigate to the iot-polly repository.
cd speaker1
# on a PC:
py -m venv env cd envScripts activate cd ../..
# on a Mac/Ubuntu:
python3 -m venv env supply env/bin/activate
# on each:
pip set up -r necessities.txt
Get your IoT endpoint and credential supplier url:
aws iot describe-endpoint --endpoint-type iot:Knowledge-ATS aws iot describe-endpoint --endpoint-type iot:CredentialProvider --region <area>
- Make sure the audio in your pc is on. Run the speaker machine: (Make certain to interchange your endpoint and credential supplier with the outputs of the instructions above).
python3 speaker-device.py --thingname speaker_1 --region <area> --endpoint <iot endpoint> --key speaker1-private.pem.key --cert speaker1-certificate.pem.crt --rootCA AmazonRootCA1.pem --credentials_url https://<credential-provider-endpoint>/role-aliases/speaker-role/alias/credentials
- Navigate again to the MQTT check shopper.
- Select the tab Publish to a Matter.
- Matter title:
speaker/message
- Message payload:
{ "message": "Hey from AWS IoT console" }
- Select Publish
- speaker1 makes use of the boto3 library within the speaker-device.py file to name the Amazon Polly API to transform the textual content obtained within the message to an MP3 audio file. It then routinely performs the audio utilizing the playsound library.
- You need to hear the message “Hey from AWS IoT console” and see the next message come by means of in your terminal window:
Acquired a brand new message:
b'{n "message": "Hey from AWS IoT console"n}'
from matter:
speaker/message
- Preserve speaker1 operating as you’ll come again to it later.
Step 6: Create the IoT rule
- Within the AWS IoT Core console, select Message routing, Guidelines.
- Select Create rule.
- For rule properties, give your rule a reputation:
robot_stuck
and outline. Select Subsequent.Determine 8 – Specify Rule Properties
- Depart the SQL_version as is, after which enter the comply with because the SQL_statement:
SELECT concat(robotID, ' is caught on ', location) as message FROM 'robotic/+/knowledge' WHERE state = "caught"
Determine 9 – SQL Assertion
- This SQL assertion receives any messages on the wildcard matter ‘
robotic/+/knowledge
‘ the place the state is “caught” after which concatenates the information right into a sentence format of “<robotID>
is caught on<location>
”. - Select Subsequent.
- For Rule actions, select Republish to AWS IoT matter, after which kind the subject
speaker/message
.Determine 10 – Rule Actions
- Select Create new function.
- Identify the function,
Role_IoTVoice_rule
. - Select Create.
- Select Subsequent.
- Selected Create.
- You need to see a brand new rule efficiently created.
Determine 11 – New IoT Rule Created
Step 7: Check the IoT rule
- Guarantee robot1 and speaker1 are nonetheless operating in your terminal and your audio is on.
- Open the JSON file robot_payload.json (discovered within the robot1 folder) in your required textual content editor.
- Edit the situation within the JSON and save.
{ "state": "caught", "location": "aisle 12" }
- You will note that robot1 printed a message:
Revealed matter robotic/cleaning_robot_1/knowledge: {"state": "caught", "location": "aisle 12", "robotID": "cleansing robotic 1"}
- The subject is then routinely routed by means of your IoT rule and printed again to speaker1.
Acquired a brand new message:
b'{"message":"cleansing robotic 1 is caught on aisle 12"}'
from matter:
speaker/message
- speaker1 converts the textual content obtained out of your IoT Rule to an MP3 audio file and routinely performs the message. “Cleansing robotic 1 is caught on aisle 12”.
- Attempt enhancing the robot_payload.json file once more, however this time change the state to “operating”. Save the file.
{ "state": "operating", "location": "aisle 2" }
- You will note that robot1 receives the message, however the message isn’t forwarded to speaker1 as a result of it isn’t caught so the rule filters it out.
Congratulations! You’ve efficiently created an IoT rule that converts and routes messages to a different machine for conversion to audio with Amazon Polly.
Abstract
On this weblog, you realized how you should utilize AWS IoT Core’s Rule Engine and Amazon Polly to hearken to IoT messages, however what you realized might be utilized in a wide range of options, for instance:
- Sensible Car can notify drivers with voice message “Present vary is 30 miles; subsequent gasoline station is 5 miles method”.
- Sensible Freezer: “Temperature contained in the freezer is excessive. It went from 0oF to 5oF in 10 minutes”
- Blood Sugar Monitor: “Your blood sugar is just too excessive, 210mg/DL”
To study extra about make the most of the IoT Guidelines Engine, take a look at our course, Deep Dive into AWS IoT Rules Engine. Tell us how you’re performing in your IoT knowledge to enhance your enterprise operations.