Alexa.MotionSensor Interface 3
Implement the Alexa.MotionSensor interface in your Alexa skill for devices that sense physical movement in an area. For example, a motion sensor attached to a front door. For more details about security skills, see Smart Home Security Overview.
If your motion sensors are components of a larger security system, your skill can also implement the Alexa.ContactSensor and Alexa.SecurityPanelController interfaces for a unified customer experience.
For the list of languages that the MotionSensor interface supports, see List of Alexa Interfaces and Supported Languages. For the definitions of the message properties, see Alexa Interface Message and Property Reference.
Properties
The Alexa.MotionSensor interface uses detectionState as the primary property. You can use the following values for detectionState.
| Value | Description |
|---|---|
DETECTED |
Motion is detected. Your device and user settings determine the threshold for detecting motion. |
NOT_DETECTED |
Motion is not detected. |
Discovery
You describe endpoints that support Alexa.MotionSensor using the standard discovery mechanism described in Alexa.Discovery.
Set retrievable to true for the properties that you report when Alexa sends your skill a state report request. Set proactivelyReported to true for the properties that you proactively report to Alexa in a change report.
Use MOTION_SENSOR for the display category. For the full list of display categories, see display categories.
Sensor devices must also implement Alexa.EndpointHealth.
Discover response example
The following example shows a Discover.Response message for a motion sensor device that supports the Alexa.MotionSensor interface.
{
"event": {
"header": {
"namespace": "Alexa.Discovery",
"name": "Discover.Response",
"payloadVersion": "3",
"messageId": "Unique identifier, preferably a version 4 UUID"
},
"payload": {
"endpoints": [{
"endpointId": "Unique ID of the endpoint",
"manufacturerName": "Manufacturer of the endpoint",
"description": "Smart Sensor by Sensor Maker",
"friendlyName": "Front door",
"displayCategories": ["MOTION_SENSOR"],
"cookie": {},
"capabilities": [{
"type": "AlexaInterface",
"interface": "Alexa.MotionSensor",
"version": "3",
"properties": {
"supported": [{
"name": "detectionState"
}],
"proactivelyReported": true,
"retrievable": true
}
},
{
"type": "AlexaInterface",
"interface": "Alexa.EndpointHealth",
"version": "3.1",
"properties": {
"supported": [{
"name": "connectivity"
}],
"proactivelyReported": true,
"retrievable": true
}
},
{
"type": "AlexaInterface",
"interface": "Alexa",
"version": "3"
}
]
}]
}
}
}
State reporting
Alexa sends a ReportState directive to request information about the state of an endpoint. When Alexa sends a ReportState directive, you send a StateReport event in response. The response contains the current state of all retrievable properties in the context object. You identify your retrievable properties in your discovery response. For details about state reports, see Understand State and Change Reporting.
StateReport response example
{
"event": {
"header": {
"namespace": "Alexa",
"name": "StateReport",
"messageId": "Unique identifier, preferably a version 4 UUID",
"correlationToken": "Opaque correlation token that matches the request",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0 bearer token"
},
"endpointId": "Endpoint ID"
},
"payload": {}
},
"context": {
"properties": [{
"namespace": "Alexa.MotionSensor",
"name": "detectionState",
"value": "NOT_DETECTED",
"timeOfSample": "2024-07-03T10:20:50.52Z",
"uncertaintyInMilliseconds": 0
},
{
"namespace": "Alexa.EndpointHealth",
"name": "connectivity",
"value": {
"value": "OK"
},
"timeOfSample": "2024-07-03T09:56:50.12Z",
"uncertaintyInMilliseconds": 0
}
]
}
}
Change reporting
You send a ChangeReport event to report changes proactively in the state of an endpoint. You identify the properties that you proactively report in your discovery response. For details about change reports, see Understand State and Change Reporting.
When a motion sensor changes to DETECTED, and then changes to NOT_DETECTED, you must wait at least 30 seconds before sending the second change report.
timeOfSample value must accurately reflect when the detectionState property changed.ChangeReport event example
{
"event": {
"header": {
"namespace": "Alexa",
"name": "ChangeReport",
"messageId": "Unique identifier, preferably a version 4 UUID",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0 bearer token"
},
"endpointId": "Endpoint ID"
},
"payload": {
"change": {
"cause": {
"type": "PHYSICAL_INTERACTION"
},
"properties": [
{
"namespace": "Alexa.MotionSensor",
"name": "detectionState",
"value": "DETECTED",
"timeOfSample": "2024-07-03T10:20:50.52Z",
"uncertaintyInMilliseconds": 0
}
]
}
}
},
"context": {
"properties": [
{
"namespace": "Alexa.EndpointHealth",
"name": "connectivity",
"value": {
"value": "OK"
},
"timeOfSample": "2024-07-03T10:11:50.52Z",
"uncertaintyInMilliseconds": 0
}
]
}
}
Related topics
- Alexa.CameraStreamController
- Alexa.ContactSensor
- Alexa.DoorbellEventSource
- Alexa.LockController
- Alexa.SecurityPanelController
- Alexa.SecurityPanelController.Alert
Last updated: Aug 23, 2024