registry: Lock, Color, ColorTemperature, Percentage, PowerLevel, Contact, Motion, Humidity

Eight descriptors written from their pages, each with its version, the value of its property and the payload of
every directive. Seven replace a stub; Alexa.HumiditySensor is new, as AlexaInterfaceType.HUMIDITY_SENSOR.
LockController is deferrable: defer() on a lock logs no warning.

A 1.x declaration of LockController, MotionSensor, PercentageController or PowerLevelController now lists its
property in discovery, where 1.5.2 listed none: the zoo's lock, motion sensor and heater come out as the JSON
Alexa accepted. A payload that does not fit (hue 361, 900 K) is answered with INVALID_VALUE.

48 examples of the eight pages are saved as fixtures. 191 tests pass, 168 before.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
David 2026-09-28 20:29:04 +00:00
parent feff828ec1
commit af1489696d
111 changed files with 2971 additions and 45 deletions

View file

@ -295,12 +295,12 @@ test("a phrase is mapped once on an endpoint, across its Range, Mode and Toggle
test("a stub is declared like any interface and checked for nothing but being declared twice", () => {
const lock = endpoint("lock-1", "Front Door", ["SMARTLOCK"]);
const capability = lock.add(registry.get("Alexa.LockController"), { proactivelyReported: true });
const capability = lock.add(registry.get("Alexa.KeypadController"), { proactivelyReported: true });
assert.deepEqual(capability.toJSON(), {
type: "AlexaInterface",
interface: "Alexa.LockController",
version: "3",
interface: "Alexa.KeypadController",
version: "1",
properties: { supported: [], proactivelyReported: true, retrievable: true },
});
assert.equal(refused(() => lock.add(registry.get("Alexa.LockController"))).message, "lock-1: Alexa.LockController: the interface is declared twice");
assert.equal(refused(() => lock.add(registry.get("Alexa.KeypadController"))).message, "lock-1: Alexa.KeypadController: the interface is declared twice");
});