Added min/max Range defaults for all Characteristics

Also added new flag "staticRange" for all Characteristics that indicates whether the min/max range can be changed.  An ERROR will be thrown if setRange is attempted for a Characteristic having staticRange=true.
This commit is contained in:
Gregg 2021-03-05 22:34:55 -06:00
parent 26a38b68cc
commit 7e3d982ee5
4 changed files with 211 additions and 212 deletions

View File

@ -58,113 +58,114 @@ struct HapChar {
const char *hapName; const char *hapName;
PERMS perms; PERMS perms;
FORMAT format; FORMAT format;
boolean staticRange;
}; };
/////////////////////////////// ///////////////////////////////
#define HAPCHAR(hapName,type,perms,format) HapChar hapName {#type,#hapName,(PERMS)(perms),format} #define HAPCHAR(hapName,type,perms,format,staticRange) HapChar hapName {#type,#hapName,(PERMS)(perms),format,staticRange}
struct HapCharacteristics { struct HapCharacteristics {
HAPCHAR( Active, B0, PW+PR+EV, UINT8 ); HAPCHAR( Active, B0, PW+PR+EV, UINT8, true );
HAPCHAR( AirQuality, 95, PR+EV, UINT8 ); HAPCHAR( AirQuality, 95, PR+EV, UINT8, true );
HAPCHAR( BatteryLevel, 68, PR+EV, UINT8 ); HAPCHAR( BatteryLevel, 68, PR+EV, UINT8, false );
HAPCHAR( Brightness, 8, PR+PW+EV, INT ); HAPCHAR( Brightness, 8, PR+PW+EV, INT, false );
HAPCHAR( CarbonMonoxideLevel, 90, PR+EV, FLOAT ); HAPCHAR( CarbonMonoxideLevel, 90, PR+EV, FLOAT, false );
HAPCHAR( CarbonMonoxidePeakLevel, 91, PR+EV, FLOAT ); HAPCHAR( CarbonMonoxidePeakLevel, 91, PR+EV, FLOAT, false );
HAPCHAR( CarbonDioxideDetected, 92, PR+EV, UINT8 ); HAPCHAR( CarbonDioxideDetected, 92, PR+EV, UINT8, true );
HAPCHAR( CarbonDioxideLevel, 93, PR+EV, FLOAT ); HAPCHAR( CarbonDioxideLevel, 93, PR+EV, FLOAT, false );
HAPCHAR( CarbonDioxidePeakLevel, 94, PR+EV, FLOAT ); HAPCHAR( CarbonDioxidePeakLevel, 94, PR+EV, FLOAT, false );
HAPCHAR( CarbonMonoxideDetected, 69, PR+EV, UINT8 ); HAPCHAR( CarbonMonoxideDetected, 69, PR+EV, UINT8, true );
HAPCHAR( ChargingState, 8F, PR+EV, UINT8 ); HAPCHAR( ChargingState, 8F, PR+EV, UINT8, true );
HAPCHAR( CoolingThresholdTemperature, D, PR+PW+EV, FLOAT ); HAPCHAR( CoolingThresholdTemperature, D, PR+PW+EV, FLOAT, false );
HAPCHAR( ColorTemperature, CE, PR+PW+EV, UINT32 ); HAPCHAR( ColorTemperature, CE, PR+PW+EV, UINT32, false );
HAPCHAR( ContactSensorState, 6A, PR+EV, UINT8 ); HAPCHAR( ContactSensorState, 6A, PR+EV, UINT8, true );
HAPCHAR( CurrentAmbientLightLevel, 6B, PR+EV, FLOAT ); HAPCHAR( CurrentAmbientLightLevel, 6B, PR+EV, FLOAT, false );
HAPCHAR( CurrentHorizontalTiltAngle, 6C, PR+EV, INT ); HAPCHAR( CurrentHorizontalTiltAngle, 6C, PR+EV, INT, false );
HAPCHAR( CurrentAirPurifierState, A9, PR+EV, UINT8 ); HAPCHAR( CurrentAirPurifierState, A9, PR+EV, UINT8, true );
HAPCHAR( CurrentSlatState, AA, PR+EV, UINT8 ); HAPCHAR( CurrentSlatState, AA, PR+EV, UINT8, true );
HAPCHAR( CurrentPosition, 6D, PR+EV, UINT8 ); HAPCHAR( CurrentPosition, 6D, PR+EV, UINT8, false );
HAPCHAR( CurrentVerticalTiltAngle, 6E, PR+EV, INT ); HAPCHAR( CurrentVerticalTiltAngle, 6E, PR+EV, INT, false );
HAPCHAR( CurrentHumidifierDehumidifierState, B3, PR+EV, UINT8 ); HAPCHAR( CurrentHumidifierDehumidifierState, B3, PR+EV, UINT8, true );
HAPCHAR( CurrentDoorState, E, PR+EV, UINT8 ); HAPCHAR( CurrentDoorState, E, PR+EV, UINT8, true );
HAPCHAR( CurrentFanState, AF, PR+EV, UINT8 ); HAPCHAR( CurrentFanState, AF, PR+EV, UINT8, true );
HAPCHAR( CurrentHeatingCoolingState, F, PR+EV, UINT8 ); HAPCHAR( CurrentHeatingCoolingState, F, PR+EV, UINT8, true );
HAPCHAR( CurrentHeaterCoolerState, B1, PR+EV, UINT8 ); HAPCHAR( CurrentHeaterCoolerState, B1, PR+EV, UINT8, true );
HAPCHAR( CurrentRelativeHumidity, 10, PR+EV, FLOAT ); HAPCHAR( CurrentRelativeHumidity, 10, PR+EV, FLOAT, false );
HAPCHAR( CurrentTemperature, 11, PR+EV, FLOAT ); HAPCHAR( CurrentTemperature, 11, PR+EV, FLOAT, false );
HAPCHAR( CurrentTiltAngle, C1, PR+EV, INT ); HAPCHAR( CurrentTiltAngle, C1, PR+EV, INT, false );
HAPCHAR( FilterLifeLevel, AB, PR+EV, FLOAT ); HAPCHAR( FilterLifeLevel, AB, PR+EV, FLOAT, false );
HAPCHAR( FilterChangeIndication, AC, PR+EV, UINT8 ); HAPCHAR( FilterChangeIndication, AC, PR+EV, UINT8, true );
HAPCHAR( FirmwareRevision, 52, PR, STRING ); HAPCHAR( FirmwareRevision, 52, PR, STRING, true );
HAPCHAR( HardwareRevision, 53, PR, STRING ); HAPCHAR( HardwareRevision, 53, PR, STRING, true );
HAPCHAR( HeatingThresholdTemperature, 12, PR+PW+EV, FLOAT ); HAPCHAR( HeatingThresholdTemperature, 12, PR+PW+EV, FLOAT, false );
HAPCHAR( HoldPosition, 6F, PW, BOOL ); HAPCHAR( HoldPosition, 6F, PW, BOOL, true );
HAPCHAR( Hue, 13, PR+PW+EV, FLOAT ); HAPCHAR( Hue, 13, PR+PW+EV, FLOAT, false );
HAPCHAR( Identify, 14, PW, BOOL ); HAPCHAR( Identify, 14, PW, BOOL, true );
HAPCHAR( InUse, D2, PR+EV, UINT8 ); HAPCHAR( InUse, D2, PR+EV, UINT8, true );
HAPCHAR( IsConfigured, D6, PR+EV, UINT8 ); HAPCHAR( IsConfigured, D6, PR+EV, UINT8, true );
HAPCHAR( LeakDetected, 70, PR+EV, UINT8 ); HAPCHAR( LeakDetected, 70, PR+EV, UINT8, true );
HAPCHAR( LockCurrentState, 1D, PR+EV, UINT8 ); HAPCHAR( LockCurrentState, 1D, PR+EV, UINT8, true );
HAPCHAR( LockPhysicalControls, A7, PW+PR+EV, UINT8 ); HAPCHAR( LockPhysicalControls, A7, PW+PR+EV, UINT8, true );
HAPCHAR( LockTargetState, 1E, PW+PR+EV, UINT8 ); HAPCHAR( LockTargetState, 1E, PW+PR+EV, UINT8, true );
HAPCHAR( Manufacturer, 20, PR, STRING ); HAPCHAR( Manufacturer, 20, PR, STRING, true );
HAPCHAR( Model, 21, PR, STRING ); HAPCHAR( Model, 21, PR, STRING, true );
HAPCHAR( MotionDetected, 22, PR+EV, BOOL ); HAPCHAR( MotionDetected, 22, PR+EV, BOOL, true );
HAPCHAR( Mute, 11A, PW+PR+EV, BOOL ); HAPCHAR( Mute, 11A, PW+PR+EV, BOOL, true );
HAPCHAR( Name, 23, PR, STRING ); HAPCHAR( Name, 23, PR, STRING, true );
HAPCHAR( NitrogenDioxideDensity, C4, PR+EV, FLOAT ); HAPCHAR( NitrogenDioxideDensity, C4, PR+EV, FLOAT, false );
HAPCHAR( ObstructionDetected, 24, PR+EV, BOOL ); HAPCHAR( ObstructionDetected, 24, PR+EV, BOOL, true );
HAPCHAR( PM25Density, C6, PR+EV, FLOAT ); HAPCHAR( PM25Density, C6, PR+EV, FLOAT, false );
HAPCHAR( OccupancyDetected, 71, PR+EV, UINT8 ); HAPCHAR( OccupancyDetected, 71, PR+EV, UINT8, true );
HAPCHAR( OutletInUse, 26, PR+EV, BOOL ); HAPCHAR( OutletInUse, 26, PR+EV, BOOL, true );
HAPCHAR( On, 25, PR+PW+EV, BOOL ); HAPCHAR( On, 25, PR+PW+EV, BOOL, true );
HAPCHAR( OzoneDensity, C3, PR+EV, FLOAT ); HAPCHAR( OzoneDensity, C3, PR+EV, FLOAT, false );
HAPCHAR( PM10Density, C7, PR+EV, FLOAT ); HAPCHAR( PM10Density, C7, PR+EV, FLOAT, false );
HAPCHAR( PositionState, 72, PR+EV, UINT8 ); HAPCHAR( PositionState, 72, PR+EV, UINT8, true );
HAPCHAR( ProgramMode, D1, PR+EV, UINT8 ); HAPCHAR( ProgramMode, D1, PR+EV, UINT8, true );
HAPCHAR( ProgrammableSwitchEvent, 73, PR+EV+NV, UINT8 ); HAPCHAR( ProgrammableSwitchEvent, 73, PR+EV+NV, UINT8, true );
HAPCHAR( RelativeHumidityDehumidifierThreshold, C9, PR+PW+EV, FLOAT ); HAPCHAR( RelativeHumidityDehumidifierThreshold, C9, PR+PW+EV, FLOAT, false );
HAPCHAR( RelativeHumidityHumidifierThreshold, CA, PR+PW+EV, FLOAT ); HAPCHAR( RelativeHumidityHumidifierThreshold, CA, PR+PW+EV, FLOAT, false );
HAPCHAR( RemainingDuration, D4, PR+EV, UINT32 ); HAPCHAR( RemainingDuration, D4, PR+EV, UINT32, false );
HAPCHAR( ResetFilterIndication, AD, PW, UINT8 ); HAPCHAR( ResetFilterIndication, AD, PW, UINT8, true );
HAPCHAR( RotationDirection, 28, PR+PW+EV, INT ); HAPCHAR( RotationDirection, 28, PR+PW+EV, INT, true );
HAPCHAR( RotationSpeed, 29, PR+PW+EV, FLOAT ); HAPCHAR( RotationSpeed, 29, PR+PW+EV, FLOAT, false );
HAPCHAR( Saturation, 2F, PR+PW+EV, FLOAT ); HAPCHAR( Saturation, 2F, PR+PW+EV, FLOAT, false );
HAPCHAR( SecuritySystemAlarmType, 8E, PR+EV, UINT8 ); HAPCHAR( SecuritySystemAlarmType, 8E, PR+EV, UINT8, true );
HAPCHAR( SecuritySystemCurrentState, 66, PR+EV, UINT8 ); HAPCHAR( SecuritySystemCurrentState, 66, PR+EV, UINT8, true );
HAPCHAR( SecuritySystemTargetState, 67, PW+PR+EV, UINT8 ); HAPCHAR( SecuritySystemTargetState, 67, PW+PR+EV, UINT8, true );
HAPCHAR( SerialNumber, 30, PR, STRING ); HAPCHAR( SerialNumber, 30, PR, STRING, true );
HAPCHAR( ServiceLabelIndex, CB, PR, UINT8 ); HAPCHAR( ServiceLabelIndex, CB, PR, UINT8, true );
HAPCHAR( ServiceLabelNamespace, CD, PR, UINT8 ); HAPCHAR( ServiceLabelNamespace, CD, PR, UINT8, true );
HAPCHAR( SlatType, C0, PR, UINT8 ); HAPCHAR( SlatType, C0, PR, UINT8, true );
HAPCHAR( SmokeDetected, 76, PR+EV, UINT8 ); HAPCHAR( SmokeDetected, 76, PR+EV, UINT8, true );
HAPCHAR( StatusActive, 75, PR+EV, BOOL ); HAPCHAR( StatusActive, 75, PR+EV, BOOL, true );
HAPCHAR( StatusFault, 77, PR+EV, UINT8 ); HAPCHAR( StatusFault, 77, PR+EV, UINT8, true );
HAPCHAR( StatusJammed, 78, PR+EV, UINT8 ); HAPCHAR( StatusJammed, 78, PR+EV, UINT8, true );
HAPCHAR( StatusLowBattery, 79, PR+EV, UINT8 ); HAPCHAR( StatusLowBattery, 79, PR+EV, UINT8, true );
HAPCHAR( StatusTampered, 7A, PR+EV, UINT8 ); HAPCHAR( StatusTampered, 7A, PR+EV, UINT8, true );
HAPCHAR( SulphurDioxideDensity, C5, PR+EV, FLOAT ); HAPCHAR( SulphurDioxideDensity, C5, PR+EV, FLOAT, false );
HAPCHAR( SwingMode, B6, PR+EV+PW, UINT8 ); HAPCHAR( SwingMode, B6, PR+EV+PW, UINT8, true );
HAPCHAR( TargetAirPurifierState, A8, PW+PR+EV, UINT8 ); HAPCHAR( TargetAirPurifierState, A8, PW+PR+EV, UINT8, true );
HAPCHAR( TargetFanState, BF, PW+PR+EV, UINT8 ); HAPCHAR( TargetFanState, BF, PW+PR+EV, UINT8, true );
HAPCHAR( TargetTiltAngle, C2, PW+PR+EV, INT ); HAPCHAR( TargetTiltAngle, C2, PW+PR+EV, INT, false );
HAPCHAR( TargetHeaterCoolerState, B2, PW+PR+EV, UINT8 ); HAPCHAR( TargetHeaterCoolerState, B2, PW+PR+EV, UINT8, true );
HAPCHAR( SetDuration, D3, PW+PR+EV, UINT32 ); HAPCHAR( SetDuration, D3, PW+PR+EV, UINT32, false );
HAPCHAR( TargetHorizontalTiltAngle, 7B, PW+PR+EV, INT ); HAPCHAR( TargetHorizontalTiltAngle, 7B, PW+PR+EV, INT, false );
HAPCHAR( TargetHumidifierDehumidifierState, B4, PW+PR+EV, UINT8 ); HAPCHAR( TargetHumidifierDehumidifierState, B4, PW+PR+EV, UINT8, true );
HAPCHAR( TargetPosition, 7C, PW+PR+EV, UINT8 ); HAPCHAR( TargetPosition, 7C, PW+PR+EV, UINT8, false );
HAPCHAR( TargetDoorState, 32, PW+PR+EV, UINT8 ); HAPCHAR( TargetDoorState, 32, PW+PR+EV, UINT8, true );
HAPCHAR( TargetHeatingCoolingState, 33, PW+PR+EV, UINT8 ); HAPCHAR( TargetHeatingCoolingState, 33, PW+PR+EV, UINT8, true );
HAPCHAR( TargetRelativeHumidity, 34, PW+PR+EV, FLOAT ); HAPCHAR( TargetRelativeHumidity, 34, PW+PR+EV, FLOAT, false );
HAPCHAR( TargetTemperature, 35, PW+PR+EV, FLOAT ); HAPCHAR( TargetTemperature, 35, PW+PR+EV, FLOAT, false );
HAPCHAR( TemperatureDisplayUnits, 36, PW+PR+EV, UINT8 ); HAPCHAR( TemperatureDisplayUnits, 36, PW+PR+EV, UINT8, true );
HAPCHAR( TargetVerticalTiltAngle, 7D, PW+PR+EV, INT ); HAPCHAR( TargetVerticalTiltAngle, 7D, PW+PR+EV, INT, false );
HAPCHAR( ValveType, D5, PR+EV, UINT8 ); HAPCHAR( ValveType, D5, PR+EV, UINT8, true );
HAPCHAR( Version, 37, PR, STRING ); HAPCHAR( Version, 37, PR, STRING, true );
HAPCHAR( VOCDensity, C8, PR+EV, FLOAT ); HAPCHAR( VOCDensity, C8, PR+EV, FLOAT, false );
HAPCHAR( Volume, 119, PW+PR+EV, UINT8 ); HAPCHAR( Volume, 119, PW+PR+EV, UINT8, false );
HAPCHAR( WaterLevel, B5, PR+EV, FLOAT ); HAPCHAR( WaterLevel, B5, PR+EV, FLOAT, false );
}; };
extern HapCharacteristics hapChars; extern HapCharacteristics hapChars;

