*******************************************************************************
LEDnotify - USB LED alerter - V2.0.1
*******************************************************************************
Released under the GNU GPL (General Public License)
(c) Copyright 2013 Ian Dawson
Content:
About LEDnotify
Contact Me
Known Problems
More changes soon
Release notes
More about LEDnotify
Licensing
Installation notes
Pre-requisites
Installing LEDnotify code
Getting the LED unit working
Types of unit
Dream-Cheeky USB WebMail-notifier
Blink1 Smart LEDs
AVR - Objective Development USB LED
Useful linux commands
Useful references
Permission problems
Device persistance problems
Customisation notes
dbus notes
configuration files
Starting LEDnotify
Usage notes
Security notes
Cryptography Notice
References
Hardware
Software
Thank you...
【ツ】
*******************************************************************************
About LEDnotify
*******************************************************************************
LEDnotify lights-up a USB attached LED lamp unit to alert on events - to keep
you informed, independently of your monitor being turned on.
I started with a Dream-Cheeky Webmail notifier - and now have two (to display
separate sets of alerts...).
I have also purchased a Blink1 type device - LEDnotify can now use that too
- from my initial playing : Its very bright, and adds more options to try.
LEDnotify features are intended to be flexible, selectable, extendible
and configurable. See the notes below on installation, customisation, etc...
LEDnotify includes modules to check these for new mail/messages:
* Gmail
* Twitter (under development)
LEDnotify monitors for events - these maybe issues by applications such as :
* Thunderbird email client (employing a dbus message plug-in)
* Pidgin - for Instant Messages and Buddy activity
* anything that can issue dbus messages
* anything that can run the dbus-send command
* see: www.freedesktop.org/wiki/Software/DbusProjects/
LEDnotify will cycle around any "outstanding" alerts - if these have different
LED colour assigned, then the LED unit will display them each in turn.
Alerts may optionally also be shown in any of these ways:
* Ubuntu Indicator Applet icon - this sits on the top bar in Ubuntu, and
appears as the LEDnotify coloured envelope icon - when an alert occurs,
this is high-lit with a while background. See notes on Ubuntu version,
and menu usage below.
The Indicator Applet menu also provides other options for managing
LEDnotify - click on the icon to see the menu.
* Notification messages - Ubuntu displays a message "bubble" top right, that
fades away after a moment...
* Pop-up messages in a small window with an "OK" button to dismiss them.
These use bash & zenity scripts (LEDnotify_*.sh)
* Play a sound file.
Gmail checking :
- IMAP SSL is employed for secure access to Gmail.
- Encryption may be used by LEDnotify when it (optionally) saves your id &
password. This allows LEDnotify to restart the polling if a problem occurs,
without you needing to re-enter your password. It will always require
the password if LEDnotify is restarted - there are options on how this is done.
- The polling task checkpoints which emails it has seen, so will pick up from
where it left off.
LEDnotify keeps track of any long running processes it starts (such as the
polling processes for Gmail and Twitter, and will restart them if they
stop unexpectedly.
Contact Me
===========
For questions, feedback, suggestions, criticism and everything else, feel free
to contact me:
author: Ian Dawson
gmail: irdroid3@gmail.com
website http://sourceforge.net/projects/lednotify/
http://sourceforge.net/p/lednotify/wiki/Home/
blog: http://irdroid3.wordpress.com/about/
Enjoy...
Ian.
Release notes
==============
* See the file: A_Release-notes.txt
Known Problems
===============
* Not guaranteed bug free...
* Not all features you see in the conf file are fully working yet - I try and
mark those as "TBA" - but I do keep adding more TBAs...
* Any reference to "???" is like TBA = room for future development...
* Pidgin IM messages are triggering the following warning message - I think this
might be to do with LEDnotify listening to dbus messages from Pidgin, but I
have yet to find a fix - AND it does not appear to cause a problem... ==>
(Pidgin:31827): LIBDBUSMENU-GLIB-WARNING **: Trying to remove a child that doesn't believe we're it's parent.
* Please check if calendar events are triggered at the correct time - see notes
on timezones/daylight-saving (note#001)
* See notes on USB bus/dev identifiers changing if a device is unplugged (note#02)
- The "Assign Unit" GUI needs "*" adding (TBA)
More changes soon
==================
* LEDnotify is under active development - you will see "TBA" in this document
and in the config files - these are areas yet to be fully developed or added.
* Please feedback to me to have an influence on what gets worked on and how...
More about LEDnotify
=====================
Most of the code is in Python, with some optional scripts, and a program to
drive the LED unit.
This project was started off of from Dennis Schulze's dBird notifier project
- see the "References" section below, but keeps growing with my experience...
LEDnotify modifies the set-led program (via the dBird project, from Objective
Development) to drive the USB LED unit. This has been modified to drive
a Dream-Cheeky WebMail-notifier (see References).
The changes were made for the different "Vendor-ID" & "Product-ID" the
Dream-Cheeky unit has from the Objective Development AVR unit.
LEDnotify has an option for customising which program is used to drive this
sort of unit.
Where used, the Thunderbird and Pidgin applications need to be configured
for your email and IM accounts.
Thunderbird maybe launched by LEDnotify.
*******************************************************************************
Licensing
*******************************************************************************
Released under the GNU GPL (General Public License)
(c) Copyright 2013 Ian Dawson
See the file included with LEDnotify : gpl.txt
This work is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE.
I make no apologies for using code from other projects - they are all covered
by Public Licensing. But I would like to acknowledge their input - please
see "References" section.
*******************************************************************************
Installation notes
*******************************************************************************
Pre-requisites
==============
- LEDnotify needs these packages -
??? NEEDS CHECKING AND UPDATING... coming soon
??? How many come with Ubuntu OR need adding???
Notes = #1 pre-installed with Ubuntu (12.04)
#2 seperate package needs to be installed
Python (2.7.3)
python-time
python-notify
python-dbus
pyGTK,
# python-twitter - removed, as it lacks the oauth_dance module
??? python-simpleJson - ??? this is not needed !!!
python-tk - for password prompting (aka tkinter)
python-pmw - Python MegaWidgets - for some GUI elements
python-imaging-tk - for GUI png images
??? - liburl, liburl2
python-oauth or python-oauth2 for logging onto twitter
- not used if not needed...
python-usb (aka pyusb)
python-udev (aka pyudev) - maybe - testing with this... (???)
threading - used for the alerts GUI (#1)
dbus-send command must be installed, IE: /usr/bin/dbus-send
- does this come with Ubuntu ???
python-psutil - help LEDnotify cleanup all other processes it started
- If a version => 0.5.0 is used then LEDnotify will use it to kill
all processes, otherwise it will try and directly kill the
processes it knows about.
* If twitter polling is required:
ubuntu : install "python-setuptools" - needed by pip
ubuntu : install "python-pip" to install twitter
sudo pip install twitter
ubuntu : install "python-request"
* If pidgin alerts are required:
Install : html2text
- this is shipped with LEDnotify
- it is used to format some pidgin messages
- see reference to Aaron Swartz's html2text tool below
* For email via Thunderbird, the Thunderbird dbus extensions/plug-in is
needed see:
http://www.oelerich.org/dbus-signals-from-thunderbird-new-extension/
https://github.com/janoliver/thunderbird-dbus-sender
Copyright (c) 2012 Paul Neulinger, Jan Oliver Oelerich
See the README.md file for installation instructions.
These are included in LEDnotify in the Thunderbird-dBus folder.
* If Google Calendar (gcal) polling is required:
Ref: https://developers.google.com/gdata/articles/python_client_lib
ElementTree is required by the Gdata code.
If you are using Python version 2.5 or higher, you won't need to install
ElementTree since it comes with the Python package.
- See: http://effbot.org/zone/element-index.htm
Installing the gdata-python-client:
- See the google webpage refered to above.
- I used the gdata-2.0.18 package and ran the command (in that dir):
$ sudo python setup.py install
Python V2 needs the pytz package to aid with timezones (I think V3
might fix this?!) - on Ubuntu, install :
- python-tz : Python version of the Olson timezone database
- LEDnotify was developed and tested with:
Ubuntu 12.04 - untested on other levels, or Windows.
It looks like Indicator Applets do not work well on versions prior
to 11.10 ! - I have seen a rumor that this is broken after 12.04
Python 2.7.3
psutil-0.7.1 : (Optional)
it starts when it is shutdown.
http://code.google.com/p/psutil/
http://psutil.googlecode.com/hg/INSTALL
cd xxx; sudo python setup.py install
Prereq: install python-dev package
- this seems to suggest auto updates will not be allowed
for lots of other packages though???
prereq = http://code.google.com/p/psutil/issues/detail?id=155
- LEDnotify.conf located through:
the path in the $XDG_CONFIG_HOME environment variable
the users $HOME directory, and then /.config/ within that
or in LEDnotify's current working directory.
- LEDnotify writes some files to /tmp :
LEDnotify.gpw : your Gmail id & password encrypted (see notes)
LEDnotify.gck : A checkpoint file of the last msgid LEDnotify saw - to try
and avoid missing any... especially over restarts
LEDnotify.uck : remembers GUI updates to LED unit config (USB setup)
Getting the USB unit working
============================
Types of unit
-------------
This is a summary list of the hardware that LEDnotify was written for.
The LEDnotify.conf file holds the configuration that defines how these are used.
See the more detailed section on each of these below.
See the References section at the bottom of this document on these.
See note#02 on USB Device persistance problems.
* AVR - Objective Development USB LED
I have not seen one of these, but it looks like the set-led program I took
from Dennis Schulze's dBird notifier project should work ok.
The set-led program for driving the Dream unit was based on this one - the
commands to drive this are fairly simple, and translate well to the LEDnotify
alerts in the conf file.
This is a USB device with Vendor-Id=5824, & Product-Id=1500.
* Blink1 Smart LEDs
My second LED unit. This has more function than the Dream unit, and seems
to be brighter (without a case admittedly).
Blink's blink1raw program drives this unit well, and has a richer command
set than the Dream unit.
LEDnotify has two definitions for this unit: "ThingM" will use the simple
"r g b" alert definitions that the Dream unit uses, and the "BlinkM"
definition employs the native blink1raw command set in the alert definitions.
This is a USB device with Vendor-Id=27b8, & Product-Id=01ed.
* Dream-Cheeky USB WebMail-notifier
My first LED unit... A neat little USB attached box.
This is a USB device with Vendor-Id=1d34, & Product-Id=0004.
* More ?
I am more than happy to look at other devices - contact me and tell me more...
THIS IS STILL A MYSTERY TO ME - My Dream units (2x) both work fine, but I had
to unplug replug them in the first time, to get the scripts to update the
permissions... Any feedback on this is welcome...
I have found this - http://ubuntuforums.org/showthread.php?t=1610142
It said to power off (TOTALLY!), wait 5 mins, then re-boot... Well - it did
work for me - a quick reboot to apply Ubuntu maintainance did not show my
Dream Cheeky units in the lsusb listing - even running the udevadm trigger
commands did not get them - but unplugging and replugging the USBs did work...
A power down; a coffee; and a reboot - and it all came up fine...
Nasty USB... !?!?!?!?!?!?!?
Dream-Cheeky USB WebMail-notifier
---------------------------------
for the following, see the files packages with LEDnotify in the Dream-USB-LED directory:
Sample_99-usblamp.rules
symlink-usblamp.sh
rc.local
By default with Linux - when the lamp gets plugged in, it is only usable for the root user.
To fix this, a udev rule is needed:
Add the following two lines (note the SUBSYSTEM line is all one
line) to the file : /etc/udev/rules.d/99-usblamp.rules :
# Dream-Cheeky USB Webmail notifier:
SUBSYSTEM=="usb", ATTRS{idVendor}=="1d34", ATTRS{idProduct}=="0004", MODE="0666", RUN+="/etc/udev/symlink-usblamp.sh %k" , SYMLINK+="LEDnotify-%k"
This will run a shell script whenever an usb lamp is plugged in.
Now create that shell script (/etc/udev/symlink-usblamp.sh) and make it executable:
(copy the file: ./LEDnotify/DREAM-USB-LED/symlink-usblamp.sh)
NOTE: When booting the computer with the lamp attached, the rule does not get called.
BUT: You may work around this problem by putting the following line into your
/etc/rc.local file:
/sbin/udevadm trigger --action=change
If you know how to fix this properly without messing with rc.local, please tell
me and Christian Weiske - see references on udev).
Blink1 Smart LEDs
-----------------
See the Blink-USB-LED folder packaged with LEDnotify - this contains the blink1raw
program that LEDnotify uses to drive the USB device.
Add the following two lines (note the SUBSYSTEM line is all one
line) to the file : /etc/udev/rules.d/99-usblamp.rules :
# BlinkM/ThingM USB LED unit:
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="27b8", ATTRS{idProduct}=="01ed", MODE="0666", RUN+="/etc/udev/symlink-usbblink.sh %k", SYMLINK+="LEDnotify-%k"
Now create that shell script (/etc/udev/symlink-usbblink.sh) and make it executable:
(copy the file: ./LEDnotify/DREAM-USB-LED/symlink-usbblink.sh)
NOTE: When booting the computer with the lamp attached, the rule does not get called.
BUT: You may work around this problem by putting the following line into your
/etc/rc.local file:
sudo /sbin/udevadm trigger --action=change
If you know how to fix this properly without messing with rc.local, please tell
me and Christian Weiske - see references on udev).
AVR - Objective Development USB LED
-----------------------------------
I have not seen one of these, but it should work like a Dream (pun intended).
As supplied, LEDnotify's set-led program is for the Dream unit - you will need
to copy the set-led program from the AVR-USB-LED sub-directory into the LEDnoify
directory OR you will have to use the unit definition in the LEDnotify.conf
file to specify the vid&pid - EG:
# type,bus,dev,vid#,pid# - see lsusb
@mail = AVR,00?,00?,5824,1500
This should also support multiple AVR units,or a mix of Dream and AVR units !?!?!
Useful linux commands
---------------------
lsusb
- List attached USB devices
EG: Bus 001 Device 005: ID 1d34:0004 Dream Cheeky Dream Cheeky Webmail Notifier
Bus 001 Device 006: ID 1d34:0004 Dream Cheeky Dream Cheeky Webmail Notifier
- also see about the usb-ids file below, to update the device descriptions
- try:
lsusb -v | grep -E '\<(Bus|iProduct|bDeviceClass|bDeviceProtocol)' 2>/dev/null
the udev rules setup aliases, which help to see that they ran, look for :
ls -al /dev/LEDnotify*
the script triggered by the udev rule for the Dream-Cheeky creates log files in /tmp :
ls -al /tmp/usblamp-*.log
use the find command to look for Dream-Cheeky units:
- find /sys -name green -ls
EG: 23641 0 -rw-r--r-- 1 root root 4096 Sep 10 16:03 /sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.5/1-1.5:1.0/green
20777 0 -rw-rw-rw- 1 root root 4096 Sep 9 08:18 /sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/green
list the usb devices under /dev :
ls -al /dev/bus/usb/001/
EG: crw-rw-rw- 1 root root 189, 4 Sep 10 16:00 005
crw-rw-r-- 1 root root 189, 5 Sep 10 15:38 006
Useful references
-----------------
* The list of USB VID/PIDs is maintained at : http://www.linux-usb.org/usb-ids.html
* Use the command "update-usbids" to download the current version onto your system.
* Linux uses this file to detail the lsusb output etc. See: /var/lib/usbutils/usb.ids
* The latest version of this file can be found at : http://www.linux-usb.org/usb.ids
* A vesrion of this file can be found in the LEDnotify package in the sub-directory:
./Dream-USB-LED/usb.ids
Permission problems
-------------------
An example of what you might see:
run the command:
./set-led set 100 0 0
The output will look like this:
libusb:error [op_open] libusb couldn't open USB device /dev/bus/usb/001/005: Permission denied.
libusb:error [op_open] libusb requires write access to USB device nodes.
Could not open USB device.
RC=fffffffd
RC=LIBUSB_ERROR_ACCESS
Segmentation fault (core dumped)
Device persistance problems (note#02)
---------------------------
Some USB LED units (EG: the Dream-Cheeky) are identified by their USB Bus/Dev
numbers. When USB devices are unplugged/replugged, or when the PC is restarted,
the Dev identifiers (and even the Bus id) may change. This is more likely if
the unit is plugged into a USB hub that may be switched off (EG when integrated
into a monitor for example).
I suggest one of these unit is configured using the generic ("*") id, such that
it is then driven regarless of the Bus/Dev.
TBA : I have yet to add code to LEDnotify to better cope with this...
Devices that are identified by their /dev/hidraw* path (EG the Blink units)
appear to persist across a power off - but obviously will not work whilst
powered off.
Installing LEDnotify code
=========================
- create a folder, EG
mkdir /home/yourname/LEDnotify
- copy the LEDnotify files in that directory
- edit the configuration files (see Customisation notes below):
gedit ./LEDnotify.conf
(don't forget to save your changes before closing gedit)
gedit ./LEDnotify_gmail_poll.conf
(don't forget to save your changes before closing gedit)
- check permissions ???
- Start LEDnotify - see "Starting LEDnotify" below.
- Checkout the sample scripts: test-mail.sh, test1.sh, and test2.sh for
triggering alerts - try these from the shell command line:
cd <location-of-LEDnotify-code>
./test-mail.sh # Gmail alerts
# - Note: this sets the LED alerts, but does not
# trigger the sounds, as that is done by the
# poller task.
./test1.sh # LEDnotify alert _test1
./test2.sh # LEDnotify alert _test2
*******************************************************************************
Customisation notes
*******************************************************************************
dbus notes
==========
The dbus names and paths are set by LEDnotify by default, but may be overridden
in the conf files - see the "dbus" and "dpath" attributes below.
LEDnotify listens to "net.sourceforge.lednotify" on the dbus for alerts specific
to it - either alerts raised externally to it (see [LEDlisten] alerts), or by
the various plugins (EG the Gmail poller).
It also listens to other applications, where configured to do so, EG: Pidgin IM
client and Thunderbird email client.
The LEDnotify alert signals detail depends on its use. The [LEDlisten] alerts
only require one argument that relates to the alert name in the LEDnotify
conf file. Another specific alert flags errors to the user, and this passes
the argument "*error*" to LEDnotify
configuration files
===================
These configuration files are read by LEDnotify at startup:
- LEDnotify.conf - the main configuration file
- LEDnotify_poll_gmail.conf - for more gmail settings
See the sections below for more on these.
- LEDnotify tries to check critical options in the conf file, but you need to
check them...
See the sample LEDnotify.conf file supplied - and the comments within...
Also see the notes on the conf file options below,
(under "internal data structures")
- Thunderbird notifier Add-on:
LEDnotify has been tested with this plug-in:
http://www.oelerich.org/dbus-signals-from-thunderbird-new-extension/
https://github.com/janoliver/thunderbird-dbus-sender
Note: other plugins may use differing dbus options (EG the signal name),
so you may need to change these in the conf file.
- USB LED notifier unit:
LEDnotify has been developed with this unit:
Dream-Cheeky WebMail-notifier (VID=1d34/PID=0004)
http://www.dreamcheeky.com/webmail-notifier
see: ./LEDnotify/Dream-USB-LED/set-led program, and the notes on
this in the [set-led] configuration section below.
Other units I know of:
Objective Development (VID=5824/PID=150x)
see: ./LEDnotify/AVR-USB-LED/set-led
- References to "current working directory" mean the path to the currently
running LEDnotify_Engine code.
LEDnotify configuration file - LEDnotify.conf
=============================================
* See the supplied LEDnotify.conf file for more notes...
* LEDnotify.conf configuration file located by -
$XDG_CONFIG_HOME environment variable
or in ~/.config/ (the userd $HOME directory, and then /.config)
or in current working dir
* The following are allowed in the path definition for icon & sound files:
a prefix of "~" will employ the path in $HOME
a prefix of "." will employ the path to the current working directory.
* The Ubuntu Application Applet icon and menu are only enabled if at least
one section defines "indicate = True".
Also read about the [menulabels] section of the config file.
* The LEDnotify.conf configuration file is parsed by the Python configparser
library. The file consists of sections, each started by a [section] header
and followed by "<attribute-name> = <attribute-value>" settings.
Some sections are mandatory - IE [LEDnotify] has various setting at the top
of every config file.
See the list of section headings below.
Some section names maybe suffixed to allow multiple of that type to be used -
these are denoted below with "(with optional suffix)" below.
Suffixes must start with a hyphen ("-"), EG gmail-test
[LEDnotify]
- Settings for the main LEDnotify program.
- Attributes for this section only :
* plugins : Lists the sections to enable. Section names here are then
defined below with their names enclosed between "[" and "]".
* timer : The cycle time (heartbeat) in seconds for the LED unit to
cycle alerts.
Note that an internal "idle timer" is set to save cpu/power
when there are no alerts, or just a single alert outstanding
- this is set as half smallest other timer = value (or
10*heartbeat if bigger).
* logging : Currently this automatically logs to stdout and a log file.
* diag : The message level to stdout and for popup messages to the user.
Recommend this is set to "Warning" or "Alert" for more detail.
Options = debug | info | alert | warning | error | critical
* logdiag : (optional - defaults to diag) - the message level written to
the log file on disk.
* poperr : sets the alert level for popup messages - defaults to Warning
Recommend "Warning" or "Alert"
* logviewer : program called when the "View Log" menu item is used.
* logsize : How large the log file can grow to.
Currently LEDnotify will create up to 3 more generations of
log file if this size if exceeded
- suffiex with ".1"/".2"/".3".
* log : log file path and name.
* AppTitle : Indicator Applet Title (blank for just icon)
* MenuTitle : Indicator Applet menu-title line (optional)
* icon-active : Normal Indicator Applet icon.
* icon-alert : Indicator Applet icon when an alert is outstanding.
* syspop : is for a Popup window for for the duration, allowing
LEDnotify shutdown
This nolonger has code to reset the LED units on shutdown (TBA)
* authtype : How LEDnotify manages passwords for other plugins -
master - LEDnotify asks the user for a password at startup
and uses that to encrypt passwords for all
plugsins that use a password.
Plugin passwords are saved across sessions, and only
the master password is prompted for at startup.
session - LEDnotify creates a random password each time it
starts up, and uses that to encrypt plugin passwords.
All passwords will be requested when LEDnotify
starts. (This was the default prior to V2.0.0)
* see the id/pw options in the config files for the plugin
EG LEDnotify_poll_gmail.conf
[set-led]
- Settings for the Dream-Cheeky USB Webmail Notifier LED unit
* default : the default alert colour (R G B) if an alert is missing.
* units : a list of unit names that may be refered to in the alerts in
later sections. EH "units = @mail,@diary"
If no units are listed then a default of "-DFLT-" is set;
this is also set as the default value for any section that
does not specify a unit name for it's alerts.
Each unit is then described here with the following keyword/attrubutes:
* @xxx : these names must start with an "at" ("@") character, and
each unit has these attributes:
<type>,<bbb>,<ddd>
where:
unittype is LEDnotify type identify - see below
bbb is the Bus number
ddd is the Device number of the unit.
The output of the lsusb command gives these values, EG:
Bus# Device# VID# PID#
=== === ==== ====
Bus 001 Device 014: ID 1d34:0004 Dream Cheeky Dream Cheeky Webmail Notifier
Bus 001 Device 015: ID 1d34:0004 Dream Cheeky Dream Cheeky Webmail Notifier
A "generic" address may be specified using an asterisk ("*") for the
bus and dev addresses. LEDnotify will then drive the first unit
it finds of each type. This relies on the Dream and Blink drivers
providing that function. Also see note#02 on device persistance.
TBA : The "Assign Unit" GUI needs "*" adding...
Note: LEDnoify checks the bus/dev settings at startup and prompts the
user if the USB settings differ. LEDnotify will also remember the new
user provided settings between sessions - overriding the conf values.
(Delete the /tmp/LEDnotify.uck file to reset that).
* -unittype : these must start with a hyphen ("-") character,
and define the USB units Vendor-Id,Product-Id values
(see the lsusb command), and the program name LEDnotify used
to drive the unit.
The unittypes supported by LEDnotify (so far), are:
-Dream - Dream-Cheeky USB device
-BlinkM - use full Blink commands
-ThingM - translate "r g b" alerts (ala Dream) for a Blink LED
-AVR - OBJECTIVE DEVELOPMENT USB device
Notes on values in the alert-name perms in the following sections -
* The alert values depend on the type of alert unit being used.
-Dream,-ThingM,-AVR : all use the alert format:
<r> <g> <b>
* Where <r> is the red light value, <g> for green, and <b>
for blue. Each being a number in the range 0 - 255.
-BlinkM - use full Blink commands see the LEDnotify subdirectory -
Blink-USB-LED/README.txt file. LEDnotify passes the alert
value as the end "arg" to the blink1raw command -
=R,G,B,t -- fade to color
:R,G,B -- set color (now)
@step:R,G,B,t -- set step
+step -- start playing at step
-[step] -- stop playing at step (default zero)
% -- clear all steps
_ -- turn off
_t -- fade off
[xxx]
- Settings that apply to most other sections :
* start : Used to monitor for tasks that are required by the relevant section
for alerting to work.
EG: pidgin, thunderbird, and LEDnotify polling tasks.
Each of these will be shown in the Tools submenu too.
* stop : True/False = stop this app when you stop LEDnotify alerting
on it. Usually only for apps like pidgin or thunderbird, where
you might want it started, but only ever stopped manually.
* popup : Issue popup dialog box on an alert = true/false
* popclient : Stat a program when an alert is issued = true/false
* launch : The program to start when an alert is issued.
* notify : Use Ubuntu Notification "bubbles" on alerts = true/false
* indicate : Use the Ubuntu Indicator Applet menu to show alerts = true/false
* escalate : Only allow one alert active for this section at a time. An alert
will turn override any alerts lower in the list of alerts for this
section = true/false
So the LED will not flash between two or more alerts for the same
section - only the highest (first in the list) will be illuminated.
But - all alerts are still shown by the Ubuntu Indicator Applet.
This is intended to save on power, but more to be less annoying...
If there are multiple alerts for a section and one is reset via the
Indicator Applet menu, then LEDnotify will enable the next alert down,
and the LED will be illuminated accordingly.
* icon : Path to the icon file to use : EG: ./icons/gmail.png
see note on paths above.
* retries : The number of times LEDnotify will restart a polling task
(EG for Gmail) if it has crashed unexpectedly - after that
the task is disabled, pending the user restarting it from
the Indicator Applet Tools menu (or LEDnotify being stopped
and started).
* dbus : Needed for some alert types that listen to the dbus
These are usually set by default by LEDnotify, EG:
LEDnotify: dbus = net.sourceforge.lednotify
pidgin: dbus = im.pidgin.purple.PurpleInterface
thunderbird [email]: dbus = org.mozilla.thunderbird.DBus
So these are optional, unless you need to override one, or use
one LEDnotify does not have (yet -> please feedback to me).
* dpath : Needed for some alert types that listen to the dbus
These are usually set by default by LEDnotify, EG:
LEDnotify: dpath = /net/sourceforge/lednotify
* timer : How often to check; in seconds (600 = 10 minutes)
* sound : If specified, the sound file will be played for an alert.
see note on paths above.
* myalerts : The alert names for this section EG : _email,_label,_other
The "_" prefix is just a naming convention to help destinguish
the alert names from the other settings, and prevent conflicts.
* menutags : These refer to attribute names in the [menulabels] section
EG: 004 could refer to : "004 = gmail:messages" for [gmail] "_email" alerts
* _xxx : Alert-name for each alert in the "myalerts" list above, defines
the LED colours to use.
* See the notes on alert values in the [set-led] section above.
The "_" prefix is just a naming convention to help destinguish
the alert names from the other settings, and prevent conflicts.
EG: "_email : 30 0 0" = The mix of Red:30 Green:0 Blue:0
* function : for
[menulabels]
- defines the order and menu item text for each entry - this is linked to
the relevant alert with the relevant sections menutags attribute.
- Note, sections maybe added here, even if they are not run at start-up
due to the [LEDnotify] sections plugin attrubute.
[messages]
- TBA for national language support
[pidgin]
- Settings for alerting from the pidgin IM client.
- See pidgin below in the usage section
[LEDlisten]
- Alerts sent to LEDnotify via the dbus, EG using the "dbus-send" command.
The alert names are passed in the dbus message and mapped directly to
the alert-name ("_xxx") in this section.
The following python code fragment should achieve this:
LEDNIFACE = 'net.sourceforge.lednotify.engine'
LEDNPATH = '/net/sourceforge/lednotify/engine'
x = call(["/usr/bin/dbus-send","--session",\
"--dest=%s"%LEDNIFACE,"--type=method_call",LEDNPATH,\
LEDNIFACE+".LEDlisten","string:\"_alert-name\""])
- Where "_alert-name" is the alert label in LEDnotify.conf file.
[gmail] (with optional suffix)
- Gmail/Googlemail alerting settings
- Also see notes on the LEDnotify_poll_gmail.conf file below.
[gcal] (with optional suffix)
- Google Calendar alerting settings
- Also see notes on the LEDnotify_poll_gcal.conf file below.
- Also see the supplied file : ../Dream-USB-LED/Calendar_mask.odt for
converting a Dream Cheeky Webmail notifier into a Calendar notifier.
[email]
- Alerts from Thunderbird email client - this required a plugin to be
added to Thunderbird (see installation notes above).
- Other email clients might be configured - more details later : TBA
- A more generic imap/email poller being written : TBA
[twitter] (with optional suffix : TBA)
- Twitter alerting settings - yet to be fully implemented (TBA)
[external] (with optional suffix : TBA)
- Settings for custom plugins.
- TBA - untested
- External tasks may be started by LEDnotify, and other dbus messages may
be configured.
- External tasks may alert LEDnotify in either of two ways, through
dbus messages:
1) LEDnotify listens for alerts that trigger the LED to be illuminated.
The following python code fragment should achieve this:
LEDNIFACE = 'net.sourceforge.lednotify.engine'
LEDNPATH = '/net/sourceforge/lednotify/engine'
x = call(["/usr/bin/dbus-send","--session",\
"--dest=%s"%LEDNIFACE,"--type=method_call",LEDNPATH,\
LEDNIFACE+".Manager","string:\"_alert-name\""])
- Where:
* "_alert-name" is the alert label in LEDnotify.conf file. EG, see
"_test1" in the supplied conf file.
* Manager is the name of this config section, EG [Tester] Manager = Tester
The Linux dbus-send command could be run from other programs, shell scripts etc:
dbus-send --session --type=signal --dest=net.sourceforge.lednotify /net/sourceforge/lednotify net.sourceforge.lednotify string:"_alert-name"
??? test this ???
2) LEDnotify listens for Error alerts -
Here is a python code fragment for alerting LEDnotify to an error:
LEDNIFACE = 'net.sourceforge.lednotify.engine'
LEDNPATH = '/net/sourceforge/lednotify/engine'
x = call(["/usr/bin/dbus-send","--session",\
"--dest=%s"%LEDNIFACE,"--type=method_call",LEDNPATH,\
LEDNIFACE+".Error","string:\"xxxxx\""])
The xxxxx will be displayed in an error message by LEDnotify.
The enclosing quotes are "escaped" with "\", and are required.
If the message string is empty (IE ,"string:\"\""]) then LEDnotify
will not display an error. The point of this is to have LEDnotify
run the heartbeat routine and check for any missing tasks, etc.
Also see the LEDnotify "_error" alert - that is used to indicate LEDnotify
falures.
LEDnotify Gmail configuration file - LEDnotify_poll_gmail.conf
==============================================================
Googlemail/Gmail may be monitored by the LEDnotify_poll_gmail task.
See the [gmail] section if the LEDnotify.conf file.
* LEDnotify requires IMAP SSL to access Gmail. You may need to enable this
on your Gmail account, See:
https://support.google.com/mail/troubleshooter/1668960?hl=en&rd=2
* There are various references to "label" and "box" - these are the same thing.
Google label emails, but they can be then treated as folders or boxes...
* LEDnotify only "peeks" at mail, so should not effect the "read" flags on Gmail.
* Gmail alerts are further configurable with the LEDnotify_poll_gmail.conf
file. This file is divided into sections (denoted by a label between a
"[" and "]" symbols.
The first label of [LEDnotify] is for the general LEDnotify settings to poll
Gmail:
id - userid
pw - password option:
<file> : uses the pwfile option below.
* The id parm above is OPTIONAL (see pwfile)
<prompt> : a popup panel is used to prompt for the password
* The id parm above is REQUIRED.
<module> : uses the pwmodule option below.
* The id parm above is OPTIONAL (see pwmodule)
- anything else is treaded as the password string to use...
pwfile - a file containing either the userid and password or just the
password (in which case the id parm above is REQUIRED).
(untested! TBA)
pwmodule - a module that returns the userid and password or just the
password (in which case the id parm above is REQUIRED).
(untested! TBA)
timer - poll interval in seconds
encrypt - { NONE | AES | ARC2 | Blowfish | CAST | DES | DES3 | IDEA | RC5 }
Default = NONE
Also see "Cryptography Notice" below.
keeppass - if keeppass = true, then LEDnotify will save a "<prompt>" password
in a temp file - this will be encrypted using the "encrypt" type
encryption.
NOTE: if encrypt=NONE and keeppass=true, the password is kept in
plain un-encrypted text in the temp file on disk.
Also see the LEDnotify authtype setting and how it could effect this.
dbus used to issue dbus messages - LEDnotify listens for: "com.gmail.DBus"
dpath " " " " " " " " "/com/gmail/DBus"
url Web address for Gmail SSL logon - imap.gmail.com
diag The message level to stdout and for popup messages to the user
Recommend this is set to "Warning" or "Alert" for more detail.
logdiag (optional - defaults to diag) - the message level written to the log
file on disk.
maxerr
The rest of the section [labels] match Gmail "labels"
EG [Inbox] in the config file matches any emails labeled "Inbox" - this is googles
standard label for new emails. Any label in Gmail may be matched by LEDnotify.
See the Gmail help pages for more on the use of labels.
For each label, alerts are categories as one of the following:
alert =
_peremail - issue a detailed alert (sender & subject) for each new email
messages for that label.
_label - issue a single alert for new emails with this label.
IE a total-new-count for the emails with labels listed in
the LEDnotify_poll_gmail.conf file.
_lab-xxx - where xxx is the Gmail label name - allowing separate
alerts by label name.
_totother - issue a single alert for new "other" emails - IE emails not
covered by the first two types. This alerts with a count of
"other" new emails with labels not alerted on by "peremail" or
"perlabel" - BUT only new emails covered by the Gmail labels
LEDnotify checks for - IE a total for all [section/labels]
with "alert = total"
_perrest - issue a detailed alert (sender & subject) for each new email
message for this label, that did not get alerted on by any of
the above types. EG for [INBOX] emails not selected in any
alert above.
urgency : (TBA & untested)
urgencies['low'] = pynotify.URGENCY_CRITICAL
urgencies['normal'] = pynotify.URGENCY_NORMAL
urgencies['critical'] = pynotify.URGENCY_CRITICAL
*******************************************************************************
Starting LEDnotify
*******************************************************************************
LEDnotify may be started is a couple of ways -
1) open file explorer and click on one of the programs below.
2) open a terminal, change directory to the LEDnotify folder, or
specify a full path to one of the programs below.
(running in a terminal, you will see more messages - useful if you
need to diagnose a problem).
EG:
cd <your-path>;./LEDnotify.py
The programs :
* LEDnotify.py - this is a python script that Ubuntu will run
* LEDnotify.sh - this is a bash script that will run the semi-compiled
LEDnotify.pyc program (TBA)
The Application Launcher file is a place-holder:
LEDnotify.desktop
- If used, Ubuntu says it is an "Untrusted Application Launcher"
I have yet to workout what this mean... TBA
*******************************************************************************
Usage notes
*******************************************************************************
When running
============
Alerts may optionally be shown in any of these ways:
* Ubuntu Indicator Applet icon - this sits on the top bar in Ubuntu, and appears
as the LEDnotify coloured envelope icon - when an alert occurs, this is high-lit
with a while background. See notes on Ubuntu version, and menu usage below.
* Notification messages - Ubuntu displays a message "bubble" top right, that
fades away after a moment...
* Popup messages in a small window with an "OK" button to dismiss them.
These use bash & zenity scripts (LEDnotify_*.sh)
* Play a sound file.
Ubuntu Indicator Applet icon & menu:
If enabled, click on the Ubuntu Indicator Applet icon
(this will be a multi-coloured envelope icon on the system bar)
to pull-down the menu. The options available on the menu are:
- Clear All : Clears all outstanding alerts
- xxx : This section of menu items show the alerts LEDnotify is
xxx watching for, and they high-light when an alert is issued,
xxx and indicate the number of alerts of that type.
Also read about the "escalate" option in the config section above.
- Tools : opens a submenu - see below
- About : Launches a popup with info about LEDnotify.
- Quit : LEDnotify exits and all its tasks are ended.
The Tools sub-menu contains:
- View Log : View messages in /tmp/LEDnotify.log
LEDnotify limits the size of the log file, and allows 3
generations of older logs to be kept.
The log format is:
- date
- time
- message level {DEBUG|INFO|ALERT|WARNING|ERROR|CRITICAL}
- message source
More than one task may write to stdout and to the log file,
so there is a convention of the 4th word in the log being
used to indicate the message source:
- LEDnotify uses ":"
- LEDnotify_poll_gmail uses "-"
- Restart xxx : If any polling steps are running, this can restart them
after an error, or force a restart if they get stuck.
- Edit xxx : to edit the various config files
- Test LED : Cycle through some coloured lights on the USB unit.
You may trigger LEDnotify alerts using dbus messages
EG: with the command (all one line):
dbus-send --session --dest=net.sourceforge.lednotify.engine --type=method_call /net/sourceforge/lednotify/engine net.sourceforge.lednotify.engine.Manager string:"_alert-name"
Where:
- string:"_alert-name" : the _alert-name is to match an one of the alerts
listed in the myalerts list in the [LEDnotify] section of the conf file.
EG: "_test1" in the sample conf file.
Note: "_error" is reserved by LEDnotify for alerting on LEDnotify failures.
- --dest=xxx : the xxx is the [LEDnotify] dbus attribute value
- the / delimited name is the same as the dbus name, but in this format...
- the dbus name is then used again with the .Manager suffix - it just is..
Popup boxes for alerting - only one popup will open per alert section in the
conf file. This is to try and keep the screen less cluttered.
Clearing a popup alert will clear all alerts for that type (EG all types
of Gmail alert, etc).
Pidgin:
- the notify option is ignored, as Pidgin will give that on-screen alert
- Alerts for:
- Buddy : If a user matching your buddies conf setting messages you.
- see the buddies value in the [pidgin] section of LEDnotify.conf
- Domain : If a user (not a buddy) with an id in a domain matching
your domains setting messages you.
- see the buddies value in the [pidgin] section of LEDnotify.conf
- Unknown : any IM messages that do not match the above.
- Buzz : if "allowbuzz = True" set in the conf, then this alerts
you to anyone buzzing you.
- BuddyOn : Alerts you to any buddies coming online
- LEDnotify destinguishes between a new conversation (IE a new dialogue
window has opened, or an update to an existing conversation for each of
the above (see the "1"/"2" suffix in the alert names in the conf file;
and labeled with "- continued" in the supplied config.)
- LEDnotify monitors for a process with the name "pidgin" and alerts if
one is not running.
Googlemail:
- The poller is designed to terminate when it gets an "abort" error from
google. The main LEDnotify task will restart the poller when this
happens, and due to the checkpointing, you should not miss any new mail.
BUT - I have also see the poller end with a strange looking error from
google - EG:
BYE response: System Error xxxxxxxxxxxxx
NO response: Lookup failed xxxxxxxxxxxxx
where the xxxxxxxxxxxxx is an odd code of various characters...
In this case the poller needs to be manually restarted from the Ubuntu
Indicator Applet dropdown menu (Tools -> Restart Gmail polling)
I may add some code to retry the logon after such an event.
Also see Googles "Known issues" page for some know IMAP problems :
https://support.google.com/mail/known-issues/
EG: Large mailboxes could be a problem for google & imap
Google Calendar:
- Calendar events with a reminder will trigger a LEDnotify alert for the
reminder time (* See Note1).
- Calendar events without a reminder set will use the "notice" attribute
in the LEDnotify_poll_gcal.conf file as the reminder period, and alert
that much before the event (* See Note1).
* Note1 : The Google Calender is checked cyclically - based on the timer
value in the LEDnotify_poll_gcal.conf file. Alerts are generated for
all reminder times that fall within the following cycle period (EG 10
minutes), so alerts may be generated upto a full cycle earlier than
the time they are set for.
- One challenge for calendar alerts is coping with timezones (note#01)
LEDnotify does all calculations using UTC - this should cope with
daylight savings too - please let me know of any problems with this.
Email through Thunderbird:
- LEDnotify monitors for a process with the name "thunderbird" and alerts
if one is not running. It can not check that the plugin is installed
though.
*******************************************************************************
Security notes
*******************************************************************************
The gmail password may optionally be saved in a temporary file by LEDnotify.
(See "<prompt>" & "encrypt" in the conf file).
This only applies to the <prompt> option.
Also see "Cryptography Notice" below.
This has the advantage that you can use pw=<prompt> - so not having the password
permanently on disk, but only type it in once when LEDnotify starts.
If the polling task dies (EG with an unexpected error from Gmail - which I do
try and trap - but I also try and recover from...), then LEDnotify will restart
the poll_gmail task, and it can then use the saved password.
The one-time encryption key is only remembered by LEDnotify whilst it is running,
and it generates a new random key every-time it is started - so any old files left
on disk are as secure (as the encryption allows (IE read up on DES, etc)).
LEDnotify passes the key to the poll_gmail task via stdin - so this is not too
visible.
But this is NOT 100% secure - it relies on :
1) You PC being secure - IE not publicly accessible.
2) The encryption is secure, but with access to your PC whilst LEDnotify is
running, someone who REALLY wanted to, might crack it.
So - the risk is high, but the chance of the risk depends on your PC security.
I welcome feedback on this...
*******************************************************************************
Cryptography Notice
*******************************************************************************
This distribution optionally uses cryptographic software. The country in
which you currently reside may have restrictions on the import, possession,
use, and/or re-export to another country, of encryption software.
BEFORE using any encryption software, please check your country's laws,
regulations and policies concerning the import, possession, or use, and
re-export of encryption software, to see if this is permitted.
For more information, see:
<http://www.bis.doc.gov/encryption>
<http://www.wassenaar.org/>
The U.S. Government Department of Commerce, Bureau of Industry and Security
(BIS), has classified this type of software as Export Commodity Control
Number (ECCN) 5D002.C.1, which includes information security software
using or performing cryptographic functions with symmetric algorithms.
The form and manner of this distribution makes it eligible for export
under the License Exception ENC Technology Software Unrestricted (TSU)
exception (see the BIS Export Administration Regulations, Section 740.13)
for both object code and source code.
For more information, see:
<http://www.bis.doc.gov/encryption>
*******************************************************************************
References
*******************************************************************************
I have used work from these pages, or have learned from them.
Some of these then refer to other projects... etc etc etc
Hardware
========
* Linux USB - a great resource when looking at hardware:
http://www.linux-usb.org/
http://www.linux-usb.org/usb.ids
* The Dream-Cheeky USB Webmail notifier hardware
http://www.dreamcheeky.com/webmail-notifier
customerservice@dreamcheeky.com
sales@dreamcheeky.com
marketing@dreamcheeky.com
http://www.geeksmart.co.uk/usb-email-webmail-notifier
ebay / google...
vendor_id=0x1d34, product_id=0x0004 # Dream Cheeky Dream Cheeky Webmail Notifier
* AVR-USB : OBJECTIVE DEVELOPMENT
- dBird used the set-led C program from "Project: hid-custom-rq example"
by Christian Starkjohann, using an "AVR-USB" unit by OBJECTIVE DEVELOPMENT Software GmbH.
This appears to use: vendor_id=0x5824 & product_id=0x1500
* BlinkM Smart LEDs
http://blinkm.thingm.com/
http://thingm.com/fileadmin/thingm/downloads/BlinkM_datasheet.pdf
I2C slave device - maybe connected with a USB-to-I2C adapter !?
or maybe try -
BlinkM USB status light:
http://thingm.com/products/blink-1.html
or ebay - search for "SLboat - A USB RGB LED Compatible Blink1"
vendor_id=0x27b8, product_id=0x01ed # Thing M
* USBEmailNotifier
http://svn3.xp-dev.com/svn/USBEmailNotifier/
Using - USB Universal E-mail/Webmail/IM Notifier :
http://dx.com/p/usb-universal-e-mail-webmail-im-notifier-gmail-outlook-outlook-express-pop3-27062
This appears to use one of these:
vendor_id=0x1294, product_id=0x1320 # Evelop device
vendor_id=0x0c45, product_id=0x0826 # Airplain device
Software
========
* I nearly forgot this reference (sorry) - it was early on when I first received
my Dream-Cheeky unit - to help get the USB device working (plugin and out...):
Christian Weiske's page:
http://cweiske.de/tagebuch/usblamp-monitoring.htm : on udev rules...
* Thunderbird plugin to send dbus messages for new mail
http://www.oelerich.org/dbus-signals-from-thunderbird-new-extension/
https://github.com/janoliver/thunderbird-dbus-sender
https://github.com/janoliver/thunderbird-dbus-sender/blob/master/README.md
* The gmailnotify project
https://github.com/knopwob/gmailnotify
knopwob@googlemail.com
* The Mail Notification tool -
http://www.nongnu.org/mailnotify/
* Twitter...
A lot of older Twitter tools stopped working when Twitter moved from V1 to
V1.1 of their API and eventually turned off the V1 API.
Unless apps had updates for that, they could no longer logon or get info
from Twitter. This applies to dBird.
* dBird notifier - my starting point for this project
http://dbirdnotifier.sourceforge.net/
http://sourceforge.net/projects/dbirdnotifier/
Dennis Schulze : emailfordennis.schulze@googlemail.com
emailfuerdennis@web.de
(c) of changes: Dennis Schulze 4/30/2009 - GPL
Dennis refers to Mumbles as the origin of the twitter polling code.
Copyright (c) 2008 dot_j <dot_j[AT]mumbles-project[DOT]org>
https://sourceforge.net/projects/mumbles/
Also see: http://www.linuxformat.com/forums/viewtopic.php?t=6597
* The DBus Project : http://www.freedesktop.org/wiki/Software/dbus
* Ubuntu Indicator Applets (and more on gmail)
- http://conjurecode.com/create-indicator-applet-for-ubuntu-unity-with-python/
- http://freakaboutlinux.wordpress.com/2010/12/02/custom-indicator-applet-icon/
* Python
- http://www.python.org/
- http://docs.python.org/3/
* HTML
- See Aaron Swartz's html2text tool - I used to help format IM messages.
(and have shipped with LEDnotify)
- html2text : (C) 2004-2008 Aaron Swartz. GNU GPL 3.
- me@aaronsw.com
- http://www.aaronsw.com/2002/html2text/
- https://github.com/aaronsw/html2text
* Google Calendar
- See: https://developers.google.com/google-apps/calendar/v1/developers_guide_python
- Also see the supplied file : ../Dream-USB-LED/Calendar_mask.odt for converting
a Dream Cheeky Webmail notifier into a Calendar notifier.
* Sound files : License: Attribution 3.0
- Some sound files in LEDnotify originated from: http://soundbible.com/ :
pin-drop.wav = pin_dropping-Brian_Rocca-2084700791.wav
Recorded by Brian Rocca - http://soundbible.com/1992-Pin-Dropping.html
gong.wav = Metal_Gong-Dianakc-109711828.wav
Recorded by Dianakc - http://soundbible.com/2062-Metal-Gong-1.html
lazer.wav = Laser_Cannon-Mike_Koenig-797224747.wav
Recorded by Mike Koenig - http://soundbible.com/1771-Laser-Cannon.html
metal.wav = Hitting_Metal-Douglas_Vicente-1756278897.wav
Recorded by Douglas Vicente - http://soundbible.com/1750-Hitting-Metal.html
blip.wav = Robot_blip-Marianne_Gagnon-120342607.wav
Recorded by Marianne Gagnon - http://soundbible.com/1682-Robot-Blip.html
ting.wav = Ting-Popup_Pixels-349896185.wav
Recorded by Popup Pixels - http://soundbible.com/1628-Ting.html
click.wav = Dry Fire Gun-SoundBible.com-2053652037.wav
Recorded by Mike Koenig - http://soundbible.com/1405-Dry-Fire-Gun.html
siren.wav = Tornado_Siren_II-Delilah-747233690.wav
Recorded by Delilah - http://soundbible.com/1937-Tornado-Siren-II.html
blop.wav = Blop-Mark_DiAngelo-79054334.wav
Recorded by Mark DiAngelo - http://soundbible.com/2067-Blop.html
page_turn.wav = Page_Turn-Mark_DiAngelo-1304638748.wav
Recorded by Mark DiAngelo - http://soundbible.com/2066-Page-Turn.html
tick.wav = Tick-DeepFrozenApps-397275646.wav
Recorded by DeepFrozenApps - http://soundbible.com/2044-Tick.html
And finally - my thanks for the many other web pages I have read to help develop
this... Python, Eclipse, dbus, pidgin, gmail, etc etc etc
- too many to keep track of..