Alex2Node/test/fixtures/zoo/discovery.json
David c492ef74d1 discovery: generate capability JSON from the registry
A capability is a descriptor plus what the endpoint declares (device/Capability.ts), and its discovery object is
generated from the two. The new API is bridge.addDevice({ endpointId, name, categories, ... }) and
device.add(PowerController, options): both throw a DeclarationError that names the endpoint, the interface and
the instance (device/validate.ts), and leave the bridge and the device as they were. AlexaInterface is the same
Capability with the 1.x methods on it; it, ActionMapping and the enums moved to src/compat/, Device to src/device/.

What a 1.x caller can observe:
- every endpoint ends with { type: "AlexaInterface", interface: "Alexa", version: "3" } (alexa-interface.html);
  new Alex2MQTT(..., { alexaInterface: false }) leaves it out
- the fields of a capability object come in the order of Amazon's examples; their content is unchanged
- addCapability() with a name that is not an interface throws (1.5.2 announced it with the version "UNKNOWN")
- ActionMapping takes the payload as an object; a JSON string is parsed (1.5.2 sent the string), any other throws
- what Alexa would reject in a 1.x declaration is not refused: device.check() lists it and the bridge logs each
  line once, as "warning: ..." through the log hook, when it answers a discovery
- a device whose JSON cannot be built is left out of the answer and reported as an error event
- PowerController and EndpointHealth are the descriptors and keep ON/OFF and OK/UNREACHABLE; PowerState is new

Tests: six zoo devices declared the 1.x way give the JSON that Alexa accepted from 1.5.2 on 2026-09-28, plus the
Alexa capability. npm test: 85 pass (was 57) in 10-12 s, also on Node 18.20.8 and 20.20.2.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-28 15:35:46 +00:00

1098 lines
No EOL
28 KiB
JSON

