100% found this document useful (2 votes)
14 views

Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi John Allworkdownload

The document is a guide on programming voice-controlled IoT applications using Alexa and Raspberry Pi, divided into two main parts: creating Alexa skills and designing IoT devices. It covers essential topics such as Alexa communication, skill creation, debugging, and integrating Raspberry Pi with smart home devices. The book also includes practical examples and security considerations for developing IoT applications.

Uploaded by

voskosshkurt
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (2 votes)
14 views

Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi John Allworkdownload

The document is a guide on programming voice-controlled IoT applications using Alexa and Raspberry Pi, divided into two main parts: creating Alexa skills and designing IoT devices. It covers essential topics such as Alexa communication, skill creation, debugging, and integrating Raspberry Pi with smart home devices. The book also includes practical examples and security considerations for developing IoT applications.

Uploaded by

voskosshkurt
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 55

Programming Voice-controlled IoT Applications

with Alexa and Raspberry Pi John Allwork pdf


download

https://ebookmass.com/product/programming-voice-controlled-iot-
applications-with-alexa-and-raspberry-pi-john-allwork/

Explore and download more ebooks at ebookmass.com


Here are some recommended products for you. Click the link to
download, or explore more at ebookmass.com

Programming the Raspberry Pi, Third Edition: Getting


Started with Python Simon Monk

https://ebookmass.com/product/programming-the-raspberry-pi-third-
edition-getting-started-with-python-simon-monk/

Hacking Electronics: Learning Electronics with Arduino and


Raspberry Pi, 2nd Edition Simon Monk

https://ebookmass.com/product/hacking-electronics-learning-
electronics-with-arduino-and-raspberry-pi-2nd-edition-simon-monk/

Raspberry Pi Electronics Projects for the Evil Genius 1st


Edition Norris

https://ebookmass.com/product/raspberry-pi-electronics-projects-for-
the-evil-genius-1st-edition-norris/

Arduino and Raspberry Pi Sensor Projects for the Evil


Genius 1st Edition Chin

https://ebookmass.com/product/arduino-and-raspberry-pi-sensor-
projects-for-the-evil-genius-1st-edition-chin/
Programming Kotlin Applications: Building Mobile and
Server-Side Applications With Kotlin Brett Mclaughlin

https://ebookmass.com/product/programming-kotlin-applications-
building-mobile-and-server-side-applications-with-kotlin-brett-
mclaughlin/

Integration of Mechanical and Manufacturing Engineering


with IoT R. Rajasekar

https://ebookmass.com/product/integration-of-mechanical-and-
manufacturing-engineering-with-iot-r-rajasekar/

Simple and Efficient Programming with C#: Skills to Build


Applications with Visual Studio and .NET 2nd Edition
Vaskaran Sarcar
https://ebookmass.com/product/simple-and-efficient-programming-with-c-
skills-to-build-applications-with-visual-studio-and-net-2nd-edition-
vaskaran-sarcar/

Simple and Efficient Programming with C# : Skills to Build


Applications with Visual Studio and .NET 2nd Edition
Vaskaran Sarcar
https://ebookmass.com/product/simple-and-efficient-programming-with-c-
skills-to-build-applications-with-visual-studio-and-net-2nd-edition-
vaskaran-sarcar-2/

Beginning Programming with Python For Dummies 3rd Edition


John Paul Mueller

https://ebookmass.com/product/beginning-programming-with-python-for-
dummies-3rd-edition-john-paul-mueller/
books
books books

Programming

Programming Voice-controlled IoT Applications • Dr John Allwork


Voice-controlled
IoT Applications Programming Voice-controlled
with Alexa and Raspberry Pi IoT Applications
with Alexa and Raspberry Pi
The book is split into two parts: the first part covers creating Alexa skills
and the second part, designing Internet of Things and Smart Home devices
using a Raspberry Pi.
tials
John Allwork graduated from
Sheffield University where he
import creden
The first chapters describe the process of Alexa communication, opening
an Amazon account and creating a skill for free. The operation of an Alexa developed an interest in computers

# constants
and gained his MSc at UMIST.

T%H:%M:%S.00Z
skill and terminology such as utterances, intents, slots, and conversations After two years working for ICL as
m - % d
are explained. Debugging your code, saving user data between sessions, a design engineer, he returned to
UTC_FORMAT = “ % Y - %
a z o n . c o m / a u t h/o2/token”
m
https://api.a
S3 data storage and Dynamo DB database are discussed. UMIST where he graduated with a
PhD in ‘Design and Development of
Microprocessor Systems’.
TOKEN_URI = “
In-skill purchasing, enabling users to buy items for your skill as well as

