Anleitung für Smart-Home-Sicherheitssysteme

action.devices.types.SECURITYSYSTEM: Sicherheitssysteme können scharf und unscharf geschaltet werden. Sie können auf mehreren Sicherheitsstufen (z. B. „Zuhause“ und „Abwesend“) scharf geschaltet werden und Daten zu bestimmten Sensoren melden, z. B. einem Sensor, der Bewegungen oder ein offenes Fenster erkennt.

Dieser Typ gibt an, dass das Gerät das Sicherheitssystem-Symbol und zugehörige Synonyme und Aliasse.

Gerätefunktionen

Weitere Informationen finden Sie in der entsprechenden Dokumentation Implementierungsdetails wie Attribute und Angaben, die Ihr Dienst unterstützen soll, und wie Sie EXECUTE- und QUERY-Antworten erstellen.

Erforderliche Merkmale

Diese Traits und Befehle sind erforderlich, sofern auf Ihre . Wenn dein Gerät diese Traits nicht unterstützt, gib den Fehlercode ein: functionNotSupported in einer QUERY- oder EXECUTE-Antwort. Weitere Informationen finden Sie unter Fehler und Ausnahmen.

Diese Traits werden empfohlen, sofern sie für Ihr Gerät relevant sind. Du kannst jedoch alle verfügbaren Merkmale beliebig kombinieren, um deine vorhandenen Merkmale bestmöglich anzupassen. Produktfunktionen.

Qualitätsanforderungen

  • Latenz:muss kleiner oder gleich 2.000 ms sein.
  • Zuverlässigkeit:Muss größer oder gleich 97% sein.

Beispielgerät: Einfaches Sicherheitssystem

Dieser Abschnitt enthält Beispiele für Intent-Nutzlasten, die ein gängiges „Sicherheitssystem“ darstellen basierend auf dem Gerätetyp und den oben genannten Merkmalen. Wenn Sie in Ihrer Implementierung Tragen hinzufügen oder entfernen, und passen Sie Ihre Antworten entsprechend an.

Beispiel für SYNC-Antwort

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Anfrage
{
  "requestId": "6894439706274654512",
  "inputs": [
    {
      "intent": "action.devices.SYNC"
    }
  ]
}
<ph type="x-smartling-placeholder">
</ph>
Antwort
{
  "requestId": "6894439706274654512",
  "payload": {
    "agentUserId": "user123",
    "devices": [
      {
        "id": "123",
        "type": "action.devices.types.SECURITYSYSTEM",
        "traits": [
          "action.devices.traits.StatusReport",
          "action.devices.traits.ArmDisarm"
        ],
        "name": {
          "name": "Simple security system"
        },
        "willReportState": true,
        "attributes": {
          "availableArmLevels": {
            "levels": [
              {
                "level_name": "home_key",
                "level_values": [
                  {
                    "level_synonym": [
                      "Home and Guarding",
                      "level 1",
                      "home",
                      "SL1"
                    ],
                    "lang": "en"
                  }
                ]
              },
              {
                "level_name": "away_key",
                "level_values": [
                  {
                    "level_synonym": [
                      "Away and Guarding",
                      "level 2",
                      "away",
                      "SL2"
                    ],
                    "lang": "en"
                  }
                ]
              }
            ],
            "ordered": true
          }
        },
        "deviceInfo": {
          "manufacturer": "smart-home-inc",
          "model": "hs1234",
          "hwVersion": "3.2",
          "swVersion": "11.4"
        }
      }
    ]
  }
}

Beispiel für eine QUERY-Antwort

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Anfrage
{
  "requestId": "6894439706274654514",
  "inputs": [
    {
      "intent": "action.devices.QUERY",
      "payload": {
        "devices": [
          {
            "id": "123"
          }
        ]
      }
    }
  ]
}
<ph type="x-smartling-placeholder">
</ph>
Antwort
{
  "requestId": "6894439706274654514",
  "payload": {
    "devices": {
      "123": {
        "status": "SUCCESS",
        "online": true,
        "isArmed": true,
        "currentArmLevel": "home_key",
        "currentStatusReport": [
          {
            "blocking": false,
            "deviceTarget": "123",
            "priority": 0,
            "statusCode": "lowBattery"
          }
        ]
      }
    }
  }
}

Beispiele für EXECUTE-Befehle

ArmDisarm

Weitere Informationen zu den Befehlsparametern Siehe action.devices.traits.ArmDisarm. Referenz.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Anfrage
{
  "requestId": "6894439706274654516",
  "inputs": [
    {
      "intent": "action.devices.EXECUTE",
      "payload": {
        "commands": [
          {
            "devices": [
              {
                "id": "123"
              }
            ],
            "execution": [
              {
                "command": "action.devices.commands.ArmDisarm",
                "params": {
                  "arm": true,
                  "armLevel": "away_key"
                }
              }
            ]
          }
        ]
      }
    }
  ]
}
<ph type="x-smartling-placeholder">
</ph>
Antwort
{
  "requestId": "6894439706274654516",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "online": true,
          "isArmed": true,
          "currentArmLevel": "away_key"
        }
      }
    ]
  }
}

