From 926d9ee3273c3d481419438d585001ca5345ad73 Mon Sep 17 00:00:00 2001 From: Gregg Date: Sun, 21 Jan 2024 21:58:59 -0600 Subject: [PATCH] update --- src/Span.h | 38 ++++---- tools/makeServiceList | 20 ++-- tools/test.md | 222 +++++++++++++++++++++--------------------- 3 files changed, 143 insertions(+), 137 deletions(-) diff --git a/src/Span.h b/src/Span.h index e4dc67e..4bb7fb8 100644 --- a/src/Span.h +++ b/src/Span.h @@ -423,7 +423,7 @@ namespace Characteristic { CREATE_CHAR(uint32_t,AccessoryFlags,1,1,1); // not applicable for HomeSpan CREATE_CHAR(uint8_t,Active,0,0,1,INACTIVE,ACTIVE); // indicates if the Service is active/on - CREATE_CHAR(uint32_t,ActiveIdentifier,0,0,255); // the Identifier of the current Input Source + CREATE_CHAR(uint32_t,ActiveIdentifier,0,0,255); // numerical Identifier of the InputSource selected in the Home App. CREATE_CHAR(uint8_t,AirQuality,0,0,5,UNKNOWN,EXCELLENT,GOOD,FAIR,INFERIOR,POOR); // a subjective description CREATE_CHAR(uint8_t,BatteryLevel,0,0,100); // measured as a percentage CREATE_CHAR(int,Brightness,0,0,100); // measured as a percentage @@ -438,20 +438,20 @@ namespace Characteristic { CREATE_CHAR(double,CoolingThresholdTemperature,10,10,35); // cooling turns on when temperature (in Celsius) rises above this threshold CREATE_CHAR(uint32_t,ColorTemperature,200,140,500); // measured in inverse megaKelvin (= 1,000,000 / Kelvin) CREATE_CHAR(uint8_t,ContactSensorState,1,0,1,DETECTED,NOT_DETECTED); // indictates if contact is detected (i.e. closed) - CREATE_CHAR(const char *,ConfiguredName,"unnamed",0,1); + CREATE_CHAR(const char *,ConfiguredName,"unnamed",0,1); // a "configurable" Service name - any updates made from within the Home App trigger an update in HomeSpan and vice versa. CREATE_CHAR(double,CurrentAmbientLightLevel,1,0.0001,100000); // measured in Lux (lumens/m2 CREATE_CHAR(int,CurrentHorizontalTiltAngle,0,-90,90); // current angle (in degrees) of slats from fully up (-90) to fully open (0) to fully down (90) CREATE_CHAR(uint8_t,CurrentAirPurifierState,1,0,2,INACTIVE,IDLE,PURIFYING); // indicates current state of air purification CREATE_CHAR(uint8_t,CurrentSlatState,0,0,2,FIXED,JAMMED,SWINGING); // indicates current state of slats CREATE_CHAR(uint8_t,CurrentPosition,0,0,100); // current position (as a percentage) from fully closed (0) to full open (100) CREATE_CHAR(int,CurrentVerticalTiltAngle,0,-90,90); // current angle (in degrees) of slats from fully left (-90) to fully open (0) to fully right (90) - CREATE_CHAR(uint8_t,CurrentVisibilityState,0,0,1); + CREATE_CHAR(uint8_t,CurrentVisibilityState,0,0,1,VISIBLE,NOT_VISIBLE); // current visibility of the Service, as selectable on the Settings Page of the Home App CREATE_CHAR(uint8_t,CurrentHumidifierDehumidifierState,1,0,3,INACTIVE,IDLE,HUMIDIFYING,DEHUMIDIFYING); // indicates current state of humidifier/dehumidifer CREATE_CHAR(uint8_t,CurrentDoorState,1,0,4,OPEN,CLOSED,OPENING,CLOSING,STOPPED); // indicates current state of a door CREATE_CHAR(uint8_t,CurrentFanState,1,0,2,INACTIVE,IDLE,BLOWING); // indicates current state of a fan 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(uint8_t,CurrentMediaState,0,0,5); // not used 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); // current angle (in degrees) of slats from fully up or left (-90) to fully open (0) to fully down or right (90) @@ -462,14 +462,14 @@ 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,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); + CREATE_CHAR(boolean,Identify,1,1,1,RUN_ID=1); // triggers an update when HomeKit wants HomeSpan to run its identification routine for an Accessory + CREATE_CHAR(uint32_t,Identifier,0,0,255); // numerical Identifer of the InputSource. + CREATE_CHAR(uint8_t,InputDeviceType,0,0,6); // not used + CREATE_CHAR(uint8_t,InputSourceType,0,0,10); // not used CREATE_CHAR(uint8_t,InUse,0,0,1,NOT_IN_USE,IN_USE); // if Service is set to active, this indictes whether it is currently in use CREATE_CHAR(uint8_t,IsConfigured,0,0,1,NOT_CONFIGURED,CONFIGURED); // indicates if a predefined Service has been configured CREATE_CHAR(uint8_t,LeakDetected,0,0,1,NOT_DETECTED,DETECTED); // indictates if a leak is detected - CREATE_CHAR(uint8_t,LockCurrentState,0,0,3,UNLOCKED,LOCKED,JAMMED,UNKNOWN); // indictates state of a lock + CREATE_CHAR(uint8_t,LockCurrentState,0,0,3,UNLOCKED,LOCKED,JAMMED,UNKNOWN); // indicates state of a lock CREATE_CHAR(uint8_t,LockPhysicalControls,0,0,1,CONTROL_LOCK_DISABLED,CONTROL_LOCK_ENABLED); // indicates if local control lock is enabled CREATE_CHAR(uint8_t,LockTargetState,0,0,1,UNLOCK,LOCK); // indicates desired state of lock CREATE_CHAR(const char *,Manufacturer,"HomeSpan",0,1); // any string - informational only @@ -484,17 +484,17 @@ namespace Characteristic { CREATE_CHAR(boolean,OutletInUse,0,0,1,NOT_IN_USE,IN_USE); // indicates if an appliance or light is plugged into the outlet, regardless of whether on or off CREATE_CHAR(boolean,On,0,0,1,OFF,ON); // indicates if the Service is active/on CREATE_CHAR(double,OzoneDensity,0,0,1000); // measured in µg/m3 - CREATE_CHAR(uint8_t,PictureMode,0,0,13); + CREATE_CHAR(uint8_t,PictureMode,0,0,13); // not used 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,PowerModeSelection,0,0,0,VIEW_SETTINGS); // when defined, creates a "View TV Settings" button in the Home App that triggers an update to this Characteristic when pressed 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,0,1,UNUSED,RESET_FILTER); // the Home App sets this to RESET_FILTER when it wants to reset the FilterChangeIndication + CREATE_CHAR(uint8_t,RemoteKey,4,4,15,UP=4,DOWN,LEFT,RIGHT,CENTER,BACK,PLAY_PAUSE=11,INFO=15); // triggers an update when the corresponding key is pressed in the Remote Control widget on an iPhone + CREATE_CHAR(uint8_t,ResetFilterIndication,1,1,1,RESET_FILTER=1); // triggers and update when the user chooses to reset the FilterChangeIndication from the Home App 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 @@ -505,7 +505,7 @@ namespace Characteristic { 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,SleepDiscoveryMode,0,0,1); // not used 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 @@ -522,20 +522,20 @@ namespace Characteristic { 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,TargetDoorState,1,0,1,OPEN,CLOSED); // indicates desired 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(double,TargetTemperature,16,10,38); // indicates desired temperature measures in Celsius + CREATE_CHAR(uint8_t,TargetVisibilityState,0,0,1,VISIBLE,NOT_VISIBLE); // indicates desired visibility of the Service, as selectable on the Settings Page of the Home App 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(uint8_t,VolumeControlType,3,0,3,NONE,RELATIVE,RELATIVE_CURRENT,ABSOLUTE); // indicates the type of volume control + CREATE_CHAR(uint8_t,VolumeSelector,0,0,1,VOLUME_UP,VOLUME_DOWN); // triggered by presses to the iPhone's volume up/down buttons when TV is selected in the Remote Control widget CREATE_CHAR(double,WaterLevel,0,0,100); // measured as a percentage } diff --git a/tools/makeServiceList b/tools/makeServiceList index 2d80af9..8a60286 100755 --- a/tools/makeServiceList +++ b/tools/makeServiceList @@ -31,12 +31,18 @@ BEGIN { else if(x[1]=="CREATE_CHAR"){ char=x[3] - default[char]=x[4] +# default[char]=x[4] min[char]=x[5] max[char]=x[6] - nVals[char]=n-6 # parse any pre-defined constants - for(i=0;i--") - if(nVals[char]>0){ + if(nConstants[char]>0){ printf("") } else { printf("%s",default[char]) diff --git a/tools/test.md b/tools/test.md index 3e146ed..ad2b62b 100644 --- a/tools/test.md +++ b/tools/test.md @@ -1,13 +1,13 @@ ## 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
  • 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)
  • any string - informational only
