Google Analytics

Showing posts with label Home Security. Show all posts
Showing posts with label Home Security. Show all posts

Monday, July 4, 2016

Security System - Local Alarm From Kit

As part of my Security System, I wanted to place an audible alarm near whatever sensor I'm using.

My sensors are going to be networked, feeding information to the main security control.  Currently I'm using a NodeMCU which makes use of a ESP8266's WiFi network capabilities.  This also means I can send a request, from the main security control, to turn on the alarm remotely, should I desire to do so, as its under the control of the ESP8266 device.

In this post, I'm not showing any type of sensor.  However, in most cases, I'll be using a PIR or a ultrasonic sensor to set the ESP8266 in alarm output for pin 5, and then enabling the local sensor alarm sound.  So, I'm just showing the alarm device and ESP8266 here.

Because the ESP8266 is a 3.3 vdc device, it can only supply 3.3 vdc and a limited amount of current; this wasn't enough to directly drive the audible alarm, so I've added a switching transistor to supply the switching current.

Scroll down for circuit description, construction, and construction photos.

In this post, I'm showing the use of a cheap commercial Window and Door Open/Closed Sensor Alarm, that I picked up for $1.00 at a local Dollar Store.  It contains a circuit board with:

  • square wave generator
  • battery holder
  • transformer
  • on/off switch
  • piezo electric speaker
  • 3 1.5 vdc batteries


I'm not making use of the magnetic switch in this post.  Instead, I'm making use of the audible piezo alarm (hereafter referred to as ALARM), when enabled by the NodeMCU device.

Circuit Description
In this design (software in a later post), the NodeMCU is driving pin 5 high to 3.3 VDC.  The output of this pin is connected to a 6.8K resistor, then to the base of a 2N3904 NPN transistor, which is biased as a switch.

The negative battery post of the ALARM has been separated from the ALARM circuit board, with the transistor inserted between the negative battery post and the circuit board, with the ALARM circuit board connected to the transistor's collector, and the negative terminal connected to the circuit common ground.

When a high value (3.3vdc) is applied to the base of the transistor, it turns on, basically connecting the circuit board through the transistor to ground - the ALARM sounds.

When a negative value (0vdc) is applied to the base of the transistor, it turns off, stopping current flowing from the collector to the emitter, so that the circuit is open, and no ALARM sounds.

Any 3.3vdc supply can be applied to the base to turn the transistor on - you don't have to use a NodeMCU.

If other voltages are used, such as a 5vdc from an Arduino, then you should resize the base resistor.

The 2N3904 has a beta of around 200 (varies somewhat), and is limited to 200ma and 625mwatts.

I wanted to restrict the current through the transistor to 100ma.

For 100ma at 3.3vdc and beta of 200, this equates to:
CollectorCurrent (Ic) = BaseCurrent(Ib) x Beta(200)
Ic = Ib x Beta
Ib = Ic / Beta
Ib = 100ma / 200
Ib = .5ma

Base Resistor (Br) = Vdc/ma
Br = 3.3/.5ma
Br = 6.6Kohm

While I'm showing 3.3 vdc above, a closer approximation would be 3.3 - .7 = 2.6 vdc, which includes the voltage drop across the base-emitter, which would yield about 76 ma instead of the 100 ma.  However, that's good enough for this circuit, and the 6.8K is close enough, and it sound loud enough for a local alert for me; the main security controller will driving the loud stuff.

The battery voltage of 4.5 (3x1.5)vdc is flowing from the ALARM's batteries, and is being switched via the transistor's base of 3.3vdc.

This ALARM can be used in any device with a small voltage to switch the transistor on and off, by making adjustments to the base resistor.  I've put one, with a much larger value resistor into a box, so I can use it as a beeper for simple circuit tests and continuity tests; the higher value resistor limits the sound!

BBQ

Construction Pictures:


The device I bought for $1.00 at the local Dollar Store


The contents of the device: 3 1.5vdc batteries, a magnet, and the sensor/alarm/battery case.


Remove the battery cover, then remove the screw I'm pointing at in order to get into the back of the case.


After you've opened the case, this what it will look like.

Two board types in stock!  Both work the same for our purposes!  We are only using the red wire where it connects to the negative battery terminal post.


Newer Device Circuit Board - pointing at black blob.
While building the circuit, I realized there were two (2) versions of the device, both bought at the same time from the same Dollar Store.  This is the newer device, showing a 'black blob' where the square wave generator is located.


Older Device Circuit Board - pointing at discrete components.
This works the same as the newer board.


Unsolder the red wire from this junction - it is the negative battery post.  Leave the other end of the red wire still connected to the circuit board.  We will be inserting the transistor between this negative battery post and the red wire, so the transistor, in acting like a switch; allowing current to flow back to the negative battery post when transistor enabled, and no current when transistor disabled.


Connect a green wire to the negative batter post you just removed the red wire from above.  This will be connected to our circuit common.


Next we are going to connect a yellow wire to the red wire that was removed from the negative battery post previously.  So, solder it in already!  Our transistor will be going between this yellow wire and green wire.