Gerätefehler

Vollständige Liste der Fehler und Ausnahmen.

Ausnahmen für die Scharfschaltung melden

Wenn du versuchst, das System scharf oder unscharf zu schalten, kannst du zusätzliche Kontext über Ausnahmecodes die Sie über das Merkmal StatusReport melden. Ausnahmen können als blockierend oder nicht blockierend gemeldet werden.

  • Nicht blockierende Ausnahmen, die mit der Meldung „ERFOLG“ gemeldet werden zeigen an, dass Die Ausnahme verhinderte das Scharf- oder Unscharfschalten nicht.
  • Ausnahmen von der Blockierung, die mit „EXCEPTIONS“ gemeldet werden dass die Scharfschaltung oder die Unscharfschaltung aufgrund dieser Ausnahmen gestoppt wurde.

Zu den Ausnahmecodes, die häufig mit Sicherheitssystemen verbunden sind, gehören:

  • doorOpen: Eine Tür ist offen.
  • windowOpen: Ein Fenster ist geöffnet.
  • isOpen: Ein Sensor erkennt, dass etwas offen ist, weiß aber nicht, z. B. eine Tür oder ein Fenster).

Beispiel: Nicht blockierende Ausnahme

Dieses Beispiel zeigt eine nicht blockierende Ausnahme, bei der das Sicherheitssystem ist scharf geschaltet, obwohl ein Fenster als offen gemeldet wurde.

Nutzer Stellen Sie das Sicherheitssystem auf hohe Sicherheit ein.
Google Assistant Ok, die Vorderseite ist offen. Das Sicherheitssystem wird auf hohe Sicherheit scharf geschaltet.
<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Anfrage
{
    "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
    "inputs": [{
      "intent": "action.devices.EXECUTE",
      "payload": {
        "commands": [{
          "devices": [{
            "id": "123"
          }],
          "execution": [{
            "command": "action.devices.commands.ArmDisarm",
            "params": {
              "arm": true,
              "armLevel": "L2"
            }
          }]
        }]
      }
    }]
  }
<ph type="x-smartling-placeholder">
</ph>
Antwort
{
    "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
    "payload": {
      "commands": [
        {
          "ids": [
            "123"
          ],
          "status": "SUCCESS",
          "states": {
            "online": true,
            "isArmed": true,
            "currentArmLevel": "L2",
            "currentStatusReport": [
              {
                "blocking": false,
                "priority": 0,
                "statusCode": "windowOpen",
                "deviceTarget": "sensor_id1"
              }
            ]
          }
        }
      ]
    }
  }

Beispiel: Ausnahme blockieren

Nutzer Stellen Sie das Sicherheitssystem auf hohe Sicherheit ein.
Google Assistant Ein Fehler ist aufgetreten für die Steuerung des Sicherheitssystems. Das Fenster vorne ist offen.
<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Anfrage
{
    "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
    "inputs": [{
      "intent": "action.devices.EXECUTE",
      "payload": {
        "commands": [{
          "devices": [{
            "id": "123"
          }],
          "execution": [{
            "command": "action.devices.commands.ArmDisarm",
            "params": {
              "arm": true,
              "armLevel": "L2"
            }
          }]
        }]
      }
    }]
  }
<ph type="x-smartling-placeholder">
</ph>
Antwort 2
{
    "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
    "payload": {
      "commands": [
        {
          "ids": [
            "123"
          ],
          "status": "EXCEPTIONS",
          "states": {
            "online": true,
            "isArmed": false,
            "currentArmLevel": "L2",
            "currentStatusReport": [
              {
                "blocking": true,
                "priority": 0,
                "statusCode": "windowOpen",
                "deviceTarget": "sensor_id1"
              }
            ]
          }
        }
      ]
    }
  }

Mit 2-Faktor-Authentifizierung scharf schalten

Wenn Nutzer beim Scharfschalten eine PIN über eine Bestätigung in zwei Schritten, müssen Sie angeben, ob das System weiterhin scharf geschaltet werden soll, wenn aktive Ausnahmen (z. B. wenn ein Fenster oder eine Tür geöffnet ist).

Hierfür müssen Sie möglicherweise sowohl eine PIN als auch eine Passphrase und dann eine Bestätigung eingeben.

Beispiel: Bestätigungsaufforderung

Das Beispiel zeigt, wie ein Nutzer versucht, das Sicherheitssystem scharf zu schalten. Die Haustür wurde als offen erkannt. Der Nutzer bestätigt, dass die Sicherheitsmaßnahmen System sollte scharf geschaltet sein, auch wenn die Haustür offen ist.

