Introduction: IoT - 'Intranet' of Things : Home Automation. Part 1 : IoT, Introduction

Picture of IoT - 'Intranet' of Things : Home Automation. Part 1 : IoT, Introduction


If like me you value your privacy and want to explore the topic that is IoT, then this tutorial may well be for you.

I have deliberately named the instructable 'Intranet' and not 'Internet' of Things to underline the point that all data, information, control, traffic, communications will remain local to you and not wend its merry way to some clandestine end point out there in the internet. Muah Ha Ha Ha Haaa!

The only caveat to this would be the usual health warnings using Home WiFi. Should I become aware there are any potential leaks then I will specifically mention this risk in the body of the Instructable.

So paraphrase our American cousins, 'What happens in your IoT, stays in your IoT!'


This Instructable, the first in a series of independent but related parts, documents how to set up your own IoT infrastructure and connect the pieces together and get them interworking.

Once in place you will be able to simply add whatever IoT device your heart desires. So long as you can stick a Wifi or Ethernet connection on it that is.

To get you up and running as quickly as possible the main devices used will be Raspberry Pi, Arduino with Ethernet Shield and ESP8266-01. I chose these as there is literally a 'Tonne' of information, source code, projects, videos, blogs etc. In fact cutting through rubbish to get to the good stuff was where all the hard work went (well, that and some coding). At the end of each part, where applicable I cite the sources used so you can do your own 'digging'.

As mentioned above, the guide seeks to get you up and running as quickly as possible but this comes at a price. I removed as much of the 'Techno Babble' as I could (no, seriously I did), so as wide an audience as possible could have a go.

Later on, if you have more than just a passing interest in this Instructable topic, for the more serious home automation advocate I will recapitulate the various parts typically covering;

  1. MQTT Topic naming conventions
  2. UPS/Backups
  3. Reliability
  4. Security
  5. mDNS/Bonjour
  6. DHCP versus Fixed IP
  7. Practical Pi.
  8. Remote access via VNC

From empirical experience I have found the true test of a successful project is how much it improves your world, how well it integrates into your lifestyle, how much you come to rely upon it, how easy it is to use and how much you miss it when it's gone. The topics above will hopefully prevent the latter.


Note : When configuring the Raspberry Pi I found it exhibited non-deterministic behaviour from time to time. You should therefore follow the examples given to the letter as I most probably won't be able to help you debug your install.

As always you follow this series at your own risk.

Series Links

To Part 2 : Setting Up an MQTT Broker. Part 2 : IoT, Home Automation

Step 1: System Overview

Picture of System Overview

Before I describe the various subsystems in our Intranet of things I want to explain what a typical Internet of things actually is. Hopefully dispelling some myths.

Outlined in the first picture is a generalised representation of an IoT set up. It typically (but not always) comprises;

  1. Leaf nodes or end points which are devices with sensors to measure or interact in someway with things/parameters in the real world. Such as; Fuel consumption, speed, temperature, light levels, noise, motion detection etc.
  2. Those sensor devices also have a means of connecting to a network. Via; Ethernet, WiFi, Bluetooth, 4G etc.
  3. Finally, somewhere in the network (internet) or cloud there is a data centre collecting all this information and making use of it in someway.

And that's pretty much all it is. Well that and some application specific customisation for your needs of course.

For instance if you are a trucking company wanting to streamline your operation and drive out costs you may create your own transport system IoT to monitor fuel usage, engine ware and route taken, then regularly satellite uplink this to your cloud server and run some fancy pants software to work out driver Joe from Iowa has a heavy foot and you need to tell him to 'back off the gas a little' and not stop off at 'good ol' aunt Lucy's for a quick slice of pecan pie' on his way to a 'drop off'.

Alternatively it may be a power company wanting to plan better use of their energy grid by efficiently balancing production where it is needed most. This may result in the use of smart metering fitted with GPRS data modules uploading in real time household power consumption, then out through a GGSN gateway node into a cloud server where said power company can mine the aggregated data and cross-reference this with weather maps, school districts, spend patterns, star charts, favourite colours etc. etc. etc.

Hopefully you will have got the general idea by now.

