This book is written as a textbook for educational programs at colleges and universities. It can also be used by IoT (Internet of Things) vendors and service providers for training their program developers. The authors have used an immersive ‘hands on’ approach, similar to the one adopted in the companion book, Cloud Computing: A Hands-on Approach, to help readers gain expertise in developing working code for real-world IoT applications.
It is organised into three main parts. Part I covers the building blocks of Internet of Things (IoT) and their characteristics. Domain specific IoT and their real-world applications are described along with a generic design methodology and an IoT system management approach using NETCONF-YANG. Part II introduces the reader to the programming aspects of IoT with a view to developing rapid prototypes of complex IoT applications. A primer on Python, the programming language used in this book, is included to bring readers to a common level of expertise. Packages, frameworks and cloud services including WAMP-AutoBahn, Xively cloud and Amazon Web Services that can be used to develop IoT systems are described. The Raspberry Pi device has been chosen for the examples in this book. Case studies with complete source code for various IoT domains such as home automation, smart environment, smart cities, logistics, retail, smart energy, smart agriculture, industrial control and smart health are described. Part III introduces the reader to advanced topics in IoT, including IoT data analytics and tools for IoT. Case studies on collecting and analyzing data generated by IoT in the cloud are described.
Arshdeep Bahga is a research scientist at Georgia Institute of Technology. His research interests include cloud computing and big data analytics. He has authored several scientific publications in peer-reviewed journals in the areas of cloud computing and big data.
Vijay Madisetti is a professor of computer engineering at Georgia Institute of Technology. He is a Fellow of IEEE and has received the 2006 Terman Medal from the American Society of Engineering Education and HP Corporation.
I INTRODUCTION & CONCEPTS 1 Introduction to Internet of Things 1.1 Introduction 1.1.1 Definition & Characteristics of IoT 1.2 Physical Design of IoT 1.2.1 Things in IoT 1.2.2 IoT Protocols 1.3 Logical Design of IoT 1.3.1 IoT Functional Blocks 1.3.2 IoT Communication Models 1.3.3 IoT Communication APIs 1.4 IoT Enabling Technologies 1.4.1 Wireless Sensor Networks 1.4.2 Cloud Computing 1.4.3 Big Data Analytics 1.4.4 Communication Protocols 1.4.5 Embedded Systems 1.5 IoT Levels & Deployment Templates 1.5.1 IoT Level-1 1.5.2 IoT Level-2 1.5.3 IoT Level-3 1.5.4 IoT Level-4 1.5.5 IoT Level-5 1.5.6 IoT Level-6 2 Domain Specific IoTs 2.1 Introduction 2.2 Home Automation 2.2.1 Smart Lighting 2.2.2 Smart Appliances 2.2.3 Intrusion Detection 2.2.4 Smoke/Gas Detectors 2.3 Cities 2.3.1 Smart Parking 2.3.2 Smart Lighting 2.3.3 Smart Roads 2.3.4 Structural Health Monitoring 2.3.5 Surveillance 2.3.6 Emergency Response 2.4 Environment 2.4.1 Weather Monitoring 2.4.2 Air Pollution Monitoring 2.4.3 Noise Pollution Monitoring 2.4.4 Forest Fire Detection 2.4.5 River Floods Detection 2.5 Energy 2.5.1 Smart Grids 2.5.2 Renewable Energy Systems 2.5.3 Prognostics 2.6 Retail 2.6.1 Inventory Management 2.6.2 Smart Payments 2.6.3 Smart Vending Machines 2.7 Logistics 2.7.1 Route Generation & Scheduling 2.7.2 Fleet Tracking 2.7.3 Shipment Monitoring 2.7.4 Remote Vehicle Diagnostics 2.8 Agriculture 2.8.1 Smart Irrigation 2.8.2 Green House Control 2.9 Industry 2.9.1 Machine Diagnosis & Prognosis 2.9.2 Indoor Air Quality Monitoring 2.10 Health & Lifestyle 2.10.1 Health & Fitness Monitoring 2.10.2 Wearable Electronics 3 IoT and M2M 3.1 Introduction 3.2 M2M 3.3 Difference between IoT and M2M 3.4 SDN and NFV for IoT 3.4.1 Software Defined Networking 3.4.2 Network Function Virtualization 4 IoT System Management with NETCONF-YANG 4.1 Need for IoT Systems Management 4.2 Simple Network Management Protocol (SNMP) 4.2.1 Limitations of SNMP 4.3 Network Operator Requirements 4.4 NETCONF 4.5 YANG 4.6 IoT Systems Management with NETCONF-YANG 4.6.1 NETOPEER II DEVELOPING INTERNET OF THINGS 5 IoT Platforms Design Methodology 5.1 Introduction 5.2 IoT Design Methodology 5.2.1 Step 1: Purpose & Requirements Specification 5.2.2 Step 2: Process Specification 5.2.3 Step 3: Domain Model Specification 5.2.4 Step 4: Information Model Specification 5.2.5 Step 5: Service Specifications 5.2.6 Step 6: IoT Level Specification 5.2.7 Step 7: Functional View Specification 5.2.8 Step 8: Operational View Specification 5.2.9 Step 9: Device & Component Integration 5.2.10 Step 10: Application Development 5.3 Case Study on IoT System for Weather Monitoring 5.4 Motivation for Using Python 6 IoT Systems - Logical Design using Python 6.1 Introduction 6.2 Installing Python 6.3 Python Data Types & Data Structures 6.3.1 Numbers 6.3.2 Strings 6.3.3 Lists 6.3.4 Tuples 6.3.5 Dictionaries 6.3.6 Type Conversions 6.4 Control Flow 6.4.1 if 6.4.2 for 6.4.3 while 6.4.4 range 6.4.5 break/continue 6.4.6 pass 6.5 Functions 6.6 Modules 6.7 Packages 6.8 File Handling 6.9 Date/Time Operations 6.10 Classes 6.11 Python Packages of Interest for IoT 6.11.1 JSON 6.11.2 XML 6.11.3 HTTPLib & URLLib 6.11.4 SMTPLib 7 IoT Physical Devices & Endpoints 7.1 What is an IoT Device 7.1.1 Basic building blocks of an IoT Device 7.2 Exemplary Device: Raspberry Pi 7.3 About the Board 7.4 Linux on Raspberry Pi 7.5 Raspberry Pi Interfaces 7.5.1 Serial 7.5.2 SPI 7.5.3 I2C 7.6 Programming Raspberry Pi with Python 7.6.1 Controlling LED with Raspberry Pi 7.6.2 Interfacing an LED and Switch with Raspberry Pi 7.6.3 Interfacing a Light Sensor (LDR) with Raspberry Pi 7.7 Other IoT Devices 7.7.1 pcDuino 7.7.2 BeagleBone Black 7.7.3 Cubieboard 8 IoT Physical Servers & Cloud Offerings 8.1 Introduction to Cloud Storage Models & Communication APIs 8.2 WAMP - AutoBahn for IoT 8.3 Xively Cloud for IoT 8.4 Python Web Application Framework - Django 8.4.1 Django Architecture 8.4.2 Starting Development with Django . 8.5 Designing a RESTful Web API 8.6 Amazon Web Services for IoT 8.6.1 Amazon EC2 8.6.2 Amazon AutoScaling 8.6.3 Amazon S3 8.6.4 Amazon RDS 8.6.5 Amazon DynamoDB . 8.6.6 Amazon Kinesis 8.6.7 Amazon SQS 8.6.8 Amazon EMR 8.7 SkyNet IoT Messaging Platform 9 Case Studies Illustrating IoT Design 9.1 Introduction 9.2 Home Automation 9.2.1 Smart Lighting 9.2.2 Home Intrusion Detection 9.3 Cities 9.3.1 Smart Parking 9.4 Environment 9.4.1 Weather Monitoring System 9.4.2 Weather Reporting Bot 9.4.3 Air Pollution Monitoring 9.4.4 Forest Fire Detection 9.5 Agriculture 9.5.1 Smart Irrigation 9.6 Productivity Applications 9.6.1 IoT Printer III ADVANCED TOPICS 10 Data Analytics for IoT 10.1 Introduction 10.2 Apache Hadoop 10.2.1 MapReduce Programming Model 10.2.2 Hadoop MapReduce Job Execution 10.2.3 MapReduce Job Execution Workflow 10.2.4 Hadoop Cluster Setup 10.3 Using Hadoop MapReduce for Batch Data Analysis 10.3.1 Hadoop YARN 10.4 Apache Oozie 10.4.1 Setting up Oozie 10.4.2 Oozie Workflows for IoT Data Analysis 10.5 Apache Spark 10.6 Apache Storm 10.6.1 Setting up a Storm Cluster 10.7 Using Apache Storm for Real-time Data Analysis 10.7.1 REST-based approach 10.7.2 WebSocket-based approach 10.8 Structural Health Monitoring Case Study 11 Tools for IoT 11.1 Introduction 11.2 Chef 11.2.1 Setting up Chef 11.3 Chef Case Studies 11.3.1 Multi-tier Application Deployment 11.3.2 Hadoop Cluster 11.3.3 Storm Cluster 11.4 Puppet 11.5 Puppet Case Study - Multi-tier Deployment 11.6 NETCONF-YANG Case Studies 11.6.1 Steps for IoT device Management with NETCONF-YANG 11.6.2 Managing Smart Irrigation IoT System with NETCONF-YANG 11.6.3 Managing Home Intrusion Detection IoT System with NETCONF-YANG 11.7 IoT Code Generator Appendix-A - Setting up Raspberry Pi Appendix-B - Setting up Ubuntu VM Appendix-C - Setting up Django Bibliography Index