This is how the circuit will function.  The green wire is connected to ground, the yellow wire is connected to the collector of the 2N3904 NPN transistor.  The emitter is connected to ground.  The base is connected to a 6.8K resistor, and then to the output pin 5 of the NodeMCU device, which will switch 0 - 3.3vdc.


There isn't anywhere in the ALARM case for the two new wires to pass, so I used my soldering iron to melt a small hole in the case, then put the wires in, and closed up the case.


Testing!  A simple test of just the wiring changes!
Before transistor and software are added to the circuit!

I've inserted the batteries (polarity as indicated in the battery compartment bottom), and made sure to slide the switch to 'On' position - it won't sound if you don't turn it on!



With everything on, and the two wires not connected, the ALARM should not be making an alarm sound.


With everything on, and shorting the yellow and green wires together, the ALARM should be making an alarm sound!


Circuit schematic.


Using the NodeMCU with software I created, testing.  High output from NodeMCU pin 5 (also showing on blue LED on NodeMCU) causes ALARM to sound alarm.


Using the NodeMCU with software I created, testing.  Low output from NodeMCU pin 5 (also showing no LED on NodeMCU) causes ALARM to not sound alarm.

I'll upload the software in a later, separate post.

BBQ

Friday, April 4, 2014

Home Security/Automation System - Monitor Screen

Monitor Screen - under development

Previous     Next     Table of Contents

As mentioned on the previous post, I'm performing the GUI portion of the Home Security/Automation System using Kivy.

I've had quite a learning curve to get the Monitor Screen (below) to the point where it is now.  While I like Kivy, the documentation is still a struggle for me, so I have to build a lot of simple GUIs and work with them, then gradually adding complexity.

The screen below is a mockup of what I'm envisioning.  It doesn't have any logic behind it, just ability to show the zone buttons and checkboxes.

I don't like the way the checkboxes are being displayed.  With the buttons, it's easy to see the button boundary, but the checkboxes just all run together to me; can't really tell where one zone's checkboxes ends and another's begins.

So I'm researching, trying to find a way to add some sort of visual delimiter that separates the zone's checkboxes from the next zone's checkboxes.

