XMPP
XMPP is the Jabber protocol. It is also was used for GoogleTalk once upon a time.
See here for official documentation or here for the Wikipedia page.
Currently I am looking for a way to send messages along to my phone from Twilio and they are dragging their feet on Whatsapp support. And I don't want to use SMS anymore, to avoid Ting charges.
Use cases:
- Gateway for SMS from Twilio to a smartphone or laptop.
- AVL for FoxtrotGPS I want to be able to show the locations of "friends". Aka
"presence information" http://en.wikipedia.org/wiki/Presence_information
Clients
GUI clients
- adium - Mac version of pidgin
- empathy (comes with Ubuntu) limited usefulness, I uninstalled
- pidgin - works well, this and adium are the ones I use. http://pidgin.im
- psi - has more debugging modes. http://psi-im.org/
Command line
The sendxmpp command line client can be install on Linux systems. It's on dart.
date | sendxmpp -u [email protected] -p PASSWORDHERE --jserver kilchis.alseageo.com [email protected]
If you create a file .sendxmpprc file you can put a single line in it with a username and password for example
cat > .sendxmpprc [email protected] mypassword
then the send line becomes as simple as
echo "hi brian" | sendxmpp [email protected]
Android
Control your phone via XMPP: http://code.google.com/p/gtalksms/
GtalkSMS is built with: https://github.com/Flowdalic/asmack
Python
Following along in the O'Reilly book I will build a simple client using Sleek. Python XMPP Client
Working with .Net
See Jabber.net
Building pidgin
..because I am interested in libpurple for Windows (and pidgin runs on Windows)
Downloaded and unpacked source from pidgin site.
It is easy on Ubuntu 12.04, once you install the build dependencies.
apt-get build-dep pidgin cd pidgin ./configure make sudo make install
Servers
I am setting up a Docker container on Bellman to run Openfire which (a few years ago anyway) I found to be the best option.
These instructions for setting up a Docker version are excellent: https://hub.docker.com/r/gizmotronic/openfire
My command is
docker run --name openfire -d --restart=always \ --publish 9090:9090 --publish 5222:5222 --publish 7777:7777 \ --volume /home/docker/volumes/openfire_xmpp:/var/lib/openfire \ gizmotronic/openfire:4.2.3
To access the log file,
docker exec -it openfire tail -f /var/log/openfire/info.log
Shell access,
docker exec -it openfire bash
XMPP and your firewall
Open port 5222 to allow normal messages to pass between client and server. If you have SSL installed use port 5223. If you want server to server communications then open port 5269.
Openfire
Openfire http://www.igniterealtime.org/projects/openfire/ - my notes from last attempt said "pubsub not working" 3.8.1 says they have fixed pubsub so I am trying again
Installed from packages downloaded from http://www.igniterealtime.org/downloads/index.jsp#openfire (Wget does not work!) On CentOS the package is configured via /etc/sysconfig/openfire.
The web interface seems reasonable. Supports groups.
Shows active sessions.
Has chat rooms. I think this could be a way to send dispatches to a group of users. I can also use the 'broadcast' plugin.
brian/wildsong bwilson/alseageo iv/iv saint/thebells
PostgreSQL
With 3.8.2 set up on Dart with PostgreSQL was easy.
http://10.1.10.70:9090/setup/index.jsp
Plugins
You can install plugins directly from the web interface.
I installed the Asterisk plugin.
I installed the Broadcast plugin. "The broadcast plugin broadcasts messages to all users in the system or to specific groups. It's primarily useful for sending announcements or notifications."
To send a broadcast message, send a message to all@[serviceName].[serverName] or [group]@[serviceName].[serverName]. For example, if your server is called foo and the default service name is being used, a message to [email protected] would be broadcast to all users connected to the server. For the group staff, a message to [email protected] would be sent to all users in the group staff that are currently online or offline.
Prosody
Prosody - my notes say use this one, but trying out Openfire because of the plugins.
Location
There are two docs to look at: xep-0080 to report where client is located and xep-0255 to ask about the location of an entity.
All about XEP-0080
What is XEP-0080 good for?
- Supports GPS related attributes (aka xml elements) you expect including {timestamp, lat, lon, alt, speed, bearing, datum}
- Also has elements for everything you might want (floor, street, country, postalcode etc etc)
XEP-0080 message format could easily support E911 dispatch. It includes 'description', 'url' and a catch-all 'text' element.
Container (what XMPP message should carry the location data?):
- Location of people should be sent via PubSub or PEP(personal eventing).
- Tracking non-human users (eg a fire truck) can use other containers.
Musts:
- Lat / lon are signed decimal degrees
- Altitude units are metric
May 3, 2010 3:07 AM (in response to Disturbed1) Re: Use OpenFire for geolocation
Hi, we at buddycloud.com do some geoloc stuff via pubsub! You may just join our groupchat at [email protected]
It's actually the reason that asmack exists, so feel free to get some input on geoloc, pubsub and pep there :-) The server implementation is actually all about managing pubsub nodes....
http://fisheye.igniterealtime.org/browse/svn-org/smack/trunk/test/org/jivesoftware/smackx/pubsub