You are here

Smart Home Library Manual

STASH JavaScript Library

The STASH (SmartTV Alliance Smart Home) JavaScript Library abstracts the network protocols defined in the Smart Home specification and gives an easy handle for application developers to use Smart Home functionality in their applications.


This library has following logical entities:

  • an Endpoint is the entity the client connects to and has a set of devices
  • a Device is bound to an endpoint and consists of properties
  • a Property is bound to a device and can be of various types (like String, Integer, ...)


In the following sections the basic operations of the library are explained.

Using Network Service Discovery (NSD) API to find Endpoints

The library contains a method discoverEndpoints to find Endpoints in the local network. The NSD API is called with a search target of '''urn:smarttv-alliance-org:service:smarthome''' to find these. The example below shows how to trigger the discovery and to handle the results.

// trigger search of endpoints
var successCb = function(eps) {
    var discoveredEndpoints = eps;
    // this can also be used:
    // var discoveredEndpoints = stash.getDiscoveredEndpoints();
    if (discoveredEndpoints.length > 0) {
        log("Discovered " + discoveredEndpoints.length + " endpoints", discoveredEndpoints);

var errorCb = function(error) {
    log("Could not discover endpoints!", error);

var discoverResult = stash.discoverEndpoints(successCb, errorCb);
if (discoverResult === true) {
    log("Triggered discovering of endpoints...");
} else {
    log("Could not trigger discovering of endpoints, most probably browser does not support the NSD API!");

Working with endpoints

Retrieve information about all registered endpoints:

var allEndpoints = stash.getEndpoints();
for ( var ep in allEndpoints) {
    if (allEndpoints[ep].name == epName) {
        log("Endpoint name already in use");
    } else if (allEndpoints[ep].endpointAddress == "ws://" + epIP) {
        log("Endpoint with address: " + epIP + " already added");

Add and remove endpoints:

stash.addEndpoint("SampleEndpoint", "ws://", "obix.v2");

Manually trigger polling

var endpoint = stash.getEndpoint(name);
if (typeof (endpoint) != 'undefined') {

Implementing a callback function for continuous updates:

var endpoint = stash.getEndpoint(name);
if (endpoint != null) {
    endpoint.connect(function() {
        if ( {
           try {; } catch (e) { };

Working with devices

var devices = stash.getDevices();
console.log("Devices", devices);
for (var i = 0; i < devices.length; i++) {
    if (devices.hasOwnProperty(i)) {
        console.log(" - ", devices[i].name);
        for ( var j = 0; j < devices[i].properties.length; j++) {
            console.log(" -- ", devices[i].properties[j].name, devices[i].properties[j].obix, 
                devices[i].properties[j].value, devices[i].properties[j].writeable);


Debug logging can be enabled with setting the debug property to true

stash.debug = true;