From 6ff86345c96f81e4cce6b9e888b77a9474718bde Mon Sep 17 00:00:00 2001 From: Gregg Date: Sun, 21 Jan 2024 15:40:41 -0600 Subject: [PATCH] update --- src/Span.h | 98 +++++++++++------------ tools/test.md | 212 +++++++++++++++++++++++++------------------------- 2 files changed, 156 insertions(+), 154 deletions(-) diff --git a/src/Span.h b/src/Span.h index cbddad3..e4dc67e 100644 --- a/src/Span.h +++ b/src/Span.h @@ -331,7 +331,7 @@ namespace Service { CREATE_SERV(StatelessProgrammableSwitch,89) // Defines a "Stateless" Programmable Switch that can be used to trigger actions in the Home App. REQ(ProgrammableSwitchEvent); OPT(Name); - OPT_DEP(ServiceLabelIndex); + OPT(ServiceLabelIndex); END_SERV CREATE_SERV(Switch,49) // Defines a generic Switch. @@ -381,7 +381,7 @@ namespace Service { OPT(SetDuration); OPT(RemainingDuration); OPT(IsConfigured); - OPT_DEP(ServiceLabelIndex); + OPT(ServiceLabelIndex); OPT(StatusFault); OPT(Name); END_SERV @@ -452,9 +452,9 @@ namespace Characteristic { CREATE_CHAR(uint8_t,CurrentHeatingCoolingState,0,0,2,IDLE,HEATING,COOLING); // indicates whether appliance is currently heating, cooling, or just idle CREATE_CHAR(uint8_t,CurrentHeaterCoolerState,1,0,3,INACTIVE,IDLE,HEATING,COOLING); // indicates whether appliance is currently heating, cooling, idle, or off CREATE_CHAR(uint8_t,CurrentMediaState,0,0,5); - CREATE_CHAR(double,CurrentRelativeHumidity,0,0,100); //current humidity measured as a percentage + CREATE_CHAR(double,CurrentRelativeHumidity,0,0,100); // current humidity measured as a percentage CREATE_CHAR(double,CurrentTemperature,0,0,100); // current temperature measured in Celsius - CREATE_CHAR(int,CurrentTiltAngle,0,-90,90); // angle (in degrees) of slats from fully up or left (-90) to fully open (0) to fully down or right (90) + CREATE_CHAR(int,CurrentTiltAngle,0,-90,90); // current angle (in degrees) of slats from fully up or left (-90) to fully open (0) to fully down or right (90) CREATE_CHAR(double,FilterLifeLevel,0,0,100); // measures as a percentage of remaining life CREATE_CHAR(uint8_t,FilterChangeIndication,0,0,1,NO_CHANGE_NEEDED,CHANGE_NEEDED); // indicates state of filter CREATE_CHAR(const char *,FirmwareRevision,"1.0.0",0,1); // must be in form x[.y[.z]] - informational only @@ -462,7 +462,7 @@ namespace Characteristic { CREATE_CHAR(double,HeatingThresholdTemperature,16,0,25); // heating turns on when temperature (in Celsius) falls below this threshold CREATE_CHAR(boolean,HoldPosition,false,0,1); // deprecated CREATE_CHAR(double,Hue,0,0,360); // color (in degrees) from red (0) to green (120) to blue (240) and back to red (360) - CREATE_CHAR(boolean,Identify,0,0,1,IDLE,RUN_ID); // the Home App sets this to RUN_ID when it wants the device to run its identification routine + CREATE_CHAR(boolean,Identify,0,0,1,UNUSED,RUN_ID); // the Home App sets this to RUN_ID when it wants the device to run its identification routine CREATE_CHAR(uint32_t,Identifier,0,0,255); CREATE_CHAR(uint8_t,InputDeviceType,0,0,6); CREATE_CHAR(uint8_t,InputSourceType,0,0,10); @@ -488,55 +488,55 @@ namespace Characteristic { CREATE_CHAR(double,PM10Density,0,0,1000); // 10-micron particulate density, measured in µg/m3 CREATE_CHAR(uint8_t,PositionState,2,0,2,GOING_TO_MINIMUM,GOING_TO_MAXIMUM,STOPPED); // deprecated CREATE_CHAR(uint8_t,PowerModeSelection,0,0,1); - CREATE_CHAR(uint8_t,ProgramMode,0,0,2,NONE,SCHEDULED,SCHEDULE_OVERRIDEN); - CREATE_CHAR(uint8_t,ProgrammableSwitchEvent,0,0,2,SINGLE_PRESS,DOUBLE_PRESS,LONG_PRESS); - CREATE_CHAR(double,RelativeHumidityDehumidifierThreshold,50,0,100); - CREATE_CHAR(double,RelativeHumidityHumidifierThreshold,50,0,100); - CREATE_CHAR(uint32_t,RemainingDuration,60,0,3600); + CREATE_CHAR(uint8_t,ProgramMode,0,0,2,NONE,SCHEDULED,SCHEDULE_OVERRIDEN); // indicates if pre-scheduled program is running + CREATE_CHAR(uint8_t,ProgrammableSwitchEvent,0,0,2,SINGLE_PRESS,DOUBLE_PRESS,LONG_PRESS); // specifies type of button press + CREATE_CHAR(double,RelativeHumidityDehumidifierThreshold,50,0,100); // dehumidfier turns on when humidity rises above this threshold + CREATE_CHAR(double,RelativeHumidityHumidifierThreshold,50,0,100); // humidfier turns on when humidity falls below this threshold + CREATE_CHAR(uint32_t,RemainingDuration,60,0,3600); // duration (in seconds) remaining for Service to be active/on CREATE_CHAR(uint8_t,RemoteKey,0,0,16); - CREATE_CHAR(uint8_t,ResetFilterIndication,0,1,1); - CREATE_CHAR(int,RotationDirection,0,0,1,CLOCKWISE,COUNTERCLOCKWISE); - CREATE_CHAR(double,RotationSpeed,0,0,100); - CREATE_CHAR(double,Saturation,0,0,100); - CREATE_CHAR(uint8_t,SecuritySystemAlarmType,0,0,1,KNOWN,UNKNOWN); - CREATE_CHAR(uint8_t,SecuritySystemCurrentState,3,0,4,ARMED_STAY,ARMED_AWAY,ARMED_NIGHT,DISARMED,ALARM_TRIGGERED); - CREATE_CHAR(uint8_t,SecuritySystemTargetState,3,0,3,ARM_STAY,ARM_AWAY,ARM_NIGHT,DISARM); - CREATE_CHAR(const char *,SerialNumber,"HS-12345",0,1); - CREATE_CHAR(uint8_t,ServiceLabelIndex,1,1,255); - CREATE_CHAR(uint8_t,ServiceLabelNamespace,1,0,1,DOTS,NUMERALS); - CREATE_CHAR(uint8_t,SlatType,0,0,1,HORIZONTAL,VERTICAL); + CREATE_CHAR(uint8_t,ResetFilterIndication,0,0,1,UNUSED,RESET_FILTER); // the Home App sets this to RESET_FILTER when it wants to reset the FilterChangeIndication + CREATE_CHAR(int,RotationDirection,0,0,1,CLOCKWISE,COUNTERCLOCKWISE); // indicates the rotation direction of a fan + CREATE_CHAR(double,RotationSpeed,0,0,100); // measured as a percentage + CREATE_CHAR(double,Saturation,0,0,100); // color saturation, measured as a percentage + CREATE_CHAR(uint8_t,SecuritySystemAlarmType,0,0,1,KNOWN,UNKNOWN); // indicates whether alarm was triggered for known reason + CREATE_CHAR(uint8_t,SecuritySystemCurrentState,3,0,4,ARMED_STAY,ARMED_AWAY,ARMED_NIGHT,DISARMED,ALARM_TRIGGERED); // indicates current state of the security system + CREATE_CHAR(uint8_t,SecuritySystemTargetState,3,0,3,ARM_STAY,ARM_AWAY,ARM_NIGHT,DISARM); // indicates desired state of the security system + CREATE_CHAR(const char *,SerialNumber,"HS-12345",0,1); // any string - informational only + CREATE_CHAR(uint8_t,ServiceLabelIndex,1,1,255); // numerical index used to distinguish multiple copies of the same Service within an Accessory + CREATE_CHAR(uint8_t,ServiceLabelNamespace,1,0,1,DOTS,NUMERALS); // unused + CREATE_CHAR(uint8_t,SlatType,0,0,1,HORIZONTAL,VERTICAL); // indicates the direction of a slat or group of slats CREATE_CHAR(uint8_t,SleepDiscoveryMode,0,0,1); - CREATE_CHAR(uint8_t,SmokeDetected,0,0,1,NOT_DETECTED,DETECTED); - CREATE_CHAR(boolean,StatusActive,1,0,1); - CREATE_CHAR(uint8_t,StatusFault,0,0,1,NO_FAULT,FAULT); - CREATE_CHAR(uint8_t,StatusJammed,0,0,1,NOT_JAMMED,JAMMED); - CREATE_CHAR(uint8_t,StatusLowBattery,0,0,1,NOT_LOW_BATTERY,LOW_BATTERY); - CREATE_CHAR(uint8_t,StatusTampered,0,0,1,NOT_TAMPERED,TAMPERED); - CREATE_CHAR(double,SulphurDioxideDensity,0,0,1000); - CREATE_CHAR(uint8_t,SwingMode,0,0,1,SWING_DISABLED,SWING_ENABLED); - CREATE_CHAR(uint8_t,TargetAirPurifierState,1,0,1,MANUAL,AUTO); - CREATE_CHAR(uint8_t,TargetFanState,1,0,1,MANUAL,AUTO); - CREATE_CHAR(int,TargetTiltAngle,0,-90,90); - CREATE_CHAR(uint8_t,TargetHeaterCoolerState,0,0,2,AUTO,HEAT,COOL); - CREATE_CHAR(uint32_t,SetDuration,60,0,3600); - CREATE_CHAR(int,TargetHorizontalTiltAngle,0,-90,90); - CREATE_CHAR(uint8_t,TargetHumidifierDehumidifierState,0,0,2,AUTO,HUMIDIFY,DEHUMIDIFY); - CREATE_CHAR(uint8_t,TargetPosition,0,0,100); - CREATE_CHAR(uint8_t,TargetDoorState,1,0,1,OPEN,CLOSED); - CREATE_CHAR(uint8_t,TargetHeatingCoolingState,0,0,3,OFF,HEAT,COOL,AUTO); - CREATE_CHAR(uint8_t,TargetMediaState,0,0,2); - CREATE_CHAR(double,TargetRelativeHumidity,0,0,100); - CREATE_CHAR(double,TargetTemperature,16,10,38); + CREATE_CHAR(uint8_t,SmokeDetected,0,0,1,NOT_DETECTED,DETECTED); // indicates if smoke is detected + CREATE_CHAR(boolean,StatusActive,1,0,1,NOT_FUNCTIONING,FUNCTIONING); // indicates whether the Service is properly functioning + CREATE_CHAR(uint8_t,StatusFault,0,0,1,NO_FAULT,FAULT); // indicates whether the Service has a fault + CREATE_CHAR(uint8_t,StatusJammed,0,0,1,NOT_JAMMED,JAMMED); // indicates whether the Service has been "jammed" + CREATE_CHAR(uint8_t,StatusLowBattery,0,0,1,NOT_LOW_BATTERY,LOW_BATTERY); // indicates state of battery + CREATE_CHAR(uint8_t,StatusTampered,0,0,1,NOT_TAMPERED,TAMPERED); // indicates whether the Service has been tampered with + CREATE_CHAR(double,SulphurDioxideDensity,0,0,1000); // measured in µg/m3 + CREATE_CHAR(uint8_t,SwingMode,0,0,1,SWING_DISABLED,SWING_ENABLED); // indicates whether swing-nmode is enabled + CREATE_CHAR(uint8_t,TargetAirPurifierState,1,0,1,MANUAL,AUTO); // indicates desired state of air purifier + CREATE_CHAR(uint8_t,TargetFanState,1,0,1,MANUAL,AUTO); // indicates desired state of fan + CREATE_CHAR(int,TargetTiltAngle,0,-90,90); // indicated desired angle (in degrees) of slats from fully up or left (-90) to fully open (0) to fully down or right (90) + CREATE_CHAR(uint8_t,TargetHeaterCoolerState,0,0,2,AUTO,HEAT,COOL); // indicates desired state of heater/cooler + CREATE_CHAR(uint32_t,SetDuration,60,0,3600); // specifies the duration (in seconds) for a Service to remain on once activated + CREATE_CHAR(int,TargetHorizontalTiltAngle,0,-90,90); // indicates desired angle (in degrees) of slats from fully up (-90) to fully open (0) to fully down (90) + CREATE_CHAR(uint8_t,TargetHumidifierDehumidifierState,0,0,2,AUTO,HUMIDIFY,DEHUMIDIFY); // indicates desired state of humidifier/dehumidifier + CREATE_CHAR(uint8_t,TargetPosition,0,0,100); // indicates target position (as a percentage) from fully closed (0) to full open (100) + CREATE_CHAR(uint8_t,TargetDoorState,1,0,1,OPEN,CLOSED); // indicates desires state of door + CREATE_CHAR(uint8_t,TargetHeatingCoolingState,0,0,3,OFF,HEAT,COOL,AUTO); // indicates desired state of appliance + CREATE_CHAR(uint8_t,TargetMediaState,0,0,2); // unused + CREATE_CHAR(double,TargetRelativeHumidity,0,0,100); // indicates desired humidity measured as a percentage + CREATE_CHAR(double,TargetTemperature,16,10,38); // indicates desired temperature measure in Celsius CREATE_CHAR(uint8_t,TargetVisibilityState,0,0,1); - CREATE_CHAR(uint8_t,TemperatureDisplayUnits,0,0,1,CELSIUS,FAHRENHEIT); - CREATE_CHAR(int,TargetVerticalTiltAngle,0,-90,90); - CREATE_CHAR(uint8_t,ValveType,0,0,3); - CREATE_CHAR(const char *,Version,"1.0.0",0,1); - CREATE_CHAR(double,VOCDensity,0,0,1000); - CREATE_CHAR(uint8_t,Volume,0,0,100); + CREATE_CHAR(uint8_t,TemperatureDisplayUnits,0,0,1,CELSIUS,FAHRENHEIT); // indicates the desired units to display the temperature on the device itself (has no effect on Home App) + CREATE_CHAR(int,TargetVerticalTiltAngle,0,-90,90); // indicates desired angle (in degrees) of slats from fully left (-90) to fully open (0) to fully right (90) + CREATE_CHAR(uint8_t,ValveType,0,0,3,GENERIC,IRRIGATION,SHOWER_HEAD,FAUCET); // indicates the type of valve + CREATE_CHAR(const char *,Version,"1.0.0",0,1); // unused + CREATE_CHAR(double,VOCDensity,0,0,1000); // measured in µg/m3 + CREATE_CHAR(uint8_t,Volume,0,0,100); // unused CREATE_CHAR(uint8_t,VolumeControlType,0,0,3); CREATE_CHAR(uint8_t,VolumeSelector,0,0,1); - CREATE_CHAR(double,WaterLevel,0,0,100); + CREATE_CHAR(double,WaterLevel,0,0,100); // measured as a percentage } diff --git a/tools/test.md b/tools/test.md index 593f945..3e146ed 100644 --- a/tools/test.md +++ b/tools/test.md @@ -1,12 +1,12 @@ ## AccessoryInformation (3E)
Required Identification Information. For each Accessory in a HomeSpan device this must be included as the first Service.
- + - +
CharacteristicFormatPermsMinMaxConstants/Defaults
Identify (14) :small_blue_diamond:
  • the Home App sets this to RUN_ID when it wants the device to run its identification routine
boolPW01
  • IDLE (0) :heavy_check_mark:
  • RUN_ID (1) 
Identify (14) :small_blue_diamond:
  • the Home App sets this to RUN_ID when it wants the device to run its identification routine
boolPW01
  • UNUSED (0) :heavy_check_mark:
  • RUN_ID (1) 
FirmwareRevision (52)
  • must be in form x[.y[.z]] - informational only
stringPR+EV--"1.0.0"
Manufacturer (20)
  • any string - informational only
stringPR--"HomeSpan"
Model (21)
  • any string - informational only
stringPR--"HomeSpan-ESP32"
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
SerialNumber (30)
stringPR--"HS-12345"
SerialNumber (30)
  • any string - informational only
stringPR--"HS-12345"
HardwareRevision (53)
  • must be in form x[.y[.z]] - informational only
stringPR--"1.0.0"
@@ -15,10 +15,10 @@ CharacteristicFormatPermsMinMaxConstants/Defaults Active (B0) :small_blue_diamond:uint8PW+PR+EV01 CurrentAirPurifierState (A9) :small_blue_diamond:uint8PR+EV02 -TargetAirPurifierState (A8) :small_blue_diamond:uint8PW+PR+EV01 +TargetAirPurifierState (A8) :small_blue_diamond:uint8PW+PR+EV01 Name (23) stringPR--"unnamed" -RotationSpeed (29) floatPR+PW+EV01000 -SwingMode (B6) uint8PR+EV+PW01 +RotationSpeed (29) floatPR+PW+EV01000 +SwingMode (B6) uint8PR+EV+PW01 LockPhysicalControls (A7) uint8PW+PR+EV01 @@ -29,14 +29,14 @@ Name (23) stringPR--"unnamed" OzoneDensity (C3) floatPR+EV010000 NitrogenDioxideDensity (C4) floatPR+EV010000 -SulphurDioxideDensity (C5) floatPR+EV010000 +SulphurDioxideDensity (C5) floatPR+EV010000 PM25Density (C6) floatPR+EV010000 PM10Density (C7) floatPR+EV010000 -VOCDensity (C8) floatPR+EV010000 -StatusActive (75) boolPR+EV011 -StatusFault (77) uint8PR+EV01 -StatusTampered (7A) uint8PR+EV01 -StatusLowBattery (79) uint8PR+EV01 +VOCDensity (C8) floatPR+EV010000 +StatusActive (75) boolPR+EV01 +StatusFault (77) uint8PR+EV01 +StatusTampered (7A) uint8PR+EV01 +StatusLowBattery (79) uint8PR+EV01 ## BatteryService (96) @@ -44,7 +44,7 @@ CharacteristicFormatPermsMinMaxConstants/Defaults BatteryLevel (68) :small_blue_diamond:uint8PR+EV01000 ChargingState (8F) :small_blue_diamond:uint8PR+EV02 -StatusLowBattery (79) :small_blue_diamond:uint8PR+EV01 +StatusLowBattery (79) :small_blue_diamond:uint8PR+EV01 Name (23) stringPR--"unnamed" @@ -53,10 +53,10 @@ CharacteristicFormatPermsMinMaxConstants/Defaults CarbonDioxideDetected (92) :small_blue_diamond:uint8PR+EV01 Name (23) stringPR--"unnamed" -StatusActive (75) boolPR+EV011 -StatusFault (77) uint8PR+EV01 -StatusTampered (7A) uint8PR+EV01 -StatusLowBattery (79) uint8PR+EV01 +StatusActive (75) boolPR+EV01 +StatusFault (77) uint8PR+EV01 +StatusTampered (7A) uint8PR+EV01 +StatusLowBattery (79) uint8PR+EV01 CarbonDioxideLevel (93) floatPR+EV01000000 CarbonDioxidePeakLevel (94) floatPR+EV01000000 @@ -66,10 +66,10 @@ CharacteristicFormatPermsMinMaxConstants/Defaults CarbonMonoxideDetected (69) :small_blue_diamond:uint8PR+EV01 Name (23) stringPR--"unnamed" -StatusActive (75) boolPR+EV011 -StatusFault (77) uint8PR+EV01 -StatusTampered (7A) uint8PR+EV01 -StatusLowBattery (79) uint8PR+EV01 +StatusActive (75) boolPR+EV01 +StatusFault (77) uint8PR+EV01 +StatusTampered (7A) uint8PR+EV01 +StatusLowBattery (79) uint8PR+EV01 CarbonMonoxideLevel (90) floatPR+EV01000 CarbonMonoxidePeakLevel (91) floatPR+EV01000 @@ -79,17 +79,17 @@ CharacteristicFormatPermsMinMaxConstants/Defaults ContactSensorState (6A) :small_blue_diamond:uint8PR+EV01 Name (23) stringPR--"unnamed" -StatusActive (75) boolPR+EV011 -StatusFault (77) uint8PR+EV01 -StatusTampered (7A) uint8PR+EV01 -StatusLowBattery (79) uint8PR+EV01 +StatusActive (75) boolPR+EV01 +StatusFault (77) uint8PR+EV01 +StatusTampered (7A) uint8PR+EV01 +StatusLowBattery (79) uint8PR+EV01 ## Door (81)
Defines a motorized Door.
- +
CharacteristicFormatPermsMinMaxConstants/Defaults
CurrentPosition (6D) :small_blue_diamond:
  • current position (as a percentage) from fully closed (0) to full open (100)
uint8PR+EV01000
TargetPosition (7C) :small_blue_diamond:
uint8PW+PR+EV01000
TargetPosition (7C) :small_blue_diamond:
  • indicates target position (as a percentage) from fully closed (0) to full open (100)
uint8PW+PR+EV01000
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
ObstructionDetected (24)
  • indicates if obstruction is detected
boolPR+EV01
  • NOT_DETECTED (0) :heavy_check_mark:
  • DETECTED (1) 
@@ -97,7 +97,7 @@ ## Doorbell (121)
Defines a Doorbell. Can be used on a standalone basis or in conjunction with a LockMechanism Service.
- +
CharacteristicFormatPermsMinMaxConstants/Defaults
ProgrammableSwitchEvent (73) :small_blue_diamond:
uint8PR+EV+NV02
  • SINGLE_PRESS (0) :heavy_check_mark:
  • DOUBLE_PRESS (1) 
  • LONG_PRESS (2) 
ProgrammableSwitchEvent (73) :small_blue_diamond:
  • specifies type of button press
uint8PR+EV+NV02
  • SINGLE_PRESS (0) :heavy_check_mark:
  • DOUBLE_PRESS (1) 
  • LONG_PRESS (2) 
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
@@ -107,10 +107,10 @@ Active (B0) :small_blue_diamond:uint8PW+PR+EV01 Name (23) stringPR--"unnamed" CurrentFanState (AF) uint8PR+EV02 -TargetFanState (BF) uint8PW+PR+EV01 -RotationDirection (28) intPR+PW+EV01 -RotationSpeed (29) floatPR+PW+EV01000 -SwingMode (B6) uint8PR+EV+PW01 +TargetFanState (BF) uint8PW+PR+EV01 +RotationDirection (28) intPR+PW+EV01 +RotationSpeed (29) floatPR+PW+EV01000 +SwingMode (B6) uint8PR+EV+PW01 LockPhysicalControls (A7) uint8PW+PR+EV01 @@ -118,7 +118,7 @@
Defines the master control for a multi-Valve appliance. Linked Services: Valve (at least one required), and HeaterCooler (optional).
- +
CharacteristicFormatPermsMinMaxConstants/Defaults
Active (B0) :small_blue_diamond:
  • indicates if the Service is active/on
uint8PW+PR+EV01
  • INACTIVE (0) :heavy_check_mark:
  • ACTIVE (1) 
StatusFault (77)
uint8PR+EV01
  • NO_FAULT (0) :heavy_check_mark:
  • FAULT (1) 
StatusFault (77)
  • indicates whether the Service has a fault
uint8PR+EV01
  • NO_FAULT (0) :heavy_check_mark:
  • FAULT (1) 
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
@@ -128,19 +128,19 @@ FilterChangeIndication (AC) :small_blue_diamond:uint8PR+EV01 Name (23) stringPR--"unnamed" FilterLifeLevel (AB) floatPR+EV01000 -ResetFilterIndication (AD) uint8PW110 +ResetFilterIndication (AD) uint8PW01 ## GarageDoorOpener (41)
Defines a motorized Garage Door Opener.
- + - +
CharacteristicFormatPermsMinMaxConstants/Defaults
CurrentDoorState (E) :small_blue_diamond:
  • indicates current state of a door
uint8PR+EV04
  • OPEN (0) 
  • CLOSED (1) :heavy_check_mark:
  • OPENING (2) 
  • CLOSING (3) 
  • STOPPED (4) 
TargetDoorState (32) :small_blue_diamond:
uint8PW+PR+EV01
  • OPEN (0) 
  • CLOSED (1) :heavy_check_mark:
TargetDoorState (32) :small_blue_diamond:
  • indicates desires state of door
uint8PW+PR+EV01
  • OPEN (0) 
  • CLOSED (1) :heavy_check_mark:
ObstructionDetected (24) :small_blue_diamond:
  • indicates if obstruction is detected
boolPR+EV01
  • NOT_DETECTED (0) :heavy_check_mark:
  • DETECTED (1) 
LockCurrentState (1D)
  • indictates state of a lock
uint8PR+EV03
  • UNLOCKED (0) :heavy_check_mark:
  • LOCKED (1) 
  • JAMMED (2) 
  • UNKNOWN (3) 
LockTargetState (1E)
  • indicates desired state of lock
uint8PW+PR+EV01
  • UNLOCK (0) :heavy_check_mark:
  • LOCK (1) 
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
Version (37) :small_blue_diamond:
stringPR--"1.0.0"
Version (37) :small_blue_diamond:
  • unused
stringPR--"1.0.0"
## HeaterCooler (BC) @@ -149,11 +149,11 @@ Active (B0) :small_blue_diamond:uint8PW+PR+EV01 CurrentTemperature (11) :small_blue_diamond:floatPR+EV01000 CurrentHeaterCoolerState (B1) :small_blue_diamond:uint8PR+EV03 -TargetHeaterCoolerState (B2) :small_blue_diamond:uint8PW+PR+EV02 +TargetHeaterCoolerState (B2) :small_blue_diamond:uint8PW+PR+EV02 Name (23) stringPR--"unnamed" -RotationSpeed (29) floatPR+PW+EV01000 -TemperatureDisplayUnits (36) uint8PW+PR+EV01 -SwingMode (B6) uint8PR+EV+PW01 +RotationSpeed (29) floatPR+PW+EV01000 +TemperatureDisplayUnits (36) uint8PW+PR+EV01 +SwingMode (B6) uint8PR+EV+PW01 CoolingThresholdTemperature (D) floatPR+PW+EV103510 HeatingThresholdTemperature (12) floatPR+PW+EV02516 LockPhysicalControls (A7) uint8PW+PR+EV01 @@ -163,27 +163,27 @@
Defines a Humidifer, Dehumidifier, or combined Humidifer/Dehumidifier. Can be used with a separate Fan Service and/or Slat Service to extend functionality.
- + - + - - - - - + + + + +
CharacteristicFormatPermsMinMaxConstants/Defaults
Active (B0) :small_blue_diamond:
  • indicates if the Service is active/on
uint8PW+PR+EV01
  • INACTIVE (0) :heavy_check_mark:
  • ACTIVE (1) 
CurrentRelativeHumidity (10) :small_blue_diamond:
  • current humidity measured as a percentage
floatPR+EV01000
CurrentRelativeHumidity (10) :small_blue_diamond:
  • current humidity measured as a percentage
floatPR+EV01000
CurrentHumidifierDehumidifierState (B3) :small_blue_diamond:
  • indicates current state of humidifier/dehumidifer
uint8PR+EV03
  • INACTIVE (0) 
  • IDLE (1) :heavy_check_mark:
  • HUMIDIFYING (2) 
  • DEHUMIDIFYING (3) 
TargetHumidifierDehumidifierState (B4) :small_blue_diamond:
uint8PW+PR+EV02
  • AUTO (0) :heavy_check_mark:
  • HUMIDIFY (1) 
  • DEHUMIDIFY (2) 
TargetHumidifierDehumidifierState (B4) :small_blue_diamond:
  • indicates desired state of humidifier/dehumidifier
uint8PW+PR+EV02
  • AUTO (0) :heavy_check_mark:
  • HUMIDIFY (1) 
  • DEHUMIDIFY (2) 
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
RelativeHumidityDehumidifierThreshold (C9)
floatPR+PW+EV010050
RelativeHumidityHumidifierThreshold (CA)
floatPR+PW+EV010050
RotationSpeed (29)
floatPR+PW+EV01000
SwingMode (B6)
uint8PR+EV+PW01
  • SWING_DISABLED (0) :heavy_check_mark:
  • SWING_ENABLED (1) 
WaterLevel (B5)
floatPR+EV01000
RelativeHumidityDehumidifierThreshold (C9)
  • dehumidfier turns on when humidity rises above this threshold
floatPR+PW+EV010050
RelativeHumidityHumidifierThreshold (CA)
  • humidfier turns on when humidity falls below this threshold
floatPR+PW+EV010050
RotationSpeed (29)
  • measured as a percentage
floatPR+PW+EV01000
SwingMode (B6)
  • indicates whether swing-nmode is enabled
uint8PR+EV+PW01
  • SWING_DISABLED (0) :heavy_check_mark:
  • SWING_ENABLED (1) 
WaterLevel (B5)
  • measured as a percentage
floatPR+EV01000
LockPhysicalControls (A7)
  • indicates if local control lock is enabled
uint8PW+PR+EV01
  • CONTROL_LOCK_DISABLED (0) :heavy_check_mark:
  • CONTROL_LOCK_ENABLED (1) 
## HumiditySensor (82)
Defines a Humidity Sensor.
- + - - - - + + + +
CharacteristicFormatPermsMinMaxConstants/Defaults
CurrentRelativeHumidity (10) :small_blue_diamond:
  • current humidity measured as a percentage
floatPR+EV01000
CurrentRelativeHumidity (10) :small_blue_diamond:
  • current humidity measured as a percentage
floatPR+EV01000
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
StatusActive (75)
boolPR+EV011
StatusFault (77)
uint8PR+EV01
  • NO_FAULT (0) :heavy_check_mark:
  • FAULT (1) 
StatusTampered (7A)
uint8PR+EV01
  • NOT_TAMPERED (0) :heavy_check_mark:
  • TAMPERED (1) 
StatusLowBattery (79)
uint8PR+EV01
  • NOT_LOW_BATTERY (0) :heavy_check_mark:
  • LOW_BATTERY (1) 
StatusActive (75)
  • indicates whether the Service is properly functioning
boolPR+EV01
  • NOT_FUNCTIONING (0) 
  • FUNCTIONING (1) :heavy_check_mark:
StatusFault (77)
  • indicates whether the Service has a fault
uint8PR+EV01
  • NO_FAULT (0) :heavy_check_mark:
  • FAULT (1) 
StatusTampered (7A)
  • indicates whether the Service has been tampered with
uint8PR+EV01
  • NOT_TAMPERED (0) :heavy_check_mark:
  • TAMPERED (1) 
StatusLowBattery (79)
  • indicates state of battery
uint8PR+EV01
  • NOT_LOW_BATTERY (0) :heavy_check_mark:
  • LOW_BATTERY (1) 
## InputSource (D9) @@ -200,10 +200,10 @@
Defines an Irrigation System. Linked Services: Valve Service (at least one required).
- + - - + +
CharacteristicFormatPermsMinMaxConstants/Defaults
Active (B0) :small_blue_diamond:
  • indicates if the Service is active/on
uint8PW+PR+EV01
  • INACTIVE (0) :heavy_check_mark:
  • ACTIVE (1) 
ProgramMode (D1) :small_blue_diamond:
uint8PR+EV02
  • NONE (0) :heavy_check_mark:
  • SCHEDULED (1) 
  • SCHEDULE_OVERRIDEN (2) 
ProgramMode (D1) :small_blue_diamond:
  • indicates if pre-scheduled program is running
uint8PR+EV02
  • NONE (0) :heavy_check_mark:
  • SCHEDULED (1) 
  • SCHEDULE_OVERRIDEN (2) 
InUse (D2) :small_blue_diamond:
  • if Service is set to active, this indictes whether it is currently in use
uint8PR+EV01
  • NOT_IN_USE (0) :heavy_check_mark:
  • IN_USE (1) 
RemainingDuration (D4)
uint32PR+EV0360060
StatusFault (77)
uint8PR+EV01
  • NO_FAULT (0) :heavy_check_mark:
  • FAULT (1) 
RemainingDuration (D4)
  • duration (in seconds) remaining for Service to be active/on
uint32PR+EV0360060
StatusFault (77)
  • indicates whether the Service has a fault
uint8PR+EV01
  • NO_FAULT (0) :heavy_check_mark:
  • FAULT (1) 
## LeakSensor (83) @@ -211,10 +211,10 @@ CharacteristicFormatPermsMinMaxConstants/Defaults LeakDetected (70) :small_blue_diamond:uint8PR+EV01 Name (23) stringPR--"unnamed" -StatusActive (75) boolPR+EV011 -StatusFault (77) uint8PR+EV01 -StatusTampered (7A) uint8PR+EV01 -StatusLowBattery (79) uint8PR+EV01 +StatusActive (75) boolPR+EV01 +StatusFault (77) uint8PR+EV01 +StatusTampered (7A) uint8PR+EV01 +StatusLowBattery (79) uint8PR+EV01 ## LightBulb (43) @@ -224,7 +224,7 @@ Brightness (8) intPR+PW+EV01000 Hue (13) floatPR+PW+EV03600 Name (23) stringPR--"unnamed" -Saturation (2F) floatPR+PW+EV01000 +Saturation (2F) floatPR+PW+EV01000 ColorTemperature (CE) uint32PR+PW+EV140500200 @@ -233,10 +233,10 @@ CharacteristicFormatPermsMinMaxConstants/Defaults CurrentAmbientLightLevel (6B) :small_blue_diamond:floatPR+EV0.00011000001 Name (23) stringPR--"unnamed" -StatusActive (75) boolPR+EV011 -StatusFault (77) uint8PR+EV01 -StatusTampered (7A) uint8PR+EV01 -StatusLowBattery (79) uint8PR+EV01 +StatusActive (75) boolPR+EV01 +StatusFault (77) uint8PR+EV01 +StatusTampered (7A) uint8PR+EV01 +StatusLowBattery (79) uint8PR+EV01 ## LockMechanism (45) @@ -247,7 +247,7 @@ Name (23) stringPR--"unnamed" Mute (11A) :small_blue_diamond:boolPW+PR+EV01 Name (23) stringPR--"unnamed" -Volume (119) uint8PW+PR+EV01000 +Volume (119) uint8PW+PR+EV01000 ## MotionSensor (85) @@ -255,10 +255,10 @@ CharacteristicFormatPermsMinMaxConstants/Defaults MotionDetected (22) :small_blue_diamond:boolPR+EV01 Name (23) stringPR--"unnamed" -StatusActive (75) boolPR+EV011 -StatusFault (77) uint8PR+EV01 -StatusTampered (7A) uint8PR+EV01 -StatusLowBattery (79) uint8PR+EV01 +StatusActive (75) boolPR+EV01 +StatusFault (77) uint8PR+EV01 +StatusTampered (7A) uint8PR+EV01 +StatusLowBattery (79) uint8PR+EV01 ## OccupancySensor (86) @@ -266,10 +266,10 @@ CharacteristicFormatPermsMinMaxConstants/Defaults OccupancyDetected (71) :small_blue_diamond:uint8PR+EV01 Name (23) stringPR--"unnamed" -StatusActive (75) boolPR+EV011 -StatusFault (77) uint8PR+EV01 -StatusTampered (7A) uint8PR+EV01 -StatusLowBattery (79) uint8PR+EV01 +StatusActive (75) boolPR+EV01 +StatusFault (77) uint8PR+EV01 +StatusTampered (7A) uint8PR+EV01 +StatusLowBattery (79) uint8PR+EV01 ## Outlet (47) @@ -283,45 +283,46 @@ ## SecuritySystem (7E)
Defines a Security System.
- - + + - - - - + + + +
CharacteristicFormatPermsMinMaxConstants/Defaults
SecuritySystemCurrentState (66) :small_blue_diamond:
uint8PR+EV04
  • ARMED_STAY (0) 
  • ARMED_AWAY (1) 
  • ARMED_NIGHT (2) 
  • DISARMED (3) :heavy_check_mark:
  • ALARM_TRIGGERED (4) 
SecuritySystemTargetState (67) :small_blue_diamond:
uint8PW+PR+EV03
  • ARM_STAY (0) 
  • ARM_AWAY (1) 
  • ARM_NIGHT (2) 
  • DISARM (3) :heavy_check_mark:
SecuritySystemCurrentState (66) :small_blue_diamond:
  • indicates current state of the security system
uint8PR+EV04
  • ARMED_STAY (0) 
  • ARMED_AWAY (1) 
  • ARMED_NIGHT (2) 
  • DISARMED (3) :heavy_check_mark:
  • ALARM_TRIGGERED (4) 
SecuritySystemTargetState (67) :small_blue_diamond:
  • indicates desired state of the security system
uint8PW+PR+EV03
  • ARM_STAY (0) 
  • ARM_AWAY (1) 
  • ARM_NIGHT (2) 
  • DISARM (3) :heavy_check_mark:
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
SecuritySystemAlarmType (8E)
uint8PR+EV01
  • KNOWN (0) :heavy_check_mark:
  • UNKNOWN (1) 
StatusFault (77)
uint8PR+EV01
  • NO_FAULT (0) :heavy_check_mark:
  • FAULT (1) 
StatusTampered (7A)
uint8PR+EV01
  • NOT_TAMPERED (0) :heavy_check_mark:
  • TAMPERED (1) 
ServiceLabelNamespace (CD) :small_blue_diamond:
uint8PR01
  • DOTS (0) 
  • NUMERALS (1) :heavy_check_mark:
SecuritySystemAlarmType (8E)
  • indicates whether alarm was triggered for known reason
uint8PR+EV01
  • KNOWN (0) :heavy_check_mark:
  • UNKNOWN (1) 
StatusFault (77)
  • indicates whether the Service has a fault
uint8PR+EV01
  • NO_FAULT (0) :heavy_check_mark:
  • FAULT (1) 
StatusTampered (7A)
  • indicates whether the Service has been tampered with
uint8PR+EV01
  • NOT_TAMPERED (0) :heavy_check_mark:
  • TAMPERED (1) 
ServiceLabelNamespace (CD) :small_blue_diamond:
  • unused
uint8PR01
  • DOTS (0) 
  • NUMERALS (1) :heavy_check_mark:
## Slat (B9)
Defines a motorized ventilation Slat(s).
- + - - - + + +
CharacteristicFormatPermsMinMaxConstants/Defaults
CurrentSlatState (AA) :small_blue_diamond:
  • indicates current state of slats
uint8PR+EV02
  • FIXED (0) :heavy_check_mark:
  • JAMMED (1) 
  • SWINGING (2) 
SlatType (C0) :small_blue_diamond:
uint8PR01
  • HORIZONTAL (0) :heavy_check_mark:
  • VERTICAL (1) 
SlatType (C0) :small_blue_diamond:
  • indicates the direction of a slat or group of slats
uint8PR01
  • HORIZONTAL (0) :heavy_check_mark:
  • VERTICAL (1) 
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
SwingMode (B6)
uint8PR+EV+PW01
  • SWING_DISABLED (0) :heavy_check_mark:
  • SWING_ENABLED (1) 
CurrentTiltAngle (C1)
  • angle (in degrees) of slats from fully up or left (-90) to fully open (0) to fully down or right (90)
intPR+EV-90900
TargetTiltAngle (C2)
intPW+PR+EV-90900
SwingMode (B6)
  • indicates whether swing-nmode is enabled
uint8PR+EV+PW01
  • SWING_DISABLED (0) :heavy_check_mark:
  • SWING_ENABLED (1) 
CurrentTiltAngle (C1)
  • current angle (in degrees) of slats from fully up or left (-90) to fully open (0) to fully down or right (90)
intPR+EV-90900
TargetTiltAngle (C2)
  • indicated desired angle (in degrees) of slats from fully up or left (-90) to fully open (0) to fully down or right (90)
intPW+PR+EV-90900
## SmokeSensor (87)
Defines a Smoke Sensor.
- + - - - - + + + + - +
CharacteristicFormatPermsMinMaxConstants/Defaults
SmokeDetected (76) :small_blue_diamond:
uint8PR+EV01
  • NOT_DETECTED (0) :heavy_check_mark:
  • DETECTED (1) 
SmokeDetected (76) :small_blue_diamond:
  • indicates if smoke is detected
uint8PR+EV01
  • NOT_DETECTED (0) :heavy_check_mark:
  • DETECTED (1) 
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
StatusActive (75)
boolPR+EV011
StatusFault (77)
uint8PR+EV01
  • NO_FAULT (0) :heavy_check_mark:
  • FAULT (1) 
StatusTampered (7A)
uint8PR+EV01
  • NOT_TAMPERED (0) :heavy_check_mark:
  • TAMPERED (1) 
StatusLowBattery (79)
uint8PR+EV01
  • NOT_LOW_BATTERY (0) :heavy_check_mark:
  • LOW_BATTERY (1) 
StatusActive (75)
  • indicates whether the Service is properly functioning
boolPR+EV01
  • NOT_FUNCTIONING (0) 
  • FUNCTIONING (1) :heavy_check_mark:
StatusFault (77)
  • indicates whether the Service has a fault
uint8PR+EV01
  • NO_FAULT (0) :heavy_check_mark:
  • FAULT (1) 
StatusTampered (7A)
  • indicates whether the Service has been tampered with
uint8PR+EV01
  • NOT_TAMPERED (0) :heavy_check_mark:
  • TAMPERED (1) 
StatusLowBattery (79)
  • indicates state of battery
uint8PR+EV01
  • NOT_LOW_BATTERY (0) :heavy_check_mark:
  • LOW_BATTERY (1) 
Mute (11A) :small_blue_diamond:
  • not used
boolPW+PR+EV01
  • OFF (0) :heavy_check_mark:
  • ON (1) 
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
Volume (119)
uint8PW+PR+EV01000
Volume (119)
  • unused
uint8PW+PR+EV01000
## StatelessProgrammableSwitch (89)
Defines a "Stateless" Programmable Switch that can be used to trigger actions in the Home App.
- + +
CharacteristicFormatPermsMinMaxConstants/Defaults
ProgrammableSwitchEvent (73) :small_blue_diamond:
uint8PR+EV+NV02
  • SINGLE_PRESS (0) :heavy_check_mark:
  • DOUBLE_PRESS (1) 
  • LONG_PRESS (2) 
ProgrammableSwitchEvent (73) :small_blue_diamond:
  • specifies type of button press
uint8PR+EV+NV02
  • SINGLE_PRESS (0) :heavy_check_mark:
  • DOUBLE_PRESS (1) 
  • LONG_PRESS (2) 
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
ServiceLabelIndex (CB)
  • numerical index used to distinguish multiple copies of the same Service within an Accessory
uint8PR12551
## Switch (49) @@ -353,25 +354,25 @@ CharacteristicFormatPermsMinMaxConstants/Defaults CurrentTemperature (11) :small_blue_diamond:floatPR+EV01000 Name (23) stringPR--"unnamed" -StatusActive (75) boolPR+EV011 -StatusFault (77) uint8PR+EV01 -StatusTampered (7A) uint8PR+EV01 -StatusLowBattery (79) uint8PR+EV01 +StatusActive (75) boolPR+EV01 +StatusFault (77) uint8PR+EV01 +StatusTampered (7A) uint8PR+EV01 +StatusLowBattery (79) uint8PR+EV01 ## Thermostat (4A)
Defines a Thermostat used to control a furnace, air conditioner, or both.
- + - - + + - + - +
CharacteristicFormatPermsMinMaxConstants/Defaults
CurrentHeatingCoolingState (F) :small_blue_diamond:
  • indicates whether appliance is currently heating, cooling, or just idle
uint8PR+EV02
  • IDLE (0) :heavy_check_mark:
  • HEATING (1) 
  • COOLING (2) 
TargetHeatingCoolingState (33) :small_blue_diamond:
uint8PW+PR+EV03
  • OFF (0) :heavy_check_mark:
  • HEAT (1) 
  • COOL (2) 
  • AUTO (3) 
TargetHeatingCoolingState (33) :small_blue_diamond:
  • indicates desired state of appliance
uint8PW+PR+EV03
  • OFF (0) :heavy_check_mark:
  • HEAT (1) 
  • COOL (2) 
  • AUTO (3) 
CurrentTemperature (11) :small_blue_diamond:
  • current temperature measured in Celsius
floatPR+EV01000
TargetTemperature (35) :small_blue_diamond:
floatPW+PR+EV103816
TemperatureDisplayUnits (36) :small_blue_diamond:
uint8PW+PR+EV01
  • CELSIUS (0) :heavy_check_mark:
  • FAHRENHEIT (1) 
TargetTemperature (35) :small_blue_diamond:
  • indicates desired temperature measure in Celsius
floatPW+PR+EV103816
TemperatureDisplayUnits (36) :small_blue_diamond:
  • indicates the desired units to display the temperature on the device itself (has no effect on Home App)
uint8PW+PR+EV01
  • CELSIUS (0) :heavy_check_mark:
  • FAHRENHEIT (1) 
CoolingThresholdTemperature (D)
  • cooling turns on when temperature (in Celsius) rises above this threshold
floatPR+PW+EV103510
CurrentRelativeHumidity (10)
  • current humidity measured as a percentage
floatPR+EV01000
CurrentRelativeHumidity (10)
  • current humidity measured as a percentage
floatPR+EV01000
HeatingThresholdTemperature (12)
  • heating turns on when temperature (in Celsius) falls below this threshold
floatPR+PW+EV02516
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
TargetRelativeHumidity (34)
floatPW+PR+EV01000
TargetRelativeHumidity (34)
  • indicates desired humidity measured as a percentage
floatPW+PR+EV01000
## Valve (D0) @@ -379,11 +380,12 @@ CharacteristicFormatPermsMinMaxConstants/Defaults Active (B0) :small_blue_diamond:uint8PW+PR+EV01 InUse (D2) :small_blue_diamond:uint8PR+EV01 -ValveType (D5) :small_blue_diamond:uint8PR+EV030 -SetDuration (D3) uint32PW+PR+EV0360060 -RemainingDuration (D4) uint32PR+EV0360060 +ValveType (D5) :small_blue_diamond:uint8PR+EV03 +SetDuration (D3) uint32PW+PR+EV0360060 +RemainingDuration (D4) uint32PR+EV0360060 IsConfigured (D6) uint8PR+EV01 -StatusFault (77) uint8PR+EV01 +ServiceLabelIndex (CB) uint8PR12551 +StatusFault (77) uint8PR+EV01 Name (23) stringPR--"unnamed" @@ -391,7 +393,7 @@
Defines a motorized Window.
- +
CharacteristicFormatPermsMinMaxConstants/Defaults
CurrentPosition (6D) :small_blue_diamond:
  • current position (as a percentage) from fully closed (0) to full open (100)
uint8PR+EV01000
TargetPosition (7C) :small_blue_diamond:
uint8PW+PR+EV01000
TargetPosition (7C) :small_blue_diamond:
  • indicates target position (as a percentage) from fully closed (0) to full open (100)
uint8PW+PR+EV01000
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
ObstructionDetected (24)
  • indicates if obstruction is detected
boolPR+EV01
  • NOT_DETECTED (0) :heavy_check_mark:
  • DETECTED (1) 
@@ -399,13 +401,13 @@ ## WindowCovering (8C)
Defines a motorized Window Shade, Screen, Awning, etc.
- + - + - +
CharacteristicFormatPermsMinMaxConstants/Defaults
TargetPosition (7C) :small_blue_diamond:
uint8PW+PR+EV01000
TargetPosition (7C) :small_blue_diamond:
  • indicates target position (as a percentage) from fully closed (0) to full open (100)
uint8PW+PR+EV01000
CurrentPosition (6D) :small_blue_diamond:
  • current position (as a percentage) from fully closed (0) to full open (100)
uint8PR+EV01000
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
CurrentHorizontalTiltAngle (6C)
  • current angle (in degrees) of slats from fully up (-90) to fully open (0) to fully down (90)
intPR+EV-90900
TargetHorizontalTiltAngle (7B)
intPW+PR+EV-90900
TargetHorizontalTiltAngle (7B)
  • indicates desired angle (in degrees) of slats from fully up (-90) to fully open (0) to fully down (90)
intPW+PR+EV-90900
CurrentVerticalTiltAngle (6E)
  • current angle (in degrees) of slats from fully left (-90) to fully open (0) to fully right (90)
intPR+EV-90900
TargetVerticalTiltAngle (7D)
intPW+PR+EV-90900
TargetVerticalTiltAngle (7D)
  • indicates desired angle (in degrees) of slats from fully left (-90) to fully open (0) to fully right (90)
intPW+PR+EV-90900
ObstructionDetected (24)
  • indicates if obstruction is detected
boolPR+EV01
  • NOT_DETECTED (0) :heavy_check_mark:
  • DETECTED (1)