The core protocol is XMPP. The Android app establishes a connection to an XMPP server and logs in using a secret that the android app appears to change from time to time. It then sends XMPP IQ commands. It describes them as queries, but they all contain "ctl" elements that appear to be commands. Here are a couple of full examples with the private information removed: A clean command: ``` ``` A charge command: ``` ``` Focusing on the core ctl elements, this is a sampling of commands seen on the wire after punching all the app buttons: ``` ``` It appears that it adds an extra id when it cares to receive a specific response. This is a little odd in that the iq blocks already contain ids, but perhaps one is more a server id and the other is used by the robot itself. Here are some assorted responses from that session: ``` ``` I don't totally get the relationship between the duplicate-ish items here, like the various clean reports, or the charge type differences, but I'll try to come back after rummaging through the logs further.