Here's what I've got so far (first the picture, then the code - note: Kivy code is two part; a Python portion (*.py) and a Kivy language portion (*.kv).  I've posted both below.

First - the picture of the Monitor Screen (currently titled as 'Dynamic Button Text')



Here's the Python code:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  DynamicButtonText.py
#
#  http://BBQandBanjos.blogspot.com
#  

# Given a Dictionary of dynamic names,
# pick each up and assign it to the Button text.


from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.checkbox import CheckBox

class ZoneList():
    _zoneL = ["Basement","Sun Room","Den","Living Room","Front Door"]

class ZoneElements(GridLayout):
    pass

class ZoneCheckBoxes(GridLayout):
    _instance_count = -1
    _zoneNames = ZoneList._zoneL

    def __init__(self, **kwargs):
        super(ZoneCheckBoxes, self).__init__(**kwargs)
        ZoneCheckBoxes._instance_count += 1
    

class ZoneButton(Button):
    _instance_count = -1
    _zoneNames = ZoneList._zoneL
    
    def __init__(self, **kwargs):
        super(ZoneButton, self).__init__(**kwargs)
        ZoneButton._instance_count += 1

class ZoneLayout(BoxLayout):
    def __init__(self, **kwargs):
        super(ZoneLayout, self).__init__(**kwargs)
        for i in range(len(ZoneList._zoneL)):
            self.add_widget(ZoneElements())

class DynamicButtonText(App):
    pass

def main():
    DynamicButtonText().run()   #run kivy app
    
    return 0

if __name__ == '__main__':
    main()

    

========

And here's the Kivy code:


#dynamicbuttontext.kv

ZoneLayout:

:
    orientation: 'vertical'
            
:
    text: "Zone " + str(root._instance_count + 1) + ": " + root._zoneNames[root._instance_count]
#    text: "Button: "
        
:
    cols:2
    CheckBox:
        active: True
        group: "Zone " + root._zoneNames[root._instance_count]
    Label:
        text: "Active"
        
    CheckBox:
        group: "Zone " + root._zoneNames[root._instance_count]
    Label:
        text: "Inactive"
    
    CheckBox:
        group: "Zone " + root._zoneNames[root._instance_count]
    Label:
        text: "Bypass"
    
    CheckBox:
        group: "Zone " + root._zoneNames[root._instance_count]
    Label:
        text: "Monitor"
    
    CheckBox:
        group: "Zone " + root._zoneNames[root._instance_count]
    Label:
        text: "Test"


:
    cols: 2
    ZoneButton:

    ZoneCheckBoxes:

Friday, March 28, 2014

Home Security System - update

Previous      Next      TableOfContents

STATUS
It's been a while since I published an update to my project.  Seems I have too many projects!

Recently, I started this project back up.  I've made a lot of headway in programming the project in Python, with major changes to the architecture.

Here's the status as of March 28 2014:

  • It's still slated to be deployed on a Beagle Bone Black (B3)
  • It will follow a MVC (Model View Controller) paradigm.
  • The GUI display will utilize Kivy. 
  • The three major components:
    • The portion that runs on the B3 will be the portion that is responsible for monitoring the sensors.
      • The code for each sensor will run in its own thread.
    • The GUI will run distributed across a network, both local as well as Internet.
    • The Controller will run on a desktop machine.  It's currently running on Ubuntu, but since it's Python, it should also run on Mac and Windows.
    • The logger will run on the desktop machine.
    • It will support multiple monitoring nodes.
I have been actively working on this, making a lot of headway.  

TOOLS

plantuml.com
At one point, after taking a couple of days off, I realized rather than reorienting myself to the code through manually walking through the code, I should put together some Sequence Diagrams.  So at first I had drew these, but after having to update them a couple of times, I started looking around for something better suited to this task, while being free and lightweight.

I settled on 'PLANTUML.COM' for this activity.  I highly recommend it!  Now, I just keep a text file open, where I add the sequence of messages as I change the code, run plantuml tool against it, which produces a PNG output file.  This has enabled me to return to the code much faster whenever I take some time off.

Kivy
The first attempt was using TkInter, but after taking some time off and returning to this project, I wanted to take a look around and see what might be new.  I came across Kivy.  After a deep dive, I decided this was the path I was going to take.  I've been reading the following books (in addition to the kivy.org documentation):
  • Kivy: Interactive Applications in Python (Roberto Ulloa)
  • Creating Apps in Kivy (Dusty Phillips)
Of the two books, I prefer Dusty's book "Creating Apps in Kivy"

More later!!!

Saturday, May 18, 2013

A Home Security System - BeagleBone Black getting started

BeagleBone Black - Getting Started

Keywords: BeagleBone Black, Home Automation, Home Security, Python, Raspberry Pi, Tkinter, 

Updated June 5, 2013 (Table of Contents)
May 18, 2013
Next
Table of Contents

Note that I'm on an Ubuntu system, not a Windows system.



I received my BeagleBone Black (B3) yesterday.  Now I'm trying to figure out how to use it!

Per the included card that came in the B3 box, I noted, under Tethered to a PC:

  • Connect the USB mini cable to BeagleBone Black.  OK, did that.  They supplied the cable - nice!
  • Connect the other end of the USB cable to the PC.  OK, did that too.  
  • Look for a new mass storage drive to appear on the PC.  OK, it's there.
  • Open the drive and click on START.htm.  OK, there it is.  Clicking...
  • It opened a web browser page, in URL:  file:///media/BEAGLEBONE/START.htm , and presented the "Getting Started" page.  Nice!  I skipped the step 2, "Install drivers", as it noted: "Driver installation isn't required, but you might find a few udev rules helpful".  This has no meaning for me, as I don't know what udev is or the rules they are talking about, so I'm going to skip for now, since they said it wasn't required.  I can always do later...
  • Step 3, Browse to web server on Beagle.  I did this, and observed the web page from my B3's server on http://192.167.7.2.  
    • On this page, under Troubleshooting, it says not to use Windows Explorer.  That's OK, I'm not using it on my Ubuntu node that I'm working from, I'm using Chrome.  I'm not Troubleshooting either, as I'm not having any problems.
    • The next section is "Update board with latest software".  Here, I got confused.  I'm on Ubuntu, but everything here appears to be oriented towards assuming I'm on a Windows node.
      • It says" Download "Angstrom Distribution" from http://beagleboard.org/latest-images". 
      • Notes - 'due to sizing necessities, this download may take 30 minutes or more".  OK, it takes whatever it takes, no issues here.
      • The file you download will have an .img.xz [sic]extention.  This is a compressed sector-by-sector image of the SD card.  OK, no issue here for me.
      • Then it says, Step#2, Install compression utility, download and install 7-zip.  OK , then the screen clearly shows a Windows "open file security warning, publisher could not be verified, run?"  Well, I'm not running on Windows, so now what do I do?  I read along further...
      • Step #3, Decompress the image.  Use 7-zip to decompress the SD card .img file.  OK, still showing a Windows screen here.  Can't do that....so reading further to see if I can figure this out, or see what else may present itself...
      • Step #4, Install SD card programming utility.  Download and install Image Writer for Windows, be sure to download the binary distribution.  OK, can't do that either, so let's continue down to see what might present itself and clear this up....
      • Then an odd note, after all this Windows stuff:  Some general help on programming SD cards can be found on the Ubuntu Image Writer page.  OK, that sounds like me, so let's have a look; but what about all the zip unpacking, etc?  I'll have to let that be unresolved for the moment.  In the meantime, I'm over at the Ubuntu site, and note this "describes how to install from a .IMG file', and  about "downloading IMG image to a device that your computer can boot from", so maybe I'm onto something here.  So, for now, I'm assuming this is what I need to do.  
      • Returning, for now, to the B3's Update Software section, I note "Connect SD card to your computer", and I'm wondering, which computer are they talking about?  My Ubuntu computer, or the B3?  Reading further, it says "Use the provided microSD card to SD adapter or a USB adapter to connect the SD card to your computer.  Well, there wasn't any provided "microSD card to SD adapter"!!!  The uSD slot (under board) is empty, and other than the USB to micro USB cable provided, there's nothing else provided.  So, something wrong here!  Reading further....
      • Step #6: Write the image to your SD Card.  OK, that clears up one question, where I didn't know which computer they were referring to - my Ubuntu computer, or the B3.  It's now clear they are referring to my Ubuntu computer.  OK, got it - I'm going to program an SD card, using the Ubuntu instructions noted above from the Ubuntu web site, with the .IMG file.  OK, understood.
      • Step #7: Eject the SD card.  OK, got it.
      • Step #8: Boot your board off of the SD card.  They then give detailed instructions on what to hold down while booting from the SD card.  One thing that concerns me though is that it doesn't say how big an SD card (in capacity) I need.  It also says "this can take up to 45 minutes."!!!
    • Well, looks like I'm stopping here until I can go to the store to buy a 4GB SD card.  While I'm doing that, I'll go ahead and download the BeagleBone Black latest-images (Sngstrom Distribution (BeagleBone Black) 2013-05-08.  Well, I first clicked on the 'torrent', but it came up with a warning that torrent would also mean I would agree to upload.  I don't want to do that off of this computer, so I canceled that, and used the normal download instead.  I'm also going to get a 5VDC power supply.
      • Hmmm, can't seem to find the specs on the power supply physical dimensions needed.  After much searching, I found it embedded in the document:  The connector used is a 2.1MM center positive x 5.5mm outer bar
    • I want to power down the B3 - I never leave new electronic devices powered up and unattended, so I want to power it down - how to do that?
      • OK, here it is:  A power button is provided near the reset button close to the Ethernet connector....f you hold the button down longer than 8 seconds, the board will power off if you release the button when the power LED turns off. If you continue to hold it, the board will power back up completing a power cycle
      • Yep, that did it.

UBUNTU

  • So, this is what I did to install an updated image via Ubuntu.
    • First, I downloaded the image on to my Chrome browser into the Download directory.
    • Then I double clicked the .xz file.
    • This brought up an Archive Manager window, where I selected the 'Extract' button.  In this case, I created a new folder and labeled as pertaining to BeagleBone Black and the date, then I extracted to this folder.  This created a .IMG file.
    • This is the file that needs to be transferred onto the SD card.
    • Per the Ubuntu post here, this page describes how to install from a .IMG file.  
    • It says to 'write the downloaded IMG image to a device (my SD card in this case) to a device that [my] computer [my B3] can boot from.  It also notes that this action will destroy any data on the destination SD.
    • There's a lot of good information on this page, so I would suggest that you view it and understand it before proceeding.
    • The steps given:
      • 1. Download the .img file.
      • 2. Install the usb-imagewriter package
        • 2.1 If your release does not include this, download it from Oliver's PPA
        • 2.2 if the imagewriter fails to launch, you may need to install python glade2 support.  Install the python-glad2 packge or Run sudo apt-get install python-glade2
        • 2.3 If your release does not include it and you are runing Ubuntu 9.04 Jaunty Jackalope then run this command from the console: sudo apt-get install usb-imagewriter
      • 3. Oopen Applications->Accessories->Image Writer
        • 3.1 from teh command line, from the console:
          • sudo imagewriter
        • On some usb-imagewriter versions (console command:imagewriter) the applications fails to write if the image path contains blank spaces, exiting with "IndexError: list index out of range".
      • 4. Insert your flash media
      • 5. Sleect the downloaded file and flash device, and click "Write to Device"
      • 6. REmove your device when the operation is complete.
    • Well, in my case, I went to 'console' and typed in 'sudo imagewriter', and it launched, so I didn't have to do any of the installation stuff before.  I probably installed this previously.
    • When I placed the SD card into my Ubuntu's SD slot, I was expecting to see it in the File Manger, but I never saw it.  I looked in the folders Mnt and Media, but didn't see it there either.  So, on a whim, I launched 'imagewrite' and sure enough, it found it.  So I'm assuming this didn't have any type of file system created on the SD, so nothing was seeing it.
    • Running 'imagewriter'
      • it presented an interactive window, where it prompted me for the Write Image to select.    I used this to select the file from the folder I created previously (above).
      • From the 'to' listbox, I selected the SD card I had inserted.
      • I selected 'Write to Device'
      • I OK'd the warning that says it will destroy all data on the device (which as it turns out, is mounted at /dev/sde).
    • And, at 7:21 PM, it started writing.  Knowing that Beagle's site said it may take 45 minutes, I'm expecting a loooonnnnnggggg wait.  So far, I don't see anything, so I'm going to check the process running on my system to see if I can see it writing and consuming CPU cycles.
  • Update 6/5/13  Sorry for the long delay.  Had some other things pop up, and just now getting back to this.  So, to resume from the post above:
    • I had some problems getting the write to complete without error.  I suspected it was the SD card, so I removed it and tried another one, and the replacement worked fine.  However, it was too small overall, so I wouldn't be able to use it for the final installation.  
    • My system, which I built from components (my first computer, in 1978, was built from discrete components, such as transistors, capacitors, etc, except for the mother-board.  This was a Heathkit, H11, which incorporated a PDP-11/03 motherboard from DEC.  It cost me about $3,500!  In 1978, you could buy a CAR for this amount of money!  But now, I just buy the components and plug them in - no more putting the springs under a keyboard, no more solenoids for a paper tape punch, no more flyback transformer for the display monitor!).  I did not include a separate SD card reader, instead opted to use a USB SD card reader.  On a whim, I decided to try a different USB SD card reader I had with the problem SD card.....and the SD card worked fine!  So, it was a combination of the USB SD card reader device and the SD card itself that was causing the problem.  Switching to a different USB SD card reader and the same SD card worked great.
    • So this part of the project is complete!

A Home Security System - Resources

Resources

Update: May 18, 2013 (Table of Contents)


A Home Security System - Construction Blog

Construction Blog

Keywords: BeagleBone Black, Python, Tkinter, Raspberry Pi, RPi, Arduino, Security System, Home Automation


Update: June 5, 2013. (Table of Contents)

  • Updated this entry (at the bottom) with SD card info.  http://bbqandbanjos.blogspot.com/2013/05/a-home-security-system-beaglebone-black.html
  • My Host system changes:
    • Installed 'Git' onto my system for Source Code Management.
    • Had been running on a small Solid State Hard drive, but have decided to move to a larger physical hard drive.
    • Decided to migrate from Ubuntu 11.10 to 12.04 which has long term support.
    • I used Linux's 'dd' command to image the new drive.  See details here.
  • Noted that the Python version installed on the BeagleBone Black (B3) is not Python3, which is what I was planning on using.  Will have to investigate whether I can upgrade Python on the B3 to Python3, or will have to move back down to Python 6 or 7 - not sure which is on B3 at the moment.
  • Will be out all next week, so I don't expect to make any additional postings.



Update: May 18, 2013 (Table of Contents)

I have been pretty busy on the project.  I've been working on the following elements:

  • Learning about the BeagleBone Black (B3) platform.  I decided to move the project off of the Raspberry Pi (RPi) and onto the B3.  I'm concentrating right now on the following aspects:
    • How to interface with the onboard mux.  This is used to specify which channels, or pins, are being addressed.  
  • Learning Python.  I've really been enjoying this!  I've been programming for a while: Fortran (1977), Assembler (1978), C (1983), C++(1995), Java (1999), Arduino (2004?), and Python3 (2013), so the move to Python3 hasn't been huge, but it's been different never-the-less.
  • Learning Tkinter.  This is one of the main standard GUI interfaces into Python.  
  • B3.  Not yet deep enough into this, but I'm planning on programming it using Python3.  
    • Just received it on 5/17/13.
    • Concentrating on getting it up and online.
    • Concentrating on Mux addressing via Python3.
    • So today, after finishing on this project update, I'm going to start with the B3 and getting it online, then accessing it's pins via short Python3 programs.


Monday, March 25, 2013

A Home Security System - Sensors OOD

Sensors OOD

Keywords: BeagleBone Black, Python, Tkinter, Raspberry Pi, RPi, Arduino, Security System, Home Automation

March 25, 2013 (Table of Contents)


This system will be Object Oriented (OO).  This page will be concerned with the Object Oriented Design (OOD) of the Sensors.  It will make use of Polymorphism.

The root type: Sensor

A Sensor Object:
  • It has the following Attributes:
    • Name
    • Zone
    • Description
  • It has the following States: 
    • Ignored
    • Alarm
    • Alert
    • Normal
  • It has the following Transition Listeners
    • ListenerOnTransitionToAlert
    • ListenerOnTrasitionToAlarm
    • LietenerOnTrasitionToNormal
    • ListenerOnTrasitionToIgnored
  • It has the following Listener Methods
    • RegisterAlertListener
    • NotifyAlertListener
    • RegisterAlarmListener
    • NotifyAlarmListener
    • RegisterNormalListener
    • NotifyNormalListener
    • RegisterIgnoreListener
    • NotifyIgnoreListener
  • It has the following Sensor Control Methods
    • SetSensorToAlarmMode
    • SetSensorToAlertMode
    • SetSensorToIgnoreMode
  • It has the following Sensor Test Methods
    • TestSetSensorToAlarm
    • TestSetSensorToAlert
    • TestSetSensorToNormal
    • TestSetSensorToIgnore

Sensor Children Types:

  • A Magnetic Contact is a type of Sensor.
    • It has the following states:
      • Contact State
        • Open
        • Closed
    • It has the following Sensor Normal Methods
      • DefineNormalAsOpenContact
      • DefineNormalAsClosedContact
    • It has the following children types:
      • A Door Sensor is a type of Magnetic Contact Sensor
      • A Window Sensor is a type of Magnetic Contact Sensor
  • A Voltage Transition Sensor is a type of Sensor
    • It has the following state transitions:
      • Transition from Voltage Low to Voltage High
      • Transition from Voltage High to Voltage Low
    • It has the following Sensor Normal Methods
      • DefineNormalAsLow
      • DefineNormalAsHigh
    • It has the following children types:
      • A Doorbell Sensor is a type of Voltage Transition Sensor
      • A Carbon Monoxide Detector Sensor is a type of Voltage Transition Sensor 
      • A Smoke Detector Sensor is a type of Voltage Transition Sensor
      • A Water Detector Sensor is a type of Voltage Transition Sensor
      • A HVAC Temperature Controller Sensor is a type of Voltage Transition Sensor
      • A Household AC Power Sensor is a type of Voltage Transition Sensor
  • To be classified:
    • Networked Sensor
    • Video Camera Sensor
    • Access Keypad
    • Door Speaker/Microphone




A Home Security System - Web Pages

Web Pages

Keywords: BeagleBone Black, Python, Tkinter, Raspberry Pi, RPi, Arduino, Security System, Home Automation

May 18, 2013 (Table of Contents)

  • Reviewing whether I will use a client/server GUI or web pages.  Not yet decided.

March 25, 2013  (Table of Contents)

Web Page

Users


  • Add User Web Page
  • Delete User Web Page
  • Modify User Web Page

Sensors

  • Add Sensor Web Page
  • Delete Sensor Web Page
  • Ignore Sensor Web Page
  • Modify Sensor Web Page

Control Elements

  • Add Control Element Web Page
  • Delete Control Element Web Page
  • Ignore Control Element Web Page
  • Modify Control Element Web Page

Monitoring

  • System State Web Page
  • Sensor State Web Page
  • Alarm State Web Page
  • Log Web Page

Messaging

  • Add Message Recipient Web Page
  • Delete Message Recipient Web Page
  • Modify Message Recipient Web Page

Video

  • Video Camera Web Page

A Home Security System - Control Elements

Control Elements

Keywords: BeagleBone Black, Python, Tkinter, Raspberry Pi, RPi, Arduino, Security System, Home Automation

March 25, 2013   (Table of Contents)

  • Control Element Types
    • X10
    • 120 VAC Control
    • Door Lock
    • Relay Contact Control
    • Door Speaker/Microphone (e.g., communicate with someone who rang front door).
    • Alarm Siren
    • Alert Speaker
    • Video Camera
    • Networked Control
    • HVAC On/Off
    • HVAC Damper Control (Open/Close)

A Home Security System - Sensor Types

Sensor Types

Keywords: BeagleBone Black, Python, Tkinter, Raspberry Pi, RPi, Arduino, Security System, Home Automation

March 25, 2013   (Table of Contents)

Sensor Types
  • Window 
  • Door 
  • Doorbell
  • Networked Sensor
  • Video Camera
  • AC Household Power
  • Household HVAC status
  • Water Leak
  • Temperature 
  • Smoke
  • Carbon Monoxide
  • Access Keypad
  • Door Speaker/Microphone

A Home Security System - Users


Users

Keywords: BeagleBone Black, Python, Tkinter, Raspberry Pi, RPi, Arduino, Security System, Home Automation


March 25, 2013   (Table of Contents)



The [Name] has three (3) types of users: An Administrator, a Commander, and a Monitor, all of which must login to use and/or view the system.
  • An Administrator has all capabilities of a Commander and a Monitor, plus the ability to:
    • Configure the system.
  • A Commander has the capabilities of a Monitor, plus the capabilities to:
    • Set Sensor State
    • Acknowledge Alarms and Alerts
  • A Monitor has the capabilities
    • Observe the system State Web Page

A Home Security System - Glossary


A Home Security System - Glossary

Keywords: BeagleBone Black, Python, Tkinter, Raspberry Pi, RPi, Arduino, Security System, Home Automation



March 25, 2013  (Table of Contents)

Glossary

  • User: any one who has the capability to log in and interact or view the system.
  • Sensor Element- an input device that detects a state change.  It has an associated Activity Action to perform.  E.g., magnetic window and door alarms, smoke detector, temperature.
  • Control Element - an output device under the control of the system, such as an Alarm Siren, a 120 VAC relay, HVAC, etc.
  • Zone - the home is divided up into Zones.  E.g., back yard 1st floor.
  • Set Sensor State - set the state of a Sensor to Alarm, Alert, Ignore. 
    • Alarm - highest level of capabilities.  Alarm Action performed
    • Alert - Alert level of capabilities.  Alert Action performed
    • Ignore - Ingore the state of this Sensor.

A Home Security System - Design Narrative

Design Narrative

Keywords: BeagleBone Black, Python, Tkinter, Raspberry Pi, RPi, Arduino, Security System, Home Automation

May 18, 2013  (Table of Contents)


Since the last posting (March 25, 2013), which documented the use of the Raspberry Pi  (RPi), I have become aware of a new platform - the "BeagleBone Black" (B3).

The B3 has the some elements, such as faster and more powerful cpu, but primarily because of the increased number of I/O pins, including analog, that the B3 provides over the RPI.  This change will provide, in my opinion, a superior platform, and ultimately a lower overall cost because of the increased number of I/O pins - I was going to have to implement a separate hardware Mux to get all of the I/O I was going to need for the project, and this was probably going to have to be an Arduino, which incurs it's own associated additional costs.

The costs between the two platforms is minor: $35 for the RPi vs. $45 for the B3.

So, moving forward, I will be using the B3.

Design update:

  • GUI Interface



    • I have done a mock-up of the GUI For the system.  It's not finished, and it may look completely different at completion, but this is what I'm currently thinking about implementing (see picture below).  This isn't functional - it's just a picture of a Python GUI implemented in Tkinter, but shows the current concept.  It shows a big area that serves as a flashing alarm in the Home area (something in alarm in the home), then the Area involved, then the Zone involved, then the sensor involved.  All will flash (alternate white/red background) until acknowledged, then seal-in to show the state.  A new event (return to normal, or another sensor goes into alarm) will cause it to go back to flashing.  Every action will be performed from this GUI, from any computer on the system or remotely when I'm away, via Smartphone or Internet connected device.  From here I will also be able to take a sensor Inactive (bad sensor), Bypass (we want to have the backdoor open and not alarm), as well as the state of the sensor (Normal, Alarm), by selecting the sensor involved and changing it's state (e.g., if going from active to Inactive, or active to Bypass)
  • Sensors will include:
    • Window open/close magnetic sensors
    • Door open/close magnetic sensors
    • Motion detectors (PIR)
    • Smoke detectors
    • Carbon Monoxide detectors
    • Natural gas detectors (not sure if these exist or not yet)
    • Water detectors (flooding in basement rooms)
    • Doorbell
    • Loss of Electrical (office, refrigerators, basement utilities room)
  • The security system will divide the home into the following:
    • Areas
      • Basement (this is a live-in basement with one side exposed to the yard outside; our yard slopes, so three sides are below ground level, and one side is at ground level),  with a den room, full kitchen, bedroom, exercise room, living room, bathroom, with two (2) entrances (one from outside, one from inside) and four windows (two in bedroom, two in living room).  This can function as an in-law suite.  This level also has all utilities, such including Internet and security system convergence, as well as a furnace room where I want to monitor for Carbon Monoxide and Fire/Smoke.
      • First Floor.  This floor has three doors: one to garage, one to back yard, and one to front yard.  There are 10 windows and a door on the back, one door on the front, and one garage door that will need to be monitored.  One bedroom.
      • Second Floor: There are four bedrooms and a utility room, each with windows and doors, and a central hall, all of which will need to be monitored.
      • Attic: There's a furnace up here, so I want to be able to check for Carbon Monoxide leaks, as well as water leaks.
      • Garage: Carbon Monoxide, Fire/Smoke.  It also has an outside door, and two car entry/exit garage-doors, along with two windows.
      • Outside: Front door area, driveway area, basement area, back yard area.
    • Zones
      • Each area will be broken down into zones.  For example, the Basement area has the following zones:
        • Living room
        • Bedroom
        • Kitchen
        • Utilities room
        • Furnace room
        • Exercise room,
        • Den
      • Similar breakdowns from Areas to Zones will be done for each Area.



March 25, 2013 (Back to Table of Contents)

Keywords: Raspberry Pi, RPi, Arduino, Security System, Home Automation

Raspberry Pi

The security system is based on a Raspberry Pi (RPi) device.  It may incorporate the use of an Arduino in order to facilitate work with external hardware devices - this is under evaluation.  

The RPi will provide the following services:

  • Web App Hosting via Tornado
  • Python program execution
  • File system for data retention
  • TCP/IP network communications
  • Communication with Arduino for hardware communications, via RS232
Python will provide the program Model, View, and Controller (MVC) services.  It will also provide:
  • Ability for the Administrator to configure the via a remote web monitoring page.
  • Ability for the Administrator to change the state of the system, sensors, and control elements via the remote web monitoring page.
  • Ability to monitor the status of the security system.
  • Ability to push status information to a remote web monitoring page.
  • Ability to send SMS text messages
  • Ability to control 120 VAC contacts
  • Ability (possibility) to control X10 devices
  • Ability to control other devices through relay contacts
  • Ability to link to, or stream (undecided) video cameras
  • Object Persistence via Shelve
  • Web Pages via Tornado
  • Web Page push updates via HTML5 Sockets
The Security System
The System
The System shall be provide the following services:
  • Screens to support configuration of the system.
    • Add, modify, delete Users
    • Add, modify, delete Contact Phone numbers
    • Add, modify, delete Senors
    • Add, modify, delete Control Elements
  • Screens to show system state:
    • System Status
      • Network Connection
      • File System
      • On AC or Battery Backup
      • Watchdog
      • Sensor State (for each sensor)
      • Normal
      • Alert - time of event
      • Alarm - time of event
      • Ignore - time of event
      • Acknowledged - time of event
    • Messages (All sensors, Control Elements, System Status)
      • Messages displayed and logged
      • Events (all)
        • Time of event
      • A log entry for any change in state of any Sensor or Control Element. Will contain such information as:
        • Sensor Name
        • Zone
        • State Change
      • User Login
        • User Name
        • Failed Attempts
      • User Logout
        • User Name
      • Web Browswer IP addresses served
        • Page accessed
        • User Name
        • Invalid Attempts
The Security System will monitor all sensors for changes from normal state.  On detection of a state change for any sensor, the will perform the assigned action.  Each action is defined for each sensor by the Administrator.  The assigned action will continue until either a timeout for this sensor's action, or a command from a User.




A Home Security System - Table of Contents

Home Security System: Table of Contents

Keywords: BeagleBone Black, Python, Tkinter, Raspberry Pi, RPi, Arduino, Security System, Home Automation


This will be the organized central collection of the information associated with the design, development and documentation of the Home Security System.

Section X: Project - Home Security System

Section X: BeagleBone Black - Getting Started

Section X: Design Narrative

Section X: Construction Blog

Section X:  Updates

Section X: Users

Section X: Sensor Types

Section X: Control Elements

Section X: Web Pages

Section X: Testing

Section X: Documentation

Section X: Releases

Section X: Resources



Project Update 1 - A Home Security System

A Home Security System

Keywords: BeagleBone Black, Python, Tkinter, Raspberry Pi, RPi, Arduino, Security System, Home Automation


Change to architecture
April 6, 2014 (Back to Table of Contents)

I recently came back to this project after taking a break to do other things.

The current architecture (same as before):

  • Python is the primary language
  • It will run on a BeagleBone Black
The changes to the architecture:
  • Is a distributed application
  • Using Kivy for the presentation layer (GUI)
  • Monitor will be available on any GUI device (e.g., Linux, Windows, Mac, Android)
  • Uses Json for IPC and network communications


Search for a Python Oriented OODBMS

May 18, 2013   (Back to Table of Contents)

  • Have decided to go with BeagleBone Black instead of Raspberry Pi.


March 25, 2013  (Table of Contents)

Keywords: BeagleBone Black, Python, Tkinter, Raspberry Pi, RPi, Arduino, Security System, Home Automation


After much research regarding Object Persistence (OODBMS) for Python, I've elected to use the built-in capability of Python Shelve.

Frankly, I'm surprised that there aren't more active Python OODBMS applications!

I investigated the following candidates, all of which must be open-source, and the reason, from my opinion, for my rejection:

  • Zodb - overkill for this application
  • MongoDB - overkill for this application, not a OODBMS
  • Buzhug - not very active, no support for Python 3 yet.
  • Pypersyst - not active
  • CouchDB - document oriented database
  • Objectivity - no support for Python 3 yet, commercial product
  • Axiom - not a OODBMS; a mapper between SQL database and objects
  • Durus - Requires a download of DurusWorks, which appears to be a complete environment.  For my application, this is more of a challenge than I want to undertake.  It may be a great product though!
  • Cog - no support for Python 3 yet.  Does not appear to be very active.
  • Poodle - no support for Python 3 yet.
  • Dobbin 0.3 - Was a potential candidate.  Says it's compatible with Python 3.x. However, no activity more recent than 11 months ago.

Sunday, March 24, 2013

Project - A Home Security System

A Home Security System

Keywords: BeagleBone Black, Python, Tkinter, Raspberry Pi, RPi, Arduino, Security System, Home Automation


 (Table of Contents)


Overview

March 24, 2013
Last updated 5/18/13

  • Have decided to go with BeagleBone Black instead of Raspberry Pi.

Last updated 3/25/13

Keywords: BeagleBone Black, Python, Tkinter, Raspberry Pi, RPi, Arduino, Security System, Home Automation


I'm going to be replacing my current home security system with one I'm building.  This will ultimately morph into a Home Automation System.

Here are some of the highlights and design decisions:

  • Replace the current security system main board with by a Raspberry Pi.
  • It may make use of an Arduino to interface with the various contacts - not yet sure on this approach.
  • It will interface to the Internet
  • It will have a web server interface, where it can display the current status, as well as accept commands (such as "bypass a specific door alarm as I am leaving it open").
  • It will make use of IP Tunneling for web pushes to a browser via HTML5 (web sockets).
  • It will feature SMS text messages to registered cell phones
  • It will replace the existing commercial security main board
  • It will utilize the existing window and door alarm contacts
  • It will use Python for the development language
  • It will make use of Tornado for the web server
  • It will be Object Oriented in it's design
  • It will utilize an Object Persistence framework rather than a SQL database.  I am currently researching this framework, and no technology has yet been chosen.  Update 3/25/13 - I have chosen Python's Shelve.
  • It will display multiple video cameras, and offer pictures and video retention.
  • It will interface to fire, carbon-dioxide and water-flood detectors.
  • It will be open source
  • It will eventually use thermocouples for multi-room temperature monitoring and possible individual-room control.
  • It will control multiple HVAC units for multi-floor homes.
  • It will be capable of controlling a BBQ smoker's dampers at temperature, with alarms and alerts.
I will document the design, development and deployment of this system.

My Background: I have significant electrical, electronic, and software capabilities, and this project is within my scope of expertise and experience.