In our case the 'making use of it in someway' is home automation. If applied well it can improve your life, automate those tasks you regularly forget, reduce your fuel bills or even protect your house. This list is truly endless.

So what does our intranet of things look like?

Well, pretty much similar as you would expect, only it's not in the 'cloud' and we will be using a human friendly, common, open interface (second picture above) via an application named OpenHAB and will only develop our own IoT devices (not buy them in, after all this is all about making). The underlying backbone of our systems (which does the transferring of IoT information packets) is via a free MQTT Broker named Mosquitto.

  1. Why human friendly and common? So you only have to learn one method of doing things.
  2. What does open interface mean? It means who ever wrote it has kindly published the details and possibly the source code such that if you wish you can modify it or even contribute to the finished article. Check out GIT HUB to see more of this.

Step 2: What Parts Do I Need?

There will be a comprehensive parts list at the beginning of each Instructable, however in general for a basic set up with two IoT nodes you will need the following;

  1. A home network with WiFi connectivity (b/g/n)
  2. Home router with DHCP server and capability to assign fixed IP addresses within your network.
  3. At least two Raspberry Pis
    1. One for MQTT Broker
    2. One for OpenHAB Server
    3. One USB Hub, Keyboard, Mouse and LCD Monitor to set up the Pi
  4. One ESP8266-01
  5. One Arduino ATMega2560 with Ethernet Shield, I2C 20x4LCD and ILI9341 TFT
  6. One Win 7 PC

To complete all the examples I had initially planned you will require the following extra items;

  1. One Raspberry Pi with camera for Facial Recognition example
  2. Three ESP8266-01 (one for general I/O, one for TV Simulator, One for remote mains switch)

Note : It is feasible items 3.1 and 3.2 could be combined on one Raspberry Pi but I chose to locate them on separate devices to minimise the risk of system failure and give better performance.

Step 3: What Skills Do I Need?

If you only want to follow the instructions and not extend the examples any further, you only really require;

  1. Patience
  2. Minimal electronics proficiency
  3. Limited knowledge of Linux on the Pi (though this will improve if you follow the examples)

However, if you want to be creative then it would be useful to have some grasp of the following;

  1. TCP/IP
  2. Some electronics proficiency
  3. Good knowledge of Linux
  4. C/C++
  5. Python

I started with minimal knowledge of Linux and Python and muddled my way through. I now have a better knowledge of Linux and Python but still muddle. :-)

Step 4: What Does This Guide Cover?

To get us all 'singing from the same hymn sheet ' this first guide covers the initial ground work of setting up a Raspberry Pi to a standard configuration. By completing this activity for each and every Raspberry Pi in the examples you will end up with a facsimile of the system I assembled.

It also covers;

  1. how to use PuTTY, a free open source terminal emulator : This allows you to remotely issue commands to the Raspberry Pi so you can run it 'Headless'. ie without a keyboard and monitor connected.
  2. and map a network drive with Samba : This allows you to drag and drop things from your PC directly onto the Raspberry Pi uSD card.

Step 5: Setting Up Your Raspberry Pi

Picture of Setting Up Your Raspberry Pi

I used a Raspberry Pi B+ purely because I had a few lying around at the time.

To create an image you will need the following;

  1. A SD/uSD card. I suggest 16GB as they are pretty cheap and it's what I used.
  2. Win 32 Disk Imager. Software used to write an image to the SD/uSD card.
  3. A PC, to run the software above.

Flashing your first image

Get a copy of Win 32 Disk Imager from here;

Download an image file from here (you will need 'Rasbian Jessie' I used 2016-03-18-rasbian-jessie.img);

Follow the instructions on the Raspberry Pi Org web site here;

Once you have completed this you are ready to power up and custom configure the device.



Note : My drive letter consistently comes up as E:\

Step 6: Raspberry Pi Custom Configuation

Picture of Raspberry Pi Custom Configuation

Take your Raspberrry Pi out of the box

Insert your SD/uSD into the Raspberry Pi, plug in keyboard, mouse and monitor, plug in Ethernet

Plug in power adaptor and power up for first time

The system will boot directly into LXDE the Raspberry Pi windows environment.