stringPR--"HS-12345"
HardwareRevision (53)
  • must be in form x[.y[.z]] - informational only
stringPR--"1.0.0"
Identify (14) :small_blue_diamond:
  • triggers an update when HomeKit wants HomeSpan to run its identification routine for an Accessory
boolPW11
  • RUN_ID=1 (0) 
FirmwareRevision (52)
  • must be in form x[.y[.z]] - informational only
stringPR+EV--
Manufacturer (20)
  • any string - informational only
stringPR--
Model (21)
  • any string - informational only
stringPR--
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
SerialNumber (30)
  • any string - informational only
stringPR--
HardwareRevision (53)
  • must be in form x[.y[.z]] - informational only
stringPR--
## AirPurifier (BB) @@ -16,8 +16,8 @@ Active (B0) :small_blue_diamond:uint8PW+PR+EV01 CurrentAirPurifierState (A9) :small_blue_diamond:uint8PR+EV02 TargetAirPurifierState (A8) :small_blue_diamond:uint8PW+PR+EV01 -Name (23) stringPR--"unnamed" -RotationSpeed (29) floatPR+PW+EV01000 +Name (23) stringPR-- +RotationSpeed (29) floatPR+PW+EV0100 SwingMode (B6) uint8PR+EV+PW01 LockPhysicalControls (A7) uint8PW+PR+EV01 @@ -26,13 +26,13 @@
Defines an Air Quality Sensor.
- - - - - - - + + + + + + + @@ -42,43 +42,43 @@ ## BatteryService (96)
Defines a standalone Battery Service.
CharacteristicFormatPermsMinMaxConstants/Defaults
AirQuality (95) :small_blue_diamond:
  • a subjective description
