Add Home Assistant entity_category support (#9293)

This commit is contained in:
Franck Nijhof authored and GitHub committed 2021-10-24 15:11:56 +02:00
1 parent 3f0a2fed9d
commit 16c3f912b1
2 files changed
+134 -53

No files matched your search

+132 -53
View File
@@ -416,15 +416,30 @@ export default class HomeAssistant extends Extension {
discoveryEntries.push(discoveryEntry);
} else if (firstExpose.type === 'binary') {
const lookup: {[s: string]: KeyValue}= {
occupancy: {device_class: 'motion'},
battery_low: {device_class: 'battery'},
water_leak: {device_class: 'moisture'},
vibration: {device_class: 'vibration'},
contact: {device_class: 'door'},
smoke: {device_class: 'smoke'},
gas: {device_class: 'gas'},
battery_low: {entity_category: 'diagnostic', device_class: 'battery'},
button_lock: {entity_category: 'config', icon: 'mdi:lock'},
carbon_monoxide: {device_class: 'safety'},
child_lock: {entity_category: 'config', icon: 'mdi:account-lock'},
color_sync: {entity_category: 'config', icon: 'mdi:sync-circle'},
consumer_connected: {entity_category: 'diagnostic', device_class: 'connectivity'},
contact: {device_class: 'door'},
eco_mode: {entity_category: 'config', icon: 'mdi:leaf'},
expose_pin: {entity_category: 'config', icon: 'mdi:pin'},
gas: {device_class: 'gas'},
invert_cover: {entity_category: 'config', icon: 'mdi:arrow-left-right'},
led_disabled_night: {entity_category: 'config', icon: 'mdi:led-off'},
legacy: {entity_category: 'config', icon: 'mdi:cog'},
moving: {device_class: 'moving'},
no_position_support: {entity_category: 'config', icon: 'mdi:minus-circle-outline'},
occupancy: {device_class: 'motion'},
power_outage_memory: {entity_category: 'config', icon: 'mdi:memory'},
presence: {device_class: 'presence'},
smoke: {device_class: 'smoke'},
sos: {device_class: 'safety'},
tamper: {device_class: 'tamper'},
test: {entity_category: 'diagnostic', icon: 'mdi:test-tube'},
vibration: {device_class: 'vibration'},
water_leak: {device_class: 'moisture'},
};
/**
@@ -469,44 +484,102 @@ export default class HomeAssistant extends Extension {
}
} else if (firstExpose.type === 'numeric') {
const lookup: {[s: string]: KeyValue} = {
battery: {device_class: 'battery', state_class: 'measurement'},
temperature: {device_class: 'temperature', state_class: 'measurement'},
angle: {icon: 'angle-acute'},
angle_axis: {icon: 'angle-acute'},
aqi: {device_class: 'aqi', state_class: 'measurement'},
auto_relock_time: {entity_category: 'config', icon: 'mdi:timer'},
away_preset_days: {entity_category: 'config', icon: 'mdi:timer'},
away_preset_temperature: {entity_category: 'config', icon: 'mdi:thermometer'},
battery: {device_class: 'battery', entity_category: 'diagnostic', state_class: 'measurement'},
battery_voltage: {device_class: 'voltage', entity_category: 'diagnostic', state_class: 'measurement'},
boost_time: {entity_category: 'config', icon: 'mdi:timer'},
calibration: {entity_category: 'config'},
co2: {device_class: 'carbon_dioxide', state_class: 'measurement'},
comfort_temperature: {entity_category: 'config', icon: 'mdi:thermometer'},
cpu_temperature: {
device_class: 'temperature', entity_category: 'diagnostic', state_class: 'measurement',
},
cube_side: {icon: 'mdi:cube'},
current: {
device_class: 'current',
enabled_by_default: false,
entity_category: 'diagnostic',
state_class: 'measurement',
},
current_phase_b: {
device_class: 'current',
enabled_by_default: false,
entity_category: 'diagnostic',
state_class: 'measurement',
},
current_phase_c: {
device_class: 'current',
enabled_by_default: false,
entity_category: 'diagnostic',
state_class: 'measurement',
},
deadzone_temperature: {entity_category: 'config', icon: 'mdi:thermometer'},
device_temperature: {
device_class: 'temperature', entity_category: 'diagnostic', state_class: 'measurement',
},
eco2: {device_class: 'carbon_dioxide', state_class: 'measurement'},
eco_temperature: {entity_category: 'config', icon: 'mdi:thermometer'},
energy: {device_class: 'energy', state_class: 'total_increasing'},
formaldehyd: {state_class: 'measurement'},
gas_density: {icon: 'mdi:google-circles-communities', state_class: 'measurement'},
hcho: {icon: 'mdi:air-filter', state_class: 'measurement'},
humidity: {device_class: 'humidity', state_class: 'measurement'},
illuminance_lux: {device_class: 'illuminance', state_class: 'measurement'},
illuminance: {
device_class: 'illuminance', enabled_by_default: false, state_class: 'measurement',
illuminance: {device_class: 'illuminance', enabled_by_default: false, state_class: 'measurement'},
linkquality: {
enabled_by_default: false,
entity_category: 'diagnostic',
icon: 'mdi:signal',
state_class: 'measurement',
},
soil_moisture: {icon: 'mdi:water-percent', state_class: 'measurement'},
local_temperature: {device_class: 'temperature', state_class: 'measurement'},
max_temperature: {entity_category: 'config', icon: 'mdi:thermometer'},
max_temperature_limit: {entity_category: 'config', icon: 'mdi:thermometer'},
min_temperature: {entity_category: 'config', icon: 'mdi:thermometer'},
measurement_poll_interval: {entity_category: 'config', icon: 'mdi:clock-out'},
occupancy_timeout: {entity_category: 'config', icon: 'mdi:timer'},
pm10: {device_class: 'pm10', state_class: 'measurement'},
pm25: {device_class: 'pm25', state_class: 'measurement'},
position: {icon: 'mdi:valve', state_class: 'measurement'},
power: {device_class: 'power', entity_category: 'diagnostic', state_class: 'measurement'},
precision: {entity_category: 'config', icon: 'mdi:decimal-comma-increase'},
pressure: {device_class: 'pressure', state_class: 'measurement'},
power: {device_class: 'power', state_class: 'measurement'},
linkquality: {enabled_by_default: false, icon: 'mdi:signal', state_class: 'measurement'},
current: {device_class: 'current', state_class: 'measurement'},
voltage: {device_class: 'voltage', enabled_by_default: false, state_class: 'measurement'},
current_phase_b: {device_class: 'current', state_class: 'measurement'},
voltage_phase_b: {
device_class: 'voltage', enabled_by_default: false, state_class: 'measurement',
presence_timeout: {entity_category: 'config', icon: 'mdi:timer'},
requested_brightness_level: {
enabled_by_default: false, entity_category: 'diagnostic', icon: 'mdi:brightness-5',
},
current_phase_c: {device_class: 'current', state_class: 'measurement'},
voltage_phase_c: {
device_class: 'voltage', enabled_by_default: false, state_class: 'measurement',
},
energy: {
device_class: 'energy',
state_class: 'total_increasing',
requested_brightness_percent: {
enabled_by_default: false, entity_category: 'diagnostic', icon: 'mdi:brightness-5',
},
smoke_density: {icon: 'mdi:google-circles-communities', state_class: 'measurement'},
gas_density: {icon: 'mdi:google-circles-communities', state_class: 'measurement'},
pm25: {device_class: 'pm25', state_class: 'measurement'},
pm10: {device_class: 'pm10', state_class: 'measurement'},
voc: {icon: 'mdi:air-filter', state_class: 'measurement'},
aqi: {device_class: 'aqi', state_class: 'measurement'},
hcho: {icon: 'mdi:air-filter', state_class: 'measurement'},
requested_brightness_level: {enabled_by_default: false, icon: 'mdi:brightness-5'},
requested_brightness_percent: {enabled_by_default: false, icon: 'mdi:brightness-5'},
eco2: {device_class: 'carbon_dioxide', state_class: 'measurement'},
co2: {device_class: 'carbon_dioxide', state_class: 'measurement'},
local_temperature: {device_class: 'temperature', state_class: 'measurement'},
soil_moisture: {icon: 'mdi:water-percent', state_class: 'measurement'},
temperature: {device_class: 'temperature', state_class: 'measurement'},
transition: {entity_category: 'config', icon: 'mdi:transition'},
voc: {device_class: 'volatile_organic_compounds', state_class: 'measurement'},
vibration_timeout: {entity_category: 'config', icon: 'mdi:timer'},
voltage: {
device_class: 'voltage',
enabled_by_default: false,
entity_category: 'diagnostic',
state_class: 'measurement',
},
voltage_phase_b: {
device_class: 'voltage',
enabled_by_default: false,
entity_category: 'diagnostic',
state_class: 'measurement',
},
voltage_phase_c: {
device_class: 'voltage',
enabled_by_default: false,
entity_category: 'diagnostic',
state_class: 'measurement',
},
x_axis: {icon: 'mdi:axis-x-arrow'},
y_axis: {icon: 'mdi:axis-y-arrow'},
z_axis: {icon: 'mdi:axis-z-arrow'},
@@ -552,22 +625,28 @@ export default class HomeAssistant extends Extension {
} else if (firstExpose.type === 'enum') {
const lookup: {[s: string]: KeyValue} = {
action: {icon: 'mdi:gesture-double-tap'},
backlight_auto_dim: {enabled_by_default: false, icon: 'mdi:brightness-auto'},
backlight_mode: {enabled_by_default: false, icon: 'mdi:lightbulb'},
color_power_on_behavior: {enabled_by_default: false, icon: 'mdi:palette'},
device_mode: {enabled_by_default: false, icon: 'mdi:tune'},
keep_time: {enabled_by_default: false, icon: 'mdi:av-timer'},
melody: {icon: 'mdi:music-note'},
mode_phase_control: {enabled_by_default: false, icon: 'mdi:tune'},
mode: {enabled_by_default: false, icon: 'mdi:tune'},
motion_sensitivity: {enabled_by_default: false, icon: 'mdi:tune'},
operation_mode: {enabled_by_default: false, icon: 'mdi:tune'},
power_on_behavior: {enabled_by_default: false, icon: 'mdi:power-settings'},
power_outage_memory: {enabled_by_default: false, icon: 'mdi:power-settings'},
sensitivity: {enabled_by_default: false, icon: 'mdi:tune'},
sensors_type: {enabled_by_default: false, icon: 'mdi:tune'},
switch_type: {enabled_by_default: false, icon: 'mdi:tune'},
volume: {icon: 'mdi: volume-high'},
backlight_auto_dim: {entity_category: 'config', icon: 'mdi:brightness-auto'},
backlight_mode: {entity_category: 'config', icon: 'mdi:lightbulb'},
color_power_on_behavior: {entity_category: 'config', icon: 'mdi:palette'},
device_mode: {entity_category: 'config', icon: 'mdi:tune'},
effect: {enabled_by_default: false, icon: 'mdi:palette'},
force: {enabled_by_default: false, icon: 'mdi:valve'},
keep_time: {entity_category: 'config', icon: 'mdi:av-timer'},
keypad_lockout: {entity_category: 'config', icon: 'mdi:lock'},
melody: {entity_category: 'config', icon: 'mdi:music-note'},
mode_phase_control: {entity_category: 'config', icon: 'mdi:tune'},
mode: {entity_category: 'config', icon: 'mdi:tune'},
motion_sensitivity: {entity_category: 'config', icon: 'mdi:tune'},
operation_mode: {entity_category: 'config', icon: 'mdi:tune'},
power_on_behavior: {entity_category: 'config', icon: 'mdi:power-settings'},
power_outage_memory: {entity_category: 'config', icon: 'mdi:power-settings'},
sensitivity: {entity_category: 'config', icon: 'mdi:tune'},
sensors_type: {entity_category: 'config', icon: 'mdi:tune'},
sound_volume: {entity_category: 'config', icon: 'mdi:volume-high'},
switch_type: {entity_category: 'config', icon: 'mdi:tune'},
thermostat_unit: {entity_category: 'config', icon: 'mdi:thermometer'},
volume: {entity_category: 'config', icon: 'mdi: volume-high'},
week: {entity_category: 'config', icon: 'mdi:calendar-clock'},
};
if (firstExpose.access & ACCESS_STATE) {
+2
View File
@@ -214,6 +214,7 @@ describe('HomeAssistant extension', () => {
'name': 'weather_sensor_battery',
'unique_id': '0x0017880104e45522_battery_zigbee2mqtt',
'enabled_by_default': true,
'entity_category': 'diagnostic',
'device': {
'identifiers': ['zigbee2mqtt_0x0017880104e45522'],
'name': 'weather_sensor',
@@ -234,6 +235,7 @@ describe('HomeAssistant extension', () => {
payload = {
'icon': 'mdi:signal',
'enabled_by_default': false,
'entity_category': 'diagnostic',
'unit_of_measurement': 'lqi',
'state_class': 'measurement',
'value_template': '{{ value_json.linkquality }}',