Xmpp

XMPP is a communications protocol for message-oriented middleware. The protocol was originally designed for near real-time, instant messaging (IM), presence information, and contact list maintenance. Designed to be extensible, the protocol has also been used for publish-subscribe systems, signalling for VoIP, video, file transfer, gaming, Internet of Things applications such as the smart grid.

With other protocols (Ice4J) it will support the following scenario :

I have a robot - it does a login

remotely on a completely different network I login

I see the status of my robot and "connect" to it

I have full control, and streaming audio & video from my robot (needs implementation)

Right now the service allows a sign-on to GTalk or any other XMPP / Jabber server and can send and recieve text messages. The next step (before audio & video streaming) is to allow MyRobotLab messages to be sent and recieved through this protocol - allowing full control of robots or devices through a remote MRL instance.

Java-Bells: A Jingle implementation for Java based on LibJitsi, Ice4J and Smack

Ice4J - The Interactive Connectivity Establishment (ICE) protocol combines various NAT traversal utilities such as the STUN and TURN protocols in order to offer a powerful mechanism that allows Offer/Answer based protocols such as SIP and XMPP to traverse NATs.

Examples:

# simple script to show how to send a message to and recieve a message from
# using a robot with the Xmpp service
# create an xmpp service
xmpp = Runtime.createAndStart("xmpp","Xmpp")
# adds the python service as a listener for messages
xmpp.addListener("python","publishMessage")
# there is a big list of different xmpp/jabber servers out there
# but we will connect to the big one - since that is where our robots account is
xmpp.connect("talk.google.com", 5222, "robot01@myrobotlab.org", "xxxxxxx")
# gets list of all the robots friends
print xmpp.getRoster()
# set your online status
xmpp.setStatus(True, "online all the time")
# add auditors you want this robot to chat with
# auditors can issue commands and will be notified of
# commands being sent by others and what those commands return
xmpp.addAuditor("Joe Smith")
xmpp.addAuditor("Jane Smith")
# send a message
xmpp.sendMessage("hello this is robot01 - the current heatbed temperature is 40 degrees celcius", "Joe Smith")
def publishMessage():
msg = msg_xmpp_publishMessage.data[0]
print msg.getFrom(), " says " , msg.getBody()