uint8PR+EV05
  • UNKNOWN (0) :heavy_check_mark:
  • EXCELLENT (1) 
  • GOOD (2) 
  • FAIR (3) 
  • INFERIOR (4) 
  • POOR (5) 
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
OzoneDensity (C3)
  • measured in µg/m3
floatPR+EV010000
NitrogenDioxideDensity (C4)
  • measured in µg/m3
floatPR+EV010000
SulphurDioxideDensity (C5)
  • measured in µg/m3
floatPR+EV010000
PM25Density (C6)
  • 2.5-micron particulate density, measured in µg/m3
floatPR+EV010000
PM10Density (C7)
  • 10-micron particulate density, measured in µg/m3
floatPR+EV010000
VOCDensity (C8)
  • measured in µg/m3
floatPR+EV010000
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
OzoneDensity (C3)
  • measured in µg/m3
floatPR+EV01000
NitrogenDioxideDensity (C4)
  • measured in µg/m3
floatPR+EV01000
SulphurDioxideDensity (C5)
  • measured in µg/m3
floatPR+EV01000
PM25Density (C6)
  • 2.5-micron particulate density, measured in µg/m3
floatPR+EV01000
PM10Density (C7)
  • 10-micron particulate density, measured in µg/m3
floatPR+EV01000
VOCDensity (C8)
  • measured in µg/m3
floatPR+EV01000
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) 
- + - +
CharacteristicFormatPermsMinMaxConstants/Defaults
BatteryLevel (68) :small_blue_diamond:
  • measured as a percentage
uint8PR+EV01000
BatteryLevel (68) :small_blue_diamond:
  • measured as a percentage
uint8PR+EV0100
ChargingState (8F) :small_blue_diamond:
  • indicates state of battery charging
uint8PR+EV02
  • NOT_CHARGING (0) :heavy_check_mark:
  • CHARGING (1) 
  • NOT_CHARGEABLE (2) 
StatusLowBattery (79) :small_blue_diamond:
  • indicates state of battery
uint8PR+EV01
  • NOT_LOW_BATTERY (0) :heavy_check_mark:
  • LOW_BATTERY (1) 
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
## CarbonDioxideSensor (97)
Defines a Carbon Dioxide Sensor.
- + - - + +
CharacteristicFormatPermsMinMaxConstants/Defaults
CarbonDioxideDetected (92) :small_blue_diamond:
  • indicates if abnormal level is detected
uint8PR+EV01
  • NORMAL (0) :heavy_check_mark:
  • ABNORMAL (1) 
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
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) 
CarbonDioxideLevel (93)
  • measured on parts per million (ppm)
floatPR+EV01000000
CarbonDioxidePeakLevel (94)
  • measured in parts per million (ppm)
floatPR+EV01000000
CarbonDioxideLevel (93)
  • measured on parts per million (ppm)
floatPR+EV0100000
CarbonDioxidePeakLevel (94)
  • measured in parts per million (ppm)
