Home Automation Raspberry and Phidgets

In previous tutorials we used Raspberry Pi to drive Phidgets InterfaceKit. We have also set up a web server on Raspberry.

Home Automation Raspberry and Phidgets

In this tutorial we will use the information gathered to create an Home Automation System managed with a Web Application.
You need:

a Raspberry Pi B or B+, with installed Web Server and the Phidgets library or you can use our Raspberry Pi – SBC, MODEL B+, 512M MicroSD 8GB Phidgets ready

a 1018_2 – PhidgetInterfaceKit 8/8/8

8 led.

Connect the 1018 to a USB port on Raspberry; the leds to the digital outputs of the 1018 and gnd.

Step 1: The code

Home Automation Raspberry and Phidgets

Create a new folder that will contain all the files

sudo mkdir /home/pi/domo-emmeshop

Create a new file index.php

sudo nano /home/pi/domo-emmeshop/index.php

with this content

<!DOCTYPE html>
<html>
<head>
    <title>EmmeShop Domotics</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css" />
    <script src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
    <script src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
    <script src="domo-emmeshop.js"></script>
</head>
<body>
     <div data-theme="a" data-role="header">
         <p align="center"><img src="https://www.emmeshop.eu/blog/themes/bartik/Logo-Emmeshop.png" alt="Home"></p>
     </div>
        <div class="content-output" >
          <div class="s-title"><center>Home Automation</center></div>
          <ul data-role="listview" data-inset="true" >
            <li>
                    <button class="ui-btn ui-corner-all" id="0">Output 0</button>
            </li>
            <li>
                    <button class="ui-btn ui-corner-all" id="1">Output 1</button>
            </li>
            <li>
                    <button class="ui-btn ui-corner-all" id="2">Output 2</button>
            </li>
            <li>
                    <button class="ui-btn ui-corner-all" id="3">Output 3</button>
            </li>
            <li>
                    <button class="ui-btn ui-corner-all" id="4">Output 4</button>
            </li>
            <li>
                    <button class="ui-btn ui-corner-all" id="5">Output 5</button>
            </li>
            <li>
                    <button class="ui-btn ui-corner-all" id="6">Output 6</button>
            </li>
            <li>
                    <button class="ui-btn ui-corner-all" id="7">Output 7</button>
            </li>
          </ul>
        </div>
     <div data-theme="a" data-role="footer">
        <p align="center"><h2>Emmeshop Electronics</h2></p>
     </div>
</body>
</html>

Create a new file domo-emmeshop.js

sudo nano /home/pi/domo-emmeshop/domo-emmeshop.js

with this content

$(document).ready(function(){
  $("button").click(function(){
    $.post("action.php",
    {
      outId:(this.id)
    },
    function(data,status){
      //alert("Data: " + data + "\nStatus: " + status);
    });
  });
});

Create a new file action.php

sudo nano /home/pi/domo-emmeshop/action.php

with this content

<?php
$gpin="0";
if (isset($_POST['outId']))
{
    $gpin=$_POST['outId'];
}
shell_exec('sudo python /var/www/domo-emmeshop.py'.' '.$gpin);
?>

Make a link of domo-emmeshop from /home/pi/domo-emmeshop to /var/www/domo-emmeshop .

sudo ln -s /home/pi/domo-emmeshop /var/www/domo-emmeshop

Finally, create a python file domo-emmeshop.py

sudo nano /var/www/domo-emmeshop.py

with this content

#!/usr/bin/env python
 
#Basic imports
from ctypes import *
import sys
import random
import os
#Phidget specific imports
from Phidgets.PhidgetException import PhidgetErrorCodes, PhidgetException
from Phidgets.Events.Events import AttachEventArgs, DetachEventArgs, ErrorEventArgs, InputChangeEventArgs, OutputChangeEventArgs, SensorChangeEventArgs
from Phidgets.Devices.InterfaceKit import InterfaceKit
 
outId = int(sys.argv[1])
 
#Create an interfacekit object
try:
    interfaceKit = InterfaceKit()
except RuntimeError as e:
    print("Runtime Exception: %s" % e.details)
    print("Exiting....")
    exit(1)
 
#Event Handler Callback Functions
def interfaceKitAttached(e):
    attached = e.device
 
def interfaceKitDetached(e):
    detached = e.device
    print("InterfaceKit %i Detached!" % (detached.getSerialNum()))
 
def interfaceKitError(e):
    try:
        source = e.device
        print("InterfaceKit %i: Phidget Error %i: %s" % (source.getSerialNum(), e.eCode, e.description))
    except PhidgetException as e:
        print("Phidget Exception %i: %s" % (e.code, e.details))
 
def interfaceKitInputChanged(e):
    source = e.device
 
def interfaceKitSensorChanged(e):
    source = e.device
 
def interfaceKitOutputChanged(e):
    source = e.device
 
#Main Program Code
try:
    interfaceKit.setOnAttachHandler(interfaceKitAttached)
    interfaceKit.setOnDetachHandler(interfaceKitDetached)
    interfaceKit.setOnErrorhandler(interfaceKitError)
    interfaceKit.setOnInputChangeHandler(interfaceKitInputChanged)
    interfaceKit.setOnOutputChangeHandler(interfaceKitOutputChanged)
    interfaceKit.setOnSensorChangeHandler(interfaceKitSensorChanged)
except PhidgetException as e:
    print("Phidget Exception %i: %s" % (e.code, e.details))
    print("Exiting....")
    exit(1)
 
 
try:
    interfaceKit.openPhidget()
except PhidgetException as e:
    print("Phidget Exception %i: %s" % (e.code, e.details))
    print("Exiting....")
    exit(1)
 
try:
    interfaceKit.waitForAttach(10000)
except PhidgetException as e:
    print("Phidget Exception %i: %s" % (e.code, e.details))
    try:
        interfaceKit.closePhidget()
    except PhidgetException as e:
        print("Phidget Exception %i: %s" % (e.code, e.details))
        print("Exiting....")
        exit(1)
    print("Exiting....")
    exit(1)
else:
    if interfaceKit.getOutputState(outId)==1:
        interfaceKit.setOutputState(outId,0)
    else:
        interfaceKit.setOutputState(outId,1)
 
try:
    interfaceKit.closePhidget()
except PhidgetException as e:
    print("Phidget Exception %i: %s" % (e.code, e.details))
    print("Exiting....")
    exit(1)
 
exit(0)

For more detail: Home Automation Raspberry and Phidgets

Scroll to Top
Read previous post:
Raspberry PI auto-boot

Ever want your Raspberry pi project to have a script that interfaces with I2C to start automatically after a power...

Close