We will now make some custom configuration changes from within LXDE. Using a terminal window enter;

  • sudo raspi-config

and select the following options, given in parenthesis (hint : press tab or up and down keys on keyboard to navigate the menu);

  1. (1) Expand file system to make use of all your SD/uSD card.
  2. (2) Change user p/w if you feel it necessary
  3. set to auto login. (3) Boot Options, (B2) Console Autologin
  4. (5) Internationalisation Options (I2) Change Timezone - Europe - London [If you live in the UK]
  5. (8) Overclock. - Overclock Modest 800MHz ARM, 0 overvolt
  6. (9) Advanced Options.
    1. (A2) Hostname. Change from 'raspberrypi' to 'MYHOSTNAME'
    2. (A4) SSH. Enable SSH
  7. Select 'Finish' from the menu.

Once you complete this configuration the system will ask you if you want to reboot now so the changes take effect. Choose .

System will reboot to the command line this time.

From the command prompt enter the following commands, choosing 'yes' if presented with a selection. These commands just ensure your Pi install is up to date..

  • sudo apt-get update
  • sudo apt-get upgrade

This may take some time.

Once complete enter the following from the command prompt.

  • sudo shutdown now

Wait for all the lights to stop flashing, then remove all connectors apart from your ethernet connector.

Now re-insert your power lead. Your Pi will reboot

That's it you're now done. Your Pi is running headless!


Shutting the Pi Down

If you ever want to switch off your Pi make sure you type the following.

  • sudo shutdown now

And leave the Pi until the activity lights stop flashing before you remove the supply.




  1. Only plug/unplug peripherals with the Raspberry Pi powered down.
  2. This install assumes you are connecting to your network via Ethernet.
  3. To start the windows environment at anytime ensure you have all your peripherals plugged in (keyboard, mouse etc.) and type 'startx'

Step 7: Remote Access to the Pi

Picture of Remote Access to the Pi

There many ways to access your Pi remotely to keep things simple I am going to stick to one method using an SSH Telnet Client named PuTTY. Don't worry if that sounded like 'gibberish' it really doesn't matter. Think of it as a way to type in command line commands on a computer connected to a network somewhere from the comfort of your very own computer. ie. Remotely.

PuTTY can be download for free from the following URL;

And click on the link 'You can download PuTTY here'

I have the 0.65 beta, but noticed 0.67 beta is available. Choose the PuTTY: putty.exe For Windows on Intel x86 (I am assuming you will be using a Win 7 PC to do you set ups).

Download and install.

Once installed start PuTTY. It will look something like the picture above.

Ensure the following is selected;

  1. Saved Sessions : MYHOSTNAME
  2. Connection Type : SSH
  3. Host Name : MYHOSTNAME.local
  4. Port : 22

Click Save

Then Click Open

You will get a window which states 'PuTTY Security Alert' just click 'yes'. A command prompt window will open, this is directly to your Pi. Now you need to log into the Pi.

Assuming you didn't change the default user name and password.

Enter 'pi' for the username and 'raspberry' for the password.


Congratulations you've now just made a remote connection to your Pi. What is more significant is you made the connection without knowing the IP address of the server. You accessed it via the hostname you gave it.

To quit, just close the window.

Oh, and the next time you want to remotely connect to MYHOSTNAME all you do is run up PuTTY Click on MYHOSTNAME in Saved session, click load, then click open. You just have to enter a user name and password.



So what is good about this you ask? Well it means you can now create a remote server, log into it, do whatever you need to do and log out. All from the comfort of your very own PC. In fact you can open multiple simultaneous windows on multiple servers. As for the remote server, you only need provide power and a network connection.

Better still, you can copy and paste between windows and PuTTY. So if I want to enter the Linux command 'ls -l' which is the equivalent of entering 'dir' in a windows command prompt. I just select the text 'ls -l' (without quotes), left click on my PuTTY window then right click. Your text will now appear. All you have to do is press . This will save a lot of time going forward.

Step 8: Using Samba to Map Drives : Optional, for Now

Picture of Using Samba to Map Drives : Optional, for Now

So what is this all about then?

