This is a project page where I am putting my notes while I work on my Personal Services project.
Project Goal: Turn my TV on whenever I get home from work
- My home network has no permanent web address – although I do have my own webserver
- Security – only I should be able to turn my TV on
This is the solution I will attempt to create:
My android phone will know my location via GPS or when it sees my home WiFi. An application running on the phone will send an event to my personal webserver.
The webserver will have a web application running on it which will receive “Events” from authorized devices and send “Commands” to other authorized devices. There could be some flow logic here.
My home router will route one special port to a Raspberry Pi.
A program running on the Raspberry Pi will receive the command and if authorized execute it.
Why have a personal webserver - Why not have the phone directly call home
- Central point of control for logic. This way I can have many actions occur after the I am home event
Why not have the Raspeberry Pi receive the "I am home" event
- If the Pi receives the "I am home" event rather than the turn on TV command it allows the webserver to become a central hub for all my processes
Why not use IFTTT
If IFTTT allowed me to program my own channel this would work. Although they say they are considering allowing this in the future it would still be locked into their platform. This means I can't easily connect my Pi (Without hacks e.g. IFTTT sends a twitter message)
I would like to expand the use cases for this in the future and IFTTT includes no ablity to create logic
- I have the cheapest web-hosting I can get which only gives me a 512Mb webserver
- I want the Android App to run on lowest possible hardware.
- I have 0 budget to spend (Only Time)
- My home IP can change - There needs to be some way for the Pi to detect when it's IP has changed and let the Hub know to send calls to the new address
The system could be broken down as follows:
Personal Services Hub
In this case the hub would be a web application which includes logic to connect Events to Commands.
Personal Services Spoke
An application which runs on a device. This application is pointed at a Hub and connects. It then either supplies Events or Commands to the hub. In this scenario there are two spokes - One is an Android application providing an Event, the other is an application running on the Pi providing a Command.
Personal Services is a Java based, small footprint, logic execution engine that can run on any Java Enabled Device or webserver. It establishes public key based secure relationships between devices/servers. It can be simply programmed via a Web API to preform actions in response to requests. It is designed to give makers control of their IOT devices in a manufacturer independent manor and enable them to be easily connected to any internet service.
- I want to own my personal services not rely on some corporation
- I want the freedom to buy IOT devices from any manufacturer and have them work
- I want to define my own logic
- I want to choose where the logic runs
I don't want a solely algorithm based system that requires training (aka nest thermostat).
Oracle SOA Complexity
Oracle SOA systems can consist of:
Cluster of Weblogic servers
Connected to databases (Running on more servers)
Running on a SAN
High Licence cost for SOA
Many points of failure
Many types of failure
Require expert teams to develop, support and maintain.
OLD: Insert View module allows this but is only alpha in drupal 8. I might add it later: