Update test.md

This commit is contained in:
Gregg 2024-01-18 21:32:35 -06:00
parent efd63f2a38
commit bef17fb268
2 changed files with 610 additions and 359 deletions

View File

@ -10,11 +10,12 @@ BEGIN {
while(getline < servicesFile ){ while(getline < servicesFile ){
gsub("^[ ]+","") # strip out any leading spaces gsub("^[ ]+","") # strip out any leading spaces
n=split($0,x,"[,();]+") # split line into separate words n=split($0,x,"[,(); ]+") # split line into separate words
if(x[1]=="CREATE_SERV"){ if(x[1]=="CREATE_SERV"){
currentService=x[2] currentService=x[2]
services[nServs++]=currentService services[nServs++]=currentService
uuid[currentService]=x[3]
nReqs[currentService]=0 nReqs[currentService]=0
nOpts[currentService]=0 nOpts[currentService]=0
} }
@ -35,11 +36,31 @@ BEGIN {
vals[char,i]=x[i+7] vals[char,i]=x[i+7]
} }
}
close(servicesFile)
while(getline < charsFile){
gsub("^[ ]+","") # strip out any leading spaces
n=split($0,x,"[,(); ]+") # split line into separate words
if(x[1]=="HAPCHAR"){
char=x[2]
uuid[char]=x[3]
perms[char]=x[4]
format[char]=x[5]
static[char]=x[6]
}
} }
close(charsFile)
for(i=0;i<nServs;i++){ for(i=0;i<nServs;i++){
s=services[i] s=services[i]
print s printf("<detail><summary>%s (%s)</summary>\n",s,uuid[s])
for(j=0;j<nReqs[s];j++){ for(j=0;j<nReqs[s];j++){
print " REQ:" reqs[s,j] print " REQ:" reqs[s,j]
print default[reqs[s,j]], min[reqs[s,j]], max[reqs[s,j]] print default[reqs[s,j]], min[reqs[s,j]], max[reqs[s,j]]
@ -49,6 +70,7 @@ BEGIN {
for(j=0;j<nOpts[s];j++){ for(j=0;j<nOpts[s];j++){
print " OPT:" opts[s,j] print " OPT:" opts[s,j]
} }
print "</detail>"
} }
} }

View File

@ -1,357 +1,586 @@
### AccessoryInformation <detail><summary>AccessoryInformation (3E)</summary>
* Required: REQ:Identify
* Identify false 0 1
* Optional:
* FirmwareRevision OPT:FirmwareRevision
* Manufacturer OPT:Manufacturer
* Model OPT:Model
* Name OPT:Name
* SerialNumber OPT:SerialNumber
* HardwareRevision OPT:HardwareRevision
* AccessoryFlags OPT:AccessoryFlags
### AirPurifier </detail>
* Required: <detail><summary>AirPurifier (BB)</summary>
* Active REQ:Active
* CurrentAirPurifierState 0 0 1
* TargetAirPurifierState INACTIVE
* Optional: ACIVE
* Name
* RotationSpeed REQ:CurrentAirPurifierState
* SwingMode 1 0 2
* LockPhysicalControls INACTIVE
### AirQualitySensor IDLE
* Required: PURIFYING
* AirQuality
* Optional: REQ:TargetAirPurifierState
* Name 1 0 1
* OzoneDensity MANUAL
* NitrogenDioxideDensity AUTO
* SulphurDioxideDensity
* PM25Density OPT:Name
* PM10Density OPT:RotationSpeed
* VOCDensity OPT:SwingMode
* StatusActive OPT:LockPhysicalControls
* StatusFault </detail>
* StatusTampered <detail><summary>AirQualitySensor (8D)</summary>
* StatusLowBattery REQ:AirQuality
### BatteryService 0 0 5
* Required: UNKNOWN
* BatteryLevel EXCELLENT
* ChargingState GOOD
* StatusLowBattery FAIR
* Optional: INFERIOR
* Name POOR
### CarbonDioxideSensor
* Required: OPT:Name
* CarbonDioxideDetected OPT:OzoneDensity
* Optional: OPT:NitrogenDioxideDensity
* Name OPT:SulphurDioxideDensity
* StatusActive OPT:PM25Density
* StatusFault OPT:PM10Density
* StatusTampered OPT:VOCDensity
* StatusLowBattery OPT:StatusActive
* CarbonDioxideLevel OPT:StatusFault
* CarbonDioxidePeakLevel OPT:StatusTampered
### CarbonMonoxideSensor OPT:StatusLowBattery
* Required: </detail>
* CarbonMonoxideDetected <detail><summary>BatteryService (96)</summary>
* Optional: REQ:BatteryLevel
* Name 0 0 100
* StatusActive
* StatusFault REQ:ChargingState
* StatusTampered 0 0 2
* StatusLowBattery NOT_CHARGING
* CarbonMonoxideLevel CHARGING
* CarbonMonoxidePeakLevel NOT_CHARGEABLE
### ContactSensor
* Required: REQ:StatusLowBattery
* ContactSensorState 0 0 1
* Optional: NOT_LOW_BATTERY
* Name LOW_BATTERY
* StatusActive
* StatusFault OPT:Name
* StatusTampered </detail>
* StatusLowBattery <detail><summary>CarbonDioxideSensor (97)</summary>
### Door REQ:CarbonDioxideDetected
* Required: 0 0 1
* CurrentPosition NORMAL
* TargetPosition ABNORMAL
* PositionState
* Optional: OPT:Name
* Name OPT:StatusActive
* HoldPosition OPT:StatusFault
* ObstructionDetected OPT:StatusTampered
### Doorbell OPT:StatusLowBattery
* Required: OPT:CarbonDioxideLevel
* ProgrammableSwitchEvent OPT:CarbonDioxidePeakLevel
* Optional: </detail>
* Name <detail><summary>CarbonMonoxideSensor (7F)</summary>
* Volume REQ:CarbonMonoxideDetected
* Brightness 0 0 1
### Fan NORMAL
* Required: ABNORMAL
* Active
* Optional: OPT:Name
* Name OPT:StatusActive
* CurrentFanState OPT:StatusFault
* TargetFanState OPT:StatusTampered
* RotationDirection OPT:StatusLowBattery
* RotationSpeed OPT:CarbonMonoxideLevel
* SwingMode OPT:CarbonMonoxidePeakLevel
* LockPhysicalControls </detail>
### Faucet <detail><summary>ContactSensor (80)</summary>
* Required: REQ:ContactSensorState
* Active 1 0 1
* Optional: DETECTED
* StatusFault NOT_DETECTED
* Name
### FilterMaintenance OPT:Name
* Required: OPT:StatusActive
* FilterChangeIndication OPT:StatusFault
* Optional: OPT:StatusTampered
* Name OPT:StatusLowBattery
* FilterLifeLevel </detail>
* ResetFilterIndication <detail><summary>Door (81)</summary>
### GarageDoorOpener REQ:CurrentPosition
* Required: 0 0 100
* CurrentDoorState
* TargetDoorState REQ:TargetPosition
* ObstructionDetected 0 0 100
* Optional:
* LockCurrentState REQ:PositionState
* LockTargetState 2 0 2
* Name GOING_TO_MINIMUM
### HAPProtocolInformation GOING_TO_MAXIMUM
* Required: STOPPED
* Version
### HeaterCooler OPT:Name
* Required: OPT:HoldPosition
* Active OPT:ObstructionDetected
* CurrentTemperature </detail>
* CurrentHeaterCoolerState <detail><summary>Doorbell (121)</summary>
* TargetHeaterCoolerState REQ:ProgrammableSwitchEvent
* Optional: 0 0 2
* Name SINGLE_PRESS
* RotationSpeed DOUBLE_PRESS
* TemperatureDisplayUnits LONG_PRESS
* SwingMode
* CoolingThresholdTemperature OPT:Name
* HeatingThresholdTemperature OPT:Volume
* LockPhysicalControls OPT:Brightness
### HumidifierDehumidifier </detail>
* Required: <detail><summary>Fan (B7)</summary>
* Active REQ:Active
* CurrentRelativeHumidity 0 0 1
* CurrentHumidifierDehumidifierState INACTIVE
* TargetHumidifierDehumidifierState ACIVE
* Optional:
* Name OPT:Name
* RelativeHumidityDehumidifierThreshold OPT:CurrentFanState
* RelativeHumidityHumidifierThreshold OPT:TargetFanState
* RotationSpeed OPT:RotationDirection
* SwingMode OPT:RotationSpeed
* WaterLevel OPT:SwingMode
* LockPhysicalControls OPT:LockPhysicalControls
### HumiditySensor </detail>
* Required: <detail><summary>Faucet (D7)</summary>
* CurrentRelativeHumidity REQ:Active
* Optional: 0 0 1
* Name INACTIVE
* StatusActive ACIVE
* StatusFault
* StatusTampered OPT:StatusFault
* StatusLowBattery OPT:Name
### InputSource </detail>
* Optional: <detail><summary>FilterMaintenance (BA)</summary>
* ConfiguredName REQ:FilterChangeIndication
* IsConfigured 0 0 1
* Required: NO_CHANGE_NEEDED
* Identifier CHANGE_NEEDED
* CurrentVisibilityState
* TargetVisibilityState OPT:Name
### IrrigationSystem OPT:FilterLifeLevel
* Required: OPT:ResetFilterIndication
* Active </detail>
* ProgramMode <detail><summary>GarageDoorOpener (41)</summary>
* InUse REQ:CurrentDoorState
* Optional: 1 0 4
* RemainingDuration OPEN
* StatusFault CLOSED
### LeakSensor OPENING
* Required: CLOSING
* LeakDetected STOPPED
* Optional:
* Name REQ:TargetDoorState
* StatusActive 1 0 1
* StatusFault OPEN
* StatusTampered CLOSED
* StatusLowBattery
### LightBulb REQ:ObstructionDetected
* Required: false 0 1
* On
* Optional: OPT:LockCurrentState
* Brightness OPT:LockTargetState
* Hue OPT:Name
* Name </detail>
* Saturation <detail><summary>HAPProtocolInformation (A2)</summary>
* ColorTemperature REQ:Version
### LightSensor
* Required: </detail>
* CurrentAmbientLightLevel <detail><summary>HeaterCooler (BC)</summary>
* Optional: REQ:Active
* Name 0 0 1
* StatusActive INACTIVE
* StatusFault ACIVE
* StatusTampered
* StatusLowBattery REQ:CurrentTemperature
### LockMechanism 0 0 100
* Required:
* LockCurrentState REQ:CurrentHeaterCoolerState
* LockTargetState 1 0 3
* Optional: INACTIVE
* Name IDLE
### Microphone HEATING
* Required: COOLING
* Mute
* Optional: REQ:TargetHeaterCoolerState
* Name 0 0 2
* Volume AUTO
### MotionSensor HEAT
* Required: COOL
* MotionDetected
* Optional: OPT:Name
* Name OPT:RotationSpeed
* StatusActive OPT:TemperatureDisplayUnits
* StatusFault OPT:SwingMode
* StatusTampered OPT:CoolingThresholdTemperature
* StatusLowBattery OPT:HeatingThresholdTemperature
### OccupancySensor OPT:LockPhysicalControls
* Required: </detail>
* OccupancyDetected <detail><summary>HumidifierDehumidifier (BD)</summary>
* Optional: REQ:Active
* Name 0 0 1
* StatusActive INACTIVE
* StatusFault ACIVE
* StatusTampered
* StatusLowBattery REQ:CurrentRelativeHumidity
### Outlet 0 0 100
* Required:
* On REQ:CurrentHumidifierDehumidifierState
* OutletInUse 1 0 3
* Optional: INACTIVE
* Name IDLE
### SecuritySystem HUMIDIFYING
* Required: DEHUMIDIFYING
* SecuritySystemCurrentState
* SecuritySystemTargetState REQ:TargetHumidifierDehumidifierState
* Optional: 0 0 2
* Name AUTO
* SecuritySystemAlarmType HUMIDIFY
* StatusFault DEHUMIDIFY
* StatusTampered
### ServiceLabel OPT:Name
* Required: OPT:RelativeHumidityDehumidifierThreshold
* ServiceLabelNamespace OPT:RelativeHumidityHumidifierThreshold
### Slat OPT:RotationSpeed
* Required: OPT:SwingMode
* CurrentSlatState OPT:WaterLevel
* SlatType OPT:LockPhysicalControls
* Optional: </detail>
* Name <detail><summary>HumiditySensor (82)</summary>
* SwingMode REQ:CurrentRelativeHumidity
* CurrentTiltAngle 0 0 100
* TargetTiltAngle
### SmokeSensor OPT:Name
* Required: OPT:StatusActive
* SmokeDetected OPT:StatusFault
* Optional: OPT:StatusTampered
* Name OPT:StatusLowBattery
* StatusActive </detail>
* StatusFault <detail><summary>InputSource (D9)</summary>
* StatusTampered REQ:Identifier
* StatusLowBattery 0 0 255
### Speaker
* Required: OPT:ConfiguredName
* Mute OPT:IsConfigured
* Optional: OPT:CurrentVisibilityState
* Name OPT:TargetVisibilityState
* Volume </detail>
### StatelessProgrammableSwitch <detail><summary>IrrigationSystem (CF)</summary>
* Required: REQ:Active
* ProgrammableSwitchEvent 0 0 1
* Optional: INACTIVE
* Name ACIVE
* ServiceLabelIndex
### Switch REQ:ProgramMode
* Required: 0 0 2
* On NONE
* Optional: SCHEDULED
* Name SCHEDULE_OVERRIDEN
### Television
* Required: REQ:InUse
* Active 0 0 1
* Optional: NOT_IN_USE
* ConfiguredName IN_USE
* ActiveIdentifier
* RemoteKey OPT:RemainingDuration
* PowerModeSelection OPT:StatusFault
### TelevisionSpeaker </detail>
* Required: <detail><summary>LeakSensor (83)</summary>
* VolumeControlType REQ:LeakDetected
* VolumeSelector 0 0 1
### TemperatureSensor NOT_DETECTED
* Required: DETECTED
* CurrentTemperature
* Optional: OPT:Name
* Name OPT:StatusActive
* StatusActive OPT:StatusFault
* StatusFault OPT:StatusTampered
* StatusTampered OPT:StatusLowBattery
* StatusLowBattery </detail>
### Thermostat <detail><summary>LightBulb (43)</summary>
* Required: REQ:On
* CurrentHeatingCoolingState false 0 1
* TargetHeatingCoolingState
* CurrentTemperature OPT:Brightness
* TargetTemperature OPT:Hue
* TemperatureDisplayUnits OPT:Name
* Optional: OPT:Saturation
* CoolingThresholdTemperature OPT:ColorTemperature
* CurrentRelativeHumidity </detail>
* HeatingThresholdTemperature <detail><summary>LightSensor (84)</summary>
* Name REQ:CurrentAmbientLightLevel
* TargetRelativeHumidity 1 0.0001 100000
### Valve
* Required: OPT:Name
* Active OPT:StatusActive
* InUse OPT:StatusFault
* ValveType OPT:StatusTampered
* Optional: OPT:StatusLowBattery
* SetDuration </detail>
* RemainingDuration <detail><summary>LockMechanism (45)</summary>
* IsConfigured REQ:LockCurrentState
* ServiceLabelIndex 0 0 3
* StatusFault UNLOCKED
* Name LOCKED
### Window JAMMED
* Required: UNKNOWN
* CurrentPosition
* TargetPosition REQ:LockTargetState
* PositionState 0 0 1
* Optional: UNLOCK
* Name LOCK
* HoldPosition
* ObstructionDetected OPT:Name
### WindowCovering </detail>
* Required: <detail><summary>Microphone (112)</summary>
* TargetPosition REQ:Mute
* CurrentPosition false 0 1
* PositionState OFF
* Optional: ON
* Name
* HoldPosition OPT:Name
* CurrentHorizontalTiltAngle OPT:Volume
* TargetHorizontalTiltAngle </detail>
* CurrentVerticalTiltAngle <detail><summary>MotionSensor (85)</summary>
* TargetVerticalTiltAngle REQ:MotionDetected
* ObstructionDetected false 0 1
OPT:Name
OPT:StatusActive
OPT:StatusFault
OPT:StatusTampered
OPT:StatusLowBattery
</detail>
<detail><summary>OccupancySensor (86)</summary>
REQ:OccupancyDetected
0 0 1
NOT_DETECTED
DETECTED
OPT:Name
OPT:StatusActive
OPT:StatusFault
OPT:StatusTampered
OPT:StatusLowBattery
</detail>
<detail><summary>Outlet (47)</summary>
REQ:On
false 0 1
REQ:OutletInUse
false 0 1
OPT:Name
</detail>
<detail><summary>SecuritySystem (7E)</summary>
REQ:SecuritySystemCurrentState
3 0 4
ARMED_STAY
ARMED_AWAY
ARMED_NIGHT
DISARMED
ALARM_TRIGGERED
REQ:SecuritySystemTargetState
3 0 3
ARM_STAY
ARM_AWAY
ARM_NIGHT
DISARM
OPT:Name
OPT:SecuritySystemAlarmType
OPT:StatusFault
OPT:StatusTampered
</detail>
<detail><summary>ServiceLabel (CC)</summary>
REQ:ServiceLabelNamespace
1 0 1
DOTS
NUMERALS
</detail>
<detail><summary>Slat (B9)</summary>
REQ:CurrentSlatState
0 0 2
FIXED
JAMMED
SWINGING
REQ:SlatType
0 0 1
HORIZONTAL
VERTICAL
OPT:Name
OPT:SwingMode
OPT:CurrentTiltAngle
OPT:TargetTiltAngle
</detail>
<detail><summary>SmokeSensor (87)</summary>
REQ:SmokeDetected
0 0 1
NOT_DETECTED
DETECTED
OPT:Name
OPT:StatusActive
OPT:StatusFault
OPT:StatusTampered
OPT:StatusLowBattery
</detail>
<detail><summary>Speaker (113)</summary>
REQ:Mute
false 0 1
OFF
ON
OPT:Name
OPT:Volume
</detail>
<detail><summary>StatelessProgrammableSwitch (89)</summary>
REQ:ProgrammableSwitchEvent
0 0 2
SINGLE_PRESS
DOUBLE_PRESS
LONG_PRESS
OPT:Name
OPT:ServiceLabelIndex
</detail>
<detail><summary>Switch (49)</summary>
REQ:On
false 0 1
OPT:Name
</detail>
<detail><summary>Television (D8)</summary>
REQ:Active
0 0 1
INACTIVE
ACIVE
OPT:ConfiguredName
OPT:ActiveIdentifier
OPT:RemoteKey
OPT:PowerModeSelection
</detail>
<detail><summary>TelevisionSpeaker (113)</summary>
REQ:VolumeControlType
0 0 3
REQ:VolumeSelector
0 0 1
</detail>
<detail><summary>TemperatureSensor (8A)</summary>
REQ:CurrentTemperature
0 0 100
OPT:Name
OPT:StatusActive
OPT:StatusFault
OPT:StatusTampered
OPT:StatusLowBattery
</detail>
<detail><summary>Thermostat (4A)</summary>
REQ:CurrentHeatingCoolingState
0 0 2
OFF
HEATING
COOLING
REQ:TargetHeatingCoolingState
0 0 3
OFF
HEAT
COOL
AUTO
REQ:CurrentTemperature
0 0 100
REQ:TargetTemperature
16 10 38
REQ:TemperatureDisplayUnits
0 0 1
CELSIUS
FAHRENHEIT
OPT:CoolingThresholdTemperature
OPT:CurrentRelativeHumidity
OPT:HeatingThresholdTemperature
OPT:Name
OPT:TargetRelativeHumidity
</detail>
<detail><summary>Valve (D0)</summary>
REQ:Active
0 0 1
INACTIVE
ACIVE
REQ:InUse
0 0 1
NOT_IN_USE
IN_USE
REQ:ValveType
0 0 3
OPT:SetDuration
OPT:RemainingDuration
OPT:IsConfigured
OPT:ServiceLabelIndex
OPT:StatusFault
OPT:Name
</detail>
<detail><summary>Window (8B)</summary>
REQ:CurrentPosition
0 0 100
REQ:TargetPosition
0 0 100
REQ:PositionState
2 0 2
GOING_TO_MINIMUM
GOING_TO_MAXIMUM
STOPPED
OPT:Name
OPT:HoldPosition
OPT:ObstructionDetected
</detail>
<detail><summary>WindowCovering (8C)</summary>
REQ:TargetPosition
0 0 100
REQ:CurrentPosition
0 0 100
REQ:PositionState
2 0 2
GOING_TO_MINIMUM
GOING_TO_MAXIMUM
STOPPED
OPT:Name
OPT:HoldPosition
OPT:CurrentHorizontalTiltAngle
OPT:TargetHorizontalTiltAngle
OPT:CurrentVerticalTiltAngle
OPT:TargetVerticalTiltAngle
OPT:ObstructionDetected
</detail>