[
{
"endpointId": "zoo-light",
"friendlyName": "Zoo Light",
"description": "Alex2Node zoo: PowerController, proactivelyReported: flips + ChangeReport every --changereport-min minutes",
"manufacturerName": "Alex2Node zoo",
"displayCategories": [
"LIGHT"
],
"additionalAttributes": {
"manufacturer": "Alex2Node zoo",
"model": "zoo-1.0",
"serialNumber": "Alex2Node",
"firmwareVersion": "1.0.0",
"softwareVersion": "1.0.0",
"customIdentifier": "Alex2Node"
},
"capabilities": [
{
"interface": "Alexa.PowerController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "powerState"
}
]
}
}
]
},
{
"endpointId": "zoo-dimmer",
"friendlyName": "Zoo Dimmer",
"description": "Alex2Node zoo: PowerController + BrightnessController (SetBrightness / AdjustBrightness; 0 % = off)",
"manufacturerName": "Alex2Node zoo",
"displayCategories": [
"LIGHT"
],
"additionalAttributes": {
"manufacturer": "Alex2Node zoo",
"model": "zoo-1.0",
"serialNumber": "Alex2Node",
"firmwareVersion": "1.0.0",
"softwareVersion": "1.0.0",
"customIdentifier": "Alex2Node"
},
"capabilities": [
{
"interface": "Alexa.PowerController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "powerState"
}
]
}
},
{
"interface": "Alexa.BrightnessController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "brightness"
}
]
}
}
]
},
{
"endpointId": "zoo-thermostat",
"friendlyName": "Zoo Thermostat",
"description": "Alex2Node zoo: ThermostatController 3.2 (HEAT/COOL/AUTO/OFF, 50-90 F, AUTO reports lower+upper) + TemperatureSensor; the library",
"manufacturerName": "Alex2Node zoo",
"displayCategories": [
"THERMOSTAT",
"TEMPERATURE_SENSOR"
],
"additionalAttributes": {
"manufacturer": "Alex2Node zoo",
"model": "zoo-1.0",
"serialNumber": "Alex2Node",
"firmwareVersion": "1.0.0",
"softwareVersion": "1.0.0",
"customIdentifier": "Alex2Node"
},
"capabilities": [
{
"interface": "Alexa.ThermostatController",
"version": "3.2",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "targetSetpoint"
},
{
"name": "lowerSetpoint"
},
{
"name": "upperSetpoint"
},
{
"name": "thermostatMode"
}
]
},
"configuration": {
"supportedModes": [
"HEAT",
"COOL",
"AUTO",
"OFF"
],
"supportsScheduling": false
}
},
{
"interface": "Alexa.TemperatureSensor",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "temperature"
}
]
}
}
]
},
{
"endpointId": "zoo-thermometer",
"friendlyName": "Zoo Thermometer",
"description": "Alex2Node zoo: TemperatureSensor alone (72.5 F; a ChangeReport adds one degree)",
"manufacturerName": "Alex2Node zoo",
"displayCategories": [
"TEMPERATURE_SENSOR"
],
"additionalAttributes": {
"manufacturer": "Alex2Node zoo",
"model": "zoo-1.0",
"serialNumber": "Alex2Node",
"firmwareVersion": "1.0.0",
"softwareVersion": "1.0.0",
"customIdentifier": "Alex2Node"
},
"capabilities": [
{
"interface": "Alexa.TemperatureSensor",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "temperature"
}
]
}
}
]
},
{
"endpointId": "zoo-blinds",
"friendlyName": "Zoo Blinds",
"description": "Alex2Node zoo: RangeController 0-100 (asset Alexa.Setting.Opening) with open/close/raise/lower action mappings + open/closed sta",
"manufacturerName": "Alex2Node zoo",
"displayCategories": [
"INTERIOR_BLIND"
],
"additionalAttributes": {
"manufacturer": "Alex2Node zoo",
"model": "zoo-1.0",
"serialNumber": "Alex2Node",
"firmwareVersion": "1.0.0",
"softwareVersion": "1.0.0",
"customIdentifier": "Alex2Node"
},
"capabilities": [
{
"interface": "Alexa.RangeController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "rangeValue"
}
]
},
"instance": "Blind.Lift",
"capabilityResources": {
"friendlyNames": [
{
"@type": "asset",
"value": {
"assetId": "Alexa.Setting.Opening"
}
}
]
},
"configuration": {
"supportedRange": {
"minimumValue": 0,
"maximumValue": 100,
"precision": 1
},
"unitOfMeasure": "Alexa.Unit.Percent"
},
"semantics": {
"actionMappings": [
{
"@type": "ActionsToDirective",
"actions": [
"Alexa.Actions.Close"
],
"directive": {
"name": "SetRangeValue",
"payload": {
"rangeValue": 0
}
}
},
{
"@type": "ActionsToDirective",
"actions": [
"Alexa.Actions.Open"
],
"directive": {
"name": "SetRangeValue",
"payload": {
"rangeValue": 100
}
}
},
{
"@type": "ActionsToDirective",
"actions": [
"Alexa.Actions.Lower"
],
"directive": {
"name": "AdjustRangeValue",
"payload": {
"rangeValueDelta": -10,
"rangeValueDeltaDefault": false
}
}
},
{
"@type": "ActionsToDirective",
"actions": [
"Alexa.Actions.Raise"
],
"directive": {
"name": "AdjustRangeValue",
"payload": {
"rangeValueDelta": 10,
"rangeValueDeltaDefault": false
}
}
}
],
"stateMappings": [
{
"@type": "StatesToValue",
"states": [
"Alexa.States.Closed"
],
"value": 0
},
{
"@type": "StatesToRange",
"states": [
"Alexa.States.Open"
],
"range": {
"minimumValue": 1,
"maximumValue": 100
}
}
]
}
}
]
},
{
"endpointId": "zoo-curtain",
"friendlyName": "Zoo Curtain",
"description": "Alex2Node zoo: the library's own BlindControl example: PowerController + ToggleController 'Shade' with ActionMapping Close->Turn",
"manufacturerName": "Alex2Node zoo",
"displayCategories": [
"INTERIOR_BLIND"
],
"additionalAttributes": {
"manufacturer": "Alex2Node zoo",
"model": "zoo-1.0",
"serialNumber": "Alex2Node",
"firmwareVersion": "1.0.0",
"softwareVersion": "1.0.0",
"customIdentifier": "Alex2Node"
},
"capabilities": [
{
"interface": "Alexa.PowerController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "powerState"
}
]
}
},
{
"interface": "Alexa.ToggleController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "toggleState"
}
]
},
"instance": "Zoo.Shade",
"capabilityResources": {
"friendlyNames": [
{
"@type": "text",
"value": {
"text": "Shade",
"locale": "en-US"
}
}
]
},
"semantics": {
"actionMappings": [
{
"@type": "ActionsToDirective",
"actions": [
"Alexa.Actions.Close"
],
"directive": {
"name": "TurnOn"
}
},
{
"@type": "ActionsToDirective",
"actions": [
"Alexa.Actions.Open"
],
"directive": {
"name": "TurnOff"
}
}
]
}
}
]
},
{
"endpointId": "zoo-fan",
"friendlyName": "Zoo Fan",
"description": "Alex2Node zoo: ModeController 'Speed' (Low/Medium/High, ordered -> AdjustMode) like ExampleModeController, + PowerController",
"manufacturerName": "Alex2Node zoo",
"displayCategories": [
"FAN"
],
"additionalAttributes": {
"manufacturer": "Alex2Node zoo",
"model": "zoo-1.0",
"serialNumber": "Alex2Node",
"firmwareVersion": "1.0.0",
"softwareVersion": "1.0.0",
"customIdentifier": "Alex2Node"
},
"capabilities": [
{
"interface": "Alexa.PowerController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "powerState"
}
]
}
},
{
"interface": "Alexa.ModeController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "mode"
}
]
},
"configuration": {
"ordered": true,
"supportedModes": [
{
"value": "Speed.Low",
"modeResources": {
"friendlyNames": [
{
"@type": "text",
"value": {
"text": "Low",
"locale": "en-US"
}
}
]
}
},
{
"value": "Speed.Medium",
"modeResources": {
"friendlyNames": [
{
"@type": "text",
"value": {
"text": "Medium",
"locale": "en-US"
}
}
]
}
},
{
"value": "Speed.High",
"modeResources": {
"friendlyNames": [
{
"@type": "text",
"value": {
"text": "High",
"locale": "en-US"
}
}
]
}
}
]
},
"instance": "Fan.Speed",
"capabilityResources": {
"friendlyNames": [
{
"@type": "text",
"value": {
"text": "Speed",
"locale": "en-US"
}
}
]
}
}
]
},
{
"endpointId": "zoo-switch",
"friendlyName": "Zoo Switch",
"description": "Alex2Node zoo: ToggleController alone: instance 'Oscillation' (Alexa's canonical toggle example)",
"manufacturerName": "Alex2Node zoo",
"displayCategories": [
"SWITCH"
],
"additionalAttributes": {
"manufacturer": "Alex2Node zoo",
"model": "zoo-1.0",
"serialNumber": "Alex2Node",
"firmwareVersion": "1.0.0",
"softwareVersion": "1.0.0",
"customIdentifier": "Alex2Node"
},
"capabilities": [
{
"interface": "Alexa.ToggleController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "toggleState"
}
]
},
"instance": "Zoo.Oscillation",
"capabilityResources": {
"friendlyNames": [
{
"@type": "text",
"value": {
"text": "Oscillation",
"locale": "en-US"
}
}
]
}
}
]
},
{
"endpointId": "zoo-scene",
"friendlyName": "Zoo Scene",
"description": "Alex2Node zoo: SceneController, DEFERRED: DeferredResponse on alexaResponce, then ActivationStarted via sendSceneResponse(..., s",
"manufacturerName": "Alex2Node zoo",
"displayCategories": [
"SCENE_TRIGGER"
],
"additionalAttributes": {
"manufacturer": "Alex2Node zoo",
"model": "zoo-1.0",
"serialNumber": "Alex2Node",
"firmwareVersion": "1.0.0",
"softwareVersion": "1.0.0",
"customIdentifier": "Alex2Node"
},
"capabilities": [
{
"interface": "Alexa.SceneController",
"version": "3",
"type": "AlexaInterface",
"supportsDeactivation": true,
"proactivelyReported": false
}
]
},
{
"endpointId": "zoo-fast-scene",
"friendlyName": "Zoo Fast Scene",
"description": "Alex2Node zoo: SceneController answering synchronously with ActivationStarted / DeactivationStarted",
"manufacturerName": "Alex2Node zoo",
"displayCategories": [
"ACTIVITY_TRIGGER"
],
"additionalAttributes": {
"manufacturer": "Alex2Node zoo",
"model": "zoo-1.0",
"serialNumber": "Alex2Node",
"firmwareVersion": "1.0.0",
"softwareVersion": "1.0.0",
"customIdentifier": "Alex2Node"
},
"capabilities": [
{
"interface": "Alexa.SceneController",
"version": "3",
"type": "AlexaInterface",
"supportsDeactivation": true,
"proactivelyReported": false
}
]
},
{
"endpointId": "zoo-slow-lamp",
"friendlyName": "Zoo Slow Lamp",
"description": "Alex2Node zoo: PowerController answering DeferredResponse first, then the Response / StateReport on deferredResponse 4 s later (",
"manufacturerName": "Alex2Node zoo",
"displayCategories": [
"LIGHT"
],
"additionalAttributes": {
"manufacturer": "Alex2Node zoo",
"model": "zoo-1.0",
"serialNumber": "Alex2Node",
"firmwareVersion": "1.0.0",
"softwareVersion": "1.0.0",
"customIdentifier": "Alex2Node"
},
"capabilities": [
{
"interface": "Alexa.PowerController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "powerState"
}
]
}
}
]
},
{
"endpointId": "zoo-broken-lamp",
"friendlyName": "Zoo Broken Lamp",
"description": "Alex2Node zoo: PowerController that answers every directive with ErrorResponse ENDPOINT_UNREACHABLE and ReportState with connect",
"manufacturerName": "Alex2Node zoo",
"displayCategories": [
"LIGHT"
],
"additionalAttributes": {
"manufacturer": "Alex2Node zoo",
"model": "zoo-1.0",
"serialNumber": "Alex2Node",
"firmwareVersion": "1.0.0",
"softwareVersion": "1.0.0",
"customIdentifier": "Alex2Node"
},
"capabilities": [
{
"interface": "Alexa.PowerController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": false,
"supported": [
{
"name": "powerState"
}
]
}
}
]
},
{
"endpointId": "zoo-health-lamp",
"friendlyName": "Zoo Health Lamp",
"description": "Alex2Node zoo: PowerController + an explicitly declared Alexa.EndpointHealth capability (the library emits version 3.3; insteonD",
"manufacturerName": "Alex2Node zoo",
"displayCategories": [
"LIGHT"
],
"additionalAttributes": {
"manufacturer": "Alex2Node zoo",
"model": "zoo-1.0",
"serialNumber": "Alex2Node",
"firmwareVersion": "1.0.0",
"softwareVersion": "1.0.0",
"customIdentifier": "Alex2Node"
},
"capabilities": [
{
"interface": "Alexa.PowerController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "powerState"
}
]
}
},
{
"interface": "Alexa.EndpointHealth",
"version": "3.3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "connectivity"
}
]
}
}
]
},
{
"endpointId": "zoo-health-lamp-31",
"friendlyName": "Zoo Health Lamp Two",
"description": "Alex2Node zoo: Zoo Health Lamp's twin with Alexa.EndpointHealth declared at the DOCUMENTED version 3.1 (patched; the library emi",
"manufacturerName": "Alex2Node zoo",
"displayCategories": [
"LIGHT"
],
"additionalAttributes": {
"manufacturer": "Alex2Node zoo",
"model": "zoo-1.0",
"serialNumber": "Alex2Node",
"firmwareVersion": "1.0.0",
"softwareVersion": "1.0.0",
"customIdentifier": "Alex2Node"
},
"capabilities": [
{
"interface": "Alexa.PowerController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "powerState"
}
]
}
},
{
"interface": "Alexa.EndpointHealth",
"version": "3.1",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "connectivity"
}
]
}
}
]
},
{
"endpointId": "zoo-color-lamp",
"friendlyName": "Zoo Color Lamp",
"description": "Alex2Node zoo: ColorController (SetColor {hue, saturation, brightness}) on a Power + Brightness light",
"manufacturerName": "Alex2Node zoo",
"displayCategories": [
"LIGHT"
],
"additionalAttributes": {
"manufacturer": "Alex2Node zoo",
"model": "zoo-1.0",
"serialNumber": "Alex2Node",
"firmwareVersion": "1.0.0",
"softwareVersion": "1.0.0",
"customIdentifier": "Alex2Node"
},
"capabilities": [
{
"interface": "Alexa.PowerController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "powerState"
}
]
}
},
{
"interface": "Alexa.BrightnessController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "brightness"
}
]
}
},
{
"interface": "Alexa.ColorController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "color"
}
]
}
}
]
},
{
"endpointId": "zoo-warm-lamp",
"friendlyName": "Zoo Warm Lamp",
"description": "Alex2Node zoo: ColorTemperatureController (SetColorTemperature / IncreaseColorTemperature / DecreaseColorTemperature, 2200-7000 ",
"manufacturerName": "Alex2Node zoo",
"displayCategories": [
"LIGHT"
],
"additionalAttributes": {
"manufacturer": "Alex2Node zoo",
"model": "zoo-1.0",
"serialNumber": "Alex2Node",
"firmwareVersion": "1.0.0",
"softwareVersion": "1.0.0",
"customIdentifier": "Alex2Node"
},
"capabilities": [
{
"interface": "Alexa.PowerController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "powerState"
}
]
}
},
{
"interface": "Alexa.ColorTemperatureController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "colorTemperatureInKelvin"
}
]
}
}
]
},
{
"endpointId": "zoo-blower",
"friendlyName": "Zoo Blower",
"description": "Alex2Node zoo: PercentageController (SetPercentage / AdjustPercentage; 0 % = off) + PowerController - property list added here (",
"manufacturerName": "Alex2Node zoo",
"displayCategories": [
"FAN"
],
"additionalAttributes": {
"manufacturer": "Alex2Node zoo",
"model": "zoo-1.0",
"serialNumber": "Alex2Node",
"firmwareVersion": "1.0.0",
"softwareVersion": "1.0.0",
"customIdentifier": "Alex2Node"
},
"capabilities": [
{
"interface": "Alexa.PowerController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "powerState"
}
]
}
},
{
"interface": "Alexa.PercentageController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "percentage"
}
]
}
}
]
},
{
"endpointId": "zoo-heater",
"friendlyName": "Zoo Heater",
"description": "Alex2Node zoo: PowerLevelController (SetPowerLevel / AdjustPowerLevel 0-100) + PowerController - property list added here (the l",
"manufacturerName": "Alex2Node zoo",
"displayCategories": [
"OTHER"
],
"additionalAttributes": {
"manufacturer": "Alex2Node zoo",
"model": "zoo-1.0",
"serialNumber": "Alex2Node",
"firmwareVersion": "1.0.0",
"softwareVersion": "1.0.0",
"customIdentifier": "Alex2Node"
},
"capabilities": [
{
"interface": "Alexa.PowerController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "powerState"
}
]
}
},
{
"interface": "Alexa.PowerLevelController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "powerLevel"
}
]
}
}
]
},
{
"endpointId": "zoo-lock",
"friendlyName": "Zoo Lock",
"description": "Alex2Node zoo: LockController (Lock / Unlock -> lockState LOCKED / UNLOCKED) - property list added here (the library has none); ",
"manufacturerName": "Alex2Node zoo",
"displayCategories": [
"SMARTLOCK"
],
"additionalAttributes": {
"manufacturer": "Alex2Node zoo",
"model": "zoo-1.0",
"serialNumber": "Alex2Node",
"firmwareVersion": "1.0.0",
"softwareVersion": "1.0.0",
"customIdentifier": "Alex2Node"
},
"capabilities": [
{
"interface": "Alexa.LockController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "lockState"
}
]
}
}
]
},
{
"endpointId": "zoo-door",
"friendlyName": "Zoo Door",
"description": "Alex2Node zoo: ContactSensor (detectionState NOT_DETECTED = closed; a ChangeReport flips it)",
"manufacturerName": "Alex2Node zoo",
"displayCategories": [
"CONTACT_SENSOR"
],
"additionalAttributes": {
"manufacturer": "Alex2Node zoo",
"model": "zoo-1.0",
"serialNumber": "Alex2Node",
"firmwareVersion": "1.0.0",
"softwareVersion": "1.0.0",
"customIdentifier": "Alex2Node"
},
"capabilities": [
{
"interface": "Alexa.ContactSensor",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "detectionState"
}
]
}
}
]
},
{
"endpointId": "zoo-motion",
"friendlyName": "Zoo Motion",
"description": "Alex2Node zoo: MotionSensor (detectionState; a ChangeReport flips it) - property list added here (the library has none)",
"manufacturerName": "Alex2Node zoo",
"displayCategories": [
"MOTION_SENSOR"
],
"additionalAttributes": {
"manufacturer": "Alex2Node zoo",
"model": "zoo-1.0",
"serialNumber": "Alex2Node",
"firmwareVersion": "1.0.0",
"softwareVersion": "1.0.0",
"customIdentifier": "Alex2Node"
},
"capabilities": [
{
"interface": "Alexa.MotionSensor",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "detectionState"
}
]
}
}
]
},
{
"endpointId": "zoo-tv",
"friendlyName": "Zoo TV",
"description": "Alex2Node zoo: ChannelController (ChangeChannel / SkipChannels -> channel {number, callSign, affiliateCallSign}) + PowerControll",
"manufacturerName": "Alex2Node zoo",
"displayCategories": [
"TV"
],
"additionalAttributes": {
"manufacturer": "Alex2Node zoo",
"model": "zoo-1.0",
"serialNumber": "Alex2Node",
"firmwareVersion": "1.0.0",
"softwareVersion": "1.0.0",
"customIdentifier": "Alex2Node"
},
"capabilities": [
{
"interface": "Alexa.PowerController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "powerState"
}
]
}
},
{
"interface": "Alexa.ChannelController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"retrievable": true,
"proactivelyReported": true,
"supported": [
{
"name": "channel"
}
]
}
}
]
}
]