floatPR+EV0100000
## CarbonMonoxideSensor (7F)
Defines a Carbon Monoxide Sensor.
- + - - + +
CharacteristicFormatPermsMinMaxConstants/Defaults
CarbonMonoxideDetected (69) :small_blue_diamond:
  • indicates if abnormal level is detected
uint8PR+EV01
  • NORMAL (0) :heavy_check_mark:
  • ABNORMAL (1) 
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
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) 
CarbonMonoxideLevel (90)
  • measured in parts per million (ppm)
floatPR+EV01000
CarbonMonoxidePeakLevel (91)
  • measured in parts per million (ppm)
floatPR+EV01000
CarbonMonoxideLevel (90)
  • measured in parts per million (ppm)
floatPR+EV0100
CarbonMonoxidePeakLevel (91)
  • measured in parts per million (ppm)
floatPR+EV0100
## ContactSensor (80)
Defines a Contact Sensor.
- + @@ -88,9 +88,9 @@ ## Door (81)
Defines a motorized Door.
CharacteristicFormatPermsMinMaxConstants/Defaults
ContactSensorState (6A) :small_blue_diamond:
  • indictates if contact is detected (i.e. closed)
uint8PR+EV01
  • DETECTED (0) 
  • NOT_DETECTED (1) :heavy_check_mark:
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
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) 
- - - + + +
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:
  • 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"
CurrentPosition (6D) :small_blue_diamond:
  • current position (as a percentage) from fully closed (0) to full open (100)
uint8PR+EV0100
TargetPosition (7C) :small_blue_diamond:
  • indicates target position (as a percentage) from fully closed (0) to full open (100)
uint8PW+PR+EV0100
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
ObstructionDetected (24)
  • indicates if obstruction is detected
boolPR+EV01
  • NOT_DETECTED (0) :heavy_check_mark:
  • DETECTED (1) 
@@ -98,18 +98,18 @@
Defines a Doorbell. Can be used on a standalone basis or in conjunction with a LockMechanism Service.
- +
CharacteristicFormatPermsMinMaxConstants/Defaults
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"
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
## Fan (B7)
Defines a Fan. Can be used in conjunction with a LightBulb Service to create a Lighted Ceiling Fan.
- + - +
CharacteristicFormatPermsMinMaxConstants/Defaults
Active (B0) :small_blue_diamond:
  • indicates if the Service is active/on
uint8PW+PR+EV01
  • INACTIVE (0) :heavy_check_mark:
  • ACTIVE (1) 
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
CurrentFanState (AF)
  • indicates current state of a fan
uint8PR+EV02
  • INACTIVE (0) 
  • IDLE (1) :heavy_check_mark:
  • BLOWING (2) 
TargetFanState (BF)
  • indicates desired state of fan
uint8PW+PR+EV01
  • MANUAL (0) 
  • AUTO (1) :heavy_check_mark:
RotationDirection (28)
  • indicates the rotation direction of a fan
intPR+PW+EV01
  • CLOCKWISE (0) :heavy_check_mark:
  • COUNTERCLOCKWISE (1) 
RotationSpeed (29)
  • measured as a percentage
floatPR+PW+EV01000
RotationSpeed (29)
  • measured as a percentage
floatPR+PW+EV0100
SwingMode (B6)
  • indicates whether swing-nmode is enabled
uint8PR+EV+PW01
  • SWING_DISABLED (0) :heavy_check_mark:
  • SWING_ENABLED (1) 
LockPhysicalControls (A7)
  • indicates if local control lock is enabled
uint8PW+PR+EV01
  • CONTROL_LOCK_DISABLED (0) :heavy_check_mark:
  • CONTROL_LOCK_ENABLED (1) 
@@ -119,43 +119,43 @@ CharacteristicFormatPermsMinMaxConstants/Defaults Active (B0) :small_blue_diamond:uint8PW+PR+EV01 StatusFault (77) uint8PR+EV01 -Name (23) stringPR--"unnamed" +Name (23) stringPR-- ## FilterMaintenance (BA)
Defines a Filter Maintainence check.
- - - + + +
CharacteristicFormatPermsMinMaxConstants/Defaults
FilterChangeIndication (AC) :small_blue_diamond:
  • indicates state of filter
uint8PR+EV01
  • NO_CHANGE_NEEDED (0) :heavy_check_mark:
  • CHANGE_NEEDED (1) 
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
FilterLifeLevel (AB)
  • measures as a percentage of remaining life
floatPR+EV01000
ResetFilterIndication (AD)
  • the Home App sets this to RESET_FILTER when it wants to reset the FilterChangeIndication