Samba is a Linux Open Source/Free seamless file and print service. Yes, more 'gibberish', just think of it as a way to make your Raspberry Pi look like an extra hard drive or USB stick to your PC.

This means you can drag and drop files between Pi and PC. Just that.

It's an optional step for now, but will be worth it later on.

Ok, to get this going you will need to carry out the following steps in your remote PuTTY terminal window. Remember to use the copy and paste method with PuTTY. Answer yes to any prompts.

  • sudo apt-get install samba samba-common-bin

The next line invokes a command line editor named 'nano'

  • sudo nano /etc/samba/smb.conf

Once nano has opened the file smb.conf it will look like the picture above. Scroll up and down with the arrow keys until you reach the [global] section and find the line marked;

# wins support = no

and change it to yes and remove the '#'

wins support = yes

Now go to the [homes] section under Share Definitions and ensure;

read only = no

Next, go to the bottom of the file an add the following. Once again you can select all the text below, copy it and paste it into the PuTTY window by right clicking.

######## TEXT TO ADD : START #########


comment= Home Directory




only guest=no

create mask=0777

directory mask=0777


force user=pi

force group=pi

######## TEXT TO ADD : END ##########

Now save and quit. Press ^X (the control, key and the 'x' key), then type 'y' followed by return. Thats it.

Finish off the setup with the following commands (this assumes you used the defaults u/n 'pi', p/w 'raspberry');

  • sudo smbpasswd -a pi

followed by password 'raspberry' twice

  • sudo update-rc.d smbd enable
  • sudo update-rc.d nmbd enable
  • sudo service smbd restart

We're done. If you got it right you will be able to see your Raspberry Pi in windows explorer named 'MYHOSTNAME' as above.

To connect click on the 'pi' share and you will get a 'windows security' dialogue box. Enter your username ('pi') and password ('raspberry') it will look something like the in pictures.

To check if you have write access from your PC, create a text file as above then select your PuTTY terminal window and enter.

  • ls -l

As explained in the previous step.

You should see this new file, the green one in the picture above.


That's all you need to do.

Step 9: So What's Next?

In the next Instructable Part 2 we will set up our IoT infrastructure by creating up an MQTT Broker on a Raspberry Pi.

Step 10: References Used

I used the following references to put this instructable together;

PuTTY Terminal Software

Win32 Disk Imager for the Raspberry Pi

Raspian Jessie Image downloads



Doug Duncan (author)2017-01-26

This is EXACTLY what I was looking for! Thank you so much for your
dedicated effort in putting this together! It covers all bases from the
basics to the nitty-gritty. I have already shared this with a couple
other people looking to do the same thing.

I have a bunch of Pi
Zero's and WiFi, BT, and want to introduce other things such as my Echo,
Samsung TV and other things. Can't wait to get going on this!

Thanks again SteveQuinn!

SteveQuinn (author)Doug Duncan2017-01-27

Hi Doug,
You're welcome. I am in the process of tidying up the initial devices I created (greatly improved software mainly) and have a few more in mind.

prairietech (author)2016-06-29

I'm going to love this series! Finally a IoT project that is NOT cloud based!!

Not sure why so many are eager to push simple commands like turning on or off lights out the the cloud?

Anxiously waiting for Part 2.

SteveQuinn (author)prairietech2016-06-29

Hi prairietech,

Wait no more, there's a part 2, 3, 4, 5 and 6 out now. I published a batch all together to give a good outline of the component parts detailing the minimum necessary to set up a basic IoT network with 3 devices 'hung' off it (two WiFi and one Ethernet based) along with an MQTT Broker and OpenHAB server providing the front end. I can say hand on heart all the examples work as I tested them all out before publishing them (they are still running as I type). Their main purpose is to demonstrate in a practical way how to get your IoT network established, how to attach devices, debug, extend and visualise/interact with the information coming/going from/to the IoT devices. In other words the actual issues you will come across and how to surmount them.

I'll add some examples of control later as I haven't decided how I want to do this, ie via scripts on the MQTT server, MySQL database, or OpenHAB. I intend to try them all out to understand the most optimal approach.


Just click on the series links at the bottom of step 1 (on each Instructable). Or check out the collection I created. Here;