View File

@ -1460,6 +1460,7 @@ SpanCharacteristic::SpanCharacteristic(HapChar *hapChar){
perms=hapChar->perms; perms=hapChar->perms;
hapName=hapChar->hapName; hapName=hapChar->hapName;
format=hapChar->format; format=hapChar->format;
staticRange=hapChar->staticRange;
homeSpan.configLog+="---->Characteristic " + String(hapName); homeSpan.configLog+="---->Characteristic " + String(hapName);

View File

@ -243,6 +243,7 @@ struct SpanCharacteristic{
UVal minValue; // Characteristic minimum (not applicable for STRING) UVal minValue; // Characteristic minimum (not applicable for STRING)
UVal maxValue; // Characteristic maximum (not applicable for STRING) UVal maxValue; // Characteristic maximum (not applicable for STRING)
UVal stepValue; // Characteristic step size (not applicable for STRING) UVal stepValue; // Characteristic step size (not applicable for STRING)
boolean staticRange; // Flag that indiates whether Range is static and cannot be changed with setRange()
boolean customRange=false; // Flag for custom ranges boolean customRange=false; // Flag for custom ranges
boolean *ev; // Characteristic Event Notify Enable (per-connection) boolean *ev; // Characteristic Event Notify Enable (per-connection)
@ -341,10 +342,10 @@ struct SpanCharacteristic{
template <typename A, typename B, typename S=int> SpanCharacteristic *setRange(A min, B max, S step=0){ template <typename A, typename B, typename S=int> SpanCharacteristic *setRange(A min, B max, S step=0){
char c[256]; char c[256];
homeSpan.configLog+="------>Range: "; homeSpan.configLog+=String("------>Set Range for ") + String(hapName) + "-" + String(iid);
if(format==BOOL || format==STRING){ if(staticRange){
sprintf(c,"*** ERROR! Can't change range for STRING or BOOL Characteristics! ***\n",hapName); sprintf(c," *** ERROR! Can't change range for this Characteristic! ***\n");
homeSpan.nFatalErrors++; homeSpan.nFatalErrors++;
} else { } else {
@ -354,9 +355,9 @@ struct SpanCharacteristic{
customRange=true; customRange=true;
if(step>0) if(step>0)
sprintf(c,"%s/%s/%s\n",uvPrint(minValue),uvPrint(maxValue),uvPrint(stepValue)); sprintf(c,": %s/%s/%s\n",uvPrint(minValue),uvPrint(maxValue),uvPrint(stepValue));
else else
sprintf(c,"%s/%s\n",uvPrint(minValue),uvPrint(maxValue)); sprintf(c,": %s/%s\n",uvPrint(minValue),uvPrint(maxValue));
} }
homeSpan.configLog+=c; homeSpan.configLog+=c;
return(this); return(this);
@ -364,6 +365,7 @@ struct SpanCharacteristic{
} // setRange() } // setRange()
template <typename T, typename A=boolean, typename B=boolean> void init(T val, A min=0, B max=1){ template <typename T, typename A=boolean, typename B=boolean> void init(T val, A min=0, B max=1){
uvSet(value,val); uvSet(value,val);
uvSet(newValue,val); uvSet(newValue,val);
uvSet(minValue,min); uvSet(minValue,min);

View File

@ -381,116 +381,111 @@ namespace Service {
// SPAN CHARACTERISTICS (HAP Chapter 9) // // SPAN CHARACTERISTICS (HAP Chapter 9) //
////////////////////////////////////////// //////////////////////////////////////////
// Macro to define Span Characteristic structures based on name of HAP Characteristic, default value, and mix/max value (not applicable for STRING) // Macro to define Span Characteristic structures based on name of HAP Characteristic, default value, and mix/max value (not applicable for STRING or BOOL which default to min=0, max=1)
#define CREATE_CHAR_FLOAT(HAPCHAR,DEFVAL,MINVAL,MAXVAL) struct HAPCHAR : SpanCharacteristic { HAPCHAR(double val=DEFVAL) : SpanCharacteristic {&hapChars.HAPCHAR} { init(val,(double)MINVAL,(double)MAXVAL); } }; #define CREATE_CHAR(TYPE,HAPCHAR,DEFVAL,MINVAL,MAXVAL) \
#define CREATE_CHAR_INT(HAPCHAR,DEFVAL) struct HAPCHAR : SpanCharacteristic { HAPCHAR(int val=DEFVAL) : SpanCharacteristic {&hapChars.HAPCHAR} { init(val); } }; struct HAPCHAR : SpanCharacteristic { HAPCHAR(TYPE val=DEFVAL) : SpanCharacteristic {&hapChars.HAPCHAR} { init(val,(TYPE)MINVAL,(TYPE)MAXVAL); } };
#define CREATE_CHAR_UINT8(HAPCHAR,DEFVAL) struct HAPCHAR : SpanCharacteristic { HAPCHAR(uint8_t val=DEFVAL) : SpanCharacteristic {&hapChars.HAPCHAR} { init(val); } };
#define CREATE_CHAR_UINT16(HAPCHAR,DEFVAL) struct HAPCHAR : SpanCharacteristic { HAPCHAR(uint16_t val=DEFVAL) : SpanCharacteristic {&hapChars.HAPCHAR} { init(val); } };
#define CREATE_CHAR_UINT32(HAPCHAR,DEFVAL) struct HAPCHAR : SpanCharacteristic { HAPCHAR(uint32_t val=DEFVAL) : SpanCharacteristic {&hapChars.HAPCHAR} { init(val); } };
#define CREATE_CHAR_UINT64(HAPCHAR,DEFVAL) struct HAPCHAR : SpanCharacteristic { HAPCHAR(uint64_t val=DEFVAL) : SpanCharacteristic {&hapChars.HAPCHAR} { init(val); } };
#define CREATE_CHAR_BOOL(HAPCHAR,DEFVAL) struct HAPCHAR : SpanCharacteristic { HAPCHAR(boolean val=DEFVAL) : SpanCharacteristic {&hapChars.HAPCHAR} { init(val); } };
#define CREATE_CHAR_STRING(HAPCHAR,DEFVAL) struct HAPCHAR : SpanCharacteristic { HAPCHAR(const char *val=DEFVAL) : SpanCharacteristic {&hapChars.HAPCHAR} { init(val); } };
namespace Characteristic { namespace Characteristic {
CREATE_CHAR_UINT8(Active,0); CREATE_CHAR(uint8_t,Active,0,0,1);
CREATE_CHAR_UINT8(AirQuality,0); CREATE_CHAR(uint8_t,AirQuality,0,0,5);
CREATE_CHAR_UINT8(BatteryLevel,0); CREATE_CHAR(uint8_t,BatteryLevel,0,0,100);
CREATE_CHAR_INT(Brightness,0); CREATE_CHAR(int,Brightness,0,0,100);
CREATE_CHAR_FLOAT(CarbonMonoxideLevel,0,0,100); CREATE_CHAR(double,CarbonMonoxideLevel,0,0,100);
CREATE_CHAR_FLOAT(CarbonMonoxidePeakLevel,0,0,100); CREATE_CHAR(double,CarbonMonoxidePeakLevel,0,0,100);
CREATE_CHAR_UINT8(CarbonMonoxideDetected,0); CREATE_CHAR(uint8_t,CarbonMonoxideDetected,0,0,1);
CREATE_CHAR_FLOAT(CarbonDioxideLevel,0,0,100000); CREATE_CHAR(double,CarbonDioxideLevel,0,0,100000);
CREATE_CHAR_FLOAT(CarbonDioxidePeakLevel,0,0,100000); CREATE_CHAR(double,CarbonDioxidePeakLevel,0,0,100000);
CREATE_CHAR_UINT8(CarbonDioxideDetected,0); CREATE_CHAR(uint8_t,CarbonDioxideDetected,0,0,1);
CREATE_CHAR_UINT8(ChargingState,0); CREATE_CHAR(uint8_t,ChargingState,0,0,2);
CREATE_CHAR_FLOAT(CoolingThresholdTemperature,10,10,35); CREATE_CHAR(double,CoolingThresholdTemperature,10,10,35);
CREATE_CHAR_UINT32(ColorTemperature,200); CREATE_CHAR(uint32_t,ColorTemperature,200,140,500);
CREATE_CHAR_UINT8(ContactSensorState,1); CREATE_CHAR(uint8_t,ContactSensorState,1,0,1);
CREATE_CHAR_FLOAT(CurrentAmbientLightLevel,1,0.0001,100000); CREATE_CHAR(double,CurrentAmbientLightLevel,1,0.0001,100000);
CREATE_CHAR_INT(CurrentHorizontalTiltAngle,0); CREATE_CHAR(int,CurrentHorizontalTiltAngle,0,-90,90);
CREATE_CHAR_UINT8(CurrentAirPurifierState,1); CREATE_CHAR(uint8_t,CurrentAirPurifierState,1,0,2);
CREATE_CHAR_UINT8(CurrentSlatState,0); CREATE_CHAR(uint8_t,CurrentSlatState,0,0,2);
CREATE_CHAR_UINT8(CurrentPosition,0); CREATE_CHAR(uint8_t,CurrentPosition,0,0,100);
CREATE_CHAR_INT(CurrentVerticalTiltAngle,0); CREATE_CHAR(int,CurrentVerticalTiltAngle,0,-90,90);
CREATE_CHAR_UINT8(CurrentHumidifierDehumidifierState,1); CREATE_CHAR(uint8_t,CurrentHumidifierDehumidifierState,1,0,3);
CREATE_CHAR_UINT8(CurrentDoorState,1); CREATE_CHAR(uint8_t,CurrentDoorState,1,0,4);
CREATE_CHAR_UINT8(CurrentFanState,1); CREATE_CHAR(uint8_t,CurrentFanState,1,0,2);
CREATE_CHAR_UINT8(CurrentHeatingCoolingState,0); CREATE_CHAR(uint8_t,CurrentHeatingCoolingState,0,0,2);
CREATE_CHAR_UINT8(CurrentHeaterCoolerState,1); CREATE_CHAR(uint8_t,CurrentHeaterCoolerState,1,0,3);
CREATE_CHAR_FLOAT(CurrentRelativeHumidity,0,0,100); CREATE_CHAR(double,CurrentRelativeHumidity,0,0,100);
CREATE_CHAR_FLOAT(CurrentTemperature,0,0,100); CREATE_CHAR(double,CurrentTemperature,0,0,100);
CREATE_CHAR_INT(CurrentTiltAngle,0); CREATE_CHAR(int,CurrentTiltAngle,0,-90,90);
CREATE_CHAR_FLOAT(FilterLifeLevel,0,0,100); CREATE_CHAR(double,FilterLifeLevel,0,0,100);
CREATE_CHAR_UINT8(FilterChangeIndication,0); CREATE_CHAR(uint8_t,FilterChangeIndication,0,0,1);
CREATE_CHAR_STRING(FirmwareRevision,"1.0.0"); CREATE_CHAR(const char *,FirmwareRevision,"1.0.0",0,1);
CREATE_CHAR_STRING(HardwareRevision,"1.0.0"); CREATE_CHAR(const char *,HardwareRevision,"1.0.0",0,1);
CREATE_CHAR_FLOAT(HeatingThresholdTemperature,16,0,25); CREATE_CHAR(double,HeatingThresholdTemperature,16,0,25);
CREATE_CHAR_BOOL(HoldPosition,false); CREATE_CHAR(boolean,HoldPosition,false,0,1);
CREATE_CHAR_FLOAT(Hue,0,0,360); CREATE_CHAR(double,Hue,0,0,360);
CREATE_CHAR_BOOL(Identify,false); CREATE_CHAR(boolean,Identify,false,0,1);
CREATE_CHAR_UINT8(InUse,0); CREATE_CHAR(uint8_t,InUse,0,0,1);
CREATE_CHAR_UINT8(IsConfigured,0); CREATE_CHAR(uint8_t,IsConfigured,0,0,1);
CREATE_CHAR_UINT8(LeakDetected,0); CREATE_CHAR(uint8_t,LeakDetected,0,0,1);
CREATE_CHAR_UINT8(LockCurrentState,0); CREATE_CHAR(uint8_t,LockCurrentState,0,0,3);
CREATE_CHAR_UINT8(LockPhysicalControls,0); CREATE_CHAR(uint8_t,LockPhysicalControls,0,0,1);
CREATE_CHAR_UINT8(LockTargetState,0); CREATE_CHAR(uint8_t,LockTargetState,0,0,1);
CREATE_CHAR_STRING(Manufacturer,"HomeSpan"); CREATE_CHAR(const char *,Manufacturer,"HomeSpan",0,1);
CREATE_CHAR_STRING(Model,"HomeSpan-ESP32"); CREATE_CHAR(const char *,Model,"HomeSpan-ESP32",0,1);
CREATE_CHAR_BOOL(MotionDetected,false); CREATE_CHAR(boolean,MotionDetected,false,0,1);
CREATE_CHAR_BOOL(Mute,false); CREATE_CHAR(boolean,Mute,false,0,1);
CREATE_CHAR_STRING(Name,"unnamed"); CREATE_CHAR(const char *,Name,"unnamed",0,1);
CREATE_CHAR_FLOAT(NitrogenDioxideDensity,0,0,1000); CREATE_CHAR(double,NitrogenDioxideDensity,0,0,1000);
CREATE_CHAR_BOOL(ObstructionDetected,false); CREATE_CHAR(boolean,ObstructionDetected,false,0,1);
CREATE_CHAR_FLOAT(PM25Density,0,0,1000); CREATE_CHAR(double,PM25Density,0,0,1000);
CREATE_CHAR_UINT8(OccupancyDetected,0); CREATE_CHAR(uint8_t,OccupancyDetected,0,0,1);
CREATE_CHAR_BOOL(OutletInUse,false); CREATE_CHAR(boolean,OutletInUse,false,0,1);
CREATE_CHAR_BOOL(On,false); CREATE_CHAR(boolean,On,false,0,1);
CREATE_CHAR_FLOAT(OzoneDensity,0,0,1000); CREATE_CHAR(double,OzoneDensity,0,0,1000);
CREATE_CHAR_FLOAT(PM10Density,0,0,1000); CREATE_CHAR(double,PM10Density,0,0,1000);
CREATE_CHAR_UINT8(PositionState,2); CREATE_CHAR(uint8_t,PositionState,2,0,2);
CREATE_CHAR_UINT8(ProgramMode,0); CREATE_CHAR(uint8_t,ProgramMode,0,0,2);
CREATE_CHAR_UINT8(ProgrammableSwitchEvent,0); CREATE_CHAR(uint8_t,ProgrammableSwitchEvent,0,0,2);
CREATE_CHAR_FLOAT(RelativeHumidityDehumidifierThreshold,50,0,100); CREATE_CHAR(double,RelativeHumidityDehumidifierThreshold,50,0,100);
CREATE_CHAR_FLOAT(RelativeHumidityHumidifierThreshold,50,0,100); CREATE_CHAR(double,RelativeHumidityHumidifierThreshold,50,0,100);
CREATE_CHAR_UINT32(RemainingDuration,60); CREATE_CHAR(uint32_t,RemainingDuration,60,0,3600);
CREATE_CHAR_UINT8(ResetFilterIndication,0); CREATE_CHAR(uint8_t,ResetFilterIndication,0,1,1);
CREATE_CHAR_INT(RotationDirection,0); CREATE_CHAR(int,RotationDirection,0,0,1);
CREATE_CHAR_FLOAT(RotationSpeed,0,0,100); CREATE_CHAR(double,RotationSpeed,0,0,100);
CREATE_CHAR_FLOAT(Saturation,0,0,100); CREATE_CHAR(double,Saturation,0,0,100);
CREATE_CHAR_UINT8(SecuritySystemAlarmType,0); CREATE_CHAR(uint8_t,SecuritySystemAlarmType,0,0,1);
CREATE_CHAR_UINT8(SecuritySystemCurrentState,3); CREATE_CHAR(uint8_t,SecuritySystemCurrentState,3,0,4);
CREATE_CHAR_UINT8(SecuritySystemTargetState,3); CREATE_CHAR(uint8_t,SecuritySystemTargetState,3,0,3);
CREATE_CHAR_STRING(SerialNumber,"HS-12345"); CREATE_CHAR(const char *,SerialNumber,"HS-12345",0,1);
CREATE_CHAR_UINT8(ServiceLabelIndex,1); CREATE_CHAR(uint8_t,ServiceLabelIndex,1,1,255);
CREATE_CHAR_UINT8(ServiceLabelNamespace,1); CREATE_CHAR(uint8_t,ServiceLabelNamespace,1,0,1);
CREATE_CHAR_UINT8(SlatType,0); CREATE_CHAR(uint8_t,SlatType,0,0,1);
CREATE_CHAR_UINT8(SmokeDetected,0); CREATE_CHAR(uint8_t,SmokeDetected,0,0,1);
CREATE_CHAR_BOOL(StatusActive,true); CREATE_CHAR(boolean,StatusActive,true,0,1);
CREATE_CHAR_UINT8(StatusFault,0); CREATE_CHAR(uint8_t,StatusFault,0,0,1);
CREATE_CHAR_UINT8(StatusJammed,0); CREATE_CHAR(uint8_t,StatusJammed,0,0,1);
CREATE_CHAR_UINT8(StatusLowBattery,0); CREATE_CHAR(uint8_t,StatusLowBattery,0,0,1);
CREATE_CHAR_UINT8(StatusTampered,0); CREATE_CHAR(uint8_t,StatusTampered,0,0,1);
CREATE_CHAR_FLOAT(SulphurDioxideDensity,0,0,1000); CREATE_CHAR(double,SulphurDioxideDensity,0,0,1000);
CREATE_CHAR_UINT8(SwingMode,0); CREATE_CHAR(uint8_t,SwingMode,0,0,1);
CREATE_CHAR_UINT8(TargetAirPurifierState,1); CREATE_CHAR(uint8_t,TargetAirPurifierState,1,0,1);
CREATE_CHAR_UINT8(TargetFanState,1); CREATE_CHAR(uint8_t,TargetFanState,1,0,1);
CREATE_CHAR_INT(TargetTiltAngle,0); CREATE_CHAR(int,TargetTiltAngle,0,-90,90);
CREATE_CHAR_UINT32(SetDuration,60); CREATE_CHAR(uint8_t,TargetHeaterCoolerState,0,0,2);
CREATE_CHAR_INT(TargetHorizontalTiltAngle,0); CREATE_CHAR(uint32_t,SetDuration,60,0,3600);
CREATE_CHAR_UINT8(TargetHumidifierDehumidifierState,0); CREATE_CHAR(int,TargetHorizontalTiltAngle,0,-90,90);
CREATE_CHAR_UINT8(TargetPosition,0); CREATE_CHAR(uint8_t,TargetHumidifierDehumidifierState,0,0,2);
CREATE_CHAR_UINT8(TargetDoorState,1); CREATE_CHAR(uint8_t,TargetPosition,0,0,100);
CREATE_CHAR_UINT8(TargetHeatingCoolingState,0); CREATE_CHAR(uint8_t,TargetDoorState,1,0,1);
CREATE_CHAR_FLOAT(TargetRelativeHumidity,0,0,100); CREATE_CHAR(uint8_t,TargetHeatingCoolingState,0,0,3);
CREATE_CHAR_FLOAT(TargetTemperature,16,10,38); CREATE_CHAR(double,TargetRelativeHumidity,0,0,100);
CREATE_CHAR_UINT8(TemperatureDisplayUnits,0); CREATE_CHAR(double,TargetTemperature,16,10,38);
CREATE_CHAR_INT(TargetVerticalTiltAngle,0); CREATE_CHAR(uint8_t,TemperatureDisplayUnits,0,0,1);
CREATE_CHAR_UINT8(ValveType,0); CREATE_CHAR(int,TargetVerticalTiltAngle,0,-90,90);
CREATE_CHAR_STRING(Version,"1.0.0"); CREATE_CHAR(uint8_t,ValveType,0,0,3);
CREATE_CHAR_FLOAT(VOCDensity,0,0,1000); CREATE_CHAR(const char *,Version,"1.0.0",0,1);
CREATE_CHAR_UINT8(Volume,0); CREATE_CHAR(double,VOCDensity,0,0,1000);
CREATE_CHAR_FLOAT(WaterLevel,0,0,100); CREATE_CHAR(uint8_t,Volume,0,0,100);
CREATE_CHAR(double,WaterLevel,0,0,100);
} }