diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/metadata/homekit.js b/bundles/org.openhab.ui/web/src/assets/definitions/metadata/homekit.js index bc1648121d..9227741d7a 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/metadata/homekit.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/metadata/homekit.js @@ -7,7 +7,6 @@ const accessories = { 'PM25Density', 'PM10Density', 'VOCDensity', - 'Name', 'ActiveStatus', 'FaultStatus', 'TamperedStatus', @@ -156,7 +155,6 @@ const accessories = { 'TargetTemperature', 'CurrentHeatingCoolingMode', 'TargetHeatingCoolingMode', - 'Name', 'CoolingThresholdTemperature', 'HeatingThresholdTemperature' ], @@ -165,12 +163,11 @@ const accessories = { 'CurrentTemperature', 'CurrentHeaterCoolerState', 'TargetHeaterCoolerState', - 'Name', + 'CoolingThresholdTemperature', + 'HeatingThresholdTemperature', 'RotationSpeed', 'SwingMode', - 'LockControl', - 'CoolingThresholdTemperature', - 'HeatingThresholdTemperature' + 'LockControl' ], 'Lock': [ 'LockCurrentState', @@ -222,6 +219,12 @@ const valveTypeParameter = { { value: 'Faucet', label: 'Faucet' } ] } +const invertedParameter = { + name: 'inverted', + label: 'inverted', + type: 'BOOLEAN', + description: 'invert the value for HomeKit' +} const valveTimerParameter = { name: 'homekitTimer', @@ -235,4 +238,99 @@ const valveDefaultDuration = { type: 'INTEGER' } -export const homekitParameters = [valveTypeParameter, valveTimerParameter, valveDefaultDuration] +const minValue = { + name: 'minValue', + label: 'Minimum value for this characteristic', + type: 'INTEGER' +} +const maxValue = { + name: 'maxValue', + label: 'Maximum value for this characteristic', + type: 'INTEGER' +} +const stepValue = { + name: 'step', + label: 'Step value for this characteristic', + type: 'INTEGER' +} +const m = (name, type, label, description) => { + return { + name, + type, + label, + description + } +} + +const dimmerFilterType = { + name: 'dimmerMode', + label: 'Dimmer Filter Type', + type: 'TEXT', + limitToOptions: true, + options: [ + { value: 'normal', label: 'no filter, all events from iOS home app accepted' }, + { value: 'filterOn', label: 'Filter out "ON" event' }, + { value: 'filterBrightness100', label: 'Filter out "set brightness to 100%" event' }, + { value: 'filterOnExceptBrightness100', label: 'Filter out "ON" events except of combination with "set brightness to 100%"' } + ] +} + +export const homekitParameters = { + 'Valve': [valveTypeParameter, valveTimerParameter, valveDefaultDuration], + 'Lighting.Brightness': [minValue, maxValue, dimmerFilterType], + 'TemperatureSensor.CurrentTemperature': [minValue, maxValue], + 'LeakSensor': [invertedParameter], + 'LeakSensor.LeakDetectedState': [invertedParameter], + 'MotionSensor': [invertedParameter], + 'MotionSensor.MotionDetectedState': [invertedParameter], + 'OccupancySensor': [invertedParameter], + 'OccupancySensor.OccupancyDetectedState': [invertedParameter], + 'ContactSensor': [invertedParameter], + 'ContactSensor.ContactSensorState': [invertedParameter], + 'SmokeSensor': [invertedParameter], + 'SmokeSensor.SmokeDetectedState': [invertedParameter], + 'CarbonDioxideSensor': [invertedParameter], + 'CarbonDioxideSensor.CarbonDioxideDetectedState': [invertedParameter], + 'CarbonMonoxideSensor': [invertedParameter], + 'CarbonMonoxideSensor.CarbonMonoxideDetectedState': [invertedParameter], + 'Window': [invertedParameter], + 'Door': [invertedParameter], + 'WindowCovering': [invertedParameter], + + 'Thermostat.CurrentTemperature': [minValue, maxValue, stepValue], + 'Thermostat.TargetTemperature': [minValue, maxValue, stepValue], + 'Thermostat.CoolingThresholdTemperature': [minValue, maxValue, stepValue], + 'Thermostat.HeatingThresholdTemperature': [minValue, maxValue, stepValue], + 'Thermostat.CurrentHeatingCoolingMode': [ + m('OFF', 'TEXT', 'OFF', 'Value for thermostat mode "off"'), + m('HEAT', 'TEXT', 'HEAT', 'Value for thermostat mode "heat"'), + m('COOL', 'TEXT', 'COOL', 'Value for thermostat mode "cool"') + ], + 'Thermostat.TargetHeatingCoolingMode': [ + m('OFF', 'TEXT', 'OFF', 'Value for thermostat mode "off"'), + m('HEAT', 'TEXT', 'HEAT', 'Value for thermostat mode "heat"'), + m('COOL', 'TEXT', 'COOL', 'Value for thermostat mode "cool"'), + m('AUTO', 'TEXT', 'AUTO', 'Value for thermostat mode "auto"') + ], + 'AirQualitySensor.AirQuality': [ + m('UNKNOWN', 'TEXT', 'UNKNOWN', 'Value for air quality "unknown"'), + m('EXCELLENT', 'TEXT', 'EXCELLENT', 'Value for air quality "excellent"'), + m('GOOD', 'TEXT', 'GOOD', 'Value for air quality "good"'), + m('FAIR', 'TEXT', 'FAIR', 'Value for air quality "fair"'), + m('INFERIOR', 'TEXT', 'INFERIOR', 'Value for air quality "inferior"'), + m('POOR', 'TEXT', 'POOR', 'Value for air quality "poor"') + ], + 'SecuritySystem.CurrentSecuritySystemState': [ + m('STAY_ARM', 'TEXT', 'STAY_ARM', 'Value for security state "stay arm"'), + m('AWAY_ARM', 'TEXT', 'AWAY_ARM', 'Value for security state "arm away"'), + m('NIGHT_ARM', 'TEXT', 'NIGHT_ARM', 'Value for security state "night arm"'), + m('DISARMED', 'TEXT', 'DISARMED', 'Value for security state "disarmed"'), + m('TRIGGERED', 'TEXT', 'TRIGGERED', 'Value for security state "alarm triggered"') + ], + 'SecuritySystem.TargetSecuritySystemState': [ + m('STAY_ARM', 'TEXT', 'STAY_ARM', 'Value for security state "stay arm"'), + m('AWAY_ARM', 'TEXT', 'AWAY_ARM', 'Value for security state "arm away"'), + m('NIGHT_ARM', 'TEXT', 'NIGHT_ARM', 'Value for security state "night arm"'), + m('DISARM', 'TEXT', 'DISARM', 'Value for security state "disarm"') + ] +} diff --git a/bundles/org.openhab.ui/web/src/components/item/metadata/item-metadata-homekit.vue b/bundles/org.openhab.ui/web/src/components/item/metadata/item-metadata-homekit.vue index 7996a295e7..797a02b524 100644 --- a/bundles/org.openhab.ui/web/src/components/item/metadata/item-metadata-homekit.vue +++ b/bundles/org.openhab.ui/web/src/components/item/metadata/item-metadata-homekit.vue @@ -5,10 +5,10 @@ + :title="(multiple) ? 'HomeKit Accessory/Characteristics' : 'HomeKit Accessory/Characteristics'" smart-select :smart-select-params="{ openIn: 'popup', searchbar: true, closeOnSelect: !multiple }" ref="classes">