CREATE_CHAR(uint32_t,AccessoryFlags,1,1,1); // not applicable for HomeSpan COM: not applicable for HomeSpan
CREATE_CHAR(uint8_t,Active,0,0,1,INACTIVE,ACTIVE); // indicates if the Service is active/on COM: indicates if the Service is active/on
CREATE_CHAR(uint32_t,ActiveIdentifier,0,0,255); // the Identifier of the current Input Source COM: the Identifier of the current Input Source
CREATE_CHAR(uint8_t,AirQuality,0,0,5,UNKNOWN,EXCELLENT,GOOD,FAIR,INFERIOR,POOR); // a subjective description COM: a subjective description
CREATE_CHAR(uint8_t,BatteryLevel,0,0,100); // measured as a percentage COM: measured as a percentage
CREATE_CHAR(int,Brightness,0,0,100); // measured as a percentage COM: measured as a percentage
CREATE_CHAR(double,CarbonMonoxideLevel,0,0,100); // measured in parts per million (ppm) COM: measured in parts per million (ppm)
CREATE_CHAR(double,CarbonMonoxidePeakLevel,0,0,100); // measured in parts per million (ppm) COM: measured in parts per million (ppm)
CREATE_CHAR(uint8_t,CarbonMonoxideDetected,0,0,1,NORMAL,ABNORMAL); // indicates if abnormal level is detected COM: indicates if abnormal level is detected
CREATE_CHAR(double,CarbonDioxideLevel,0,0,100000); // measured on parts per million (ppm) COM: measured on parts per million (ppm)
CREATE_CHAR(double,CarbonDioxidePeakLevel,0,0,100000); // measured in parts per million (ppm) COM: measured in parts per million (ppm)
CREATE_CHAR(uint8_t,CarbonDioxideDetected,0,0,1,NORMAL,ABNORMAL); // indicates if abnormal level is detected COM: indicates if abnormal level is detected
CREATE_CHAR(uint8_t,ChargingState,0,0,2,NOT_CHARGING,CHARGING,NOT_CHARGEABLE); // indicates state of battery charging COM: indicates state of battery charging
CREATE_CHAR(uint8_t,ClosedCaptions,0,0,1); // unused by any Service COM: unused by any Service
CREATE_CHAR(double,CoolingThresholdTemperature,10,10,35); // cooling turns on when temperature (in Celsius) rises above this threshold COM: 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) COM: 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) COM: indictates if contact is detected (i.e. closed)
CREATE_CHAR(const char *,ConfiguredName,"unnamed",0,1); COM:
CREATE_CHAR(double,CurrentAmbientLightLevel,1,0.0001,100000); // measured in Lux (lumens/m2 COM: 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) COM: 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 COM: indicates current state of air purification
CREATE_CHAR(uint8_t,CurrentSlatState,0,0,2,FIXED,JAMMED,SWINGING); // indicates current state of slats COM: 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) COM: 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) COM: 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); COM:
CREATE_CHAR(uint8_t,CurrentHumidifierDehumidifierState,1,0,3,INACTIVE,IDLE,HUMIDIFYING,DEHUMIDIFYING); // indicates current state of humidifier/dehumidifer COM: 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 COM: indicates current state of a door
CREATE_CHAR(uint8_t,CurrentFanState,1,0,2,INACTIVE,IDLE,BLOWING); // indicates current state of a fan COM: 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 COM: 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 COM: indicates whether appliance is currently heating, cooling, idle, or off
CREATE_CHAR(uint8_t,CurrentMediaState,0,0,5); COM:
CREATE_CHAR(double,CurrentRelativeHumidity,0,0,100); //current humidity measured as a percentage COM: current humidity measured as a percentage
CREATE_CHAR(double,CurrentTemperature,0,0,100); // current temperature measured in Celsius COM: 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) COM: 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 COM: measures as a percentage of remaining life
CREATE_CHAR(uint8_t,FilterChangeIndication,0,0,1,NO_CHANGE_NEEDED,CHANGE_NEEDED); // indicates state of filter COM: indicates state of filter
CREATE_CHAR(const char *,FirmwareRevision,"1.0.0",0,1); // must be in form x[.y[.z]] - informational only COM: must be in form x[.y[.z]] - informational only
CREATE_CHAR(const char *,HardwareRevision,"1.0.0",0,1); // must be in form x[.y[.z]] - informational only COM: must be in form x[.y[.z]] - informational only
CREATE_CHAR(double,HeatingThresholdTemperature,16,0,25); // heating turns on when temperature (in Celsius) falls below this threshold COM: heating turns on when temperature (in Celsius) falls below this threshold
CREATE_CHAR(boolean,HoldPosition,false,0,1); // deprecated COM: 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) COM: color (in degrees) from red (0) to green (120) to blue (240) and back to red (360)
CREATE_CHAR(boolean,Identify,false,0,1,IDLE,RUN_ID); // the Home App set this to RUN_ID when it wants the device to run its identification routine COM: the Home App set this to RUN_ID when it wants the device to run its identification routine
CREATE_CHAR(uint32_t,Identifier,0,0,255); COM:
CREATE_CHAR(uint8_t,InputDeviceType,0,0,6); COM:
CREATE_CHAR(uint8_t,InputSourceType,0,0,10); COM:
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 COM: 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 COM: 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 COM: indictates if a leak is detected
CREATE_CHAR(uint8_t,LockCurrentState,0,0,3,UNLOCKED,LOCKED,JAMMED,UNKNOWN); // indictates state of a lock COM: indictates 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 COM: indicates if local control lock is enabled
CREATE_CHAR(uint8_t,LockTargetState,0,0,1,UNLOCK,LOCK); // indicates desired state of lock COM: indicates desired state of lock
CREATE_CHAR(const char *,Manufacturer,"HomeSpan",0,1); // any string - informational only COM: any string - informational only
CREATE_CHAR(const char *,Model,"HomeSpan-ESP32",0,1); // any string - informational only COM: any string - informational only
CREATE_CHAR(boolean,MotionDetected,false,0,1,NOT_DETECTED,DETECTED); // indicates if motion is detected COM: indicates if motion is detected
CREATE_CHAR(boolean,Mute,false,0,1,OFF,ON); // not used COM: not used
CREATE_CHAR(const char *,Name,"unnamed",0,1); // default name of a Service used only during initial pairing COM: default name of a Service used only during initial pairing
CREATE_CHAR(double,NitrogenDioxideDensity,0,0,1000); // measured in micrograms/m3 COM: measured in micrograms/m3
CREATE_CHAR(boolean,ObstructionDetected,false,0,1,NOT_DETECTED,DETECTED); // indicates if obstruction is detected COM: indicates if obstruction is detected
CREATE_CHAR(double,PM25Density,0,0,1000); // 2.5-micron particulate density, measured in micrograms/m3 COM: 2.5-micron particulate density, measured in micrograms/m3
CREATE_CHAR(uint8_t,OccupancyDetected,0,0,1,NOT_DETECTED,DETECTED); // indicates if occupanccy is detected COM: indicates if occupanccy is detected
CREATE_CHAR(boolean,OutletInUse,false,0,1,NOT_IN_USE,IN_USE); // indicates if an appliance or light is plugged into the outlet, regardless of whether on or off COM: indicates if an appliance or light is plugged into the outlet, regardless of whether on or off
CREATE_CHAR(boolean,On,false,0,1,OFF,ON); // indicates if the Service is active/on COM: indicates if the Service is active/on
CREATE_CHAR(double,OzoneDensity,0,0,1000); // measured in micrograms/m3 COM: measured in micrograms/m3
CREATE_CHAR(uint8_t,PictureMode,0,0,13); COM:
CREATE_CHAR(double,PM10Density,0,0,1000); // 10-micron particulate density, measured in micrograms/m3 COM: 10-micron particulate density, measured in micrograms/m3
CREATE_CHAR(uint8_t,PositionState,2,0,2,GOING_TO_MINIMUM,GOING_TO_MAXIMUM,STOPPED); // deprecated COM: deprecated
CREATE_CHAR(uint8_t,PowerModeSelection,0,0,1); COM:
CREATE_CHAR(uint8_t,ProgramMode,0,0,2,NONE,SCHEDULED,SCHEDULE_OVERRIDEN); COM:
CREATE_CHAR(uint8_t,ProgrammableSwitchEvent,0,0,2,SINGLE_PRESS,DOUBLE_PRESS,LONG_PRESS); COM:
CREATE_CHAR(double,RelativeHumidityDehumidifierThreshold,50,0,100); COM:
CREATE_CHAR(double,RelativeHumidityHumidifierThreshold,50,0,100); COM:
CREATE_CHAR(uint32_t,RemainingDuration,60,0,3600); COM:
CREATE_CHAR(uint8_t,RemoteKey,0,0,16); COM:
CREATE_CHAR(uint8_t,ResetFilterIndication,0,1,1); COM:
CREATE_CHAR(int,RotationDirection,0,0,1,CLOCKWISE,COUNTERCLOCKWISE); COM:
CREATE_CHAR(double,RotationSpeed,0,0,100); COM:
CREATE_CHAR(double,Saturation,0,0,100); COM:
CREATE_CHAR(uint8_t,SecuritySystemAlarmType,0,0,1,KNOWN,UNKNOWN); COM:
CREATE_CHAR(uint8_t,SecuritySystemCurrentState,3,0,4,ARMED_STAY,ARMED_AWAY,ARMED_NIGHT,DISARMED,ALARM_TRIGGERED); COM:
CREATE_CHAR(uint8_t,SecuritySystemTargetState,3,0,3,ARM_STAY,ARM_AWAY,ARM_NIGHT,DISARM); COM:
CREATE_CHAR(const char *,SerialNumber,"HS-12345",0,1); COM:
CREATE_CHAR(uint8_t,ServiceLabelIndex,1,1,255); COM:
CREATE_CHAR(uint8_t,ServiceLabelNamespace,1,0,1,DOTS,NUMERALS); COM:
CREATE_CHAR(uint8_t,SlatType,0,0,1,HORIZONTAL,VERTICAL); COM:
CREATE_CHAR(uint8_t,SleepDiscoveryMode,0,0,1); COM:
CREATE_CHAR(uint8_t,SmokeDetected,0,0,1,NOT_DETECTED,DETECTED); COM:
CREATE_CHAR(boolean,StatusActive,true,0,1); COM:
CREATE_CHAR(uint8_t,StatusFault,0,0,1,NO_FAULT,FAULT); COM:
CREATE_CHAR(uint8_t,StatusJammed,0,0,1,NOT_JAMMED,JAMMED); COM:
CREATE_CHAR(uint8_t,StatusLowBattery,0,0,1,NOT_LOW_BATTERY,LOW_BATTERY); COM:
CREATE_CHAR(uint8_t,StatusTampered,0,0,1,NOT_TAMPERED,TAMPERED); COM:
CREATE_CHAR(double,SulphurDioxideDensity,0,0,1000); COM:
CREATE_CHAR(uint8_t,SwingMode,0,0,1,SWING_DISABLED,SWING_ENABLED); COM:
CREATE_CHAR(uint8_t,TargetAirPurifierState,1,0,1,MANUAL,AUTO); COM:
CREATE_CHAR(uint8_t,TargetFanState,1,0,1,MANUAL,AUTO); COM:
CREATE_CHAR(int,TargetTiltAngle,0,-90,90); COM:
CREATE_CHAR(uint8_t,TargetHeaterCoolerState,0,0,2,AUTO,HEAT,COOL); COM:
CREATE_CHAR(uint32_t,SetDuration,60,0,3600); COM:
CREATE_CHAR(int,TargetHorizontalTiltAngle,0,-90,90); COM:
CREATE_CHAR(uint8_t,TargetHumidifierDehumidifierState,0,0,2,AUTO,HUMIDIFY,DEHUMIDIFY); COM:
CREATE_CHAR(uint8_t,TargetPosition,0,0,100); COM:
CREATE_CHAR(uint8_t,TargetDoorState,1,0,1,OPEN,CLOSED); COM:
CREATE_CHAR(uint8_t,TargetHeatingCoolingState,0,0,3,OFF,HEAT,COOL,AUTO); COM:
CREATE_CHAR(uint8_t,TargetMediaState,0,0,2); COM:
CREATE_CHAR(double,TargetRelativeHumidity,0,0,100); COM:
CREATE_CHAR(double,TargetTemperature,16,10,38); COM:
CREATE_CHAR(uint8_t,TargetVisibilityState,0,0,1); COM:
CREATE_CHAR(uint8_t,TemperatureDisplayUnits,0,0,1,CELSIUS,FAHRENHEIT); COM:
CREATE_CHAR(int,TargetVerticalTiltAngle,0,-90,90); COM:
CREATE_CHAR(uint8_t,ValveType,0,0,3); COM:
CREATE_CHAR(const char *,Version,"1.0.0",0,1); COM:
CREATE_CHAR(double,VOCDensity,0,0,1000); COM:
CREATE_CHAR(uint8_t,Volume,0,0,100); COM:
CREATE_CHAR(uint8_t,VolumeControlType,0,0,3); COM:
CREATE_CHAR(uint8_t,VolumeSelector,0,0,1); COM:
CREATE_CHAR(double,WaterLevel,0,0,100); COM:
AccessoryInformation (3E)
Required Identification Information. For each Accessory in a HomeSpan device this must be included as the first Service.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| Identify | 14 | bool | PW | 0 | 1 | | the Home App set this to RUN_ID when it wants the device to run its identification routine |
| FirmwareRevision | 52 | string | PR+EV | - | - | | must be in form x[.y[.z]] - informational only |
| Manufacturer | 20 | string | PR | - | - | | any string - informational only |
| Model | 21 | string | PR | - | - | | any string - informational only |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| SerialNumber | 30 | string | PR | - | - | | |
| HardwareRevision | 53 | string | PR | - | - | | must be in form x[.y[.z]] - informational only |
AirPurifier (BB)
Defines a basic Air Purifier with an optional fan. Optional Linked Services: FilterMaintenance, AirQualitySensor, Fan, and Slat
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| Active | B0 | uint8 | PW+PR+EV | 0 | 1 | | indicates if the Service is active/on |
| CurrentAirPurifierState | A9 | uint8 | PR+EV | 0 | 2 | - INACTIVE (0)
- IDLE (1)
- PURIFYING (2)
| indicates current state of air purification |
| TargetAirPurifierState | A8 | uint8 | PW+PR+EV | 0 | 1 | | |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| RotationSpeed | 29 | float | PR+PW+EV | 0 | 100 | | |
| SwingMode | B6 | uint8 | PR+EV+PW | 0 | 1 | - SWING_DISABLED (0)
- SWING_ENABLED (1)
| |
| LockPhysicalControls | A7 | uint8 | PW+PR+EV | 0 | 1 | - CONTROL_LOCK_DISABLED (0)
- CONTROL_LOCK_ENABLED (1)
| indicates if local control lock is enabled |
AirQualitySensor (8D)
Defines an Air Quality Sensor.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| AirQuality | 95 | uint8 | PR+EV | 0 | 5 | - UNKNOWN (0)
- EXCELLENT (1)
- GOOD (2)
- FAIR (3)
- INFERIOR (4)
- POOR (5)
| a subjective description |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| OzoneDensity | C3 | float | PR+EV | 0 | 1000 | | measured in micrograms/m3 |
| NitrogenDioxideDensity | C4 | float | PR+EV | 0 | 1000 | | measured in micrograms/m3 |
| SulphurDioxideDensity | C5 | float | PR+EV | 0 | 1000 | | |
| PM25Density | C6 | float | PR+EV | 0 | 1000 | | 2.5-micron particulate density, measured in micrograms/m3 |
| PM10Density | C7 | float | PR+EV | 0 | 1000 | | 10-micron particulate density, measured in micrograms/m3 |
| VOCDensity | C8 | float | PR+EV | 0 | 1000 | | |
| StatusActive | 75 | bool | PR+EV | 0 | 1 | | |
| StatusFault | 77 | uint8 | PR+EV | 0 | 1 | | |
| StatusTampered | 7A | uint8 | PR+EV | 0 | 1 | - NOT_TAMPERED (0)
- TAMPERED (1)
| |
| StatusLowBattery | 79 | uint8 | PR+EV | 0 | 1 | - NOT_LOW_BATTERY (0)
- LOW_BATTERY (1)
| |
BatteryService (96)
Defines a standalone Battery Service.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| BatteryLevel | 68 | uint8 | PR+EV | 0 | 100 | | measured as a percentage |
| ChargingState | 8F | uint8 | PR+EV | 0 | 2 | - NOT_CHARGING (0)
- CHARGING (1)
- NOT_CHARGEABLE (2)
| indicates state of battery charging |
| StatusLowBattery | 79 | uint8 | PR+EV | 0 | 1 | - NOT_LOW_BATTERY (0)
- LOW_BATTERY (1)
| |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
CarbonDioxideSensor (97)
Defines a Carbon Dioxide Sensor.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| CarbonDioxideDetected | 92 | uint8 | PR+EV | 0 | 1 | | indicates if abnormal level is detected |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| StatusActive | 75 | bool | PR+EV | 0 | 1 | | |
| StatusFault | 77 | uint8 | PR+EV | 0 | 1 | | |
| StatusTampered | 7A | uint8 | PR+EV | 0 | 1 | - NOT_TAMPERED (0)
- TAMPERED (1)
| |
| StatusLowBattery | 79 | uint8 | PR+EV | 0 | 1 | - NOT_LOW_BATTERY (0)
- LOW_BATTERY (1)
| |
| CarbonDioxideLevel | 93 | float | PR+EV | 0 | 100000 | | measured on parts per million (ppm) |
| CarbonDioxidePeakLevel | 94 | float | PR+EV | 0 | 100000 | | measured in parts per million (ppm) |
CarbonMonoxideSensor (7F)
Defines a Carbon Monoxide Sensor.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| CarbonMonoxideDetected | 69 | uint8 | PR+EV | 0 | 1 | | indicates if abnormal level is detected |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| StatusActive | 75 | bool | PR+EV | 0 | 1 | | |
| StatusFault | 77 | uint8 | PR+EV | 0 | 1 | | |
| StatusTampered | 7A | uint8 | PR+EV | 0 | 1 | - NOT_TAMPERED (0)
- TAMPERED (1)
| |
| StatusLowBattery | 79 | uint8 | PR+EV | 0 | 1 | - NOT_LOW_BATTERY (0)
- LOW_BATTERY (1)
| |
| CarbonMonoxideLevel | 90 | float | PR+EV | 0 | 100 | | measured in parts per million (ppm) |
| CarbonMonoxidePeakLevel | 91 | float | PR+EV | 0 | 100 | | measured in parts per million (ppm) |
ContactSensor (80)
Defines a Contact Sensor.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| ContactSensorState | 6A | uint8 | PR+EV | 0 | 1 | - DETECTED (0)
- NOT_DETECTED (1)
| indictates if contact is detected (i.e. closed) |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| StatusActive | 75 | bool | PR+EV | 0 | 1 | | |
| StatusFault | 77 | uint8 | PR+EV | 0 | 1 | | |
| StatusTampered | 7A | uint8 | PR+EV | 0 | 1 | - NOT_TAMPERED (0)
- TAMPERED (1)
| |
| StatusLowBattery | 79 | uint8 | PR+EV | 0 | 1 | - NOT_LOW_BATTERY (0)
- LOW_BATTERY (1)
| |
Door (81)
Defines a motorized Door.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| CurrentPosition | 6D | uint8 | PR+EV | 0 | 100 | | current position (as a percentage) from fully closed (0) to full open (100) |
| TargetPosition | 7C | uint8 | PW+PR+EV | 0 | 100 | | |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| ObstructionDetected | 24 | bool | PR+EV | 0 | 1 | - NOT_DETECTED (0)
- DETECTED (1)
| indicates if obstruction is detected |
Doorbell (121)
Defines a Doorbell. Can be used on a standalone basis or in conjunction with a LockMechanism Service.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| ProgrammableSwitchEvent | 73 | uint8 | PR+EV+NV | 0 | 2 | - SINGLE_PRESS (0)
- DOUBLE_PRESS (1)
- LONG_PRESS (2)
| |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
Fan (B7)
Defines a Fan. Can be used in conjunction with a LightBulb Service to create a Lighted Ceiling Fan.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| Active | B0 | uint8 | PW+PR+EV | 0 | 1 | | indicates if the Service is active/on |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| CurrentFanState | AF | uint8 | PR+EV | 0 | 2 | - INACTIVE (0)
- IDLE (1)
- BLOWING (2)
| indicates current state of a fan |
| TargetFanState | BF | uint8 | PW+PR+EV | 0 | 1 | | |
| RotationDirection | 28 | int | PR+PW+EV | 0 | 1 | - CLOCKWISE (0)
- COUNTERCLOCKWISE (1)
| |
| RotationSpeed | 29 | float | PR+PW+EV | 0 | 100 | | |
| SwingMode | B6 | uint8 | PR+EV+PW | 0 | 1 | - SWING_DISABLED (0)
- SWING_ENABLED (1)
| |
| LockPhysicalControls | A7 | uint8 | PW+PR+EV | 0 | 1 | - CONTROL_LOCK_DISABLED (0)
- CONTROL_LOCK_ENABLED (1)
| indicates if local control lock is enabled |
Faucet (D7)
Defines the master control for a multi-Valve appliance. Linked Services: Valve (at least one required), and HeaterCooler (optional).
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| Active | B0 | uint8 | PW+PR+EV | 0 | 1 | | indicates if the Service is active/on |
| StatusFault | 77 | uint8 | PR+EV | 0 | 1 | | |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
FilterMaintenance (BA)
Defines a Filter Maintainence check.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| FilterChangeIndication | AC | uint8 | PR+EV | 0 | 1 | - NO_CHANGE_NEEDED (0)
- CHANGE_NEEDED (1)
| indicates state of filter |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| FilterLifeLevel | AB | float | PR+EV | 0 | 100 | | measures as a percentage of remaining life |
| ResetFilterIndication | AD | uint8 | PW | 1 | 1 | | |
GarageDoorOpener (41)
Defines a motorized Garage Door Opener.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| CurrentDoorState | E | uint8 | PR+EV | 0 | 4 | - OPEN (0)
- CLOSED (1)
- OPENING (2)
- CLOSING (3)
- STOPPED (4)
| indicates current state of a door |
| TargetDoorState | 32 | uint8 | PW+PR+EV | 0 | 1 | | |
| ObstructionDetected | 24 | bool | PR+EV | 0 | 1 | - NOT_DETECTED (0)
- DETECTED (1)
| indicates if obstruction is detected |
| LockCurrentState | 1D | uint8 | PR+EV | 0 | 3 | - UNLOCKED (0)
- LOCKED (1)
- JAMMED (2)
- UNKNOWN (3)
| indictates state of a lock |
| LockTargetState | 1E | uint8 | PW+PR+EV | 0 | 1 | | indicates desired state of lock |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| Version | 37 | string | PR | - | - | | |
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.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| Active | B0 | uint8 | PW+PR+EV | 0 | 1 | | indicates if the Service is active/on |
| CurrentTemperature | 11 | float | PR+EV | 0 | 100 | | current temperature measured in Celsius |
| CurrentHeaterCoolerState | B1 | uint8 | PR+EV | 0 | 3 | - INACTIVE (0)
- IDLE (1)
- HEATING (2)
- COOLING (3)
| indicates whether appliance is currently heating, cooling, idle, or off |
| TargetHeaterCoolerState | B2 | uint8 | PW+PR+EV | 0 | 2 | | |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| RotationSpeed | 29 | float | PR+PW+EV | 0 | 100 | | |
| TemperatureDisplayUnits | 36 | uint8 | PW+PR+EV | 0 | 1 | - CELSIUS (0)
- FAHRENHEIT (1)
| |
| SwingMode | B6 | uint8 | PR+EV+PW | 0 | 1 | - SWING_DISABLED (0)
- SWING_ENABLED (1)
| |
| CoolingThresholdTemperature | D | float | PR+PW+EV | 10 | 35 | | cooling turns on when temperature (in Celsius) rises above this threshold |
| HeatingThresholdTemperature | 12 | float | PR+PW+EV | 0 | 25 | | heating turns on when temperature (in Celsius) falls below this threshold |
| LockPhysicalControls | A7 | uint8 | PW+PR+EV | 0 | 1 | - CONTROL_LOCK_DISABLED (0)
- CONTROL_LOCK_ENABLED (1)
| indicates if local control lock is enabled |
HumidifierDehumidifier (BD)
Defines a Humidifer, Dehumidifier, or combined Humidifer/Dehumidifier. Can be used with a separate Fan Service and/or Slat Service to extend functionality.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| Active | B0 | uint8 | PW+PR+EV | 0 | 1 | | indicates if the Service is active/on |
| CurrentRelativeHumidity | 10 | float | PR+EV | 0 | 100 | | current humidity measured as a percentage |
| CurrentHumidifierDehumidifierState | B3 | uint8 | PR+EV | 0 | 3 | - INACTIVE (0)
- IDLE (1)
- HUMIDIFYING (2)
- DEHUMIDIFYING (3)
| indicates current state of humidifier/dehumidifer |
| TargetHumidifierDehumidifierState | B4 | uint8 | PW+PR+EV | 0 | 2 | - AUTO (0)
- HUMIDIFY (1)
- DEHUMIDIFY (2)
| |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| RelativeHumidityDehumidifierThreshold | C9 | float | PR+PW+EV | 0 | 100 | | |
| RelativeHumidityHumidifierThreshold | CA | float | PR+PW+EV | 0 | 100 | | |
| RotationSpeed | 29 | float | PR+PW+EV | 0 | 100 | | |
| SwingMode | B6 | uint8 | PR+EV+PW | 0 | 1 | - SWING_DISABLED (0)
- SWING_ENABLED (1)
| |
| WaterLevel | B5 | float | PR+EV | 0 | 100 | | |
| LockPhysicalControls | A7 | uint8 | PW+PR+EV | 0 | 1 | - CONTROL_LOCK_DISABLED (0)
- CONTROL_LOCK_ENABLED (1)
| indicates if local control lock is enabled |
HumiditySensor (82)
Defines a Humidity Sensor.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| CurrentRelativeHumidity | 10 | float | PR+EV | 0 | 100 | | current humidity measured as a percentage |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| StatusActive | 75 | bool | PR+EV | 0 | 1 | | |
| StatusFault | 77 | uint8 | PR+EV | 0 | 1 | | |
| StatusTampered | 7A | uint8 | PR+EV | 0 | 1 | - NOT_TAMPERED (0)
- TAMPERED (1)
| |
| StatusLowBattery | 79 | uint8 | PR+EV | 0 | 1 | - NOT_LOW_BATTERY (0)
- LOW_BATTERY (1)
| |
InputSource (D9)
Defines an Input Source for a TV. Use only as a Linked Service for the Television Service.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| ConfiguredName | E3 | string | PW+PR+EV | - | - | | |
| IsConfigured | D6 | uint8 | PR+EV | 0 | 1 | - NOT_CONFIGURED (0)
- CONFIGURED (1)
| indicates if a predefined Service has been configured |
| Identifier | E6 | uint32 | PR | 0 | 255 | | |
| CurrentVisibilityState | 135 | uint8 | PR+EV | 0 | 1 | | |
| TargetVisibilityState | 134 | uint8 | PW+PR+EV | 0 | 1 | | |
IrrigationSystem (CF)
Defines an Irrigation System. Linked Services: Valve Service (at least one required).
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| Active | B0 | uint8 | PW+PR+EV | 0 | 1 | | indicates if the Service is active/on |
| ProgramMode | D1 | uint8 | PR+EV | 0 | 2 | - NONE (0)
- SCHEDULED (1)
- SCHEDULE_OVERRIDEN (2)
| |
| InUse | D2 | uint8 | PR+EV | 0 | 1 | | if Service is set to active, this indictes whether it is currently in use |
| RemainingDuration | D4 | uint32 | PR+EV | 0 | 3600 | | |
| StatusFault | 77 | uint8 | PR+EV | 0 | 1 | | |
LeakSensor (83)
Defines a Leak Sensor.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| LeakDetected | 70 | uint8 | PR+EV | 0 | 1 | - NOT_DETECTED (0)
- DETECTED (1)
| indictates if a leak is detected |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| StatusActive | 75 | bool | PR+EV | 0 | 1 | | |
| StatusFault | 77 | uint8 | PR+EV | 0 | 1 | | |
| StatusTampered | 7A | uint8 | PR+EV | 0 | 1 | - NOT_TAMPERED (0)
- TAMPERED (1)
| |
| StatusLowBattery | 79 | uint8 | PR+EV | 0 | 1 | - NOT_LOW_BATTERY (0)
- LOW_BATTERY (1)
| |
LightBulb (43)
Defines any type of Light.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| On | 25 | bool | PR+PW+EV | 0 | 1 | | indicates if the Service is active/on |
| Brightness | 8 | int | PR+PW+EV | 0 | 100 | | measured as a percentage |
| Hue | 13 | float | PR+PW+EV | 0 | 360 | | color (in degrees) from red (0) to green (120) to blue (240) and back to red (360) |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| Saturation | 2F | float | PR+PW+EV | 0 | 100 | | |
| ColorTemperature | CE | uint32 | PR+PW+EV | 140 | 500 | | measured in inverse megaKelvin (= 1,000,000 / Kelvin) |
LightSensor (84)
Defines a Light Sensor.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| CurrentAmbientLightLevel | 6B | float | PR+EV | 0.0001 | 100000 | | measured in Lux (lumens/m2 |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| StatusActive | 75 | bool | PR+EV | 0 | 1 | | |
| StatusFault | 77 | uint8 | PR+EV | 0 | 1 | | |
| StatusTampered | 7A | uint8 | PR+EV | 0 | 1 | - NOT_TAMPERED (0)
- TAMPERED (1)
| |
| StatusLowBattery | 79 | uint8 | PR+EV | 0 | 1 | - NOT_LOW_BATTERY (0)
- LOW_BATTERY (1)
| |
LockMechanism (45)
Defines an electronic Lock.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| LockCurrentState | 1D | uint8 | PR+EV | 0 | 3 | - UNLOCKED (0)
- LOCKED (1)
- JAMMED (2)
- UNKNOWN (3)
| indictates state of a lock |
| LockTargetState | 1E | uint8 | PW+PR+EV | 0 | 1 | | indicates desired state of lock |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| Mute | 11A | bool | PW+PR+EV | 0 | 1 | | not used |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| Volume | 119 | uint8 | PW+PR+EV | 0 | 100 | | |
MotionSensor (85)
Defines a Motion Sensor.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| MotionDetected | 22 | bool | PR+EV | 0 | 1 | - NOT_DETECTED (0)
- DETECTED (1)
| indicates if motion is detected |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| StatusActive | 75 | bool | PR+EV | 0 | 1 | | |
| StatusFault | 77 | uint8 | PR+EV | 0 | 1 | | |
| StatusTampered | 7A | uint8 | PR+EV | 0 | 1 | - NOT_TAMPERED (0)
- TAMPERED (1)
| |
| StatusLowBattery | 79 | uint8 | PR+EV | 0 | 1 | - NOT_LOW_BATTERY (0)
- LOW_BATTERY (1)
| |
OccupancySensor (86)
Defines and Occupancy Sensor.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| OccupancyDetected | 71 | uint8 | PR+EV | 0 | 1 | - NOT_DETECTED (0)
- DETECTED (1)
| indicates if occupanccy is detected |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| StatusActive | 75 | bool | PR+EV | 0 | 1 | | |
| StatusFault | 77 | uint8 | PR+EV | 0 | 1 | | |
| StatusTampered | 7A | uint8 | PR+EV | 0 | 1 | - NOT_TAMPERED (0)
- TAMPERED (1)
| |
| StatusLowBattery | 79 | uint8 | PR+EV | 0 | 1 | - NOT_LOW_BATTERY (0)
- LOW_BATTERY (1)
| |
Outlet (47)
Defines an controllable Outlet used to power any light or appliance.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| On | 25 | bool | PR+PW+EV | 0 | 1 | | indicates if the Service is active/on |
| OutletInUse | 26 | bool | PR+EV | 0 | 1 | | indicates if an appliance or light is plugged into the outlet, regardless of whether on or off |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
SecuritySystem (7E)
Defines a Security System.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| SecuritySystemCurrentState | 66 | uint8 | PR+EV | 0 | 4 | - ARMED_STAY (0)
- ARMED_AWAY (1)
- ARMED_NIGHT (2)
- DISARMED (3)
- ALARM_TRIGGERED (4)
| |
| SecuritySystemTargetState | 67 | uint8 | PW+PR+EV | 0 | 3 | - ARM_STAY (0)
- ARM_AWAY (1)
- ARM_NIGHT (2)
- DISARM (3)
| |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| SecuritySystemAlarmType | 8E | uint8 | PR+EV | 0 | 1 | | |
| StatusFault | 77 | uint8 | PR+EV | 0 | 1 | | |
| StatusTampered | 7A | uint8 | PR+EV | 0 | 1 | - NOT_TAMPERED (0)
- TAMPERED (1)
| |
| ServiceLabelNamespace | CD | uint8 | PR | 0 | 1 | | |
Slat (B9)
Defines a motorized ventilation Slat(s).
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| CurrentSlatState | AA | uint8 | PR+EV | 0 | 2 | - FIXED (0)
- JAMMED (1)
- SWINGING (2)
| indicates current state of slats |
| SlatType | C0 | uint8 | PR | 0 | 1 | - HORIZONTAL (0)
- VERTICAL (1)
| |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| SwingMode | B6 | uint8 | PR+EV+PW | 0 | 1 | - SWING_DISABLED (0)
- SWING_ENABLED (1)
| |
| CurrentTiltAngle | C1 | int | PR+EV | -90 | 90 | | angle (in degrees) of slats from fully up or left (-90) to fully open (0) to fully down or right (90) |
| TargetTiltAngle | C2 | int | PW+PR+EV | -90 | 90 | | |
SmokeSensor (87)
Defines a Smoke Sensor.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| SmokeDetected | 76 | uint8 | PR+EV | 0 | 1 | - NOT_DETECTED (0)
- DETECTED (1)
| |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| StatusActive | 75 | bool | PR+EV | 0 | 1 | | |
| StatusFault | 77 | uint8 | PR+EV | 0 | 1 | | |
| StatusTampered | 7A | uint8 | PR+EV | 0 | 1 | - NOT_TAMPERED (0)
- TAMPERED (1)
| |
| StatusLowBattery | 79 | uint8 | PR+EV | 0 | 1 | - NOT_LOW_BATTERY (0)
- LOW_BATTERY (1)
| |
| Mute | 11A | bool | PW+PR+EV | 0 | 1 | | not used |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| Volume | 119 | uint8 | PW+PR+EV | 0 | 100 | | |
StatelessProgrammableSwitch (89)
Defines a "Stateless" Programmable Switch that can be used to trigger actions in the Home App.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| ProgrammableSwitchEvent | 73 | uint8 | PR+EV+NV | 0 | 2 | - SINGLE_PRESS (0)
- DOUBLE_PRESS (1)
- LONG_PRESS (2)
| |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
Switch (49)
Defines a generic Switch.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| On | 25 | bool | PR+PW+EV | 0 | 1 | | indicates if the Service is active/on |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
Television (D8)
Defines a TV. Optional Linked Services: InputSource and TelevisionSpeaker.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| Active | B0 | uint8 | PW+PR+EV | 0 | 1 | | indicates if the Service is active/on |
| ConfiguredName | E3 | string | PW+PR+EV | - | - | | |
| ActiveIdentifier | E7 | uint32 | PW+PR+EV | 0 | 255 | | the Identifier of the current Input Source |
| RemoteKey | E1 | uint8 | PW | 0 | 16 | | |
| PowerModeSelection | DF | uint8 | PW | 0 | 1 | | |
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.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| VolumeControlType | E9 | uint8 | PR+EV | 0 | 3 | | |
| VolumeSelector | EA | uint8 | PW | 0 | 1 | | |
TemperatureSensor (8A)
Defines a Temperature Sensor.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| CurrentTemperature | 11 | float | PR+EV | 0 | 100 | | current temperature measured in Celsius |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| StatusActive | 75 | bool | PR+EV | 0 | 1 | | |
| StatusFault | 77 | uint8 | PR+EV | 0 | 1 | | |
| StatusTampered | 7A | uint8 | PR+EV | 0 | 1 | - NOT_TAMPERED (0)
- TAMPERED (1)
| |
| StatusLowBattery | 79 | uint8 | PR+EV | 0 | 1 | - NOT_LOW_BATTERY (0)
- LOW_BATTERY (1)
| |
Thermostat (4A)
Defines a Thermostat used to control a furnace, air conditioner, or both.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| CurrentHeatingCoolingState | F | uint8 | PR+EV | 0 | 2 | - IDLE (0)
- HEATING (1)
- COOLING (2)
| indicates whether appliance is currently heating, cooling, or just idle |
| TargetHeatingCoolingState | 33 | uint8 | PW+PR+EV | 0 | 3 | - OFF (0)
- HEAT (1)
- COOL (2)
- AUTO (3)
| |
| CurrentTemperature | 11 | float | PR+EV | 0 | 100 | | current temperature measured in Celsius |
| TargetTemperature | 35 | float | PW+PR+EV | 10 | 38 | | |
| TemperatureDisplayUnits | 36 | uint8 | PW+PR+EV | 0 | 1 | - CELSIUS (0)
- FAHRENHEIT (1)
| |
| CoolingThresholdTemperature | D | float | PR+PW+EV | 10 | 35 | | cooling turns on when temperature (in Celsius) rises above this threshold |
| CurrentRelativeHumidity | 10 | float | PR+EV | 0 | 100 | | current humidity measured as a percentage |
| HeatingThresholdTemperature | 12 | float | PR+PW+EV | 0 | 25 | | heating turns on when temperature (in Celsius) falls below this threshold |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| TargetRelativeHumidity | 34 | float | PW+PR+EV | 0 | 100 | | |
Valve (D0)
Defines an electronic Valve. Can be used standalone or as a Linked Service in conjunction with the Faucet and IrrigationSystem Services.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| Active | B0 | uint8 | PW+PR+EV | 0 | 1 | | indicates if the Service is active/on |
| InUse | D2 | uint8 | PR+EV | 0 | 1 | | if Service is set to active, this indictes whether it is currently in use |
| ValveType | D5 | uint8 | PR+EV | 0 | 3 | | |
| SetDuration | D3 | uint32 | PW+PR+EV | 0 | 3600 | | |
| RemainingDuration | D4 | uint32 | PR+EV | 0 | 3600 | | |
| IsConfigured | D6 | uint8 | PR+EV | 0 | 1 | - NOT_CONFIGURED (0)
- CONFIGURED (1)
| indicates if a predefined Service has been configured |
| StatusFault | 77 | uint8 | PR+EV | 0 | 1 | | |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
Window (8B)
Defines a motorized Window.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| CurrentPosition | 6D | uint8 | PR+EV | 0 | 100 | | current position (as a percentage) from fully closed (0) to full open (100) |
| TargetPosition | 7C | uint8 | PW+PR+EV | 0 | 100 | | |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| ObstructionDetected | 24 | bool | PR+EV | 0 | 1 | - NOT_DETECTED (0)
- DETECTED (1)
| indicates if obstruction is detected |
WindowCovering (8C)
Defines a motorized Window Shade, Screen, Awning, etc.
| Characteristic | UUID | Format | Perms | Min | Max | Constants | Notes |
| TargetPosition | 7C | uint8 | PW+PR+EV | 0 | 100 | | |
| CurrentPosition | 6D | uint8 | PR+EV | 0 | 100 | | current position (as a percentage) from fully closed (0) to full open (100) |
| Name | 23 | string | PR | - | - | | default name of a Service used only during initial pairing |
| CurrentHorizontalTiltAngle | 6C | int | PR+EV | -90 | 90 | | current angle (in degrees) of slats from fully up (-90) to fully open (0) to fully down (90) |
| TargetHorizontalTiltAngle | 7B | int | PW+PR+EV | -90 | 90 | | |
| CurrentVerticalTiltAngle | 6E | int | PR+EV | -90 | 90 | | current angle (in degrees) of slats from fully left (-90) to fully open (0) to fully right (90) |
| TargetVerticalTiltAngle | 7D | int | PW+PR+EV | -90 | 90 | | |
| ObstructionDetected | 24 | bool | PR+EV | 0 | 1 | - NOT_DETECTED (0)
- DETECTED (1)
| indicates if obstruction is detected |