uint8PW01
  • UNUSED (0) :heavy_check_mark:
  • RESET_FILTER (1) 
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
FilterLifeLevel (AB)
  • measures as a percentage of remaining life
floatPR+EV0100
ResetFilterIndication (AD)
  • triggers and update when the user chooses to reset the FilterChangeIndication from the Home App
uint8PW11
  • RESET_FILTER=1 (0) 
## 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:
  • indicates desires state of door
uint8PW+PR+EV01
  • OPEN (0) 
  • CLOSED (1) :heavy_check_mark:
TargetDoorState (32) :small_blue_diamond:
  • indicates desired 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) 
LockCurrentState (1D)
  • indicates 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:
  • unused
stringPR--"1.0.0"
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
Version (37) :small_blue_diamond:
  • unused
stringPR--
## HeaterCooler (BC)
Defines a standalone Heater, Cooler, or combined Heater/Cooler. 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) 
CurrentTemperature (11) :small_blue_diamond:
  • current temperature measured in Celsius
floatPR+EV01000
CurrentTemperature (11) :small_blue_diamond:
  • current temperature measured in Celsius
floatPR+EV0100
CurrentHeaterCoolerState (B1) :small_blue_diamond:
  • indicates whether appliance is currently heating, cooling, idle, or off
uint8PR+EV03
  • INACTIVE (0) 
  • IDLE (1) :heavy_check_mark:
  • HEATING (2) 
  • COOLING (3) 
TargetHeaterCoolerState (B2) :small_blue_diamond:
  • indicates desired state of heater/cooler
uint8PW+PR+EV02
  • AUTO (0) :heavy_check_mark:
  • HEAT (1) 
  • COOL (2) 
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
RotationSpeed (29)
  • measured as a percentage
floatPR+PW+EV01000
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
RotationSpeed (29)
  • measured as a percentage
floatPR+PW+EV0100
TemperatureDisplayUnits (36)
  • 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) 
SwingMode (B6)
  • indicates whether swing-nmode is enabled
uint8PR+EV+PW01
  • SWING_DISABLED (0) :heavy_check_mark:
  • SWING_ENABLED (1) 
CoolingThresholdTemperature (D)
  • cooling turns on when temperature (in Celsius) rises above this threshold
floatPR+PW+EV103510
HeatingThresholdTemperature (12)
  • heating turns on when temperature (in Celsius) falls below this threshold
floatPR+PW+EV02516
CoolingThresholdTemperature (D)
  • cooling turns on when temperature (in Celsius) rises above this threshold
floatPR+PW+EV1035
HeatingThresholdTemperature (12)
  • heating turns on when temperature (in Celsius) falls below this threshold
floatPR+PW+EV025
LockPhysicalControls (A7)
  • indicates if local control lock is enabled
uint8PW+PR+EV01
  • CONTROL_LOCK_DISABLED (0) :heavy_check_mark:
  • CONTROL_LOCK_ENABLED (1) 
@@ -163,23 +163,23 @@
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+EV0100
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:
  • 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)
  • 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
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
RelativeHumidityDehumidifierThreshold (C9)
  • dehumidfier turns on when humidity rises above this threshold
floatPR+PW+EV0100
RelativeHumidityHumidifierThreshold (CA)
  • humidfier turns on when humidity falls below this threshold
floatPR+PW+EV0100
RotationSpeed (29)
  • measured as a percentage
floatPR+PW+EV0100
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
WaterLevel (B5)
  • measured as a percentage
floatPR+EV0100
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.
- - + + @@ -189,11 +189,11 @@ ## InputSource (D9)
Defines an Input Source for a TV. Use only as a Linked Service for the Television Service.
CharacteristicFormatPermsMinMaxConstants/Defaults
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"
CurrentRelativeHumidity (10) :small_blue_diamond:
  • current humidity measured as a percentage
floatPR+EV0100
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
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) 
- + - - - + + +
CharacteristicFormatPermsMinMaxConstants/Defaults
ConfiguredName (E3)
stringPW+PR+EV--"unnamed"
ConfiguredName (E3)
  • a "configurable" Service name - any updates made from within the Home App trigger an update in HomeSpan and vice versa.
stringPW+PR+EV--
IsConfigured (D6)
  • indicates if a predefined Service has been configured
uint8PR+EV01
  • NOT_CONFIGURED (0) :heavy_check_mark:
  • CONFIGURED (1) 
Identifier (E6) :small_blue_diamond:
uint32PR02550
CurrentVisibilityState (135)
uint8PR+EV010
TargetVisibilityState (134)
uint8PW+PR+EV010
Identifier (E6) :small_blue_diamond:
  • numerical Identifer of the InputSource.
