/binary_clock_v2

Binary Clock v2 - The Monolithic Binary Clock

Primary LanguageC++

BinaryClock v2.1 - The Monolithic Binary Clock
***************************************************************************************
About
-------------------------------------------------------------------------------------->
The software used to control my binary clock, written in C++; currently the clock
utilizes the Raspberry Pi Model B Rev 2.0 as hardware.

Features
--------------------------------------------------------------------------------------->
-	Service architecture, like a microkernel with daemons, with each service
	executing under its own thread.
-	Multi-threaded web-service (partial HTTP/1.1 support).
-	- Custom template syntax for function callbacks.
	- Disk-caching for reducing secondary I/O overhead.
-	Complete list of services:
	- Alarm Clock:
		- Allows multiple times to be set.
	- Configuration:
		- Disk thrashing protection.
	- IP to Country Lookup:
		- Daily updates of IP block allocations to countries, which
		  updates the database with the country's of IP's.
	- Relay Board:
		- Allows any sized relay board to be controlled with
		  the ability to set multiple conditions for switching
		  sockets/individual relay points on/off.
	- Sensors
		- Routely polls TMP36 temperature sensor and a photo-resistor.

Developers
--------------------------------------------------------------------------------------->
You should be able to fork a copy of this repository, compile and run it straight away
on any Unix system (tested on Debian Squeeze and Arch May 2013 release). For hardware
interaction on the Raspberry Pi, you should modify the definition "HARDWARE_VIRTUAL_MODE"
to false (located in main.cpp). YOU SHOULD NOT modify this flag on a non-Raspberry-Pi
system because it modifies the kernel memory and may crash the target system!

Any service can be easily disabled by commenting out its addition to the service
controller, located in main.cpp.

History
--------------------------------------------------------------------------------------->
This project originally started in mid-April 2012 with Binary Clock v1.0, called
"EvilDuino". The software was written in C# and used the Netduino Plus (v1.0) as
hardware. Many thanks is owed to the netduino community for helping with the shift
registers malfunctioning.

Around the end of December 2012, Binary Clock v2.1 was created, called
"The Monolithic Binary Clock" due to its much larger physical appearance as a tower
(for fake electrical sockets). However the repository for v2.0 was pulled in early
June 2013 in preparations for v2.1 as a clean start with many design improvements,
primarily to the service architecture.

Third-Party Libraries
--------------------------------------------------------------------------------------->
libpqxx is required due to the guestbook feature of the web-service using PostgreSQL
(Postgres) for storage.

Arch: pacman -S libpqxx

License
--------------------------------------------------------------------------------------->
All contents of this repository are subject to the following license:

Creative Commons Attribution-ShareAlike 3.0 Unported
http://creativecommons.org/licenses/by-sa/3.0/

Live Version
--------------------------------------------------------------------------------------->
A live version of this clock can (sometimes) be found at:
http://www.ubermeat.co.uk:82/

Contact
--------------------------------------------------------------------------------------->
Website:	ubermeat.co.uk
E-mail:		limpygnome@gmail.com