<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ed&#039;s World &#187; home easy</title>
	<atom:link href="http://www.jellard.co.uk/tag/home-easy/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jellard.co.uk</link>
	<description>Bringing data into real life in a meaningful way</description>
	<lastBuildDate>Fri, 14 May 2010 15:00:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Ambient Light and Arduino boxed up and ready to rumble</title>
		<link>http://www.jellard.co.uk/2009/11/ambient-light-and-arduino-boxed-up-and-ready-to-rumble/</link>
		<comments>http://www.jellard.co.uk/2009/11/ambient-light-and-arduino-boxed-up-and-ready-to-rumble/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 21:30:30 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Home automation]]></category>
		<category><![CDATA[AM comms]]></category>
		<category><![CDATA[ambient light]]></category>
		<category><![CDATA[BlinkM]]></category>
		<category><![CDATA[central heating ctrl]]></category>
		<category><![CDATA[current cost]]></category>
		<category><![CDATA[home easy]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.jellard.co.uk/?p=99</guid>
		<description><![CDATA[One bitsbox order and a trip to buy some deodorant later, and my arduino is boxed up, and ambient light has a stand!

The cap off an addidas deoderant can makes a nice enough base for the orb from a B&#38;Q disco lamp (no link as can&#8217;t find it online).  I soldered the ends of some [...]]]></description>
			<content:encoded><![CDATA[<p>One bitsbox order and a trip to buy some deodorant later, and my arduino is boxed up, and ambient light has a stand!</p>
<p><a href="http://www.jellard.co.uk/wp-content/uploads/2009/11/IMG_4495.JPG"><img class="attachment-medium" title="Ambient Light and Box" src="http://www.jellard.co.uk/wp-content/uploads/2009/11/IMG_4495-300x199.jpg" alt="" width="300" height="199" /></a></p>
<p>The cap off an addidas deoderant can makes a nice enough base for the orb from a B&amp;Q disco lamp (no link as can&#8217;t find it online).  I soldered the ends of some CAT5 to the BlinkM, and left the other ends loose to be shoved into the arduino.</p>
<p><a href="http://www.jellard.co.uk/wp-content/uploads/2009/11/IMG_4500.JPG"><img class="attachment-medium" title="The insides" src="http://www.jellard.co.uk/wp-content/uploads/2009/11/IMG_4500-300x199.jpg" alt="" width="300" height="199" /></a></p>
<p>As I&#8217;ve got an arduino and ethernet shield, I went for the second <a href="http://www.bitsbox.co.uk/boxes.html">largest ABS box</a> and even then, I had to break off the screw connectors on one side so that the plugs could stick through the outside.  I soldered the AM receiver and transmitter onto a small piece of stripboard (also from bitsbox), added a couple of wires for aerials (with a knot in each to prevent someone pulling it out the circuit).  So that&#8217;s pretty much the finished product, what a shame!  I will add a thermometer to it so it can become a thermostat in another room &#8211; eventually this&#8217;ll go in the sitting room, so will have the current cost meter producing one temperature reading from the kitchen, this one in the sitting room, and have just ordered another arduino for my bedroom&#8217;s ambient light/thermometer/development board.</p>
<p>The java code has been working nicely, turning the heating on and off via the hacked home-easy plug!  I sent a text from my phone to turn the heating on, very proud of actually finding a use for it as I was stuck in traffic but had friends coming round so the heating would have cut out at 5.30 (it heats up til 5.30, then waits for movement) &#8211; only to find there was a street power cut that has lasted 3 days (intermittently)!  So, if the power holds up a little longer, I should get a tweet tomorrow telling me how long the central heating was on for, fingers crossed!</p>
<p>So, time to write the web interface, pretty dull <img src='http://www.jellard.co.uk/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.jellard.co.uk/2009/11/ambient-light-and-arduino-boxed-up-and-ready-to-rumble/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Home Easy Interrupts everything!</title>
		<link>http://www.jellard.co.uk/2009/11/home-easy-interrupts-everything/</link>
		<comments>http://www.jellard.co.uk/2009/11/home-easy-interrupts-everything/#comments</comments>
		<pubDate>Sat, 07 Nov 2009 18:06:57 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Home automation]]></category>
		<category><![CDATA[AM comms]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[home easy]]></category>

		<guid isPermaLink="false">http://www.jellard.co.uk/?p=91</guid>
		<description><![CDATA[Ok, so all the parts of the arduino code work fine &#8211; just not all at the same time! The setup is as follows:
An interrupt procedure gets the home easy (HE) signal, and sends it to a callback function.  This converts the sender/recipient/state into strings, and then publishes the data to MQTT.  Problem with this [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, so all the parts of the arduino code work fine &#8211; just not all at the same time! The setup is as follows:</p>
<p>An interrupt procedure gets the home easy (HE) signal, and sends it to a callback function.  This converts the sender/recipient/state into strings, and then publishes the data to MQTT.  Problem with this is it takes time, and may be interrupted by the next HE signal.  This problem is exaggerated by the HE motion detectors, which send about 15 on/off messages one after the other.   When this happens, MQTT is interrupted and it leaves the arduino in a very strange state &#8211; loop() is paused, and nothing happens until it receives another HE signal, which kicks the arduino back into action &#8211; but by that time, any signals like &#8220;turn off the central heating&#8221; will be lost, so my energy efficient house becomes boiling hot!</p>
<p>So, after lots of hitting my head against a wall, my solution is to add the data to a global &#8220;string&#8221;, and then in the loop() method, to read this string, split it up into the MQ topic and the data to send to it, and then send it.  I have found the WString library crashes the arduino, so it&#8217;s all done by manipulating individual characters in the array.  Really missing the simplicity of Java!</p>
<p>And there are more problems&#8230;</p>
<p><span id="more-91"></span>If the arduino receives a message via MQTT at the &#8220;same&#8221; time as it receives a message via HE, the MQTT message gets lost.  Doh.  I can&#8217;t think of a guaranteed way around this problem as there&#8217;s no way of knowing when either will happen.  Fortunately the fix should be done server-side, so it&#8217;s easier to do more complex things (Java).</p>
<p>What I&#8217;ve settled for is to also queue up messages to send to the arduino into a ConcurrentLinkedQueue.  I also store the timestamp of the last message received via MQTT notifying me of a HE signal.  A thread then sits waiting for a message to be put on the queue.  If there is one, and the last received HE signal timestamp is more than 10 seconds ago, it sends the message.  It then waits a few seconds and checks that there hasn&#8217;t been a more receent HE signal received &#8211; if there was, it waits and resends, and loops until there aren&#8217;t any HE signals 10s either side of sending.</p>
<p>So, by queueing everything at each end, I think I&#8217;ve found a reasonable solution to messages getting lost.  I guess I could add some handshaking in, but that&#8217;s for another time.  Very glad I use Java for my day-job, this C stuff is horrible!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jellard.co.uk/2009/11/home-easy-interrupts-everything/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Two-way communication via Nuelectronics ethernet shield&#8230;</title>
		<link>http://www.jellard.co.uk/2009/10/two-way-communication-via-nuelectronics-ethernet-shield/</link>
		<comments>http://www.jellard.co.uk/2009/10/two-way-communication-via-nuelectronics-ethernet-shield/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 17:47:16 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Home automation]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[central heating ctrl]]></category>
		<category><![CDATA[home easy]]></category>
		<category><![CDATA[Viglen MPC-L]]></category>

		<guid isPermaLink="false">http://www.jellard.co.uk/?p=47</guid>
		<description><![CDATA[Struggling to get two way ethernet communication working with the nuelectronics ethernet shield, so have ordered an official one.]]></description>
			<content:encoded><![CDATA[<p>&#8230;is possible, and does work &#8211; but only sometimes.</p>
<p>I struggled last night for several hours trying to get reliable two way communications.  The idea is that every time the arduino receives a home easy command from a remote or motion detector, it sends a message to the MPC-L.  Then, with some funky programming, the server will decide what events to fire off.</p>
<p>Unfortunately while I can reliably receive messages, and reliably send messages, I can&#8217;t do both &#8211; it just hangs.  I&#8217;m thinking it&#8217;s the nuelectronics ethernet shield, the software certainly isn&#8217;t very nice, so as I&#8217;ve only been playing with this for a few days, I&#8217;m splashing out on an official shield.  As a by-product of this, it is supported by <a href="http://knolleary.net/arduino-client-for-mqtt/">Nicholas O&#8217;Leary&#8217;s MQTT code</a>.  So, moving away from last night&#8217;s PHP start, I&#8217;ll write a small java program to receive these, process them, and fire off any events if need be.</p>
<p>The logic for the event firing will end up being more complicated, but initially, I want a bunch of events/desired actions, and each event has a sequence of signals required, each of which have to happen within a changable amount of time.  Only if a path through the sequence is achieved in the right time will the action be fired.</p>
<p>For example, a motion detector in the hall, and a door open/shut detector on my front door.  An event (i.e. turn off all lights) with a sequence of 1. Motion detector fired, 2. Door opened will detect when someone has just left the house, but obviously you only want it to happen if the time between 1 and 2 isn&#8217;t too much, otherwise the person could have walked upstairs and someone else came in through the front door!</p>
<p>I got this working in PHP, so will Java-it-up tonight.  Then will code the more complicated (and more useful) central heating logic (i.e. I want the house at 18 degrees at 7PM, it’s now 16 degrees, and takes 45mins to warm up to 18degrees, so turn on centreal heating at 6.15PM).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jellard.co.uk/2009/10/two-way-communication-via-nuelectronics-ethernet-shield/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AM Transmitters Arrived</title>
		<link>http://www.jellard.co.uk/2009/10/am-transmitters-arrived/</link>
		<comments>http://www.jellard.co.uk/2009/10/am-transmitters-arrived/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 19:47:29 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Home automation]]></category>
		<category><![CDATA[AM comms]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[home easy]]></category>
		<category><![CDATA[radio]]></category>

		<guid isPermaLink="false">http://www.jellard.co.uk/?p=24</guid>
		<description><![CDATA[The AM devices arrived, and thanks to some great blogs, I'm controlling home easy devices via a web page/arduino!]]></description>
			<content:encoded><![CDATA[<p>Farnell delivered two packages, ordered at 4PM, the next day via UPS &#8211; very impressive, must have costed more than the £8 it cost me (free P&amp;P).</p>
<p>So, with the help of the <a href="http://www.arduino.cc/playground/Code/HomeEasy">arduino playground</a> and <a href="http://code.google.com/p/homeeasyhacking/source/browse/#svn/trunk/Arduino">homeeasyhacking</a>, my arduino could receive and transmit home easy messages.</p>
<p><img style="float: right;" src="http://www.jellard.co.uk/wp-content/uploads/2009/10/IMG_4472-300x221.jpg" alt="Prototype" /></p>
<p>The photo shows my prototype of all parts of the project (ambient light &#8211; bit of paper coiled up, will be improved soon &#8211; and home easy controller).</p>
<p>Wire the data line of the receiver (any of the two work on my receiver) to pin 8, and the data line of the transmitter to pin 6, and connect power/ground/aerials accordingly (I haven&#8217;t used an aerial for the receiver yet).  A 23cm piece of wire works well as an aerial.  All my cables are strands from CAT5 &#8211; I&#8217;m a cheap-skate!</p>
<p>To use the following code, first download the HomeEasy package from  <a href="http://code.google.com/p/homeeasyhacking/source/browse/#svn/trunk/Arduino">homeeasyhacking</a>, add the .h and .cpp file (Sketch &gt; Add File), then copy and paste the following code.  Upload it, then start the serial monitor.</p>
<p>Press a button on a home easy remote and you should see the sender code &#8211; copy this, and replace &#8220;2427994&#8243; in the code below with yours.  Then restart the program, and whatever you programmed the first button on the first slider of the remote should turn off and on.  Make sure, unlike me, you haven&#8217;t plugged your computer into that device &#8211; I eventually got the code working only to kill my computer&#8217;s power, oops!</p>
<p>To control another device, change the setHEDevice(0) line.<br />
<span id="more-24"></span><br />
<code>#include "HomeEasy.h"<br />
HomeEasy homeEasy;<br />
int onOff = 0;<br />
bool bit2[26]={};<br />
bool bit3[4]={};<br />
int txPin = 6;<br />
</code><code><br />
void setup(){<br />
homeEasy = HomeEasy();<br />
homeEasy.registerAdvancedProtocolHandler(processReceivedRemote);<br />
homeEasy.init();<br />
pinMode(txPin, OUTPUT);<br />
Serial.begin(9600);<br />
setHEDevice(0);  //Set destination home easy device (first device, 0)<br />
itob(2427994,26); //Sender code from remote control - change this to match yours<br />
transmit(1);<br />
delay(10);<br />
transmit(1);<br />
delay(1000);<br />
transmit(0);<br />
delay(10);<br />
transmit(0);<br />
}</code></p>
<p><code>void loop(){<br />
//do nothing regularly<br />
}</code></p>
<p><code>void processReceivedRemote(unsigned long sender, unsigned int recipient, bool on, bool group) {<br />
Serial.print("Sender: ");<br />
Serial.print(sender);<br />
Serial.print("\nRecipient: ");<br />
Serial.print(recipient);<br />
Serial.print("\nOn: ");<br />
Serial.print(on);<br />
Serial.print("\nGroup: ");<br />
Serial.print(group);<br />
Serial.print("\n\n");<br />
}</code></p>
<p><code>void transmit(int blnOn) {<br />
int i;<br />
// Do the latch sequence..<br />
digitalWrite(txPin, HIGH);<br />
delayMicroseconds(275);     // bit of radio shouting before we start.<br />
digitalWrite(txPin, LOW);<br />
delayMicroseconds(9900);     // low for 9900 for latch 1<br />
digitalWrite(txPin, HIGH);   // high again<br />
delayMicroseconds(275);      // wait a moment 275<br />
digitalWrite(txPin, LOW);    // low again for 2675 - latch 2.<br />
delayMicroseconds(2675);<br />
// End on a high<br />
digitalWrite(txPin, HIGH);<br />
// Send HE Device Address<br />
for (i=0; i&lt;26;i++) {<br />
sendPair(bit2[i]);<br />
}<br />
// Send 26th bit - group 1/0<br />
sendPair(false);<br />
// Send 27th bit - on/off 1/0<br />
sendPair(blnOn);<br />
sendPair(bit3[0]); //MSB<br />
sendPair(bit3[1]);<br />
sendPair(bit3[2]);<br />
sendPair(bit3[3]); //LSB<br />
digitalWrite(txPin, HIGH);   // high again (shut up)<br />
delayMicroseconds(275);      // wait a moment<br />
digitalWrite(txPin, LOW);    // low again for 2675 - latch 2.<br />
}<br />
void sendPair(boolean b) {<br />
// Send the Manchester Encoded data 01 or 10, never 11 or 00<br />
if(b)  {<br />
sendBit(true);<br />
sendBit(false);<br />
}  else  {<br />
sendBit(false);<br />
sendBit(true);<br />
}<br />
}<br />
void sendBit(boolean b) {<br />
if (b) {<br />
digitalWrite(txPin, HIGH);<br />
delayMicroseconds(310);   //275 orinally, but tweaked.<br />
digitalWrite(txPin, LOW);<br />
delayMicroseconds(1340);  //1225 orinally, but tweaked.<br />
} else {<br />
digitalWrite(txPin, HIGH);<br />
delayMicroseconds(310);   //275 orinally, but tweaked.<br />
digitalWrite(txPin, LOW);<br />
delayMicroseconds(310);   //275 orinally, but tweaked.<br />
}<br />
}<br />
void itob(unsigned long integer, int length)<br />
{  //needs bit2[length]<br />
  // Convert long device code into binary (stores in global bit2 array.)<br />
 for (int i=0; i&lt;length; i++){<br />
   if ((integer / power2(length-1-i))==1){<br />
     integer-=power2(length-1-i);<br />
     bit2[i]=1;<br />
   }<br />
   else bit2[i]=0;<br />
 }<br />
}<br />
void setHEDevice(int integer) {<br />
int length = 4;<br />
  // Convert long device code into binary (stores in global sendDevice array.)<br />
  for (int i=0; i&lt;length; i++){<br />
    if ((integer / power2(length-1-i))==1){<br />
      integer-=power2(length-1-i);<br />
      hedevice[i]=1;<br />
    }<br />
    else hedevice[i]=0;<br />
  }<br />
}<br />
unsigned long power2(int power){    //gives 2 to the (power)<br />
 unsigned long integer=1;<br />
 for (int i=0; i&lt;power; i++){<br />
   integer*=2;<br />
 }<br />
 return integer;<br />
}<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jellard.co.uk/2009/10/am-transmitters-arrived/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