uint32PR0255
CurrentVisibilityState (135)
  • current visibility of the Service, as selectable on the Settings Page of the Home App
uint8PR+EV01
  • VISIBLE (0) :heavy_check_mark:
  • NOT_VISIBLE (1) 
TargetVisibilityState (134)
  • indicates desired visibility of the Service, as selectable on the Settings Page of the Home App
uint8PW+PR+EV01
  • VISIBLE (0) :heavy_check_mark:
  • NOT_VISIBLE (1) 
## IrrigationSystem (CF) @@ -202,7 +202,7 @@ Active (B0) :small_blue_diamond:uint8PW+PR+EV01 ProgramMode (D1) :small_blue_diamond:uint8PR+EV02 InUse (D2) :small_blue_diamond:uint8PR+EV01 -RemainingDuration (D4) uint32PR+EV0360060 +RemainingDuration (D4) uint32PR+EV03600 StatusFault (77) uint8PR+EV01 @@ -210,7 +210,7 @@
Defines a Leak Sensor.
- + @@ -221,18 +221,18 @@
Defines any type of Light.
CharacteristicFormatPermsMinMaxConstants/Defaults
LeakDetected (70) :small_blue_diamond:
  • indictates if a leak 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"
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
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) 
- - - - - + + + + +
CharacteristicFormatPermsMinMaxConstants/Defaults
On (25) :small_blue_diamond:
  • indicates if the Service is active/on
boolPR+PW+EV01
  • OFF (0) :heavy_check_mark:
  • ON (1) 
Brightness (8)
  • measured as a percentage
intPR+PW+EV01000
Hue (13)
  • color (in degrees) from red (0) to green (120) to blue (240) and back to red (360)
floatPR+PW+EV03600
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
Saturation (2F)
  • color saturation, measured as a percentage
floatPR+PW+EV01000
ColorTemperature (CE)
  • measured in inverse megaKelvin (= 1,000,000 / Kelvin)
uint32PR+PW+EV140500200
Brightness (8)
  • measured as a percentage
intPR+PW+EV0100
Hue (13)
  • color (in degrees) from red (0) to green (120) to blue (240) and back to red (360)
floatPR+PW+EV0360
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
Saturation (2F)
  • color saturation, measured as a percentage
floatPR+PW+EV0100
ColorTemperature (CE)
  • measured in inverse megaKelvin (= 1,000,000 / Kelvin)
uint32PR+PW+EV140500
## LightSensor (84)
Defines a Light Sensor.
- - + + @@ -242,19 +242,19 @@ ## LockMechanism (45)
Defines an electronic Lock.
CharacteristicFormatPermsMinMaxConstants/Defaults
CurrentAmbientLightLevel (6B) :small_blue_diamond:
  • measured in Lux (lumens/m2
floatPR+EV0.00011000001
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
CurrentAmbientLightLevel (6B) :small_blue_diamond:
  • measured in Lux (lumens/m2
floatPR+EV0.0001100000
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
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) 
- + - + - - + +
CharacteristicFormatPermsMinMaxConstants/Defaults
LockCurrentState (1D) :small_blue_diamond:
  • indictates state of a lock
uint8PR+EV03
  • UNLOCKED (0) :heavy_check_mark:
  • LOCKED (1) 
  • JAMMED (2) 
  • UNKNOWN (3) 
LockCurrentState (1D) :small_blue_diamond:
  • indicates state of a lock
uint8PR+EV03
  • UNLOCKED (0) :heavy_check_mark:
  • LOCKED (1) 
  • JAMMED (2) 
  • UNKNOWN (3) 
LockTargetState (1E) :small_blue_diamond:
  • 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"
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
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)
  • unused
uint8PW+PR+EV01000
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
Volume (119)
  • unused
uint8PW+PR+EV0100
## MotionSensor (85)
Defines a Motion Sensor.
- + @@ -265,7 +265,7 @@
Defines and Occupancy Sensor.
CharacteristicFormatPermsMinMaxConstants/Defaults
MotionDetected (22) :small_blue_diamond:
  • indicates if motion is detected
boolPR+EV01
  • NOT_DETECTED (0) :heavy_check_mark:
  • DETECTED (1) 
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
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) 
- + @@ -277,7 +277,7 @@ - +
CharacteristicFormatPermsMinMaxConstants/Defaults
OccupancyDetected (71) :small_blue_diamond:
  • indicates if occupanccy 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"
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
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) 
CharacteristicFormatPermsMinMaxConstants/Defaults
On (25) :small_blue_diamond:
  • indicates if the Service is active/on
