Sending SMS And Email From Your IoT Device

Introduction

 
Phone notifications are a good way to get alerted about any unusual activity. When we are developing an IoT solution it is always good to send SMS to the user’s phone for certain activity as the smartphones are always within reach. It is not always possible for a user to monitor the data with a Mobile app or a website. If they get a notification about a certain activity or a sudden variation in data they will come to know this by time and can immediately check it with the mobile app and can take the further steps.
 
Earlier sending SMS with a microcontroller was a little clumsy process, you have to create an account on an SMS service provider like Twilio and then you have to use some IoT channels like Thingspeak, Temboo, and IFTTT. Lots of work! But now as the IoT devices are getting powerful, there are some new revolutionary IoT Cloud services that are immerging. They are aimed to take your data to the cloud with ease. One of the IoT clouds recently I am using in my projects in Ubidots. The best thing about Ubidots is, it is user-friendly. It won’t take much time to take your IoT solution to the cloud. Ubidots visualize your data in a better way. You can even track the locations with its GPS widget, all you need is just to send the data with a simple API.
 
With Ubidots, we can easily configure under what conditions an alert should be triggered. We can set any type of thresholds through a simple "IF-THEN" statements. Once an event is triggered it will send an Email or SMS alerting someone about a specific event or you can perform any other task like trigger another action.
 
Let us create a simple project with a Burglar Alarm System with Intel Edison which will detect any intrusion and notify you with an SMS or an Email. I am using Ubidot’s Node.Js library and programming in Node.Js with Intel XDK IoT edition.
 
If you have an Intel Galileo board and programming using Arduino IDE or you want to know more about the PIR sensor and its working have a look at another article of mine “Burglar Alarm with PIR motion sensor”.
 
Requirements
  • Intel Edison module
  • Arduino expansion board
  • PIR sensor
  • Buzzer
  • An LED
  • USB cable
  • Power Supply
  • Jumper cables
Requirements
 
Figure 1: Requirements
 
Making Connections and Programming
  1. Connect your Edison to the power supply and to your PC via USB cable.
  2. It will take 15-20 seconds to boot up, after that stack the Grove Base Shield.
  3. Connect the PIR motion Sensor to analog pin D2.
  4. Connect the Buzzer to pin with PWM, I connected to D5.
  5. Connect the LED to pin D3.
  6. Open Intel XDK IoT edition, if it is not already installed in your PC get it from here.
     
    If you have flashed you Edison with the Flash Lite Tool Node.Js will be already installed on your board.
     
  7. Connect IDE to your Edison board. It will ask you for username and password, the default username is root with no password.
  8. Select a blank Node.JS template and create a new project.
Create a new project
 
Figure 2: Create a new project
 
Code for PIR Sensor
  1. //Load Grove Motion module    
  2. var grove_motion = require('jsupm_biss0001');    
  3. // Instantiate a Grove Motion sensor on GPIO pin D2    
  4. var myMotionObj = new grove_motion.BISS0001(2);    
  5. setInterval(function()    
  6. {    
  7.     if (myMotionObj.value())    
  8.     {    
  9.        BlinkLED();    
  10.        melody();    
  11.        v.saveValue(1);    
  12.        console.log("Detecting moving object");    
  13.         
  14.     }    
  15.     else    
  16.         console.log("No moving objects detected");    
  17.         v.saveValue(0);    
  18. }, 1000);    
  19.     
  20. // Print message when exiting    
  21. process.on('SIGINT', function()    
  22. {    
  23.     console.log("Exiting...");    
  24.     process.exit(0);    
  25. });    
Code for PIR Sensor
 
Figure 3: Code for PIR Sensor
 
Sending Data to Ubidots
  1. var ubidots = require('ubidots');      
  2.       
  3. var client = ubidots.createClient('YOUR-API-KEY');      
  4.       
  5. client.auth(function() {      
  6.     this.getDatasources(function(err, data) {      
  7.          console.log(data.results);      
  8.     });      
  9.     var ds = this.getDatasource('xxxxxxxx');      
  10.      
  11.     ds.getVariables(function(err, data) {      
  12.         console.log(data.results);      
  13.     });      
  14.     ds.getDetails(function(err, details) {      
  15.         console.log(details);      
  16.     });      
  17.       
  18.     var v = this.getVariable('xxxxxxx');      
  19.       
  20.     v.getDetails(function(err, details) {      
  21.         console.log(details);      
  22.     });      
  23.     v.getValues(function(err, data) {      
  24.         console.log(data.results);      
  25.     });      
  26. }      
Creating triggers with Ubidots
  1. Log in to your Ubidots account or you can create one here.
  2. Select the “Sources” tab and then click on “Add Data Source” to create a new data source. Here I have added My Edison.
  3. Once the data source is added we will add our PIR sensor. PIR motion sensor is a digital sensor, it will only detect the motion. It doesn’t detect the distance and number of people. Hence if motion is detected I am sending 1 else 0 to Ubidots.
     
    Add our PIR sensor
    Figure 4: Add our PIR sensor
     
  4. Click on the variable and copy the variable ID. Paste this in your code also get your API key My Profile, then API Keys.
  5. Now we will create events. Select the Event tab, click add Event.
  6. Select the data source and Variable. In our case, it is My Edison and PIR Sensor.
     
    Select the data source and Variabl
     
    Figure 5: Select the data source and Variable
     
     
  7. Now it will present you with a simple if-then statement. Here we have to select the value of PIR Sensor and the action to be triggered.
     
    IF- Then statement
     
    Figure 6: IF - Then statement
     
  8. We are sending 1 if the PIR sensor detects motion, hence to trigger an action our value should be equals to 1. Press continue.
  9. Now we have to add the trigger, we can send an SMS or an Email, can set another variable or can request a custom URL. Let us select SMS for now.
     
    Select SMS for now
     
    Figure 7: Select SMS for now
     
  10. Enter the details like phone number and message to be sent.
     
    Enter Phone number and Message
     
    Figure 8: Enter Phone number and Message
     
    Enter the details
     
    Figure 9: Enter the details
     
  11. SMS event will be added with the PIR sensor value equals to 1. A similar way you can add an Email trigger.
     
     
    Figure 10: Add Event
     
    Enter details
     
    Figure 11: Enter details
     
     
    Figure 12: Intrusion Detected
Now we have added an Email and an SMS trigger. Build, upload and run your code on Edison. You will notice data sending to Ubidots in the console. If any motion is detected by the PIR motion sensor it will blink the LED, play the buzzer and an SMS and an Email will be sent to your Phone.
 
Type text message
 
Figure 13: Type text message
PIR Motion Sensor Detects a moving object
 
Figure 14: PIR Motion Sensor Detects a moving object