s constants
certification and publication is outlined. Creating skills using AWS Lambda
# Token acces
He worked for several years in
and ASK CLI is covered, along with the Visual Studio code editor and technical support and as manager
n t i a l s . k e y [ ‘ CLIENT_ID’]
rede T’]
CLIENT_ID = c ‘CLIENT_SECRE
local debugging. Also covered is the process of designing skills for visual in electronics distribution, working
closely with Intel engineers and
e n t i a l s . k e y [
= cred
displays and interactive touch designs using Alexa Presentation Language.
CLIENT_SECRET
later designing Inmos Transputer
systems.
The second half of the book starts by creating a Raspberry Pi IoT “thing”
to control a robot from your Alexa device. This covers security issues and Having taught electronics at
s_to ken():
methods of sending and receiving MQTT messages between an Alexa Manchester Metropolitan University,
he retired in 2011 but retained
def get_acces
device and the Raspberry Pi.
his interest in electronics and
= {
token_params t_credentials
”,
programming. His other occupations
Creating a smart home device is described including forming a security consist of traveling, walking,
p e ” : “ c l i e n
profile, linking with Amazon, and writing a Lambda function that gets geocaching and spending time on “grant_ty a c t i ve_events”,
e x a : : p r o
“scope”: “al
triggered by an Alexa skill. Device discovery and on/off control is his allotment.

LIENT_ID,
demonstrated.
l i e n t _ i d ” : C
“c
Next, readers discover how to control a smart home Raspberry Pi display
n t _ s e c r e t ” : CLIENT_SECRET
from an Alexa skill using Simple Queue Service (SQS) messaging to “clie
switch the display on and off or change the color.
A node-RED design is discussed from the basic user interface right up to
}
configuring MQTT nodes. MQTT messages sent from a user are displayed Elektor International Media
on a Raspberry Pi. www.elektor.com
token_headers
= {
o n / j s o n ; c h a r set=UTF-8”
”: “applicati
A chapter discusses sending a proactive notification such as a weather “Content-Type
alert from a Raspberry Pi to an Alexa device. The book concludes by
}
explaining how to create Raspberry Pi as a stand-alone Alexa device.
I , h e a d e r s = t oken_headers
s
Dr John Allwork
ts.post(TOKEN
_UR
n s e = r e q u e
respo

SKU20400_COV_Programming Voice-controlled IoT Applications_v02.indd Alle pagina's 16-01-2023 11:08


● This is an Elektor Publication. Elektor is the media brand of
Elektor International Media B.V.
PO Box 11, NL-6114-ZG Susteren, The Netherlands
Phone: +31 46 4389444

● All rights reserved. No part of this book may be reproduced in any material form, including photocopying, or
storing in any medium by electronic means and whether or not transiently or incidentally to some other use of this
publication, without the written permission of the copyright holder except in accordance with the provisions of the
Copyright Designs and Patents Act 1988 or under the terms of a licence issued by the Copyright Licencing Agency
Ltd., 90 Tottenham Court Road, London, England W1P 9HE. Applications for the copyright holder's permission to
reproduce any part of the publication should be addressed to the publishers.

● Declaration
The Author and Publisher have used their best efforts in ensuring the correctness of the information contained in
this book. They do not assume, and hereby disclaim, any liability to any party for any loss or damage caused by
errors or omissions in this book, whether such errors or omissions result from negligence, accident, or any other
cause.
All the programs given in the book are Copyright of the Author and Elektor International Media. These programs
may only be used for educational purposes. Written permission from the Author or Elektor must be obtained before
any of these programs can be used for commercial purposes.

● British Library Cataloguing in Publication Data


A catalogue record for this book is available from the British Library

● I SBN 978-3-89576-531-5 Print


ISBN 978-3-89576-532-2 eBook

● F irst edition
© Copyright 2023: Elektor International Media B.V.
Editor: Alina Neacsu
Prepress Production: Jack Jamar | Graphic Design, Maastricht

Elektor is part of EIM, the world's leading source of essential technical information and electronics products for pro
engineers, electronics designers, and the companies seeking to engage them. Each day, our international team develops
and delivers high-quality content - via a variety of media channels (including magazines, video, digital media, and social
media) in several languages - relating to electronics design and DIY electronics. www.elektormagazine.com

●4
Contents

Contents

About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

Chapter 1 Alexa History and Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14


1.1 Alexa voice service and AWS Lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.2 Pricing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.3 Alexa skills . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.4 Supported programming languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.5 Terminology – Invocation, Utterances, Intents and Slots . . . . . . . . . . . . . . . . . . 16
1.5.1 Alexa Wake word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.5.2 Invocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.5.3 Utterances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.5.4 Intents and requests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.5.5 Slots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.5.6 Interaction model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.5.7 Endpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.5.8 Regions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.6 Skill Sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.7 Session attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.8 Request and response JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.9 Blueprint skills . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.10 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.11 References: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

Chapter 2 Creating your Amazon Account . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23


2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2 Create your Amazon account . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.3 Your skills . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.4 Hosting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

Chapter 3 Creating an Alexa Skill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28


3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.2 Your first skill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

●5
Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi

3.2.1 The interaction model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29


3.2.2 Choose a method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.3 The Invocation Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.2.4 The Intents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2.5 The code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.3 Testing your skill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.4 Skill I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.4.1 Skill request . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.4.2 Skill response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.4.3 Speech Synthesis Markup Language (SSML) . . . . . . . . . . . . . . . . . . . . . . . 43
3.5 Code editing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.5.1 Edit the HelloWorldIntentHandler code . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.5.2 Add some debug code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.6 Test your code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.7 Utility code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.8 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.9 Node.js differences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.10 Node.js debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

Chapter 4 Slots and Dialogs, Saving Session Data . . . . . . . . . . . . . . . . . . . . . . . . . . 52


4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.2 Slots in action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.3 Slot skill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.3.1 Invocation Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.4 Skill flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.5 Add the intent to our skill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.6 Evaluate your model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.6.1 The JSON editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.7 Accessing the slot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.8 The code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.8.1 Test your skill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.9 Session attributes - saving slot values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.9.1 Remember their name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.10 Dialog delegation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
4.11 The Birthday code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.12 Handling Yes and No intents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.13 Multiple Yes / No sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

●6
Contents

4.14 AMAZON.SearchQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
4.15 ASK SDK Utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
4.16 Intent error logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
4.17 Language understanding NLU and Automatic speech recognition ASR . . . . . . . . 82
4.18 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

Chapter 5 S3 Storage and DynamoDB Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83


5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.2 Local storage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.3 Persistent attributes, DynamoDB and S3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.3.1 Code example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
5.3.2 DynamoDB database storage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
5.4 Request and response interceptors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
5.5 DynamoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
5.6 S3 storage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
5.7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

Chapter 6 Certification and Publishing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99


6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
6.2 Adding further languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
6.3 Distribution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
6.4 Availability and Beta Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
6.5 Beta Tester . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.6 Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.7 Submission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
6.8 Post Publication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
6.9 Analytics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
6.10 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
6.11 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

Chapter 7 Creating Skills with Lambda and ASK CLI . . . . . . . . . . . . . . . . . . . . . . . . 107


7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
7.1.1 AWS Lambda skill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
7.2 ASK CLI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
7.3 Visual Studio code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
7.4 Local debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
7.4.1 Add Alexa debugger configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
7.4.2 Test your Alexa skill in VS code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

●7
Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi

7.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124


7.6 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

Chapter 8 Alexa Presentation Language – APL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125


8.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
8.2 APLA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
8.2.1 APLA components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
8.3 Datasources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
8.4 APLA datasource example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
8.5 Adding an APLA reprompt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
8.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
8.7 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

Chapter 9 APL Visual Multimodal Responses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136


9.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
9.2 Creating an APL Visual Response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
9.3 Visual Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
9.4. APL component example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
9.5 Using the Authoring Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
9.6 Integrating APL and code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
9.6.1 Check for screen support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
9.7 APL Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
9.7.1 Standard Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
9.7.2 Media Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
9.7.3 User-defined commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
9.7.4 Execute Commands directive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
9.8 Responsive components and Alexa Layouts . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
9.9 Converting Text to speech – using Transformers . . . . . . . . . . . . . . . . . . . . . . . 151
9.9.1 Transformer APL design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
9.9.2 Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
9.9.3 Using the ExecuteDirective command . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
9.10 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
9.11 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

Chapter 10 Alexa In-skill Purchasing (ISP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158


10.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
10.2 Create your ISP skill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

●8
Contents

10.3 Accessing your ISP code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161


10.4 Retrieve in-skill products, get their information and purchase. . . . . . . . . . . . . . 164
10.5 Produce detail and purchase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
10.6 Purchase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
10.6.1 Failed Purchase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
10.6.2 Refunds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
10.7 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178

Chapter 11 Progressive Response - Accessing the Internet . . . . . . . . . . . . . . . . . . . 179


11.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
11.2 Steps to Send a Progressive Response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
11.3 Progressive response example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
11.3.1 Code response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
11.4 asyncio, async and await - awaiting a web response . . . . . . . . . . . . . . . . . . . . 183
11.5 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

Chapter 12 Creating a Raspberry Pi IoT Thing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184


12.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
12.2. Create a Raspberry Pi IoT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
12.2.1 a) Create our ‘Thing’ and its certificates . . . . . . . . . . . . . . . . . . . . . . . . 184
12.2.1 b) Thing’s endpoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
12.2.1 c) Transfer the certificates to your Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
12.2.2 Create and run the Python code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
12.2.3 Send messages to your Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
12.2.4 Create an Alexa-Hosted Skill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
12.2.5 Test the skill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
12.3 Add intents to the Alexa skill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
12.4 Control the robot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
12.5 Add intent handlers to the skill code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
12.6 Modify your code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
12.6.1 Modify your Pi code - LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
12.6.2 Modify your Pi code - explorerhat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
12.7 Test your robot or LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
12.8 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

Chapter 13 Smart Home Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201


13.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

●9
Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi

13.2 Alexa Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201