Nutzer Schalte das Sicherheitssystem scharf.
Google Assistant Die Eingangstür ist unverschlossen. Möchtest du das Sicherheitssystem wirklich scharf schalten?
Nutzer Ja.
Google Assistant Ok, der Alarm wird scharf geschaltet Sicherheitssystem.

In der ersten Runde sollten Sie mit einer ackNeeded-Herausforderung antworten.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Anfrage 1
{
    "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
    "inputs": [{
      "intent": "action.devices.EXECUTE",
      "payload": {
        "commands": [{
          "devices": [{
            "id": "123"
          }],
          "execution": [{
            "command": "action.devices.commands.ArmDisarm",
            "params": {
              "arm": true
            }
          }]
        }]
      }
    }]
  }
<ph type="x-smartling-placeholder">
</ph>
Antwort 2
{
    "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
    "payload": {
      "commands": [
        {
          "ids": [
            "123"
          ],
          "status": "ERROR",
          "errorCode": "challengeNeeded",
          "challengeNeeded": {
            "type": "ackNeeded"
          },
          "states": {
            "isArmed": true,
            "currentArmLevel": "L2",
            "currentStatusReport": [
              {
                "blocking": false,
                "priority": 0,
                "statusCode": "doorOpen",
                "deviceTarget": "456"
              }
            ]
          }
        }
      ]
    }
  }

Die nachfolgende Anfrage von Google an Sie enthält das Ergebnis ack.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Anfrage 2
{
    "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
    "inputs": [{
      "intent": "action.devices.EXECUTE",
      "payload": {
        "commands": [{
          "devices": [{
            "id": "123"
          }],
          "execution": [{
            "command": "action.devices.commands.ArmDisarm",
            "params": {
              "arm": true
            },
            "challenge": {
              "ack": true
            }
          }]
        }]
      }
    }]
  }
<ph type="x-smartling-placeholder">
</ph>
Antwort
{
    "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
    "payload": {
      "commands": [
        {
          "ids": [
            "123"
          ],
          "status": "SUCCESS",
          "states": {
            "isArmed": true
          }
        }
      ]
    }
  }

Beispiel: PIN und Bestätigungsaufforderung

Dieses Beispiel zeigt, wie ein Nutzer versucht, das Sicherheitssystem scharf zu schalten, dessen PIN-Eingabe erforderlich ist. Das System erkennt, dass die Fenster vorne und hinten geöffnet sind, und bittet den Nutzer, den Vorgang zu bestätigen. dass die Alarmanlage fortgesetzt werden soll.

Nutzer Auf „Abwesend“ scharf schalten.
Google Assistant Wie lautet Ihre PIN?
Nutzer 1234.
Google Assistant Es sieht so aus, Vorder- und Hinterfenster geöffnet sind. Möchten Sie wirklich fortfahren? das Sicherheitssystem auf „Abwesend“ scharf schalten?
Nutzer Ja.
Google Assistant Okay, das Gerät wird scharf geschaltet Sicherheitssystem auf „Abwesend“

In der ersten Runde sollten Sie mit einer standardmäßigen pinNeeded-Herausforderung antworten.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Anfrage 1
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.ArmDisarm",
          "params": {
            "arm": true
          }
        }]
      }]
    }
  }]
}
<ph type="x-smartling-placeholder">
</ph>
Antwort
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["456"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "pinNeeded"
      }
    }]
  }
}

Google sendet Ihnen dann eine Anfrage mit der angegebenen PIN. Um die In der zweiten Runde sollten Sie mit einer ackNeeded-Herausforderung antworten und zusätzliche Informationen, darunter die Zielverzweigungsebene und der aktuelle Statusbericht mit blockieren können.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Anfrage 2
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [...],
        "execution": [{
          "command": "action.devices.commands.ArmDisarm",
          "params": {
            "arm": true,
            "armLevel": "away"
          },
          "challenge": {
            "pin": "1234"
          }
        }]
      }]
    }
  }]
}
<ph type="x-smartling-placeholder">
</ph>
Antwort
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["456"],
      "status": "ERROR",
      "states": {
        "targetArmLevel": "away",
        "currentStatusReport": [{
            "blocking": true,
            "priority": 1,
            "deviceTarget": "front_window_id",
            "statusCode": "deviceOpen"
          },
          {
            "blocking": true,
            "priority": 1,
            "deviceTarget": "back_window_id",
            "statusCode": "deviceOpen"
          }
        ]
      },
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "ackNeeded"
      }
    }]
  }
}

Die nachfolgende Anfrage von Google an Sie enthält nur das Ergebnis ack, und nicht die PIN aus der ersten Runde.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Anfrage 3
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [...],
        "execution": [{
          "command": "action.devices.commands.ArmDisarm",
          "params": {
            "arm": true,
            "armLevel": "away"
          },
          "challenge": {
            "ack": true
          }
        }]
      }]
    }
  }]
}
<ph type="x-smartling-placeholder">
</ph>
Antwort
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "isArmed": true
        }
      }
    ]
  }
}