Smart Home Dishwasher Guide

Device TYPE

action.devices.types.DISHWASHER This type indicates that the device gets the dishwasher icon and some dishwasher-type synonyms/aliases.

Dishwashers can have start and stop functionality independent from being on or off (some washers have separate power buttons, and some do not). Some can be paused and resumed while washing.

Dishwashers also have various modes and each mode has its own related settings. These are specific to the dishwasher and are interpreted in a generalized form.

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.

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.

    "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
    "inputs": [{
      "intent": "action.devices.SYNC"
'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.DISHWASHER',
        traits: [
        name: {
          defaultNames: ['AAA Cybernetics Corporation Dishwasher 3421'],
          name: 'Dishwasher',
          nicknames: ['dish cleaner']
        willReportState: true,
        attributes: {
          pausable: true
        deviceInfo: {
          manufacturer: 'AAA Cybernetics Corporation',
          model: '233451',
          hwVersion: '3.2',
          swVersion: '11.4'
        customData: {
          fooValue: 74,
          barValue: true,
          bazValue: 'lambtwirl'

// ...

exports.smarthome = functions.https.onRequest(app);
public SyncResponse onSync(@NotNull SyncRequest syncRequest, @Nullable Map<?, ?> headers) {
  SyncResponse.Payload payload = new SyncResponse.Payload();
      new SyncResponse.Payload.Device[] {
        new SyncResponse.Payload.Device.Builder()
                Collections.singletonList("AAA Cybernetics Corporation Dishwasher 3421"),
                Collections.singletonList("dish cleaner"))
            .setAttributes(new JSONObject().put("pausable", true))
            .setDeviceInfo("Smart Coffee Maker Manufacturers", "F600G", "3.2", "11.4")
                new JSONObject()
                    .put("fooValue", 74)
                    .put("barValue", true)
                    .put("bazValue", "lambtwirl")
  return new SyncResponse(syncRequest.getRequestId(), payload);
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "agentUserId": "1836.15267389",
    "devices": [
        "id": "123",
        "type": "action.devices.types.DISHWASHER",
        "traits": [
        "name": {
          "defaultNames": [
            "AAA Cybernetics Corporation Dishwasher 3421"
          "name": "Dishwasher",
          "nicknames": [
            "dish cleaner"
        "willReportState": true,
        "attributes": {
          "pausable": true
        "deviceInfo": {
          "manufacturer": "AAA Cybernetics Corporation",
          "model": "233451",
          "hwVersion": "3.2",
          "swVersion": "11.4"
        "customData": {
          "fooValue": 74,
          "barValue": true,
          "bazValue": "lambtwirl"


See the full list of errors and exceptions.