WebSocket

Tvheadend has a WebSocket interface on port 9981. It is used by the UI to provide 'live' actions and updates, avoiding the need to refresh the screen.

Example Code

The example below creates a WebSocket connection to the Tvheadend server and listens for updates.

<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="utf-8">
    <title>Websocket Test</title>
    <script>
      let socket = new WebSocket("ws://192.168.0.1:9981/comet/ws");
      socket.onmessage = function(event) {
        let message = event.data;
        let messageElem = document.createElement('div');
        messageElem.textContent = message;
        document.getElementById('messages').prepend(messageElem);
      }
    </script>
  </head>
  <body>
    <header></header>
    <main>
      <div id="messages"></div>
    </main>
    <footer></footer>
  </body>
</html>

Output

Tvheadend transmits messages on the Websocket interface asynchronously, when either an event occurs or in some cases at scheduled intervals. The output format is JSON.

Each message contains a key "messages" whose value is an array of message objects. Each message object contains a key "notificationClass" which specifies the source of the message, and a series of message-specific key-value pairs.

Object Changes

Some "notificationClass" messages may optionally contain one or more of the following arrays: "create", "change" and "delete". When present, these arrays will contain lists of UUIDs that have been created, modified or deleted as part of the scope of the current notification.

When a "notificationClass" is "epg", the arrays described above will contain EventIds rather than UUIDs and the 'update" array will be present rather than "change". Two additional arrays ('dvr_delete' and 'dvr_update') may also be present to indicate a change in recording status of the EPG event.

With regards to "create" and "change"/"update" notifications, the UUID/EventID will need to be explicitly fetched to obtain the new object property values.

Last updated

Was this helpful?