Who doesn’t have a multitude of devices, phones and other gadgets on their desks? I certainly have, and I finally had enough of all the chargers and wallwarts that each item seems to bring with them. With two iPhones almost constantly being charged, and a Nokia phone thrown in for good measure, I needed to have something flexible enough for those plus any future gadgets. So, I googled a bit, and found the IDAPT I3, and the beautiful, but ridiculously priced The Sanctuary. And then I started to think, how easy would it be to put a mains powered USB hub inside a box and have several USB charger leads coming out of the box, each charging a different device?
And the answer is, very easy :)

I started off with a 4 port powered USB hub, which I had lying in a drawer and plugged my iPhone charger leads into it, expecting them to instantly charge my two iPhones. But to my surpise, nothing happened… so another quick Google later, I came accross a blog entry of Carl Hutzler, which details why they won’t charge. All you have to do is sacrifice the hub and forego it’s PC functionality by cutting the D+/- lines and short them. A quick test shows they now finally charge themselves. Apparently it is better to stick 2x 100K Ohm resistors on the D+/- lines, which I will do at some point, but for now, this will do.

All I now had to do was find a suitable SWMBO friendly container, and as our furniture is all beech, the tea storage container I found for £1.99 at QD stores was perfect. I just needed to gut the compartiments out and put something on top of the plastic lid. At my local crafts store I found a small foam pad for 50p which was nice and soft. Unfortunately I got my measurements all wrong, so I messed up the black pad, but SWMBO came to the rescue by rummaging through my kids crafts drawers by digging up a piece of brown padding.

The final thing to do is then drill some holes at the locations convenient for your devices, and put it all together. Job done!

Back in November I bought (well, actually I signed up to a new deal with E.ON which included one) a Current Cost electricity monitor, and hooked it up to my server so I could gather the stats for Cacti. I do this by running a small perl script which looks as follows:
#!/usr/bin/perl
# /usr/local/bin/cc-classic.pl
use Device::SerialPort qw( :PARAM :STAT 0.07 );
$port = "/dev/currentcost";
$ob = Device::SerialPort->new($port)
or die "Can not open port $port\n";
$ob->baudrate(9600);
$ob->write_settings;
$ob->close;
open(SERIAL, "+>$port");
while ($line = <SERIAL>)
{
if ($line =~ m!<ch1><watts>0*(\d+)</watts></ch1>.*<tmpr>\s*(-*[\d.]+)</tmpr>!)
{
$watts = $1;
$temperature = $2;
print "watts:$watts temp:$temperature";
last;
}
}
close(SERIAL);
This would give me the two values I am interested in; watts and temperature (since it sits in the garage node 0 ;)) in Cacti’s format:
$ /usr/local/bin/cc-classic.pl
watts:761 temp:11.3
But today, I received my new unit, a Current Cost CC128. It’s main benefit is that it supports individual appliance monitors, which makes the output even more useful. So, armed with a draft copy of the CC128 XML output document, I prepared my script to read as follows:
#!/usr/bin/perl
# /usr/local/bin/cc-cc128.pl
use Device::SerialPort qw( :PARAM :STAT 0.07 );
$port = "/dev/currentcost";
$ob = Device::SerialPort->new($port)
or die "Can not open port $port\n";
$ob->baudrate(57600);
$ob->write_settings;
$ob->close;
open(SERIAL, "+>$port");
while ($line = <SERIAL>)
{
if ($line =~ m!<tmpr>\s*(-*[\d.]+)</tmpr>.*<ch1><watts>0*(\d+)</watts></ch1>!)
{
$watts = $2;
$temperature = $1;
print "watts:$watts temp:$temperature";
last;
}
}
close(SERIAL);
And guess what… that works just fine ;)
For those who read diff:
$ diff /usr/local/bin/cc-classic.pl /usr/local/bin/cc-cc128.pl
2c2
< # /usr/local/bin/cc-classic.pl
---
> # /usr/local/bin/cc-cc128.pl
10c10
< $ob->baudrate(9600);
---
> $ob->baudrate(57600);
17c17
< if ($line =~ m!<ch1><watts>0*(\d+)</watts></ch1>.*<tmpr>\s*(-*[\d.]+)</tmpr>!)
---
> if ($line =~ m!<tmpr>\s*(-*[\d.]+)</tmpr>.*<ch1><watts>0*(\d+)</watts></ch1>!)
19,20c19,20
< $watts = $1;
< $temperature = $2;
---
> $watts = $2;
> $temperature = $1;
Please note, the above only works with 1 sensor (the main transmitter), so it is likely to change in the future. For now it suits my need.
I’ve been using a 1 wire network for quite some time now, but when I deleted a directory to much on my server, I lost a lot of the stats that I had gathered. A couple of weeks ago I finally got my behind in gear again and rebuild my network, this time making sure it all gets backed up ;)
One day I’ll write something about how it’s all been done, but for now you’ll have to suffice with some pretty graphs.
Here’s the daily graph for the temperatures in our bedrooms for the past 24 hours:

And recently I added a Current Cost meter to my network, which gives me the shocking facts about my electricity usage for the past 24 hours:

The above graphs are updated hourly, and I’ve got other graphs too, extending the period of graphing. You can find them here for the time being.
Update 25.1.2009
And now you’re able to follow the stats on twitter: http://twitter.com/awoogadotnl