Skip to content


Repository files navigation


root server for collaborative devices


  • Provide bi-directional continuous connection for tens of thousands of devices over NAT.
  • Provide console feature of these devices.
  • Provide Server side device programming foundations.


  • rhizospere : Centoral server which provide these features mentioned above.
  • hypha : Device controller.



  • A Raspberry Pi, running hypha, is connected with rhizospere by 3G dongle.
  • Browser connect rhizospere, select Device id.
  • Send Bash commands from Browser. Then, the command is transit to RPi device, ran and return result.

demo movie on the youtube.


# command
  "type"  : "command",
  "id"    : "id of command",
  "order" : "exec_bash | exec_bash_ret_okng_only | exec_bash_no_return"

# response
  "type"  : "response",
  "id"    : "the same id of command",
  "resutl" : "result string | ok or ng | null"


connections is a key parts for interconnection between device and console. connections is a dictionaly which there key is specified by device id. The value of the connection is also dictionalys which has 2 value, one is the device side bi-directional socket and the other is client side bi-directional soket.

= {
    "device_id": {
       "device_socket": "socket for device", 
       "client_socket": "socket for client"


RhizoSpereHandler is python key module for handling connection between device and clinet. RhizoSpereHandler module is set by option or config file specified as rhizosperehandlers, and import dinamically by RhizoSpereHandler module must have a string member variable, named "type", which specifies a manner of initialization.

Following type string are available.


This type of RhizoSpereHandler is for a connections and several classes which share the connections as module global. These classes are as follows:

  • class for device handler, named RS_DeviceHandler
  • class for client handler, named RS_ClientHandler
  • other classes use the connections, for example, provide Web UI, IoT connection and so on.

Other classes mentioned above should be listed up by the module member of connections_shares like:

connections_shares = ["RS_WebPortalPageHander", "RS_WebCommandPageHandler"]