boolPR+PW+EV01
  • OFF (0) :heavy_check_mark:
  • ON (1) 
OutletInUse (26) :small_blue_diamond:
  • indicates if an appliance or light is plugged into the outlet, regardless of whether on or off
boolPR+EV01
  • NOT_IN_USE (0) :heavy_check_mark:
  • IN_USE (1) 
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
## SecuritySystem (7E) @@ -285,7 +285,7 @@ CharacteristicFormatPermsMinMaxConstants/Defaults SecuritySystemCurrentState (66) :small_blue_diamond:uint8PR+EV04 SecuritySystemTargetState (67) :small_blue_diamond:uint8PW+PR+EV03 -Name (23) stringPR--"unnamed" +Name (23) stringPR-- SecuritySystemAlarmType (8E) uint8PR+EV01 StatusFault (77) uint8PR+EV01 StatusTampered (7A) uint8PR+EV01 @@ -297,63 +297,63 @@ CharacteristicFormatPermsMinMaxConstants/Defaults CurrentSlatState (AA) :small_blue_diamond:uint8PR+EV02 SlatType (C0) :small_blue_diamond:uint8PR01 -Name (23) stringPR--"unnamed" +Name (23) stringPR-- SwingMode (B6) uint8PR+EV+PW01 -CurrentTiltAngle (C1) intPR+EV-90900 -TargetTiltAngle (C2) intPW+PR+EV-90900 +CurrentTiltAngle (C1) intPR+EV-9090 +TargetTiltAngle (C2) intPW+PR+EV-9090 ## SmokeSensor (87)
Defines a Smoke Sensor.
- + - - + +
CharacteristicFormatPermsMinMaxConstants/Defaults
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"
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
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)
  • unused
uint8PW+PR+EV01000
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
Volume (119)
  • unused
uint8PW+PR+EV0100
## 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:
  • 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
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
ServiceLabelIndex (CB)
  • numerical index used to distinguish multiple copies of the same Service within an Accessory
uint8PR1255
## Switch (49)
Defines a generic Switch.
- +
CharacteristicFormatPermsMinMaxConstants/Defaults
On (25) :small_blue_diamond:
  • indicates if the Service is active/on
boolPR+PW+EV01
  • OFF (0) :heavy_check_mark:
  • ON (1) 
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
## Television (D8)
Defines a TV. Optional Linked Services: InputSource and TelevisionSpeaker.
- - - - + + + +
CharacteristicFormatPermsMinMaxConstants/Defaults
Active (B0) :small_blue_diamond:
  • indicates if the Service is active/on
uint8PW+PR+EV01
  • INACTIVE (0) :heavy_check_mark:
  • ACTIVE (1) 
ConfiguredName (E3)
stringPW+PR+EV--"unnamed"
ActiveIdentifier (E7)
  • the Identifier of the current Input Source
uint32PW+PR+EV02550
RemoteKey (E1)
uint8PW0160
PowerModeSelection (DF)
uint8PW010
ConfiguredName (E3)
  • a "configurable" Service name - any updates made from within the Home App trigger an update in HomeSpan and vice versa.
stringPW+PR+EV--
ActiveIdentifier (E7)
  • numerical Identifier of the InputSource selected in the Home App.
uint32PW+PR+EV0255
RemoteKey (E1)
  • triggers an update when the corresponding key is pressed in the Remote Control widget on an iPhone
uint8PW415
  • UP=4 (0) 
  • DOWN (1) 
  • LEFT (2) 
  • RIGHT (3) 
  • CENTER (4) 
  • BACK (5) 
  • PLAY_PAUSE=11 (6) 
  • INFO=15 (7) 
PowerModeSelection (DF)
  • when defined, creates a "View TV Settings" button in the Home App that triggers an update to this Characteristic when pressed
uint8PW00
  • VIEW_SETTINGS (0) 
## TelevisionSpeaker (113)
Defines a Television Speaker that can be controlled via the Remote Control widget on an iPhone. Use only as a Linked Service for the Television Service.
- - + +
CharacteristicFormatPermsMinMaxConstants/Defaults
VolumeControlType (E9) :small_blue_diamond:
uint8PR+EV030
VolumeSelector (EA) :small_blue_diamond:
uint8PW010
VolumeControlType (E9) :small_blue_diamond:
  • indicates the type of volume control
uint8PR+EV03
  • NONE (0) 
  • RELATIVE (1) 
  • RELATIVE_CURRENT (2) 
  • ABSOLUTE (3) :heavy_check_mark:
VolumeSelector (EA) :small_blue_diamond:
  • triggered by presses to the iPhone's volume up/down buttons when TV is selected in the Remote Control widget
