We want to hear your thoughts on the Google Smart Home platform. Join a user study and receive a gift for your input. Click here to sign up.

Smart Home Sensor Guide

Device TYPE

action.devices.types.SENSOR A single sensor can serve multiple functions, such as monitoring both temperature and humidity. Sensors may report either or both quantitative—for example, carbon monoxide and smoke level measured at parts per million—and qualitative measurements (such as whether air quality is healthy or unhealthy).

This type indicates that the device gets the sensor icon and some synonyms/aliases.

These traits are recommended, if applicable to your device. However, you are free to mix and match from all available traits to best match your existing product functionality.

Sensors may also use other traits covering data they can report, such as:

Sample SYNC Request and Response

This is an example using the device type and traits above. It is intended to give an idea of how to build a SYNC response. If you add or remove traits, this will need to be modified to reflect those changes.

Request
{
    "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
    "inputs": [{
      "intent": "action.devices.SYNC"
    }]
}
Node.js
'use strict';

const {smarthome} = require('actions-on-google');
const functions = require('firebase-functions');

const app = smarthome();

app.onSync((body, headers) => {
  return {
    requestId: body.requestId,
    payload: {
      agentUserId: '1836.15267389',
      devices: [{
        id: '123',
        type: 'action.devices.types.SENSOR',
        traits: [
          'action.devices.traits.HumiditySetting',
          'action.devices.traits.OnOff',
          'action.devices.traits.SensorState',
          'action.devices.traits.TemperatureControl'
        ],
        name: {
          defaultNames: ['Sirius Cybernetics Corporation Sensor'],
          name: 'Sensor',
          nicknames: ['Master Control Sensor']
        },
        willReportState: true,
        attributes: {
          sensorStatesSupported: [{
            name: 'AirQuality',
            descriptiveCapabilities: {
              availableStates: ['healthy', 'moderate', 'unhealthy', 'very unhealthy']
            }
          }],
          queryOnlyHumiditySetting: true,
          queryOnlyTemperatureControl: true,
          temperatureUnitForUX: 'C'
        },
        deviceInfo: {
          manufacturer: 'Sirius Cybernetics Corporation',
          model: '442',
          hwVersion: '3.2',
          swVersion: '11.4'
        }
      }]
    }
  };
});

// ...

exports.smarthome = functions.https.onRequest(app);
Java
@NotNull
@Override
@SmartHomeSnippetJson("smart-home-types-sensor_sync.json")
public SyncResponse onSync(@NotNull SyncRequest syncRequest, @Nullable Map<?, ?> headers) {
  Payload payload = new Payload();
  payload.setAgentUserId("1836.15267389");

  payload.setDevices(
      new Device[] {
        new Device.Builder()
            .setId("123")
            .setType("action.devices.types.SENSOR")
            .addTrait("action.devices.traits.HumiditySetting")
            .addTrait("action.devices.traits.OnOff")
            .addTrait("action.devices.traits.SensorState")
            .addTrait("action.devices.traits.TemperatureControl")
            .setName(
                Collections.singletonList("Sirius Cybernetics Corporation Sensor"),
                "Sensor",
                Collections.singletonList("Master Control Sensor"))
            .setWillReportState(true)
            .setAttributes(
                new JSONObject()
                    .put(
                        "sensorStatesSupported",
                        new JSONObject[] {
                          new JSONObject()
                              .put("name", "AirQuality")
                              .put(
                                  "descriptiveCapabilities",
                                  new JSONObject()
                                      .put(
                                          "availableStates",
                                          new String[] {
                                            "healthy", "moderate", "unhealthy", "very unhealthy"
                                          }))
                        })
                    .put("queryOnlyHumiditySetting", true)
                    .put("queryOnlyTemperatureControl", true)
                    .put("temperatureUnitForUX", "C"))
            .setDeviceInfo("Sirius Cybernetics Corporation", "442", "3.2", "11.4")
            .build()
      });

  return new SyncResponse(syncRequest.getRequestId(), payload);
}
JSON
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "agentUserId": "1836.15267389",
    "devices": [
      {
        "id": "123",
        "type": "action.devices.types.SENSOR",
        "traits": [
          "action.devices.traits.HumiditySetting",
          "action.devices.traits.OnOff",
          "action.devices.traits.SensorState",
          "action.devices.traits.TemperatureControl"
        ],
        "name": {
          "defaultNames": [
            "Sirius Cybernetics Corporation Sensor"
          ],
          "name": "Sensor",
          "nicknames": [
            "Master Control Sensor"
          ]
        },
        "willReportState": true,
        "attributes": {
          "sensorStatesSupported": [
            {
              "name": "AirQuality",
              "descriptiveCapabilities": {
                "availableStates": [
                  "healthy",
                  "moderate",
                  "unhealthy",
                  "very unhealthy"
                ]
              }
            }
          ],
          "queryOnlyHumiditySetting": true,
          "queryOnlyTemperatureControl": true,
          "temperatureUnitForUX": "C"
        },
        "deviceInfo": {
          "manufacturer": "Sirius Cybernetics Corporation",
          "model": "442",
          "hwVersion": "3.2",
          "swVersion": "11.4"
        }
      }
    ]
  }
}
Validator

Device ERRORS

See the full list of errors and exceptions.