Skip to content

Commit

Permalink
Merge 1bc6281 into e2979b0
Browse files Browse the repository at this point in the history
  • Loading branch information
yfre committed Dec 10, 2021
2 parents e2979b0 + 1bc6281 commit ccc75cd
Show file tree
Hide file tree
Showing 2 changed files with 108 additions and 16 deletions.
112 changes: 105 additions & 7 deletions bundles/org.openhab.ui/web/src/assets/definitions/metadata/homekit.js
Expand Up @@ -7,7 +7,6 @@ const accessories = {
'PM25Density',
'PM10Density',
'VOCDensity',
'Name',
'ActiveStatus',
'FaultStatus',
'TamperedStatus',
Expand Down Expand Up @@ -156,7 +155,6 @@ const accessories = {
'TargetTemperature',
'CurrentHeatingCoolingMode',
'TargetHeatingCoolingMode',
'Name',
'CoolingThresholdTemperature',
'HeatingThresholdTemperature'
],
Expand All @@ -165,12 +163,11 @@ const accessories = {
'CurrentTemperature',
'CurrentHeaterCoolerState',
'TargetHeaterCoolerState',
'Name',
'CoolingThresholdTemperature',
'HeatingThresholdTemperature',
'RotationSpeed',
'SwingMode',
'LockControl',
'CoolingThresholdTemperature',
'HeatingThresholdTemperature'
'LockControl'
],
'Lock': [
'LockCurrentState',
Expand Down Expand Up @@ -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',
Expand All @@ -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"')
]
}
Expand Up @@ -5,10 +5,10 @@
</div>
<f7-list>
<f7-list-item :key="classSelectKey"
:title="(multiple) ? 'HomeKit Accessory/Charactistics' : 'HomeKit Accessory/Charactistic'" smart-select :smart-select-params="{ openIn: 'popup', searchbar: true, closeOnSelect: !multiple, scrollToSelectedItem: true }" ref="classes">
:title="(multiple) ? 'HomeKit Accessory/Characteristics' : 'HomeKit Accessory/Characteristics'" smart-select :smart-select-params="{ openIn: 'popup', searchbar: true, closeOnSelect: !multiple }" ref="classes">
<select name="parameters" @change="updateClasses" :multiple="multiple">
<option v-if="!multiple" value="" />
<option v-for="cl in orderedClasses.filter((c) => c.indexOf('label:') !== 0)"
<option v-for="cl in classesDefs.filter((c) => c.indexOf('label:') !== 0)"
:value="cl" :key="cl"
:selected="isSelected(cl)">
{{ cl }}
Expand Down Expand Up @@ -48,15 +48,9 @@ export default {
if (!this.multiple) return this.metadata.value
return (this.metadata.value) ? this.metadata.value.split(',') : []
},
orderedClasses () {
return [...this.classesDefs].sort((a, b) => {
return a.localeCompare(b)
})
},
parameters () {
if (!this.classes) return []
if (!this.multiple && this.classes.indexOf('Valve') === 0) return homekitParameters
if (this.multiple && this.classes.some((c) => c.indexOf('Valve') === 0)) return homekitParameters
if (!this.multiple) return homekitParameters[this.classes]
return []
}
},
Expand Down

0 comments on commit ccc75cd

Please sign in to comment.