# Subscription

During a serverinfo request the caller can optionally subscribe to updates -- either to specific serverinfo parts or all available data. These updates will be pushed whenever a server-side data change occurs, without the need for the caller to poll.

To subscribe to specific updates, you can modify the serverinfo command to:

{
    "command":"serverinfo",
    "subscribe":[
        "firstCommand",
        "secondCommand",
        "thirdCommand"
    ],
    "tan":1
}

To subscribe for all available updates modify the severinfo command to

{
    "command":"serverinfo",
    "subscribe":["all"],
    "tan":1
}

# Base response layout

All pushed subscription updates will have an -update suffix added to the relevant key from the serverinfo part in question. The new data will be in the data property. There is no tan nor success argument provided.

{
    "command":"XYZ-update",
    "data":{
        ..Data here..
    }
}

# Component updates

The caller can subscribe to component updates. These updates are meant to update the components section of the caller's initial serverinfo. Relevant serverinfo subscription command:

{
    "command":"serverinfo",
    "subscribe":[
        "components-update"
    ],
    "tan":1
}

After this, the caller will receive incremental updates. An example:

{
    "command":"components-update",
    "data":{
        "enabled":false,
        "name":"SMOOTHING"
    }
}

# Session updates

The caller can subscribe to session updates (Hyperion instances found with Bonjour/Zeroconf/Ahavi). These updates are meant to update the sessions section of the caller's initial serverinfo. Relevant serverinfo subscription command:

{
    "command":"serverinfo",
    "subscribe":[
        "sessions-update"
    ],
    "tan":1
}

These updates aren't incremental -- they contain all found entries on each update. Example response with 2 HTTP server sessions (_hyperiond-http._tcp):

{
    "command":"sessions-update",
    "data":[
        {
            "address":"192.168.58.169",
            "domain":"local.",
            "host":"ubuntu-2",
            "name":"My Hyperion [email protected]:8090",
            "port":8090,
            "type":"_hyperiond-http._tcp."
        },
        {
            "address":"192.168.58.169",
            "domain":"local.",
            "host":"ubuntu-2",
            "name":"My Hyperion [email protected]:8099",
            "port":8099,
            "type":"_hyperiond-http._tcp."
        }
   ]
}

# Priority updates

The caller can subscribe to priority updates. These updates are meant to update the priorities and priorities_autoselect section of the caller's initial serverinfo. Relevant serverinfo subscription command:

{
    "command":"serverinfo",
    "subscribe":["priorities-update"],
    "tan":1
}

Caller will get the complete data. Please note that if a color or effect is running with a timeout > -1, the caller will receive new data each second. An example update:

{
  "command":"priorities-update",
  "data":{
    "priorities":[
      {
        "active":true,
        "componentId":"GRABBER",
        "origin":"System",
        "owner":"X11",
        "priority":250,
        "visible":true
      },
      {
        "active":true,
        "componentId":"EFFECT",
        "origin":"System",
        "owner":"Warm mood blobs",
        "priority":254,    
        "visible":false
      },
      {
        "active":true,
        "componentId":"COLOR",
        "origin":"System",
        "owner":"System",
        "priority":40,
        "value":{
          "HSL":[65535,0,0],
          "RGB":[0,0,0]
        },
        "visible":false
      }
    ],
    "priorities_autoselect":false
  }
}

# LED Mapping updates

The caller can subscribe to LED mapping type updates. These updates are meant to update the imageToLedMappingType section of the caller's initial serverinfo. Relevant serverinfo subscription command:

{
    "command":"serverinfo",
    "subscribe":["imageToLedMapping-update"],
    "tan":1}

An example update:

{
    "command":"imageToLedMapping-update",
    "data":{
        "imageToLedMappingType":"multicolor_mean"
    }
}

# Adjustment updates

The caller can subscribe to adjustment updates. These updates are meant to update the adjustment section of the caller's initial serverinfo. Relevant serverinfo subscription command:

{
    "command":"serverinfo",
    "subscribe":["adjustment-update"],
    "tan":1
}

An example update:

{
  "command":"adjustment-update",
    "data":[{
      "backlightColored":true,
      "backlightThreshold":0,
      "black":[0,0,0],
      "blue":[0,0,255],
      "brightness":1,
      "cyan":[0,127,127],
      "gammaBlue":1.4,
      "gammaGreen":1.4,
      "gammaRed":1.4,
      "green":[0,255,0],
      "id":"default",
      "magenta":[255,0,255],
      "red":[255,0,0],
      "white":[255,255,255],
      "yellow":[255,255,0]
    }]
}

# VideoMode updates

The caller can subscribe to videomode updates. These updates are meant to update the videomode section of the cakker's initial serverinfo. Relevant serverinfo subscription command:

{
  "command":"serverinfo",
  "subscribe":["videomode-update"],
  "tan":1
}

An example update:

{
  "command":"videomode-update",
  "data":{
    "videomode": "2D"
  }
}

# Effects updates

The caller can subscribe to effect list updates. These updates are meant to update the effects section of the caller's initial serverinfo. Relevant serverinfo subscription command:

{
  "command":"serverinfo",
  "subscribe":["effects-update"],
  "tan":1
}

An example update:

{
  "command":"effects-update",
  "data":{
    "effects": [ ..All effects here..]
  }
}

# Instance updates

The caller can subscribe to instance updates. These updates are meant to update the instance section of the caller's initial serverinfo. Relevant serverinfo subscription command:

{
  "command":"serverinfo",
  "subscribe":["instance-update"],
  "tan":1
}

An example update. This is not incremental -- the caller will get the full set of instances:

{
  "command":"instance-update",
  "data":[
    {
      "instance": 0,
      "running" : true,
      "friendly_name" : "My First LED Hardware instance"
    },
    {
      "instance": 1,
      "running" : false,
      "friendly_name" : "PhilipsHue LED Hardware instance"
    }
  ]
}

# LEDs updates

The caller can subscribe to leds updates. These updates are meant to update the leds section of the caller's initial serverinfo. Relevant serverinfo subscription command:

{
  "command":"serverinfo",
  "subscribe":["leds-update"],
  "tan":1
}

An example update. This is not incremental -- the caller willg et the full set of leds:

{
  "command":"leds-update",
    "data": {
      "leds" : [
      {
        "hmin":0.0,
        "hmax":1.0,
        "vmin":0.0,
        "vmax":1.0
       },
       ... more leds ...
      ]
    }
  }