13.3 Login with Amazon (LWA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
13.3.1 Create a security profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
13.4 Create your Smart Home Skill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
13.5 Create a Lambda function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
13.6 Lambda skill code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
13.7 Test your Lambda function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
13.8 Link the function to the skill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
13.9 Configure account linking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
13.10 Enable and Link the skill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
13.11 Clean up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
13.12 Troubleshooting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
13.13 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
13.14 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

Chapter 14 Controlling a smart home raspberry Pi with SQS . . . . . . . . . . . . . . . . . . 214


14.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
14.2 Create an SQS Queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
14.3 Raspberry Pi SQS code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
14.4 Create a Smart Home skill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
14.5 Create the function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
14.6 Create a security profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
14.7 Configure the smart home skill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
14.8 Add the function code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
14.9 Test the function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
14.10 Discover your device . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
14.11 Test from an Alexa device . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
14.12 Clean up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
14.13 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
14.14 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

Chapter 15 IoT, Pi and Node-RED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225


15.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
15.2 Prerequisites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
15.3 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
15.4 Running node-RED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
15.5 Node-RED user interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

● 10
Contents

15.6 First flow design - Hello world . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228


15.7 Hardware I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
15.7.1 Add an input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
15.8 Using the Sense Hat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
15.9 Node-RED dashboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
15.10 Sense Hat output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
15.11 IoT - Receiving MQTT messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
15.12 Create a new IoT thing for MQTT communication. . . . . . . . . . . . . . . . . . . . . . 242
15.12.1 Subscribe to a topic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
15.13 Node-RED IoT Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
15.14 Receiving MQTT messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
15.15 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

Chapter 16 Proactive Events – Sending Raspberry Pi Alexa Notifications . . . . . . . . . 250


16.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
16.2 The Lambda function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
16.3 Send a notification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
16.4 Code to get the access token . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
16.5 Send the notification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
16.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
16.7 References: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

Chapter 17 Raspberry Pi as a Stand-alone Alexa Device . . . . . . . . . . . . . . . . . . . . . 262


17.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
17.2 Raspberry Pi setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
17.3 Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
17.3.1 Register your AVS device with Amazon . . . . . . . . . . . . . . . . . . . . . . . . . 263
17.3.2 Download and install the AVS SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
17.3.3 Run and authorize the sample app . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
17.4 Use the sample app . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
17.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
17.6 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

Chapter 18 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272


18.1 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

● 11
Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi

About the Author

Dr. John Allwork was born in 1950 in Kent, England and became interested in electronics
and engineering at school. He went to Sheffield University on their BEng Electrical and
Electronic Engineering course. There he developed an interest in computers and continu-
ed his education on an MSc course in Digital Electronics and Communication at UMIST.
After two years working for ICL as a design, commissioning and test Engineer he returned
to UMIST where he graduated with a Ph.D. in ‘Design and Development of Microprocessor
Systems’.

He worked for several years in technical support and as a manager in electronics distribu-
tion, working closely with Intel Application Engineers and followed this with design work
using the Inmos Transputer systems.

Having taught at Manchester Metropolitan University he retired in 2011 but has kept up
his interest in electronics and programming as well as his other occupation of travelling,
walking, geocaching and spending time on his allotment.

● 12
Visit https://ebookmass.com today to explore
a vast collection of ebooks across various
genres, available in popular formats like
PDF, EPUB, and MOBI, fully compatible with
all devices. Enjoy a seamless reading
experience and effortlessly download high-
quality materials in just a few simple steps.
Plus, don’t miss out on exciting offers that
let you access a wealth of knowledge at the
best prices!
Introduction

This book is aimed at anyone who wants to learn about programming for Alexa devices
and extending that to Smart Home devices and controlling hardware, in particular the
Raspberry Pi.

It covers Alexa programming concepts from the basic concepts of Alexa Voice service, the
interaction model and the skill code which runs on AWS (Amazon Web Services) Lambda.

It takes the reader through all stages of creating skills to certification and publishing,
including writing skills that involve in-skill purchasing. It discusses different ways of crea-
ting skills, then moves on to creating visual skills using APL (Alexa Presentation Langua-
ge) for screen-based Alexa devices.

The book then moves on to cover different ways of controlling hardware including the
Internet of Things and Smart Home devices. There are interfaces with the Raspberry Pi
using MQTT and SQS communication, displaying on the Pi using Node-RED and Python
code.

Although mostly based on Python, Node.js examples or links are also provided. The full
code is provided in a separate document.

Please note that Alexa skill development, the developer console and APL versions have
changed since writing this book, so please bear with the author if there are slight diffe-
rences.

I do not pretend to know all there is about Alexa and Raspberry Pi programming – they
seem to advance faster than I can follow! I have a background in hardware and software
design. I am sure that there are areas where some programmers may be offended by my
code and that there may be better ways to write it, but I have written and tried all the
examples and know they work. I hope the examples will spur you on to find solutions to
your own problems. Should you need more information then please try the online help
and the Raspberry Pi or Alexa forums: alexa.design/slack is particularly good. There are
plenty of programmers out there willing to help solve your problems, often extremely
quickly; certainly faster than I would get back to you!

I wish to thank my friends for encouraging me, especially Dr. Hugh Frost, Andy Marsh
and Dr. John Nichols; the Alexa staff: in particular Jeff Nunn, Jeff Blankenburg and Ryan J
Lowe; helpers on the alexa.design/slack group, including Andy Whitworth; subscribers of
my YouTube and GitHub channels who have made encouraging comments; and the many
anonymous people on the internet, forums, blogs and websites who have answered many
questions, not just my own – keep up the good work. Not least of all I would like to thank
my wife Penny, for supporting me throughout.

And of course, you for buying the book!

● 13
Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi

Chapter 1 • Chapter 1 Alexa History and Devices

Alexa is the virtual voice assistant and Echo is the device.


The standard Amazon Echo device general release was in 2015. In 2019, newer versions
were released, with more rounded designs and better audio.
Amazon Echo Dot was released in 2016 with a smaller design than the standard Echo. Va-
rious releases and designs, including a kid’s version, have continued to the 5th generation
with a clock and improved LED display in 2022.

In 2017, Amazon released a combination of the Dot and Show, called the Echo Spot. In
the same year, the Echo Show was released and featured a slanted, 7-inch touchscreen,
camera and speaker. This later changed to a 10-inch screen (Echo Show 10), and more
recently, added a 360-rotating display.

The Echo Show 5 came in 2019, (2nd gen in 2021), as well as Echo Show 8 and an Echo
Show 15 in 2021 designed for wall mounting.

There are other devices too, including the Button, Flex, Input, Look and recently the Astro
robot.

Here are some of my devices (not including smart devices). From the top: Echo Show 8,
Fire TV stick, Echo Auto, my original Echo dot, and the Echo Spot.

● 14
Chapter 1 ● Alexa History and Devices

Even though many devices have a screen, you should always design for ‘voice first’.

1.1 Alexa voice service and AWS Lambda


Alexa Voice Service is Amazon’s cloud service that processes the audio, determines the
appropriate action (AVS) and returns a response to the device. For the skill to produce
the appropriate response, designers need to implement two major parts: the interaction
model and the skill code which runs on AWS (Amazon Web Services) Lambda.

The interaction model is what your users say and how they communicate with your skill.
AWS Lambda is a serverless, event-driven computing service that lets you run your code.
Lambda can be triggered by many AWS services and you only pay for what you use.

When a user interacts with an Echo device, AVS sends a request to the skill which is run-
ning on AWS Lambda. The skill replies with a response that is turned into a speech and/
or visual response back to the user.

1.2 Pricing
Although there are charges for AWS Lambda, the AWS Lambda free tier includes one
million free requests per month and 400,000 GB-seconds of compute time per month, as
well as 500 Mb storage. As you can see, this is more than enough for a beginner. For more
information, see https://aws.amazon.com/lambda/pricing/

For developers whose skills use more than this, Amazon provides Promotional Credits
which reward those who build cloud-hosted applications, software, or tools for sustaina-
bility-related work.
For FAQ see reference 1.

1.3 Alexa skills


There are a few different types of Alexa skills2. You may already have realized that a skill
communicating with an Alexa device is different from one switching on your lights or tel-
ling you there’s someone at your front door.

● 15
Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi

At the moment, there are 15 different types of Alexa skills.


The more common ones are:

Skill Function Skill Type Description


Automotive Pre-built and Custom Automotive applications
Custom Custom Voice and visual (APL) applications
Flash briefing Pre-built Provide news and short content information
Games Custom Voice and visual driven game skills
Music Pre-built Skills to control audio content
Smart Home Pre-built Skills to control smart home devices
Video Pre-built Control video devices and content

We’ll be concentrating on Custom skills. Blueprint pre-built skills are also available and
easy to develop but have reduced options for user experience. We’ll also study smart
home skills, of course.

1.4 Supported programming languages


AWS Lambda natively supports Java, Go, PowerShell, Node.js, C#, Python, and Ruby
code. This book will mainly use Python, but it also provides code snippets and links for
Node.js.

1.5 Terminology – Invocation, Utterances, Intents and Slots


As with learning anything new, there is new terminology to be understood. You will soon
meet (or may already have met) Invocation, Utterances, Intents and Slots.

1.5.1 Alexa Wake word


This is the word used to start your Alexa device listening to your command.
Currently, there are five wake words: ‘Alexa’ (the default), ‘Amazon’, ‘Echo’, ‘Computer’
and ‘Ziggy’. You can change these for your devices, but not invent new ones.

1.5.2 Invocation
The ‘invocation’ is the phrase used to trigger your skill, e.g.: ‘Alexa, open Johns’ weather
skill’ or ‘Alexa, launch my cooking skill’.

1.5.3 Utterances
Utterances are the phrases that your user says to make a request. There can be many
ways to achieve the same result, e.g.: What’s the time? What’s the time now? What time
is it? – you will have to think of as many possible ways that your user can interact with
your skill. Nevertheless, Alexa will build your model and try to find similar utterances.

All the possible ways to do this can be difficult to describe (considering, for instance, how
many different ways and types of pizza someone might order), so Amazon has recently
announced Alexa Conversations to help with this. For more information, see reference 3.

● 16
Chapter 1 ● Alexa History and Devices

1.5.4 Intents and requests


The utterances are linked to one intent in the code. For instance, all the ‘time’ utterances
would be linked to the same intent, e.g., GetTimeIntent, and this would trigger a GetTi-
meIntent function in our skill code.

There are two types of Intents:

• Built-in Intents
- Standard built-in intents: These are provided by default by Amazon that every skill
must have, e.g.: AMAZON.StopIntent, AMAZON.CancelIntent, AMAZON.Fallback-
Intent, etc. and include: AMAZON.YesIntent, and AMAZON.NoIntent, intents for
screen control (e.g., scroll up/ down/ left / right) and media intents (pause, repeat,
resume), and also an AMAZON.SendToPhoneIntent. You can see these when you
add an intent, and select “Use an existing intent from Alexa’s built-in library”
- The Alexa Skills Kit also provides a library of specific built-in intents and includes
intents such as Actor intents, Books, Calendar, LocalBusiness, Music, TV, Series,
WeatherForecast, etc.

These intend to add functionality to your skill without you having to provide any sample
utterances. For example, the WeatherForecast includes a search action (What is), an ob-
ject (WeatherForecast), location (London) and date (tomorrow) .
We won’t cover them in this book, see:

https://developer.amazon.com/en-US/docs/alexa/custom-skills/built-in-intent-library.html

• Custom Intents

These are created as required for the skill (e.g., GetTimeIntent)


If you use an Amazon template, the code for the built-in intents is provided for you.
There are three types of requests that the skill can send:

• A Launch request that runs when our skill is invoked (as a result of the user saying,
‘Alexa open …’ or ‘Alexa, launch ...’).
• An Intent request which contains the intent name and variables passed as slot values.
• A SessionEnded request, which occurs when the user exits the skill, or there is an
unmatched user’s response (although you may be able to trap this out with AMAZON.
FallbackIntent).

This information is all packaged and sent as a request (and returned as a response) as a
JSON file. We’ll look at the JSON code later.

1.5.5 Slots
A slot is a variable that contains information that is passed to an intent. The user might
say ‘What’s the time in London’. Here ‘London’ (or Paris or Rome) is passed as a slot
variable to the intent code.

● 17
Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi

Amazon provides built-in slot types, such as numbers, dates and times, as well as built-
in list types such as actors, colors, first names, etc. In the previous example, we could use
AMAZON.GB_CITY which provides recognition of over 15,000 UK and world-wide cities
used by UK speakers.

However, some of these slots are being deprecated (including AMAZON.GB_CITY in favour
of AMAZON.CITY), so check. The full list is covered at ‘List Slot Types:

https://developer.amazon.com/en-US/docs/alexa/custom-skills/slot-type-reference.html#list-slot-types

Alexa slot types fall into the following general categories:

• Numbers, Dates, and Times


• Phrases
• Lists of Items

Developers can create custom slots for variables that are specific to their skill.
When we define our utterances, slots are shown in curly braces: {city}, e.g.:

Example:

Intent GetTimeIntent
Utterance What is the time in
Slot {city}

Utterances can have many slots and slot types.

The GetTimeIntent will trigger a function in your skill (which you might sensibly call Get-
TimeIntentFunction).

Slots are used to pass data from your VUI (voice user interface) to your program. As an
example, we might have an Alexa skill that asks for your name.

The VUI might go like this:

User: “Alexa, Open What’s my name”


(Invoke the skill – the launch request executes)
Alexa: “Welcome, please tell me your name”
User: “My name is John” (“John” is passed in a slot to myName intent)
Alexa: “Hello John”
(Your intent picks John from the slot passed to it and responds)

● 18
Chapter 1 ● Alexa History and Devices

At this point, the slot data is lost unless you save it. You can save data in a temporary
folder but more often data is stored in session attributes, you will find out later.

1.5.6 Interaction model


The combination of the utterances and their related intents and slots make up the inter-
action model. This needs to be built by the developer console, and in doing so Alexa may
recognize further utterances similar to those you have defined.

1.5.7 Endpoints
The endpoint is where your code is hosted. You can choose an Amazon-hosted, AWS
Lambda ARN (Amazon Resource Name) site or host it yourself on an HTTPS site that you
manage.

If you choose an AWS site, it will give you an ID beginning arn:aws:lambda and look
like: arn:aws:lambda:<region>:function:<functionID>. You skill also has an ID looking
something like this: amzn1.ask.skill.a0093469-4a50-4428-82e6-abcde990fgh3.

1.5.8 Regions
If using an AWS-hosted site, you should host your code in a region near to your user.
We’ll see that there are lots of regions, but for some skills currently only North Virginia
is available.

1.6 Skill Sessions


The period that your skill runs for is called a session. A skill session begins when a user
invokes your skill and Alexa sends your skill a request. Your skill receives the request and
returns a response for Alexa to speak to the user.

If the shouldEndSession parameter is ‘true’ the skill terminates, otherwise, the session
remains open and expects the user to respond. If no user input occurs, a reprompt is
sent if included in the code. If the user still doesn’t respond (after about 8 seconds), the
session ends 4.

Skill connections and progressive responses may override these rules. For example, if
a skill has to get further information from another source, e.g., when your taxi will be
available, or pizza delivered.

1.7 Session attributes


Session attributes are used to hold data during a session, for example, your user’s name.
When the session finally ends, the data is lost. To prevent this from happening, data can
be stored permanently in persistent attributes. This can be held in a DynamoDb database
which is provided as one of the AWS services and easily accessed using an Alexa-Hosted
Skill. With an Alexa-Hosted Skill, you can build your model, edit your code and publish
your skill all from within the developer console.

● 19
Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi

1.8 Request and response JSON


We saw in the figure above how the request is sent from the user (Alexa Voice Service)
to your code and how the response is returned from your code.
This data is passed in a JSON format. JSON (JavaScript Object Notation) is a lightweight
data-interchange format. It is easy for humans to read and write and easy for machines
to parse and generate” 5

The basic JSON request contains information on the active session, the context, the sys-
tem information on the application (ID), user, deviceID, and the request itself:

{
“version”: “1.0”,
“session”: {
( ..session parameters)
}
“context”: {
( ..information on the Alexa device)
}
“System”: {

“request”: {
“type”: “IntentRequest”,
“requestId”: “amzn1.echo-api.request.745d…9a”,
“locale”: “en-GB”,
“timestamp”: “2022-04-14T09:27:01Z”,
“intent”: {
“name”: “HelloWorldIntent”,
“confirmationStatus”: “NONE”
}
}
The reply JSON contains is the response speech and reprompt, as well as the state
of the EndSession and session attributes.
{
“body”: {
“version”: “1.0”,
“response”: {
“outputSpeech”: {
“type”: “SSML”,
“ssml”: “<speak>Welcome, you can say Hello or Help.</speak>”
},
“reprompt”: {
“outputSpeech”: {
“type”: “SSML”,
“ssml”: “<speak>Welcome, you can say Hello or Help.</speak>”
}
},

● 20
Chapter 1 ● Alexa History and Devices

“shouldEndSession”: false,
“type”: “_DEFAULT_RESPONSE”
},
“sessionAttributes”: {},
“userAgent”: “ask-python/1.11.0 Python/3.7.12”
}
}

The response can get more complicated if there is a dialog session occurring (i.e., if the
program hasn’t enough information to complete the intent request and has to ask for
more).

We’ll look at the information passed in the JSON request and response and how to extract
it in a later chapter.

1.9 Blueprint skills


Alexa provides blueprint skills, where you can ‘fill in the blanks’ to make your skill. These
are worth looking at for some fun and information presenting skills.

The current categories are: At home, Kids recommended, Learning and knowledge, Fun
and Games, Storyteller, Greetings and Occasions, Communities and Organizations, and
Business 6. We won’t cover them here.

● 21
Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi

1.10 Summary
We’ve seen how the Alexa devices have developed from the original voice-only device to
screen-based and robot devices, how the Alexa Voice service works and looked at termin-
ology – Invocation, Utterances, Intents and Slots. Finally, we looked at a skill session and
how data is passed and saved during a session and between sessions.

In the next chapter, we’ll see how to set up an Alexa account before moving on to our
first Alexa skill.

1.11 References:
1. https://aws.amazon.com/lambda/faqs/
2. https://developer.amazon.com/en-US/docs/alexa/ask-overviews/list-of-skills.html
3. https://www.youtube.com/watch?v=1nYfRvg976E
4. https://developer.amazon.com/en-US/docs/alexa/custom-skills/
manage-skill-session-and-session-attributes.html
5. https://www.json.org/json-en.html
6. https://blueprints.amazon.com

● 22
Visit https://ebookmass.com today to explore
a vast collection of ebooks across various
genres, available in popular formats like
PDF, EPUB, and MOBI, fully compatible with
all devices. Enjoy a seamless reading
experience and effortlessly download high-
quality materials in just a few simple steps.
Plus, don’t miss out on exciting offers that
let you access a wealth of knowledge at the
best prices!
Exploring the Variety of Random
Documents with Different Content
ceiling. But wasn't it a narrow shave!"
"That's what it was," answered Don, soberly. "I don't want another
like it."
"Nor I," added Bob, and Leander shook his head doubtfully.
"I wonder how it started," was Robert Menden's question. "Danny,
can you explain it?"
"Sure an' I can't, sur, savin' to say that I was sick, an' maybe I didn't
put the fire out very good, sur;" and Danny looked as if he had
committed the greatest crime on earth. The origin of the fire was
never fully explained, but probably Danny's view of it was correct.
The fire brought forth another lecture from old Jacob. "Ye can't be
too careful, nohow," he said. "Ye want to see to it thet not a spark is
allowed around. If the Dashaway had been burnt up, like as not
most of us would have lost our lives."
"I am sure we'll all be careful in the future," said Dick.
"You kin bet I'll be on me guard, so I will," broke in Danny. "Dat fire
most scared me into a fit, dat's wot it did."
The nights were now beautiful ones. A cloudless sky and millions of
stars twinkled down upon the polished deck of the Dashaway as she
bowled along before a steady breeze, which old Jacob declared was
"jest about right, any way o' lookin' at it." It was cool, too, for that
locality, and the balance of the trip promised to prove a most
delightful one.
Passing along the Great Bahama Bank to the south of the Andros
Islands, the course had been toward Acklin Island, on the southeast,
and then past Providence Island, straight onward to a course five or
six miles north of the upper coast of Hayti and Dominica.
"We might stop along the coast o' Dominica," observed old Jacob,
one day, as he surveyed the distant coast line with his long
telescope.
"I wouldn't stop unless it is necessary for stores," returned Robert
Menden. "Remember, we want to get to Porto Rico just as quickly as
possible."
"We have stores enough to last us to San Juan. I saw to thet afore
we pulled up anchor at St. Augustine."
"Then we'll go right straight through," decided Dick; and as he was
the owner of the Dashaway, that settled the matter.
But going right straight through was not such an easy matter as
anticipated. Early on the following day a heavy fog set in, and by
noon it was so thick that one could not see twenty feet ahead. At
once old Jacob ordered the jib taken in, also the topsail, while the
mainsail was closely reefed.
"This is one o' the wust places in the world fer a fog," was the
Yankee tar's comment. "Afore ye know it if we ain't careful we'll run
on a hidden bank. We must keep a strict watch, and keep the fog
horn blowing until the fog lifts." And this was done, one and another
taking his turn at the big horn until he was tired. Once, about seven
o'clock, they heard an answering horn, which seemed to come closer
and closer, but just as they felt they had good cause for alarm, the
sound began to recede, until it was lost in the distance.
"This is reg'lar smugglers' weather," said old Jacob. "They love it, for
they can land goods 'most anywhere, without the custom house
officials being the wiser."
"Did you ever run across any smugglers?" questioned Don, who
stood by.
"I did once—down on the coast o' Maine. They were bringin' in silk
from Chiny, and I helped the revenue officers collar, six o' 'em—
strappin' big fellers, too. Three o' the crowd were shot in the mix-up
and one o' 'em died in the hospital from his wounds. It was in that
muss that I got that," and the old sailor pointed to a long scar along
his neck.
"Excuse me, but I want nothing to do with smugglers," shuddered
Don. "They must be a bloodthirsty set."
"Some o' 'em are, lad—yet they ain't half so bad as the wreckers—
the chaps as sets up false lights along shore to lure a vessel to her
doom, so as they kin loot her. Those are the chaps as ought to be
hung, every mother's son on 'em!" and old Jacob shook his head
decidedly.
It was not until thirty hours had gone by that the fog began to lift,
raised by a gentle breeze which sent the Dashaway on her course as
lively as ever before.
"Off once more!" shouted Bob. "Hurrah!" and the others joined in
the cheer. It was calculated that two days more would bring them
within eight of Porto Rico, at a point near Manati, a city located
directly in the center of the northern coast, and but a few miles to
the westward of San Juan.
But once again their hopes were doomed to disappointment. The
wind lasted only until sunrise the next morning, then died out
utterly, leaving the sun to boil down on the deck with more
fierceness than it had shown for some time.
"Confound the luck!" growled Dick, as he gazed at the idle sails of
his craft. "I wonder how long this is going to last."
"Why not whistle for a breeze," suggested Bob, slyly. "I've heard that
will fetch it."
"All right, Bob, you whistle," replied Dick.
"I'll tell you what I'd like to do," said Don. "I'd like to take a swim
before we go ashore at San Juan."
"Hurrah! just the thing!" cried Leander, throwing up his cap. "We'll all
go in together!" And he rushed down to the cabin, to don his
bathing trunks. All of the other boys followed, even Danny taking
part.
CHAPTER X.
A SWIM NOT LIKELY TO BE FORGOTTEN.

"You want to be on the lookout fer sharks," observed old Jacob, as


he watched the boys' preparations.
"Gracious! Do you mean to say there are sharks around here?"
ejaculated Leander.
"I don't see any, but there may be, nevertheless. Howsomever, I'll
keep my weather eye open an' give ye warnin', if I see anything
suspicious."
"I don't want any sharks in mine," put in Don, and hesitated a long
while before entering the ocean. But when he saw the others diving
about and having a good time, he could not resist the temptation to
join them.
It was jolly sport. The water was just warm enough to be pleasant,
and the waves were so light that there was little or no danger of
being pounded against the yacht's sides. They dove and turned
somersaults to their hearts' content, and then Dick proposed a race,
and an empty barrel was thrown out behind the Dashaway.
"Each boy must swim to the right of the barrel and around it," cried
out Robert Menden. "An extra piece of pie to the lad touching the
rudder first on the return. Line up now. All ready?"
"Yes! yes!" was the cry.
"Then go!" And away went the five boys, shrieking and laughing
wildly, while Robert Menden and old Jacob watched the sport with
keen interest.
The barrel had floated all of a hundred and fifty feet away, so the
race would be one of over a hundred yards. At first Dick was in the
lead, but gradually Leander crawled up, with Bob, Don and Danny
not far behind.
"I'm goin' to win dis race if I kin!" gasped the chubby Irish lad. "Dat
extry pie is comin' to me, even if I has ter make it meself!"
"No, Danny, you'll make the pie for me!" laughed Bob, and forged
ahead of all of the others.
At the turning point Bob led, with Leander, Dick, Don and Danny
close behind. But now Leander began to play out, and at the barrel
he paused for a second to gain his breath.
And then something awful happened—something that Leander will
never forget as long as he lives.
Something cold and slimy brushed up against his legs and swiftly
encircled them.
What the thing was, Leander could not imagine; but the yell he gave
would have shamed an Indian on the war-path.
"Get out!" were his words, and he tried to kick the thing off; but his
efforts were unavailing, and whatever it was, it drew about his legs
closer and closer and then started to drag him under the surface of
the ocean.
He yelled again; but his chums were too intent upon winning the
race to pay much attention to him. "Come on, don't lag behind!"
called out Dick. "You may win yet."
Before anybody noticed that something was wrong, Bob had reached
the rudder post and had won. But now old Jacob was on his feet,
and pointing excitedly to where Leander was clutching at the empty
barrel and yelling at the top of his lungs.
"Somethin' is wrong with the lad," said the old Yankee tar.
"Help! help!" screamed the terrified boy. "Something has me by the
legs and is trying to pull me under!"
"Is it possible!" cried Robert Menden. He turned to the old sailor.
"What can it be?"
"Don't know—maybe a devil-fish," was the answer.
"Help! don't leave me to die!" came from Leander. He had slipped
from the barrel, but now he clutched it once more.
As quickly as he could, old Jacob procured a life line and threw it
toward the lad.
But the line fell short and Leander gave another scream.
"Throw me a long knife, and I'll try to help him," said Dick. "He
shan't perish if I can help him."
"No, no, boy; it may cost you your life," shuddered Robert Menden.
"All of you had better come on board as quickly as you can."
But none of the members of the Gun and Sled Club would listen to
this. They had stuck together before in extreme peril, and they
would do the same again.
"Keep up; we are coming!" shouted Dick, and having procured a
long kitchen knife he swam toward Leander with all speed. Soon the
others had armed themselves in a similar fashion and were
following. Even faithful old Dash seemed to realize that something
was wrong, and with a loud splash he, too, went over the yacht's
side.
"They have grit, as you Americans would say," observed Robert
Menden. "What do you think it is?"
"We'll know in a minit," replied old Jacob, and rushed for a gun.
By this time poor Leander was utterly exhausted. The thing about
his legs was growing tighter and tighter and pulling downward so
heavily that the barrel to which the boy clung was almost totally
submerged.
"Save me!" he gasped once more. "I'm going down! It's pulling me
under!"
"I'm coming!" answered Dick. "What is it? Can't you make out?"
"Something slippery and slimy. Oh, save me!"
"If it was a devil-fish we'd see something of it," thought Dick, and he
dashed in and then under water. In a moment he had hold of
Leander's legs and was slashing away vigorously with his knife—at a
mass of drifting seaweed!
It was a tough job; but once Dick knew he had not some animal to
contend with, or monster of the deep, he grew calmer, and in a
minute more Leander was free, and the others were helping him
back to the yacht.
Dick brought with him some of the seaweed, which was dark green
in color and covered with a whitish slime which gave one a shiver to
touch.
Poor Leander was too exhausted to stand, upon reaching the deck,
and had to be assisted to the cabin, where he was rubbed down and
put to bed.
All on board examined the seaweed with interest.
"It's alive; don't ye forgit thet," observed old Jacob. "An' if Leander
hadn't been cut away by Dick, he would have been pulled under, jest
as sartin as if he had been tied to a rope. Sometimes thet seaweed
covered an acre or more of the ocean. I don't know wot the
scientific name is, but us old sailors used to call it Old Nick's hot-
bed."
"And a hot-bed it must make," put in Don. "I don't think I want to go
swimming around here again."
"The weed winds around anything that it happens to touch, and
then it begins to contract, and that pulls the thing down. Many a
poor sailor has lost his life through foolin' with Old Nick's hot-bed,"
concluded old Jacob.
On the day following, the breeze freshened once more, and the
Dashaway bowled along merrily. Toward evening all hands began to
watch for land, but it did not appear. Yet about nine o'clock in the
evening they sighted numerous lights clustered together almost
directly south of the yacht.
"Must be the lights of Manati," observed old Jacob; and his surmise
proved correct, and by morning they were running straight for the
harbor of San Juan.
Now that the end of the long voyage was so close at hand, the boys
and Robert Menden were impatient to go ashore, and the time was
spent in making preparations for the trip to the great caves near
Caguas.
"We may have some difficulty in taking our guns ashore," said Dick.
"In that case we'll have to rely, perhaps, on our pistols."
"You won't be hunters after game on this trip," smiled Robert
Menden. "You'll be after something of greater value."
"But we'll have to go armed," put in Bob. "I've heard that Porto Rico
is full of old-fashioned Spanish brigands."
"There are brigands, but not as many as you perhaps imagine," said
the Englishman. "Our greatest enemy will be Joseph Farvel—if he
turns up."
"And he will surely appear sooner or later," said Don. "We had better
be on our guard against him and any followers he may have picked
up."
CHAPTER XI.
THE CLUB ARRIVES AT SAN JUAN.

The Island of Porto Rico boasts of but three cities of importance:


San Juan on the north, Mayaguez on the west and Ponce on the
south. The mountainous country back of the seacoast is dotted with
hundreds of villages and hamlets; but the means of communication
from one place to another are very poor, the best highway being the
military road from San Juan to Ponce, a splendid bit of engineering,
which, as previously mentioned, runs over mountains nearly, if not
all, of four thousand feet high.
San Juan, the capital, is the principal city, especially so far as
shipping is concerned, for its harbor is one of the best the island
affords. The city contains about 30,000 inhabitants; natives,
Spaniards and negroes, and foreigners from all over the world. It is
wedged in along the shore, between two frowning forts of whitish
stone and a long line of battlements, once kept in good order, but
now fast tumbling into decay.
In the city itself there are two plazas; one at the city hall and the
other near Fort Christobal—both great meeting-places, in the
evenings, for native dames and maidens, young and old men, and
children. It is a merry crowd, that smokes, sings, dances, listens to
the band, and otherwise amuses itself.
As the Dashaway came to anchor in the harbor, all the boys viewed
the shore with interest. They could see row after row of the flat,
square houses, set up in long blocks, with narrow and not over clean
streets between. About every second house had its second story
project over the first, and balconies were to be found everywhere,
sometimes causing the street below to be little better than a tunnel.
"All ashore that's going!" cried old Jacob, and the small boat was
lowered, and the boys and Robert Menden entered, along with their
weapons and other traps, and then the Yankee sailor pulled them to
the nearest dock.
Here a harbor officer met them, and a long conference ensued. Then
the Dashaway was visited by the San Juan officials and inspected,
after which the craft was assigned to a proper position in the harbor.
It was at first thought to leave old Jacob in charge of the yacht; but
at the last moment a native was engaged to watch the craft, and the
Yankee went along with "his boys," as he was wont to call them.
"Now, lads, are you all ready for the trip?" questioned Robert
Menden.
"We are," came in a chorus.
"Remember, you may have some dangers to face. Don't go if you
would rather remain behind."
"Who's afraid," came from Bob. "I'm not."
"Nor I!" came from the others.
"I'm out fer dat hundred dollars wot was promised to me," put in
Danny. "Just youse lead de way an' I'll be close in yer footsteps, see
if I ain't."
Each of the lads had provided himself with a hunting suit, and a
small pack containing a change of underwear, comb and brush, and
the like. All carried a little money, which, in the city, was exchanged
for Spanish silver; for it was correctly surmised that the natives in
the interior would not take United States coin. To-day that is, of
course, changed, and Uncle Sam's coin or paper money is as good
as any.
The party of seven soon found themselves on the main street of San
Juan. Robert Menden had made some careful inquiries, and without
delay they set off for Caguas.
They had hired a native turnout to take them to the place, but the
driver failed to turn up, and at last they set out on foot for the
village.
The many sights to be seen at every hand were very interesting.
Here were the milk and fruit peddlers, each with his wares hanging
from a yoke balanced over his broad shoulders. And here were funny
looking ponies and donkeys with huge burdens strapped to their
backs. Native carts were rather scarce, but occasionally one would
come lumbering along, with its broad and almost solid wheels, and
its team of oxen or cows. The driver would walk by the team's side,
lashing them with a long whip and yelling at them continually in very
bad Spanish.
The people also interested the boys. A large proportion of them
were black, the blacks increasing in number as the seacoast was left
behind. Most of the colored men looked friendly enough, but here
and there could be found fellows of mixed Carib blood—tall, ugly
looking creatures.
"I reckon they are the Porto Rican brigands," whispered Dick, as
they passed three of the ugly looking Caribs. "I don't think I would
care to meet them of a dark night along a lonely road."
"These people have good cause to be ugly," put in Robert Menden.
"Spain has robbed the natives for years by taxing them to death,
and I understand that in many places the church has fallen into
disrepute because the clergy do everything they can to get the
money away from the sugar and plantation workers. It's really a sad
state of affairs."
On they went, until San Juan was left behind and they struck the
military road previously mentioned. The walking was all uphill, but
the ascent was so gradual that they scarcely noticed it. On both
sides of the road grew tropical trees of all sorts—palms, mangoes,
guavas, cedar, mahogany, and that wood which can be found almost
anywhere—hemlock. There were also plantains and great cacti, and
over all trailed immense tropical vines. Close to the deep, black soil
grew magnificent ferns, and such mosses as the boys had never
before seen.
"Almost a paradise, isn't it?" remarked Don. "And how clear the air is
—not half as hot as I imagined it would be."
"Jest you wait until noon afore ye speak o' the heat," returned old
Jacob. "Old Sol don't git to work in earnest till about twelve or one
o'clock."
They soon crossed a clear running brook, and leaving the bridge,
Dick ran down to the water's edge to get a drink.
"Drink through your handkerchief!" called out Robert Menden.
"Through my handkerchief?"
"Yes."
"What for?"
"Because you don't want to swallow a lizard or worse. These waters
are full of small animal life, so I've been told."
Dick did as the Englishman suggested. And he was glad of it, for
while bending down he saw several tiny lizards or leeches swimming
near at hand. "None in me, not if I know it," he murmured as he
drew back. "I'll inspect everything that goes down my throat after
this."
By noon they had covered several miles. The sun was out clear, and
now the heat began to tell on them.
"I move we rest," suggested Leander; and this was readily agreed
to, and they sat down under an immense plantain, covered with half
ripe fruit—that fruit which we commonly know by the name of
banana, although the real banana is red.
"Are there any wild animals in Porto Rico?" questioned Don.
"I'm sure I don't know," answered Robert Menden. "I shouldn't look
for anything very large on an island of this size. All the large stock
has probably been killed off by the natives."
"I reckon you'll find wild-cats here an' wild hogs," put in old Jacob.
"An, let me tell ye thet a real wild hog is about as dangerous as a
wolf or a leetle bear. But it ain't likely thet any wild animals would
keep themselves around such a road as this. They would take to the
mountains and stay there, so long as they could git enough to eat."
The rest was not half over when Dick grew restless, and arose to
take a look at his surroundings.
"I'm bound to see all I can of the country," he said, with a smile.
"Will you come, Leander?"
"Certainly," was the answer; and in a moment more the two chums
were strolling off.
"Be back inside of fifteen minutes," shouted Robert Menden, and
both called back that they understood.
There seemed to be a fine grove of orange trees to the left of the
road, and toward this they made their way, wondering if they could
pick up any fruit fit to eat.
"It must be fine to have such fruit ready to hand," observed Leander,
as they entered the grove. "I reckon the natives don't know the
value of what they've got."
"They might say the same of our apples, Leander. I'd rather have
apples than oranges—that is, I mean for regular."
"Oh, so would I. Don't they grow apples?"
"I don't think so—anyway, not such apples as we have up North. It's
too hot."
They soon found that the oranges were even more green than the
plantains, or bananas, had been. They passed the grove and came
out on a rocky stretch, overlooking a little valley where flowed a tiny
stream, glistening like silver in the sunlight.
"Beautiful scenery," murmured Leander, and Dick agreed with him.
Then a flock of gayly-colored birds flew out of some brush to the
right of them.
"If I only had my gun," cried Dick—for their firearms had been left at
the resting place.
"Let us see if we can't locate their nests," said Leander.
"I don't want to rob their nests," declared Dick.
"Neither do I; but we might have a look at the kind of eggs they
lay."
So the pair set off through the brush and over the rocks.
They had gone less than fifty yards when they came to a spot
covered with long rushes.
"The ground seems to be shaky here," began Leander, when
suddenly, without warning, the rushes gave way, and down plunged
both boys out of the bright sunlight into almost total darkness.
CHAPTER XII.
PRISONERS OF NATURE.

"Dick!"
"Leander!"
"Oh, my side!"
"Oh, my leg!"
"Are you seriously hurt?"
"I—I don't know."
"I've had all the wind knocked out of me."
"Ditto with me. What a tumble to take!"
"What kind of a place is this?"
"A hole—a big, deep, dark hole. One of the caves, perhaps."
"Do you think it's a—a bear's den, or something like that?"
"No, I don't. I reckon it's just a common, everyday hole, or cave.
The question is, how are we going to get out?"
"To get out?"
"That's what I said."
"Climb out, of course."
"That's easy enough to say, but just look up and see how far we are
from the top."
They looked up. The hole was all of thirty-five or forty feet deep, and
from ten to fifteen feet across. The sides were of dirt and rocks,
covered here and there with wet moss.
Luckily they had landed on a pile of half-decayed leaves and tree
branches, otherwise they must have been seriously injured. The
rushes and some dirt had fallen all around them.
For a full minute neither spoke. During that time they examined the
walls of the hole.
"We've got to get out somehow," said Dick, at last. "But to climb
that wall seems impossible."
"Let us try it, anyway," returned Leander.
He found what he considered the best place, where several jagged
rocks projected, and by digging his hands into the soil succeeded in
pulling himself up a distance of eight or ten feet.
"Look out!"
As Dick uttered the cry he leaped back out of danger.
Down came several of the rocks, accompanied by a great mass of
dirt.
Leander followed, to roll over on his back on top of the pile.
"Great Cæsar!" gasped the fallen one. "I didn't think I was going to
pull down the whole wall over me."
"Don't try that again, or we may be buried alive," cautioned Dick.
"I don't think I will try it," was the rueful answer. "But, Dick, we
must get out."
"That's true."
"Let us yell for help."
"I don't believe anybody is within hearing distance."
"Never mind, we can try it."
Both raised their voices, not once, but half a dozen times. Then they
listened intently.
"Did you hear anything?" asked Dick.
"Not a sound."
Their faces fell. What were they to do next?
"If we only had a rope," sighed Leander.
"Or a long pole."
They walked around the flooring of the hole dismally. Then Dick
drew out his watch and his face brightened.
"The fifteen minutes are up. They'll be hunting for us presently."
He was right; the others of the expedition were both hunting and
calling, but nothing was seen or heard of them.
Led by old Jacob the party went through the orange grove, but came
up a goodly distance to the left of the hole in which the poor boys
were prisoners of nature.
Another quarter of an hour went by. To Dick and Leander it seemed
an age. Again they cried out, but the top of the hole being smaller
than the bottom, their voices were as muffled as though they were
prisoners in a huge bottle.
"This is truly a pickle," groaned Dick, as he threw himself on one of
the fallen rocks. "I must say, I'm stumped."
"So am I."
"I'm going to try throwing stones out of the hole," said Dick, after
another interval of silence. "Anything is better than doing nothing."
Both boys began to shy out all of the stones they could pick up.
"We're really making the hole deeper," observed Leander, when
suddenly the opening above them was darkened, and they saw a
negro boy looking down at them with eyes as big as saucers.
"Hullo, help us out!" cried Leander, eagerly; but at the sound of their
voices the negro boy took to his heels as fast as he could go.
"He's gone!"
"Perhaps he has gone for a rope."
"More than likely he was scared to death. He'll go home and say he
saw a ghost."
Another quarter of an hour went by. Then they heard footsteps
approaching, and two stalwart Caribs appeared. Behind them came
the little boy, trembling with fear.
"Hullo!" repeated Leander. "Help us out, will you?"
"Un Americano!" muttered one of the Caribs. "How you git down
dar?" he asked, in broken English.
"We fell through the rushes."
"Um—bad place dis to walk."
"So we have discovered. Will you kindly help us out?"
Both of the negroes nodded. Then they withdrew, to consult one
with another. Presently they came back.
"How much give if pull you out de hole?" demanded the one who
had previously spoken.
"Give?" came from both boys simultaneously.
"Ye—as, Americano rich boys, not so?"
"No, we are not rich," replied Dick in disgust. "But we'll pay you,
don't fear."
"How much give?"
"Oh, I don't know."
"We'll give you a dollar," added Leander. "Gosh, but they believe in
making money, don't they," he added, in a whisper.
"No take dollar," came from the Porto Rican. "Take ten dollar."
"Ten dollars!" gasped Dick, not so much over the amount of the
sum, but because of the "cheek" in asking it. "You don't want much,
do you?"
"We'll give two dollars—we can't pay any more," said Leander.
But at this the Caribs shook their woolly heads. They were bound to
make money out of the Americans' misfortune. Such a thing as
being generous never entered their heads.
"Ten dollar, or we go away again," said the one who could speak
broken English.
"We'll give you three dollars," said Dick.
"No, ten dollar."
To this the Caribs stuck, and at last the boys promised them the
amount.
"But you have got to pull us out first," said Leander.
Even to this the negroes demurred, and in the end it was agreed to
pay five dollars first, and the second five when they were safe.
Dick took some Spanish money and tied it in, a handkerchief, which
he threw up so that the largest of the Caribs could catch it. Then
one of the natives ran off to get a long rope.
Getting up out of the hole by the aid of the rope was comparatively
easy. As soon as the youths were on the top of the earth once more,
each of the natives caught a boy and held him.
"Now pay udder five dollars to Bumbum," grinned the leader of the
pair.
"Is your name Bumbum?" demanded Dick.
"Yes, señor."
"All right, Bumbum, here is the money, and let me say that I think
you about the meanest Porto Rican on the island."
"Bumbum must earn his living, señor."
"I don't call this earning a living. What do you do, as a general rule?
Lie about to squeeze strangers?"
At this the Carib's face darkened. "No insult me, or you be sorry!" he
cried, and made a movement as if to draw some weapon from his
bosom.
"Come, let us be going," cried Leander, in alarm.
"I'm ready," was Dick's reply, and they hurried off in one direction,
while Bumbum and his companion, accompanied by the negro boy,
stalked off in another. Soon the two parties were lost to sight of
each other; but that was not the last, by any means, that was seen
of the wily Caribs.
CHAPTER XIII.
THE WAYSIDE INN.

"Well, well, boys, where have ye been? We've been a-huntin' high
an' low fer ye!"
And so speaking, old Jacob rushed up to them, followed by all the
others.
Dick told their story, to which the remainder of the party listened
with close attention.
"It's lucky the Caribs came up," was Robert Menden's comment. "But
they made you pay dearly for their services."
"It was downright robbery!" burst out the old Yankee tar. "If I run
across 'em, I'll make 'em give up nine dollars o' the money, sure;
mark my words on't!"
"Well, I'm mighty glad we are out of it," said Leander. "I wouldn't
want to spend a night down in that hole for twice ten dollars."
"Nor I," added Dick. "Next time I'll be sure where I am stepping."
They continued on their way until five o'clock, when it began to rain.
"No use of getting wet," declared Robert Menden. "I move we seek
shelter for the night."
This was agreed to, and they hurried on to where there stood a sort
of wayside inn—a rambling, two-story affair, built of rough stone and
whitewashed.
A tall and not overly-pleasant looking Spaniard received them, and
soon Dick had arranged for supper, lodging and breakfast for the
entire party.
The wayside inn was almost deserted, only the proprietor, his wife
and a negro servant being present.
They were shown to two rooms in the second story—low
apartments, but well ventilated—and here their host left them,
stating that supper would be ready at seven o'clock.
The boys surveyed the apartments with interest. Each room was
perfectly square, with its floor covered with a rough matting of sea-
grass. The walls were bare, saving for one or two religious pictures
miserably executed. The beds were old-fashioned "four-posters,"
covered with straw ticks and plain white sheets, nothing more.
"They don't need blankets," observed old Jacob. "A man can keep
warm without half tryin'. Thet's why the windows ain't got no glass
in 'em, an' there ain't no stoves around."
The rain continued to come down steadily, so that they could not
roam about the place. After a general washing up, they went below,
to find their host, Jose Maguel, snoring lustily in an easy-chair in the
parlor.
"Half-past six," said Menden, looking at his watch. "I wonder what
they will give us for supper?"
"He promised us chicken," answered Dick. "But it ought to be
cooking by this time."
He walked through the dining-room and into the apartment that did
duty as a kitchen. Beyond, in the yard, the servant was stirring up a
small charcoal fire, built under a shelter of palm thatch, the sides
being open so that the smoke and heat might escape.
Presently a negro boy hove into view on the road. He carried in his
hand the body of a dead rooster. As he came closer, Dick saw that
the fowl had steel spurs attached to his legs.
"A dead gamecock," he muttered. "I'll wager there has been cock-
fighting somewhere, and Señor Maguel is going to dish us up the
defeated fowl."
Dick hurried back to the others and told them of what he had seen.
At once old Jacob grew indignant and rushed to the rear of the inn,
where the servant was in the act of decapitating the dead fowl with
an axe.
"We won't eat thet, consarn ye!" he cried, pointing his long, bony
finger at the fowl. "We want chicken—good barnyard fowls—an'
don't ye forgit it!"
The girl did not understand a word of what was said, but she
understood his actions and stepped back, dropping the gamecock as
she did so. At once old Jacob secured the fowl, and marched into
the inn with it, and up to where Jose Maguel still sat snoring in the
chair. A shake of the shoulder aroused the innkeeper, and he gazed
in bewilderment when the old Yankee tar held up the gamecock
before his nose.
"Do ye suppose civilized Americans air a-goin' to eat thet?" came
from old Jacob, wrathfully. "I'd jest as lief eat crow. We want real
chicken, killed fer the purpose o' eating, understand?"
"Un Americano no like dis?" queried Jose Maguel, mildly.
"No, we don't like it, not by a jugful. You give us real chicken."
"Dis chicken—good chicken."
"It's a slaughtered fowl from one o' yer cockfights," roared old
Jacob. "Like ez not, he's pizened from the other bird's cuts. Oh, I
know all on ye do nothing but look at cock-fighting day in an' day
out, much to yer discredit. We want good chicken, understand?"
"Yes. Señor shall have good chicken," growled the Spaniard; and
inwardly very angry, but not daring to show it before so many
strangers, he took the gamecock and passed into the kitchen with it.
"He'll make you eat it if he can," observed Leander. "He's mad clear
through, I can see that."
"I'm going to watch him, lad, until the meal is on the table," replied
old Jacob; and this he did, and made certain that they got a chicken
which was caught and killed for that purpose. Cock-fighting is a
national sport in Porto Rico, and it is a great trick to work off the
slain fowls on anybody who does not know the difference, the
natives rarely eating their fallen champions.
When supper was served it was by no means a bad meal, although
all of the party had eaten better. It consisted of chicken, rice cakes,
fried sweet potatoes, baked bananas, and bread and jelly, with
strong native coffee. As they ate, the host sat by, but said nothing to
them.
"We may as well retire early," observed Robert Menden. "We want to
reach the vicinity of the caves by to-morrow."
"Did you ask the landlord about the caves?" queried Don.
"I mentioned them in an off-hand way, but he said he knew nothing
about them." And this, let me add, is not strange, for it is but lately
that the caves have become known to the great majority of people.
"We don't want to let anybody suspect our mission here," put in
Bob. "They might follow and rob us, you know."
"Thet's it," added old Jacob. "As long as we know about where the
caves are, ye had better keep yer trap closed. I allers found thet it
paid not to talk too much in a strange country."
Robert Menden had his written description of the caves with him,
and before retiring, all hands pored over this, hoping by it to gain
some clew concerning the box with the initials, M. M. M.
The rain continued to come down, but it did not lightning and
thunder, and the gentle patter-patter on the roof acted as a lullaby
to the tired boys, everyone of whom went sound asleep in short
order. Then Robert Menden and old Jacob dropped off, and all
became quiet in the two rooms which the party occupied.
How long he slept Don did not know. But he awoke with a start and
sat up, not knowing what had aroused him.
The room was in semi-darkness, the smoky lamp being turned down
low. All of the others were sleeping soundly.
"Dick!" he cried softly, but there was no reply from his chum.
"Bob! Leander!" he continued after a long pause. Still no answer,
saving a long snore from Bob, as he turned over restlessly.
"It's mighty queer what woke me up," thought the boy. He usually
slept well.
He dropped back on the bed and tried to go to sleep again.
But the effort was a failure, and though he lay back with his eyes
tightly closed, he was as wide-awake as before.
Then, of a sudden, although he heard nothing, a peculiar sensation
stole over him, and he became convinced that some stranger was in
the apartment!
Welcome to our website – the perfect destination for book lovers and
knowledge seekers. We believe that every book holds a new world,
offering opportunities for learning, discovery, and personal growth.
That’s why we are dedicated to bringing you a diverse collection of
books, ranging from classic literature and specialized publications to
self-development guides and children's books.

More than just a book-buying platform, we strive to be a bridge


connecting you with timeless cultural and intellectual values. With an
elegant, user-friendly interface and a smart search system, you can
quickly find the books that best suit your interests. Additionally,
our special promotions and home delivery services help you save time
and fully enjoy the joy of reading.

Join us on a journey of knowledge exploration, passion nurturing, and


personal growth every day!

ebookmasss.com

You might also like