uint8PW01
  • VOLUME_UP (0) 
  • VOLUME_DOWN (1) 
## TemperatureSensor (8A)
Defines a Temperature Sensor.
- - + + @@ -365,14 +365,14 @@ - - + + - - - - - + + + + +
CharacteristicFormatPermsMinMaxConstants/Defaults
CurrentTemperature (11) :small_blue_diamond:
  • current temperature measured in Celsius
floatPR+EV01000
Name (23)
  • default name of a Service used only during initial pairing
stringPR--"unnamed"
CurrentTemperature (11) :small_blue_diamond:
  • current temperature measured in Celsius
floatPR+EV0100
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
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) 
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:
  • 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:
  • indicates desired temperature measure in Celsius
floatPW+PR+EV103816
CurrentTemperature (11) :small_blue_diamond:
  • current temperature measured in Celsius
floatPR+EV0100
TargetTemperature (35) :small_blue_diamond:
  • indicates desired temperature measures in Celsius
floatPW+PR+EV1038
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
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)
  • indicates desired humidity measured as a percentage
floatPW+PR+EV01000
CoolingThresholdTemperature (D)
  • cooling turns on when temperature (in Celsius) rises above this threshold
floatPR+PW+EV1035
CurrentRelativeHumidity (10)
  • current humidity measured as a percentage
floatPR+EV0100
HeatingThresholdTemperature (12)
  • heating turns on when temperature (in Celsius) falls below this threshold
floatPR+PW+EV025
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
TargetRelativeHumidity (34)
  • indicates desired humidity measured as a percentage
floatPW+PR+EV0100
## Valve (D0) @@ -381,33 +381,33 @@ Active (B0) :small_blue_diamond:uint8PW+PR+EV01 InUse (D2) :small_blue_diamond:uint8PR+EV01 ValveType (D5) :small_blue_diamond:uint8PR+EV03 -SetDuration (D3) uint32PW+PR+EV0360060 -RemainingDuration (D4) uint32PR+EV0360060 +SetDuration (D3) uint32PW+PR+EV03600 +RemainingDuration (D4) uint32PR+EV03600 IsConfigured (D6) uint8PR+EV01 -ServiceLabelIndex (CB) uint8PR12551 +ServiceLabelIndex (CB) uint8PR1255 StatusFault (77) uint8PR+EV01 -Name (23) stringPR--"unnamed" +Name (23) stringPR-- ## Window (8B)
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:
  • 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"
CurrentPosition (6D) :small_blue_diamond:
  • current position (as a percentage) from fully closed (0) to full open (100)
uint8PR+EV0100
TargetPosition (7C) :small_blue_diamond:
  • indicates target position (as a percentage) from fully closed (0) to full open (100)
uint8PW+PR+EV0100
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
ObstructionDetected (24)
  • indicates if obstruction is detected
boolPR+EV01
  • NOT_DETECTED (0) :heavy_check_mark:
  • DETECTED (1) 
## WindowCovering (8C)
Defines a motorized Window Shade, Screen, Awning, etc.
- - - - - - - + + + + + + +
CharacteristicFormatPermsMinMaxConstants/Defaults
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)
  • 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)
  • indicates desired angle (in degrees) of slats from fully left (-90) to fully open (0) to fully right (90)
intPW+PR+EV-90900
TargetPosition (7C) :small_blue_diamond:
  • indicates target position (as a percentage) from fully closed (0) to full open (100)
uint8PW+PR+EV0100
CurrentPosition (6D) :small_blue_diamond:
  • current position (as a percentage) from fully closed (0) to full open (100)
uint8PR+EV0100
Name (23)
  • default name of a Service used only during initial pairing
stringPR--
CurrentHorizontalTiltAngle (6C)
  • current angle (in degrees) of slats from fully up (-90) to fully open (0) to fully down (90)
intPR+EV-9090
TargetHorizontalTiltAngle (7B)
  • indicates desired angle (in degrees) of slats from fully up (-90) to fully open (0) to fully down (90)
intPW+PR+EV-9090
CurrentVerticalTiltAngle (6E)
  • current angle (in degrees) of slats from fully left (-90) to fully open (0) to fully right (90)
intPR+EV-9090
TargetVerticalTiltAngle (7D)
  • indicates desired angle (in degrees) of slats from fully left (-90) to fully open (0) to fully right (90)
intPW+PR+EV-9090
ObstructionDetected (24)
  • indicates if obstruction is detected
boolPR+EV01
  • NOT_DETECTED (0) :heavy_check_mark:
  • DETECTED (1)