Tag: linux
Mapping special names to multiple USB serial adapters
by mark on Apr.17, 2010, under Solar, linux
The watts clever envi has a USB serial adapter which is a Prolific pl2303. When inserted it is assigned /dev/ttyUSB0 by udev, among a few other symlinks. I have now obtained an RS485 serial adapter on ebay for A$13.98 delivered which uses the exact same chip, which makes it indistiguishable from the envi’s port. What I needed was a way to guarantee uniqueness regardless of the enumeration order on boot or random hot plugin. Naturally, this is for the Aurora GCI which will be installed when they become available in May.
Researching udev a bit, I found /lib/udev/rules.d/60-persistent-serial.rules (mine is a debian system). This file shows how the standard symlinks are done. Since each USB port is unique, I should be able to use that uniqueness to map another symlink to the device.
Firstly plug in the device in the chosen USB port and issue
udevadm info --query=all --name=/dev/ttyUSB1
This shows a heap of stuff but mainly we are interested in
P: /devices/pci0000:00/0000:00:1a.0/usb2/2-1/2-1:1.0/ttyUSB1/tty/ttyUSB1
Create a file in /etc/udev/rules.d/70-persistent-serial.rules which contains
#see /lib/udev/rules.d/60-persistent-serial.rules
ACTION!=”add|change”, GOTO=”persistent_serial_end”
SUBSYSTEM!=”tty”, GOTO=”persistent_serial_end”
KERNEL!=”ttyUSB[0-9]*|ttyACM[0-9]*”, GOTO=”persistent_serial_end”IMPORT=”usb_id –export %p”
#IMPORT=”path_id %p”ENV{ID_SERIAL}==”", GOTO=”persistent_serial_end”
# usb nearest ethernet connector
ENV{DEVPATH}==”*usb2/2-2/2-2:1.0*”, SYMLINK+=”serial/by-name/envi”
#bottom front connector
ENV{DEVPATH}==”*usb7/7-1/7-1:1.0*”, SYMLINK+=”serial/by-name/rs485″
# usb below nearest ethernet connector
ENV{DEVPATH}==”*usb2/2-1/2-1:1.0*”, SYMLINK+=”serial/by-name/rs485″LABEL=”persistent_serial_end”
Replug and voila you get /dev/serial/by-name/rs485 which will always be the correct device.
Now I just have to run the wire to where the GCI will be installed.
Funny Characters for gcc/g++ errors and warnings
by mark on Apr.01, 2010, under linux
I have found that on some linux systems when you compile with gcc and g++ the error messages have funny characters like
test.c: In function â:
test.c:6: warning: unused variable â
This is due to the default locale being set to something other than the default.
in /etc/default/locale you will have a line like
LANG="en_AU.UTF-8"
add
LC_CTYPE=C
Restart the shell and compile again and the errors are now meaningful.
test.c: In function 'main':
test.c:6: warning: unused variable 'x'
Naturally you could set it in the local shell for the session, but then you would have to do it every time.
Graphing Power Usage
by mark on Feb.24, 2010, under Solar
Now that I had a mains power meter, I wanted to provide visibility of the house’s power utilization. So yhe next step was to collect power usage data from the Watts clever STC4004/currentcost envi.
I had a play with the linux web software that others had done before me.
I implemented a MQTT server and used a modified perl script to write to it first, as others had done in the UK, but these people were mostly IBM employees and thought it was a good idea to have a middle man feeding data to multiple consumers. It occurred to me that this may be a bit of an overkill. All the consumers also used rrdtool in some way to present the data.
Then I decided to get Danny Tsang’s energy@home project and after a few mods, got it going here.
Please don’t sit on it or I’ll have to password protect the page.
The benefits as I see them are:
- Nicer looking graph
- data is sent raw and the graphing is done locally
- possibility to feed new samples without uploading the whole graph each refresh period
- less load in the server
There are some things I still want to change, including experimenting with rrdtool, but displaying using jquery/flot which generates some very nice looking graphs.
I also need to daemonize the data acquisition bit, probably using daemon and some logging to wrap the datalogger.
There were a couple of omissions in the install details as I had to get some jgrid files to make it all work.
The temperature shows what it is at the server/inside as that is where the monitor it.
The transmitter is quite powerful and can blast over 10m from within full a metal enclosed fusebox. I suspect the 433MHz RF is coupling on the house wiring, otherwise it probably wouldn’t transmit very well. I originally extended the transmitter antenna, expecting it not to work very well, but found that it was unnecessary.
Current Cost Web Linux Software
by mark on Feb.02, 2010, under Solar
I want to access the currentcost on my linux web server.
I’ve found several links to what others have done.
http://www.plentyways.com/blog/2009/09/how-i-created-my-home-energy-monitor/
http://www.dannytsang.co.uk/index.php/recording-currentcost-data-viewing-it-on-the-web/
http://dalelane.co.uk/blog/?p=456
http://code.google.com/p/currentcost/
http://code.google.com/p/energyathome/
http://www.metphoto.net/metmaker/projects/
http://www.metphoto.net/PDF/Current_Cost_under_Linux.pdf
http://andypiper.wordpress.com/2008/12/11/current-cost-monitoring-from-an-iphone/
http://currentcost.wetpaint.com/
Ill be trying a few to see which one I go with and then start hacking. When the solar system is installed, I’ll fuse this data with the GCI data to show how the NET PFIT (Premium rate feed in tariff) is performing.