Digivation Hack Central

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.

Leave a Comment :, , , , , , , , , , more...

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.

Leave a Comment : more...

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.

Leave a Comment :, , , , , more...


Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!