Use black to format hassfest generated files (#78794)

This commit is contained in:
Erik Montnemery 2022-09-19 23:37:22 +02:00 committed by GitHub
parent e66f28f3f7
commit 1021c90bb8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
19 changed files with 633 additions and 624 deletions

View file

@ -3,8 +3,6 @@
To update, run python3 -m script.hassfest To update, run python3 -m script.hassfest
""" """
# fmt: off
APPLICATION_CREDENTIALS = [ APPLICATION_CREDENTIALS = [
"geocaching", "geocaching",
"google", "google",
@ -19,5 +17,5 @@ APPLICATION_CREDENTIALS = [
"spotify", "spotify",
"withings", "withings",
"xbox", "xbox",
"yolink" "yolink",
] ]

View file

@ -4,23 +4,21 @@ To update, run python3 -m script.hassfest
""" """
from __future__ import annotations from __future__ import annotations
# fmt: off
BLUETOOTH: list[dict[str, bool | str | int | list[int]]] = [ BLUETOOTH: list[dict[str, bool | str | int | list[int]]] = [
{ {
"domain": "bluemaestro", "domain": "bluemaestro",
"manufacturer_id": 307, "manufacturer_id": 307,
"connectable": False "connectable": False,
}, },
{ {
"domain": "bthome", "domain": "bthome",
"connectable": False, "connectable": False,
"service_data_uuid": "0000181c-0000-1000-8000-00805f9b34fb" "service_data_uuid": "0000181c-0000-1000-8000-00805f9b34fb",
}, },
{ {
"domain": "bthome", "domain": "bthome",
"connectable": False, "connectable": False,
"service_data_uuid": "0000181e-0000-1000-8000-00805f9b34fb" "service_data_uuid": "0000181e-0000-1000-8000-00805f9b34fb",
}, },
{ {
"domain": "fjaraskupan", "domain": "fjaraskupan",
@ -32,174 +30,174 @@ BLUETOOTH: list[dict[str, bool | str | int | list[int]]] = [
70, 70,
74, 74,
65, 65,
82 82,
] ],
}, },
{ {
"domain": "govee_ble", "domain": "govee_ble",
"local_name": "Govee*", "local_name": "Govee*",
"connectable": False "connectable": False,
}, },
{ {
"domain": "govee_ble", "domain": "govee_ble",
"local_name": "GVH5*", "local_name": "GVH5*",
"connectable": False "connectable": False,
}, },
{ {
"domain": "govee_ble", "domain": "govee_ble",
"local_name": "B5178*", "local_name": "B5178*",
"connectable": False "connectable": False,
}, },
{ {
"domain": "govee_ble", "domain": "govee_ble",
"manufacturer_id": 6966, "manufacturer_id": 6966,
"service_uuid": "00008451-0000-1000-8000-00805f9b34fb", "service_uuid": "00008451-0000-1000-8000-00805f9b34fb",
"connectable": False "connectable": False,
}, },
{ {
"domain": "govee_ble", "domain": "govee_ble",
"manufacturer_id": 26589, "manufacturer_id": 26589,
"service_uuid": "00008351-0000-1000-8000-00805f9b34fb", "service_uuid": "00008351-0000-1000-8000-00805f9b34fb",
"connectable": False "connectable": False,
}, },
{ {
"domain": "govee_ble", "domain": "govee_ble",
"manufacturer_id": 57391, "manufacturer_id": 57391,
"service_uuid": "00008351-0000-1000-8000-00805f9b34fb", "service_uuid": "00008351-0000-1000-8000-00805f9b34fb",
"connectable": False "connectable": False,
}, },
{ {
"domain": "govee_ble", "domain": "govee_ble",
"manufacturer_id": 18994, "manufacturer_id": 18994,
"service_uuid": "00008551-0000-1000-8000-00805f9b34fb", "service_uuid": "00008551-0000-1000-8000-00805f9b34fb",
"connectable": False "connectable": False,
}, },
{ {
"domain": "govee_ble", "domain": "govee_ble",
"manufacturer_id": 818, "manufacturer_id": 818,
"service_uuid": "00008551-0000-1000-8000-00805f9b34fb", "service_uuid": "00008551-0000-1000-8000-00805f9b34fb",
"connectable": False "connectable": False,
}, },
{ {
"domain": "govee_ble", "domain": "govee_ble",
"manufacturer_id": 59970, "manufacturer_id": 59970,
"service_uuid": "00008151-0000-1000-8000-00805f9b34fb", "service_uuid": "00008151-0000-1000-8000-00805f9b34fb",
"connectable": False "connectable": False,
}, },
{ {
"domain": "govee_ble", "domain": "govee_ble",
"manufacturer_id": 63585, "manufacturer_id": 63585,
"service_uuid": "00008151-0000-1000-8000-00805f9b34fb", "service_uuid": "00008151-0000-1000-8000-00805f9b34fb",
"connectable": False "connectable": False,
}, },
{ {
"domain": "govee_ble", "domain": "govee_ble",
"manufacturer_id": 14474, "manufacturer_id": 14474,
"service_uuid": "00008151-0000-1000-8000-00805f9b34fb", "service_uuid": "00008151-0000-1000-8000-00805f9b34fb",
"connectable": False "connectable": False,
}, },
{ {
"domain": "govee_ble", "domain": "govee_ble",
"manufacturer_id": 10032, "manufacturer_id": 10032,
"service_uuid": "00008251-0000-1000-8000-00805f9b34fb", "service_uuid": "00008251-0000-1000-8000-00805f9b34fb",
"connectable": False "connectable": False,
}, },
{ {
"domain": "govee_ble", "domain": "govee_ble",
"manufacturer_id": 19506, "manufacturer_id": 19506,
"service_uuid": "00001801-0000-1000-8000-00805f9b34fb", "service_uuid": "00001801-0000-1000-8000-00805f9b34fb",
"connectable": False "connectable": False,
}, },
{ {
"domain": "homekit_controller", "domain": "homekit_controller",
"manufacturer_id": 76, "manufacturer_id": 76,
"manufacturer_data_start": [ "manufacturer_data_start": [
6 6,
] ],
}, },
{ {
"domain": "inkbird", "domain": "inkbird",
"local_name": "sps", "local_name": "sps",
"connectable": False "connectable": False,
}, },
{ {
"domain": "inkbird", "domain": "inkbird",
"local_name": "Inkbird*", "local_name": "Inkbird*",
"connectable": False "connectable": False,
}, },
{ {
"domain": "inkbird", "domain": "inkbird",
"local_name": "iBBQ*", "local_name": "iBBQ*",
"connectable": False "connectable": False,
}, },
{ {
"domain": "inkbird", "domain": "inkbird",
"local_name": "xBBQ*", "local_name": "xBBQ*",
"connectable": False "connectable": False,
}, },
{ {
"domain": "inkbird", "domain": "inkbird",
"local_name": "tps", "local_name": "tps",
"connectable": False "connectable": False,
}, },
{ {
"domain": "led_ble", "domain": "led_ble",
"local_name": "LEDnet*" "local_name": "LEDnet*",
}, },
{ {
"domain": "led_ble", "domain": "led_ble",
"local_name": "BLE-LED*" "local_name": "BLE-LED*",
}, },
{ {
"domain": "led_ble", "domain": "led_ble",
"local_name": "LEDBLE*" "local_name": "LEDBLE*",
}, },
{ {
"domain": "led_ble", "domain": "led_ble",
"local_name": "Triones*" "local_name": "Triones*",
}, },
{ {
"domain": "led_ble", "domain": "led_ble",
"local_name": "LEDBlue*" "local_name": "LEDBlue*",
}, },
{ {
"domain": "led_ble", "domain": "led_ble",
"local_name": "Dream~*" "local_name": "Dream~*",
}, },
{ {
"domain": "led_ble", "domain": "led_ble",
"local_name": "QHM-*" "local_name": "QHM-*",
}, },
{ {
"domain": "led_ble", "domain": "led_ble",
"local_name": "AP-*" "local_name": "AP-*",
}, },
{ {
"domain": "melnor", "domain": "melnor",
"manufacturer_data_start": [ "manufacturer_data_start": [
89 89,
], ],
"manufacturer_id": 13 "manufacturer_id": 13,
}, },
{ {
"domain": "moat", "domain": "moat",
"local_name": "Moat_S*", "local_name": "Moat_S*",
"connectable": False "connectable": False,
}, },
{ {
"domain": "qingping", "domain": "qingping",
"local_name": "Qingping*", "local_name": "Qingping*",
"connectable": False "connectable": False,
}, },
{ {
"domain": "qingping", "domain": "qingping",
"local_name": "Lee Guitars*", "local_name": "Lee Guitars*",
"connectable": False "connectable": False,
}, },
{ {
"domain": "qingping", "domain": "qingping",
"service_data_uuid": "0000fdcd-0000-1000-8000-00805f9b34fb", "service_data_uuid": "0000fdcd-0000-1000-8000-00805f9b34fb",
"connectable": False "connectable": False,
}, },
{ {
"domain": "sensorpro", "domain": "sensorpro",
@ -208,9 +206,9 @@ BLUETOOTH: list[dict[str, bool | str | int | list[int]]] = [
1, 1,
1, 1,
164, 164,
193 193,
], ],
"connectable": False "connectable": False,
}, },
{ {
"domain": "sensorpro", "domain": "sensorpro",
@ -219,79 +217,79 @@ BLUETOOTH: list[dict[str, bool | str | int | list[int]]] = [
1, 1,
5, 5,
164, 164,
193 193,
], ],
"connectable": False "connectable": False,
}, },
{ {
"domain": "sensorpush", "domain": "sensorpush",
"local_name": "SensorPush*", "local_name": "SensorPush*",
"connectable": False "connectable": False,
}, },
{ {
"domain": "switchbot", "domain": "switchbot",
"service_data_uuid": "0000fd3d-0000-1000-8000-00805f9b34fb", "service_data_uuid": "0000fd3d-0000-1000-8000-00805f9b34fb",
"connectable": False "connectable": False,
}, },
{ {
"domain": "switchbot", "domain": "switchbot",
"service_uuid": "cba20d00-224d-11e6-9fb8-0002a5d5c51b", "service_uuid": "cba20d00-224d-11e6-9fb8-0002a5d5c51b",
"connectable": False "connectable": False,
}, },
{ {
"domain": "thermobeacon", "domain": "thermobeacon",
"service_uuid": "0000fff0-0000-1000-8000-00805f9b34fb", "service_uuid": "0000fff0-0000-1000-8000-00805f9b34fb",
"manufacturer_id": 16, "manufacturer_id": 16,
"manufacturer_data_start": [ "manufacturer_data_start": [
0 0,
], ],
"connectable": False "connectable": False,
}, },
{ {
"domain": "thermobeacon", "domain": "thermobeacon",
"service_uuid": "0000fff0-0000-1000-8000-00805f9b34fb", "service_uuid": "0000fff0-0000-1000-8000-00805f9b34fb",
"manufacturer_id": 17, "manufacturer_id": 17,
"manufacturer_data_start": [ "manufacturer_data_start": [
0 0,
], ],
"connectable": False "connectable": False,
}, },
{ {
"domain": "thermobeacon", "domain": "thermobeacon",
"service_uuid": "0000fff0-0000-1000-8000-00805f9b34fb", "service_uuid": "0000fff0-0000-1000-8000-00805f9b34fb",
"manufacturer_id": 21, "manufacturer_id": 21,
"manufacturer_data_start": [ "manufacturer_data_start": [
0 0,
], ],
"connectable": False "connectable": False,
}, },
{ {
"domain": "thermobeacon", "domain": "thermobeacon",
"local_name": "ThermoBeacon", "local_name": "ThermoBeacon",
"connectable": False "connectable": False,
}, },
{ {
"domain": "thermopro", "domain": "thermopro",
"local_name": "TP35*", "local_name": "TP35*",
"connectable": False "connectable": False,
}, },
{ {
"domain": "thermopro", "domain": "thermopro",
"local_name": "TP39*", "local_name": "TP39*",
"connectable": False "connectable": False,
}, },
{ {
"domain": "tilt_ble", "domain": "tilt_ble",
"manufacturer_id": 76 "manufacturer_id": 76,
}, },
{ {
"domain": "xiaomi_ble", "domain": "xiaomi_ble",
"connectable": False, "connectable": False,
"service_data_uuid": "0000fe95-0000-1000-8000-00805f9b34fb" "service_data_uuid": "0000fe95-0000-1000-8000-00805f9b34fb",
}, },
{ {
"domain": "yalexs_ble", "domain": "yalexs_ble",
"manufacturer_id": 465, "manufacturer_id": 465,
"service_uuid": "0000fe24-0000-1000-8000-00805f9b34fb" "service_uuid": "0000fe24-0000-1000-8000-00805f9b34fb",
} },
] ]

View file

@ -3,8 +3,6 @@
To update, run python3 -m script.hassfest To update, run python3 -m script.hassfest
""" """
# fmt: off
FLOWS = { FLOWS = {
"integration": [ "integration": [
"abode", "abode",
@ -456,7 +454,7 @@ FLOWS = {
"zerproc", "zerproc",
"zha", "zha",
"zwave_js", "zwave_js",
"zwave_me" "zwave_me",
], ],
"helper": [ "helper": [
"derivative", "derivative",
@ -466,6 +464,6 @@ FLOWS = {
"switch_as_x", "switch_as_x",
"threshold", "threshold",
"tod", "tod",
"utility_meter" "utility_meter",
] ],
} }

View file

@ -4,194 +4,201 @@ To update, run python3 -m script.hassfest
""" """
from __future__ import annotations from __future__ import annotations
# fmt: off
DHCP: list[dict[str, str | bool]] = [ DHCP: list[dict[str, str | bool]] = [
{'domain': 'august', 'hostname': 'connect', 'macaddress': 'D86162*'}, {"domain": "august", "hostname": "connect", "macaddress": "D86162*"},
{'domain': 'august', 'hostname': 'connect', 'macaddress': 'B8B7F1*'}, {"domain": "august", "hostname": "connect", "macaddress": "B8B7F1*"},
{'domain': 'august', 'hostname': 'connect', 'macaddress': '2C9FFB*'}, {"domain": "august", "hostname": "connect", "macaddress": "2C9FFB*"},
{'domain': 'august', 'hostname': 'august*', 'macaddress': 'E076D0*'}, {"domain": "august", "hostname": "august*", "macaddress": "E076D0*"},
{'domain': 'awair', 'macaddress': '70886B1*'}, {"domain": "awair", "macaddress": "70886B1*"},
{'domain': 'axis', 'registered_devices': True}, {"domain": "axis", "registered_devices": True},
{'domain': 'axis', 'hostname': 'axis-00408c*', 'macaddress': '00408C*'}, {"domain": "axis", "hostname": "axis-00408c*", "macaddress": "00408C*"},
{'domain': 'axis', 'hostname': 'axis-accc8e*', 'macaddress': 'ACCC8E*'}, {"domain": "axis", "hostname": "axis-accc8e*", "macaddress": "ACCC8E*"},
{'domain': 'axis', 'hostname': 'axis-b8a44f*', 'macaddress': 'B8A44F*'}, {"domain": "axis", "hostname": "axis-b8a44f*", "macaddress": "B8A44F*"},
{'domain': 'blink', 'hostname': 'blink*', 'macaddress': 'B85F98*'}, {"domain": "blink", "hostname": "blink*", "macaddress": "B85F98*"},
{'domain': 'blink', 'hostname': 'blink*', 'macaddress': '00037F*'}, {"domain": "blink", "hostname": "blink*", "macaddress": "00037F*"},
{'domain': 'blink', 'hostname': 'blink*', 'macaddress': '20A171*'}, {"domain": "blink", "hostname": "blink*", "macaddress": "20A171*"},
{'domain': 'broadlink', 'registered_devices': True}, {"domain": "broadlink", "registered_devices": True},
{'domain': 'broadlink', 'macaddress': '34EA34*'}, {"domain": "broadlink", "macaddress": "34EA34*"},
{'domain': 'broadlink', 'macaddress': '24DFA7*'}, {"domain": "broadlink", "macaddress": "24DFA7*"},
{'domain': 'broadlink', 'macaddress': 'A043B0*'}, {"domain": "broadlink", "macaddress": "A043B0*"},
{'domain': 'broadlink', 'macaddress': 'B4430D*'}, {"domain": "broadlink", "macaddress": "B4430D*"},
{'domain': 'broadlink', 'macaddress': 'C8F742*'}, {"domain": "broadlink", "macaddress": "C8F742*"},
{'domain': 'elkm1', 'registered_devices': True}, {"domain": "elkm1", "registered_devices": True},
{'domain': 'elkm1', 'macaddress': '00409D*'}, {"domain": "elkm1", "macaddress": "00409D*"},
{'domain': 'emonitor', 'hostname': 'emonitor*', 'macaddress': '0090C2*'}, {"domain": "emonitor", "hostname": "emonitor*", "macaddress": "0090C2*"},
{'domain': 'emonitor', 'registered_devices': True}, {"domain": "emonitor", "registered_devices": True},
{'domain': 'esphome', 'registered_devices': True}, {"domain": "esphome", "registered_devices": True},
{'domain': 'flume', 'hostname': 'flume-gw-*'}, {"domain": "flume", "hostname": "flume-gw-*"},
{'domain': 'flux_led', 'registered_devices': True}, {"domain": "flux_led", "registered_devices": True},
{'domain': 'flux_led', 'hostname': '[ba][lk]*', 'macaddress': '18B905*'}, {"domain": "flux_led", "macaddress": "18B905*", "hostname": "[ba][lk]*"},
{'domain': 'flux_led', 'hostname': '[ba][lk]*', 'macaddress': '249494*'}, {"domain": "flux_led", "macaddress": "249494*", "hostname": "[ba][lk]*"},
{'domain': 'flux_led', 'hostname': '[ba][lk]*', 'macaddress': '7CB94C*'}, {"domain": "flux_led", "macaddress": "7CB94C*", "hostname": "[ba][lk]*"},
{'domain': 'flux_led', 'hostname': '[hba][flk]*', 'macaddress': 'ACCF23*'}, {"domain": "flux_led", "macaddress": "ACCF23*", "hostname": "[hba][flk]*"},
{'domain': 'flux_led', 'hostname': '[ba][lk]*', 'macaddress': 'B4E842*'}, {"domain": "flux_led", "macaddress": "B4E842*", "hostname": "[ba][lk]*"},
{'domain': 'flux_led', 'hostname': '[hba][flk]*', 'macaddress': 'F0FE6B*'}, {"domain": "flux_led", "macaddress": "F0FE6B*", "hostname": "[hba][flk]*"},
{'domain': 'flux_led', 'hostname': 'lwip*', 'macaddress': '8CCE4E*'}, {"domain": "flux_led", "macaddress": "8CCE4E*", "hostname": "lwip*"},
{'domain': 'flux_led', 'hostname': 'hf-lpb100-zj*'}, {"domain": "flux_led", "hostname": "hf-lpb100-zj*"},
{'domain': 'flux_led', 'hostname': 'zengge_[0-9a-f][0-9a-f]_*'}, {"domain": "flux_led", "hostname": "zengge_[0-9a-f][0-9a-f]_*"},
{'domain': 'flux_led', 'hostname': 'sta*', 'macaddress': 'C82E47*'}, {"domain": "flux_led", "macaddress": "C82E47*", "hostname": "sta*"},
{'domain': 'fronius', 'macaddress': '0003AC*'}, {"domain": "fronius", "macaddress": "0003AC*"},
{'domain': 'fully_kiosk', 'registered_devices': True}, {"domain": "fully_kiosk", "registered_devices": True},
{'domain': 'goalzero', 'registered_devices': True}, {"domain": "goalzero", "registered_devices": True},
{'domain': 'goalzero', 'hostname': 'yeti*'}, {"domain": "goalzero", "hostname": "yeti*"},
{'domain': 'gogogate2', 'hostname': 'ismartgate*'}, {"domain": "gogogate2", "hostname": "ismartgate*"},
{'domain': 'guardian', 'hostname': 'gvc*', 'macaddress': '30AEA4*'}, {"domain": "guardian", "hostname": "gvc*", "macaddress": "30AEA4*"},
{'domain': 'guardian', 'hostname': 'gvc*', 'macaddress': 'B4E62D*'}, {"domain": "guardian", "hostname": "gvc*", "macaddress": "B4E62D*"},
{'domain': 'guardian', 'hostname': 'guardian*', 'macaddress': '30AEA4*'}, {"domain": "guardian", "hostname": "guardian*", "macaddress": "30AEA4*"},
{'domain': 'hunterdouglas_powerview', 'registered_devices': True}, {"domain": "hunterdouglas_powerview", "registered_devices": True},
{'domain': 'hunterdouglas_powerview', {
'hostname': 'hunter*', "domain": "hunterdouglas_powerview",
'macaddress': '002674*'}, "hostname": "hunter*",
{'domain': 'insteon', 'macaddress': '000EF3*'}, "macaddress": "002674*",
{'domain': 'insteon', 'registered_devices': True}, },
{'domain': 'intellifire', 'hostname': 'zentrios-*'}, {"domain": "insteon", "macaddress": "000EF3*"},
{'domain': 'isy994', 'registered_devices': True}, {"domain": "insteon", "registered_devices": True},
{'domain': 'isy994', 'hostname': 'isy*', 'macaddress': '0021B9*'}, {"domain": "intellifire", "hostname": "zentrios-*"},
{'domain': 'isy994', 'hostname': 'polisy*', 'macaddress': '000DB9*'}, {"domain": "isy994", "registered_devices": True},
{'domain': 'lametric', 'registered_devices': True}, {"domain": "isy994", "hostname": "isy*", "macaddress": "0021B9*"},
{'domain': 'lifx', 'macaddress': 'D073D5*'}, {"domain": "isy994", "hostname": "polisy*", "macaddress": "000DB9*"},
{'domain': 'lifx', 'registered_devices': True}, {"domain": "lametric", "registered_devices": True},
{'domain': 'litterrobot', 'hostname': 'litter-robot4'}, {"domain": "lifx", "macaddress": "D073D5*"},
{'domain': 'lyric', 'hostname': 'lyric-*', 'macaddress': '48A2E6*'}, {"domain": "lifx", "registered_devices": True},
{'domain': 'lyric', 'hostname': 'lyric-*', 'macaddress': 'B82CA0*'}, {"domain": "litterrobot", "hostname": "litter-robot4"},
{'domain': 'lyric', 'hostname': 'lyric-*', 'macaddress': '00D02D*'}, {"domain": "lyric", "hostname": "lyric-*", "macaddress": "48A2E6*"},
{'domain': 'motion_blinds', 'registered_devices': True}, {"domain": "lyric", "hostname": "lyric-*", "macaddress": "B82CA0*"},
{'domain': 'motion_blinds', 'hostname': 'motion_*'}, {"domain": "lyric", "hostname": "lyric-*", "macaddress": "00D02D*"},
{'domain': 'motion_blinds', 'hostname': 'brel_*'}, {"domain": "motion_blinds", "registered_devices": True},
{'domain': 'motion_blinds', 'hostname': 'connector_*'}, {"domain": "motion_blinds", "hostname": "motion_*"},
{'domain': 'myq', 'macaddress': '645299*'}, {"domain": "motion_blinds", "hostname": "brel_*"},
{'domain': 'nest', 'macaddress': '18B430*'}, {"domain": "motion_blinds", "hostname": "connector_*"},
{'domain': 'nest', 'macaddress': '641666*'}, {"domain": "myq", "macaddress": "645299*"},
{'domain': 'nest', 'macaddress': 'D8EB46*'}, {"domain": "nest", "macaddress": "18B430*"},
{'domain': 'nexia', 'hostname': 'xl857-*', 'macaddress': '000231*'}, {"domain": "nest", "macaddress": "641666*"},
{'domain': 'nuheat', 'hostname': 'nuheat', 'macaddress': '002338*'}, {"domain": "nest", "macaddress": "D8EB46*"},
{'domain': 'nuki', 'hostname': 'nuki_bridge_*'}, {"domain": "nexia", "hostname": "xl857-*", "macaddress": "000231*"},
{'domain': 'oncue', 'hostname': 'kohlergen*', 'macaddress': '00146F*'}, {"domain": "nuheat", "hostname": "nuheat", "macaddress": "002338*"},
{'domain': 'overkiz', 'hostname': 'gateway*', 'macaddress': 'F8811A*'}, {"domain": "nuki", "hostname": "nuki_bridge_*"},
{'domain': 'powerwall', 'hostname': '1118431-*'}, {"domain": "oncue", "hostname": "kohlergen*", "macaddress": "00146F*"},
{'domain': 'prusalink', 'macaddress': '109C70*'}, {"domain": "overkiz", "hostname": "gateway*", "macaddress": "F8811A*"},
{'domain': 'qnap_qsw', 'macaddress': '245EBE*'}, {"domain": "powerwall", "hostname": "1118431-*"},
{'domain': 'rachio', 'hostname': 'rachio-*', 'macaddress': '009D6B*'}, {"domain": "prusalink", "macaddress": "109C70*"},
{'domain': 'rachio', 'hostname': 'rachio-*', 'macaddress': 'F0038C*'}, {"domain": "qnap_qsw", "macaddress": "245EBE*"},
{'domain': 'rachio', 'hostname': 'rachio-*', 'macaddress': '74C63B*'}, {"domain": "rachio", "hostname": "rachio-*", "macaddress": "009D6B*"},
{'domain': 'radiotherm', 'hostname': 'thermostat*', 'macaddress': '5CDAD4*'}, {"domain": "rachio", "hostname": "rachio-*", "macaddress": "F0038C*"},
{'domain': 'radiotherm', 'registered_devices': True}, {"domain": "rachio", "hostname": "rachio-*", "macaddress": "74C63B*"},
{'domain': 'rainforest_eagle', 'macaddress': 'D8D5B9*'}, {"domain": "radiotherm", "hostname": "thermostat*", "macaddress": "5CDAD4*"},
{'domain': 'ring', 'hostname': 'ring*', 'macaddress': '0CAE7D*'}, {"domain": "radiotherm", "registered_devices": True},
{'domain': 'roomba', 'hostname': 'irobot-*', 'macaddress': '501479*'}, {"domain": "rainforest_eagle", "macaddress": "D8D5B9*"},
{'domain': 'roomba', 'hostname': 'roomba-*', 'macaddress': '80A589*'}, {"domain": "ring", "hostname": "ring*", "macaddress": "0CAE7D*"},
{'domain': 'roomba', 'hostname': 'roomba-*', 'macaddress': 'DCF505*'}, {"domain": "roomba", "hostname": "irobot-*", "macaddress": "501479*"},
{'domain': 'samsungtv', 'registered_devices': True}, {"domain": "roomba", "hostname": "roomba-*", "macaddress": "80A589*"},
{'domain': 'samsungtv', 'hostname': 'tizen*'}, {"domain": "roomba", "hostname": "roomba-*", "macaddress": "DCF505*"},
{'domain': 'samsungtv', 'macaddress': '4844F7*'}, {"domain": "samsungtv", "registered_devices": True},
{'domain': 'samsungtv', 'macaddress': '606BBD*'}, {"domain": "samsungtv", "hostname": "tizen*"},
{'domain': 'samsungtv', 'macaddress': '641CB0*'}, {"domain": "samsungtv", "macaddress": "4844F7*"},
{'domain': 'samsungtv', 'macaddress': '8CC8CD*'}, {"domain": "samsungtv", "macaddress": "606BBD*"},
{'domain': 'samsungtv', 'macaddress': '8CEA48*'}, {"domain": "samsungtv", "macaddress": "641CB0*"},
{'domain': 'samsungtv', 'macaddress': 'F47B5E*'}, {"domain": "samsungtv", "macaddress": "8CC8CD*"},
{'domain': 'screenlogic', 'registered_devices': True}, {"domain": "samsungtv", "macaddress": "8CEA48*"},
{'domain': 'screenlogic', 'hostname': 'pentair*', 'macaddress': '00C033*'}, {"domain": "samsungtv", "macaddress": "F47B5E*"},
{'domain': 'sense', 'hostname': 'sense-*', 'macaddress': '009D6B*'}, {"domain": "screenlogic", "registered_devices": True},
{'domain': 'sense', 'hostname': 'sense-*', 'macaddress': 'DCEFCA*'}, {"domain": "screenlogic", "hostname": "pentair*", "macaddress": "00C033*"},
{'domain': 'sense', 'hostname': 'sense-*', 'macaddress': 'A4D578*'}, {"domain": "sense", "hostname": "sense-*", "macaddress": "009D6B*"},
{'domain': 'senseme', 'registered_devices': True}, {"domain": "sense", "hostname": "sense-*", "macaddress": "DCEFCA*"},
{'domain': 'senseme', 'macaddress': '20F85E*'}, {"domain": "sense", "hostname": "sense-*", "macaddress": "A4D578*"},
{'domain': 'sensibo', 'hostname': 'sensibo*'}, {"domain": "senseme", "registered_devices": True},
{'domain': 'simplisafe', 'hostname': 'simplisafe*', 'macaddress': '30AEA4*'}, {"domain": "senseme", "macaddress": "20F85E*"},
{'domain': 'sleepiq', 'macaddress': '64DBA0*'}, {"domain": "sensibo", "hostname": "sensibo*"},
{'domain': 'smartthings', 'hostname': 'st*', 'macaddress': '24FD5B*'}, {"domain": "simplisafe", "hostname": "simplisafe*", "macaddress": "30AEA4*"},
{'domain': 'smartthings', 'hostname': 'smartthings*', 'macaddress': '24FD5B*'}, {"domain": "sleepiq", "macaddress": "64DBA0*"},
{'domain': 'smartthings', 'hostname': 'hub*', 'macaddress': '24FD5B*'}, {"domain": "smartthings", "hostname": "st*", "macaddress": "24FD5B*"},
{'domain': 'smartthings', 'hostname': 'hub*', 'macaddress': 'D052A8*'}, {"domain": "smartthings", "hostname": "smartthings*", "macaddress": "24FD5B*"},
{'domain': 'smartthings', 'hostname': 'hub*', 'macaddress': '286D97*'}, {"domain": "smartthings", "hostname": "hub*", "macaddress": "24FD5B*"},
{'domain': 'solaredge', 'hostname': 'target', 'macaddress': '002702*'}, {"domain": "smartthings", "hostname": "hub*", "macaddress": "D052A8*"},
{'domain': 'somfy_mylink', 'hostname': 'somfy_*', 'macaddress': 'B8B7F1*'}, {"domain": "smartthings", "hostname": "hub*", "macaddress": "286D97*"},
{'domain': 'squeezebox', 'hostname': 'squeezebox*', 'macaddress': '000420*'}, {"domain": "solaredge", "hostname": "target", "macaddress": "002702*"},
{'domain': 'steamist', 'registered_devices': True}, {"domain": "somfy_mylink", "hostname": "somfy_*", "macaddress": "B8B7F1*"},
{'domain': 'steamist', 'hostname': 'my[45]50*', 'macaddress': '001E0C*'}, {"domain": "squeezebox", "hostname": "squeezebox*", "macaddress": "000420*"},
{'domain': 'tado', 'hostname': 'tado*'}, {"domain": "steamist", "registered_devices": True},
{'domain': 'tesla_wall_connector', {"domain": "steamist", "macaddress": "001E0C*", "hostname": "my[45]50*"},
'hostname': 'teslawallconnector_*', {"domain": "tado", "hostname": "tado*"},
'macaddress': 'DC44271*'}, {
{'domain': 'tesla_wall_connector', "domain": "tesla_wall_connector",
'hostname': 'teslawallconnector_*', "hostname": "teslawallconnector_*",
'macaddress': '98ED5C*'}, "macaddress": "DC44271*",
{'domain': 'tesla_wall_connector', },
'hostname': 'teslawallconnector_*', {
'macaddress': '4CFCAA*'}, "domain": "tesla_wall_connector",
{'domain': 'tolo', 'hostname': 'usr-tcp232-ed2'}, "hostname": "teslawallconnector_*",
{'domain': 'toon', 'hostname': 'eneco-*', 'macaddress': '74C63B*'}, "macaddress": "98ED5C*",
{'domain': 'tplink', 'registered_devices': True}, },
{'domain': 'tplink', 'hostname': 'es*', 'macaddress': '54AF97*'}, {
{'domain': 'tplink', 'hostname': 'ep*', 'macaddress': 'E848B8*'}, "domain": "tesla_wall_connector",
{'domain': 'tplink', 'hostname': 'ep*', 'macaddress': '003192*'}, "hostname": "teslawallconnector_*",
{'domain': 'tplink', 'hostname': 'hs*', 'macaddress': '1C3BF3*'}, "macaddress": "4CFCAA*",
{'domain': 'tplink', 'hostname': 'hs*', 'macaddress': '50C7BF*'}, },
{'domain': 'tplink', 'hostname': 'hs*', 'macaddress': '68FF7B*'}, {"domain": "tolo", "hostname": "usr-tcp232-ed2"},
{'domain': 'tplink', 'hostname': 'hs*', 'macaddress': '98DAC4*'}, {"domain": "toon", "hostname": "eneco-*", "macaddress": "74C63B*"},
{'domain': 'tplink', 'hostname': 'hs*', 'macaddress': 'B09575*'}, {"domain": "tplink", "registered_devices": True},
{'domain': 'tplink', 'hostname': 'hs*', 'macaddress': 'C006C3*'}, {"domain": "tplink", "hostname": "es*", "macaddress": "54AF97*"},
{'domain': 'tplink', 'hostname': 'lb*', 'macaddress': '1C3BF3*'}, {"domain": "tplink", "hostname": "ep*", "macaddress": "E848B8*"},
{'domain': 'tplink', 'hostname': 'lb*', 'macaddress': '50C7BF*'}, {"domain": "tplink", "hostname": "ep*", "macaddress": "003192*"},
{'domain': 'tplink', 'hostname': 'lb*', 'macaddress': '68FF7B*'}, {"domain": "tplink", "hostname": "hs*", "macaddress": "1C3BF3*"},
{'domain': 'tplink', 'hostname': 'lb*', 'macaddress': '98DAC4*'}, {"domain": "tplink", "hostname": "hs*", "macaddress": "50C7BF*"},
{'domain': 'tplink', 'hostname': 'lb*', 'macaddress': 'B09575*'}, {"domain": "tplink", "hostname": "hs*", "macaddress": "68FF7B*"},
{'domain': 'tplink', 'hostname': 'k[lp]*', 'macaddress': '60A4B7*'}, {"domain": "tplink", "hostname": "hs*", "macaddress": "98DAC4*"},
{'domain': 'tplink', 'hostname': 'k[lp]*', 'macaddress': '005F67*'}, {"domain": "tplink", "hostname": "hs*", "macaddress": "B09575*"},
{'domain': 'tplink', 'hostname': 'k[lp]*', 'macaddress': '1027F5*'}, {"domain": "tplink", "hostname": "hs*", "macaddress": "C006C3*"},
{'domain': 'tplink', 'hostname': 'k[lp]*', 'macaddress': 'B0A7B9*'}, {"domain": "tplink", "hostname": "lb*", "macaddress": "1C3BF3*"},
{'domain': 'tplink', 'hostname': 'k[lp]*', 'macaddress': '403F8C*'}, {"domain": "tplink", "hostname": "lb*", "macaddress": "50C7BF*"},
{'domain': 'tplink', 'hostname': 'k[lp]*', 'macaddress': 'C0C9E3*'}, {"domain": "tplink", "hostname": "lb*", "macaddress": "68FF7B*"},
{'domain': 'tplink', 'hostname': 'k[lp]*', 'macaddress': '909A4A*'}, {"domain": "tplink", "hostname": "lb*", "macaddress": "98DAC4*"},
{'domain': 'tplink', 'hostname': 'k[lp]*', 'macaddress': 'E848B8*'}, {"domain": "tplink", "hostname": "lb*", "macaddress": "B09575*"},
{'domain': 'tplink', 'hostname': 'k[lp]*', 'macaddress': '003192*'}, {"domain": "tplink", "hostname": "k[lp]*", "macaddress": "60A4B7*"},
{'domain': 'tplink', 'hostname': 'k[lp]*', 'macaddress': '1C3BF3*'}, {"domain": "tplink", "hostname": "k[lp]*", "macaddress": "005F67*"},
{'domain': 'tplink', 'hostname': 'k[lp]*', 'macaddress': '50C7BF*'}, {"domain": "tplink", "hostname": "k[lp]*", "macaddress": "1027F5*"},
{'domain': 'tplink', 'hostname': 'k[lp]*', 'macaddress': '68FF7B*'}, {"domain": "tplink", "hostname": "k[lp]*", "macaddress": "B0A7B9*"},
{'domain': 'tplink', 'hostname': 'k[lp]*', 'macaddress': '98DAC4*'}, {"domain": "tplink", "hostname": "k[lp]*", "macaddress": "403F8C*"},
{'domain': 'tplink', 'hostname': 'k[lp]*', 'macaddress': 'B09575*'}, {"domain": "tplink", "hostname": "k[lp]*", "macaddress": "C0C9E3*"},
{'domain': 'tplink', 'hostname': 'k[lp]*', 'macaddress': 'C006C3*'}, {"domain": "tplink", "hostname": "k[lp]*", "macaddress": "909A4A*"},
{'domain': 'tplink', 'hostname': 'k[lp]*', 'macaddress': '6C5AB0*'}, {"domain": "tplink", "hostname": "k[lp]*", "macaddress": "E848B8*"},
{'domain': 'tuya', 'macaddress': '105A17*'}, {"domain": "tplink", "hostname": "k[lp]*", "macaddress": "003192*"},
{'domain': 'tuya', 'macaddress': '10D561*'}, {"domain": "tplink", "hostname": "k[lp]*", "macaddress": "1C3BF3*"},
{'domain': 'tuya', 'macaddress': '1869D8*'}, {"domain": "tplink", "hostname": "k[lp]*", "macaddress": "50C7BF*"},
{'domain': 'tuya', 'macaddress': '381F8D*'}, {"domain": "tplink", "hostname": "k[lp]*", "macaddress": "68FF7B*"},
{'domain': 'tuya', 'macaddress': '508A06*'}, {"domain": "tplink", "hostname": "k[lp]*", "macaddress": "98DAC4*"},
{'domain': 'tuya', 'macaddress': '68572D*'}, {"domain": "tplink", "hostname": "k[lp]*", "macaddress": "B09575*"},
{'domain': 'tuya', 'macaddress': '708976*'}, {"domain": "tplink", "hostname": "k[lp]*", "macaddress": "C006C3*"},
{'domain': 'tuya', 'macaddress': '7CF666*'}, {"domain": "tplink", "hostname": "k[lp]*", "macaddress": "6C5AB0*"},
{'domain': 'tuya', 'macaddress': '84E342*'}, {"domain": "tuya", "macaddress": "105A17*"},
{'domain': 'tuya', 'macaddress': 'D4A651*'}, {"domain": "tuya", "macaddress": "10D561*"},
{'domain': 'tuya', 'macaddress': 'D81F12*'}, {"domain": "tuya", "macaddress": "1869D8*"},
{'domain': 'twinkly', 'hostname': 'twinkly_*'}, {"domain": "tuya", "macaddress": "381F8D*"},
{'domain': 'unifiprotect', 'macaddress': 'B4FBE4*'}, {"domain": "tuya", "macaddress": "508A06*"},
{'domain': 'unifiprotect', 'macaddress': '802AA8*'}, {"domain": "tuya", "macaddress": "68572D*"},
{'domain': 'unifiprotect', 'macaddress': 'F09FC2*'}, {"domain": "tuya", "macaddress": "708976*"},
{'domain': 'unifiprotect', 'macaddress': '68D79A*'}, {"domain": "tuya", "macaddress": "7CF666*"},
{'domain': 'unifiprotect', 'macaddress': '18E829*'}, {"domain": "tuya", "macaddress": "84E342*"},
{'domain': 'unifiprotect', 'macaddress': '245A4C*'}, {"domain": "tuya", "macaddress": "D4A651*"},
{'domain': 'unifiprotect', 'macaddress': '784558*'}, {"domain": "tuya", "macaddress": "D81F12*"},
{'domain': 'unifiprotect', 'macaddress': 'E063DA*'}, {"domain": "twinkly", "hostname": "twinkly_*"},
{'domain': 'unifiprotect', 'macaddress': '265A4C*'}, {"domain": "unifiprotect", "macaddress": "B4FBE4*"},
{'domain': 'unifiprotect', 'macaddress': '74ACB9*'}, {"domain": "unifiprotect", "macaddress": "802AA8*"},
{'domain': 'verisure', 'macaddress': '0023C1*'}, {"domain": "unifiprotect", "macaddress": "F09FC2*"},
{'domain': 'vicare', 'macaddress': 'B87424*'}, {"domain": "unifiprotect", "macaddress": "68D79A*"},
{'domain': 'wiz', 'registered_devices': True}, {"domain": "unifiprotect", "macaddress": "18E829*"},
{'domain': 'wiz', 'macaddress': 'A8BB50*'}, {"domain": "unifiprotect", "macaddress": "245A4C*"},
{'domain': 'wiz', 'macaddress': 'D8A011*'}, {"domain": "unifiprotect", "macaddress": "784558*"},
{'domain': 'wiz', 'macaddress': '444F8E*'}, {"domain": "unifiprotect", "macaddress": "E063DA*"},
{'domain': 'wiz', 'macaddress': '6C2990*'}, {"domain": "unifiprotect", "macaddress": "265A4C*"},
{'domain': 'wiz', 'hostname': 'wiz_*'}, {"domain": "unifiprotect", "macaddress": "74ACB9*"},
{'domain': 'yeelight', 'hostname': 'yeelink-*'}] {"domain": "verisure", "macaddress": "0023C1*"},
{"domain": "vicare", "macaddress": "B87424*"},
{"domain": "wiz", "registered_devices": True},
{"domain": "wiz", "macaddress": "A8BB50*"},
{"domain": "wiz", "macaddress": "D8A011*"},
{"domain": "wiz", "macaddress": "444F8E*"},
{"domain": "wiz", "macaddress": "6C2990*"},
{"domain": "wiz", "hostname": "wiz_*"},
{"domain": "yeelight", "hostname": "yeelink-*"},
]

View file

@ -3,10 +3,8 @@
To update, run python3 -m script.hassfest To update, run python3 -m script.hassfest
""" """
# fmt: off
MQTT = { MQTT = {
"tasmota": [ "tasmota": [
"tasmota/discovery/#" "tasmota/discovery/#",
] ],
} }

View file

@ -3,324 +3,322 @@
To update, run python3 -m script.hassfest To update, run python3 -m script.hassfest
""" """
# fmt: off
SSDP = { SSDP = {
"arcam_fmj": [ "arcam_fmj": [
{ {
"deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1", "deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1",
"manufacturer": "ARCAM" "manufacturer": "ARCAM",
} },
], ],
"axis": [ "axis": [
{ {
"manufacturer": "AXIS" "manufacturer": "AXIS",
} },
], ],
"control4": [ "control4": [
{ {
"st": "c4:director" "st": "c4:director",
} },
], ],
"deconz": [ "deconz": [
{ {
"manufacturer": "Royal Philips Electronics", "manufacturer": "Royal Philips Electronics",
"manufacturerURL": "http://www.dresden-elektronik.de" "manufacturerURL": "http://www.dresden-elektronik.de",
} },
], ],
"denonavr": [ "denonavr": [
{ {
"deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1", "deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1",
"manufacturer": "Denon" "manufacturer": "Denon",
}, },
{ {
"deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1", "deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1",
"manufacturer": "DENON" "manufacturer": "DENON",
}, },
{ {
"deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1", "deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1",
"manufacturer": "DENON PROFESSIONAL" "manufacturer": "DENON PROFESSIONAL",
}, },
{ {
"deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1", "deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1",
"manufacturer": "Marantz" "manufacturer": "Marantz",
}, },
{ {
"deviceType": "urn:schemas-upnp-org:device:MediaServer:1", "deviceType": "urn:schemas-upnp-org:device:MediaServer:1",
"manufacturer": "Denon" "manufacturer": "Denon",
}, },
{ {
"deviceType": "urn:schemas-upnp-org:device:MediaServer:1", "deviceType": "urn:schemas-upnp-org:device:MediaServer:1",
"manufacturer": "DENON" "manufacturer": "DENON",
}, },
{ {
"deviceType": "urn:schemas-upnp-org:device:MediaServer:1", "deviceType": "urn:schemas-upnp-org:device:MediaServer:1",
"manufacturer": "DENON PROFESSIONAL" "manufacturer": "DENON PROFESSIONAL",
}, },
{ {
"deviceType": "urn:schemas-upnp-org:device:MediaServer:1", "deviceType": "urn:schemas-upnp-org:device:MediaServer:1",
"manufacturer": "Marantz" "manufacturer": "Marantz",
}, },
{ {
"deviceType": "urn:schemas-denon-com:device:AiosDevice:1", "deviceType": "urn:schemas-denon-com:device:AiosDevice:1",
"manufacturer": "Denon" "manufacturer": "Denon",
}, },
{ {
"deviceType": "urn:schemas-denon-com:device:AiosDevice:1", "deviceType": "urn:schemas-denon-com:device:AiosDevice:1",
"manufacturer": "DENON" "manufacturer": "DENON",
}, },
{ {
"deviceType": "urn:schemas-denon-com:device:AiosDevice:1", "deviceType": "urn:schemas-denon-com:device:AiosDevice:1",
"manufacturer": "DENON PROFESSIONAL" "manufacturer": "DENON PROFESSIONAL",
}, },
{ {
"deviceType": "urn:schemas-denon-com:device:AiosDevice:1", "deviceType": "urn:schemas-denon-com:device:AiosDevice:1",
"manufacturer": "Marantz" "manufacturer": "Marantz",
} },
], ],
"directv": [ "directv": [
{ {
"deviceType": "urn:schemas-upnp-org:device:MediaServer:1", "deviceType": "urn:schemas-upnp-org:device:MediaServer:1",
"manufacturer": "DIRECTV" "manufacturer": "DIRECTV",
} },
], ],
"dlna_dmr": [ "dlna_dmr": [
{ {
"deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1", "deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1",
"st": "urn:schemas-upnp-org:device:MediaRenderer:1" "st": "urn:schemas-upnp-org:device:MediaRenderer:1",
}, },
{ {
"deviceType": "urn:schemas-upnp-org:device:MediaRenderer:2", "deviceType": "urn:schemas-upnp-org:device:MediaRenderer:2",
"st": "urn:schemas-upnp-org:device:MediaRenderer:2" "st": "urn:schemas-upnp-org:device:MediaRenderer:2",
}, },
{ {
"deviceType": "urn:schemas-upnp-org:device:MediaRenderer:3", "deviceType": "urn:schemas-upnp-org:device:MediaRenderer:3",
"st": "urn:schemas-upnp-org:device:MediaRenderer:3" "st": "urn:schemas-upnp-org:device:MediaRenderer:3",
} },
], ],
"dlna_dms": [ "dlna_dms": [
{ {
"deviceType": "urn:schemas-upnp-org:device:MediaServer:1", "deviceType": "urn:schemas-upnp-org:device:MediaServer:1",
"st": "urn:schemas-upnp-org:device:MediaServer:1" "st": "urn:schemas-upnp-org:device:MediaServer:1",
}, },
{ {
"deviceType": "urn:schemas-upnp-org:device:MediaServer:2", "deviceType": "urn:schemas-upnp-org:device:MediaServer:2",
"st": "urn:schemas-upnp-org:device:MediaServer:2" "st": "urn:schemas-upnp-org:device:MediaServer:2",
}, },
{ {
"deviceType": "urn:schemas-upnp-org:device:MediaServer:3", "deviceType": "urn:schemas-upnp-org:device:MediaServer:3",
"st": "urn:schemas-upnp-org:device:MediaServer:3" "st": "urn:schemas-upnp-org:device:MediaServer:3",
}, },
{ {
"deviceType": "urn:schemas-upnp-org:device:MediaServer:4", "deviceType": "urn:schemas-upnp-org:device:MediaServer:4",
"st": "urn:schemas-upnp-org:device:MediaServer:4" "st": "urn:schemas-upnp-org:device:MediaServer:4",
} },
], ],
"fritz": [ "fritz": [
{ {
"st": "urn:schemas-upnp-org:device:fritzbox:1" "st": "urn:schemas-upnp-org:device:fritzbox:1",
} },
], ],
"fritzbox": [ "fritzbox": [
{ {
"st": "urn:schemas-upnp-org:device:fritzbox:1" "st": "urn:schemas-upnp-org:device:fritzbox:1",
} },
], ],
"harmony": [ "harmony": [
{ {
"deviceType": "urn:myharmony-com:device:harmony:1", "deviceType": "urn:myharmony-com:device:harmony:1",
"manufacturer": "Logitech" "manufacturer": "Logitech",
} },
], ],
"heos": [ "heos": [
{ {
"st": "urn:schemas-denon-com:device:ACT-Denon:1" "st": "urn:schemas-denon-com:device:ACT-Denon:1",
} },
], ],
"huawei_lte": [ "huawei_lte": [
{ {
"deviceType": "urn:schemas-upnp-org:device:InternetGatewayDevice:1", "deviceType": "urn:schemas-upnp-org:device:InternetGatewayDevice:1",
"manufacturer": "Huawei" "manufacturer": "Huawei",
} },
], ],
"hue": [ "hue": [
{ {
"manufacturer": "Royal Philips Electronics", "manufacturer": "Royal Philips Electronics",
"modelName": "Philips hue bridge 2012" "modelName": "Philips hue bridge 2012",
}, },
{ {
"manufacturer": "Royal Philips Electronics", "manufacturer": "Royal Philips Electronics",
"modelName": "Philips hue bridge 2015" "modelName": "Philips hue bridge 2015",
}, },
{ {
"manufacturer": "Signify", "manufacturer": "Signify",
"modelName": "Philips hue bridge 2015" "modelName": "Philips hue bridge 2015",
} },
], ],
"hyperion": [ "hyperion": [
{ {
"manufacturer": "Hyperion Open Source Ambient Lighting", "manufacturer": "Hyperion Open Source Ambient Lighting",
"st": "urn:hyperion-project.org:device:basic:1" "st": "urn:hyperion-project.org:device:basic:1",
} },
], ],
"isy994": [ "isy994": [
{ {
"deviceType": "urn:udi-com:device:X_Insteon_Lighting_Device:1", "deviceType": "urn:udi-com:device:X_Insteon_Lighting_Device:1",
"manufacturer": "Universal Devices Inc." "manufacturer": "Universal Devices Inc.",
} },
], ],
"kaleidescape": [ "kaleidescape": [
{ {
"deviceType": "schemas-upnp-org:device:Basic:1", "deviceType": "schemas-upnp-org:device:Basic:1",
"manufacturer": "Kaleidescape, Inc." "manufacturer": "Kaleidescape, Inc.",
} },
], ],
"keenetic_ndms2": [ "keenetic_ndms2": [
{ {
"deviceType": "urn:schemas-upnp-org:device:InternetGatewayDevice:1", "deviceType": "urn:schemas-upnp-org:device:InternetGatewayDevice:1",
"manufacturer": "Keenetic Ltd." "manufacturer": "Keenetic Ltd.",
}, },
{ {
"deviceType": "urn:schemas-upnp-org:device:InternetGatewayDevice:1", "deviceType": "urn:schemas-upnp-org:device:InternetGatewayDevice:1",
"manufacturer": "ZyXEL Communications Corp." "manufacturer": "ZyXEL Communications Corp.",
} },
], ],
"konnected": [ "konnected": [
{ {
"manufacturer": "konnected.io" "manufacturer": "konnected.io",
} },
], ],
"lametric": [ "lametric": [
{ {
"deviceType": "urn:schemas-upnp-org:device:LaMetric:1" "deviceType": "urn:schemas-upnp-org:device:LaMetric:1",
} },
], ],
"nanoleaf": [ "nanoleaf": [
{ {
"st": "Nanoleaf_aurora:light" "st": "Nanoleaf_aurora:light",
}, },
{ {
"st": "nanoleaf:nl29" "st": "nanoleaf:nl29",
}, },
{ {
"st": "nanoleaf:nl42" "st": "nanoleaf:nl42",
}, },
{ {
"st": "nanoleaf:nl52" "st": "nanoleaf:nl52",
} },
], ],
"netgear": [ "netgear": [
{ {
"deviceType": "urn:schemas-upnp-org:device:InternetGatewayDevice:1", "deviceType": "urn:schemas-upnp-org:device:InternetGatewayDevice:1",
"manufacturer": "NETGEAR, Inc." "manufacturer": "NETGEAR, Inc.",
} },
], ],
"octoprint": [ "octoprint": [
{ {
"deviceType": "urn:schemas-upnp-org:device:Basic:1", "deviceType": "urn:schemas-upnp-org:device:Basic:1",
"manufacturer": "The OctoPrint Project" "manufacturer": "The OctoPrint Project",
} },
], ],
"roku": [ "roku": [
{ {
"deviceType": "urn:roku-com:device:player:1-0", "deviceType": "urn:roku-com:device:player:1-0",
"manufacturer": "Roku", "manufacturer": "Roku",
"st": "roku:ecp" "st": "roku:ecp",
} },
], ],
"samsungtv": [ "samsungtv": [
{ {
"st": "urn:samsung.com:device:RemoteControlReceiver:1" "st": "urn:samsung.com:device:RemoteControlReceiver:1",
}, },
{ {
"st": "urn:samsung.com:service:MainTVAgent2:1" "st": "urn:samsung.com:service:MainTVAgent2:1",
}, },
{ {
"manufacturer": "Samsung", "manufacturer": "Samsung",
"st": "urn:schemas-upnp-org:service:RenderingControl:1" "st": "urn:schemas-upnp-org:service:RenderingControl:1",
}, },
{ {
"manufacturer": "Samsung Electronics", "manufacturer": "Samsung Electronics",
"st": "urn:schemas-upnp-org:service:RenderingControl:1" "st": "urn:schemas-upnp-org:service:RenderingControl:1",
} },
], ],
"songpal": [ "songpal": [
{ {
"manufacturer": "Sony Corporation", "manufacturer": "Sony Corporation",
"st": "urn:schemas-sony-com:service:ScalarWebAPI:1" "st": "urn:schemas-sony-com:service:ScalarWebAPI:1",
} },
], ],
"sonos": [ "sonos": [
{ {
"st": "urn:schemas-upnp-org:device:ZonePlayer:1" "st": "urn:schemas-upnp-org:device:ZonePlayer:1",
} },
], ],
"syncthru": [ "syncthru": [
{ {
"deviceType": "urn:schemas-upnp-org:device:Printer:1", "deviceType": "urn:schemas-upnp-org:device:Printer:1",
"manufacturer": "Samsung Electronics" "manufacturer": "Samsung Electronics",
} },
], ],
"synology_dsm": [ "synology_dsm": [
{ {
"deviceType": "urn:schemas-upnp-org:device:Basic:1", "deviceType": "urn:schemas-upnp-org:device:Basic:1",
"manufacturer": "Synology" "manufacturer": "Synology",
} },
], ],
"unifi": [ "unifi": [
{ {
"manufacturer": "Ubiquiti Networks", "manufacturer": "Ubiquiti Networks",
"modelDescription": "UniFi Dream Machine" "modelDescription": "UniFi Dream Machine",
}, },
{ {
"manufacturer": "Ubiquiti Networks", "manufacturer": "Ubiquiti Networks",
"modelDescription": "UniFi Dream Machine Pro" "modelDescription": "UniFi Dream Machine Pro",
}, },
{ {
"manufacturer": "Ubiquiti Networks", "manufacturer": "Ubiquiti Networks",
"modelDescription": "UniFi Dream Machine SE" "modelDescription": "UniFi Dream Machine SE",
} },
], ],
"unifiprotect": [ "unifiprotect": [
{ {
"manufacturer": "Ubiquiti Networks", "manufacturer": "Ubiquiti Networks",
"modelDescription": "UniFi Dream Machine" "modelDescription": "UniFi Dream Machine",
}, },
{ {
"manufacturer": "Ubiquiti Networks", "manufacturer": "Ubiquiti Networks",
"modelDescription": "UniFi Dream Machine Pro" "modelDescription": "UniFi Dream Machine Pro",
}, },
{ {
"manufacturer": "Ubiquiti Networks", "manufacturer": "Ubiquiti Networks",
"modelDescription": "UniFi Dream Machine SE" "modelDescription": "UniFi Dream Machine SE",
} },
], ],
"upnp": [ "upnp": [
{ {
"st": "urn:schemas-upnp-org:device:InternetGatewayDevice:1" "st": "urn:schemas-upnp-org:device:InternetGatewayDevice:1",
}, },
{ {
"st": "urn:schemas-upnp-org:device:InternetGatewayDevice:2" "st": "urn:schemas-upnp-org:device:InternetGatewayDevice:2",
} },
], ],
"webostv": [ "webostv": [
{ {
"st": "urn:lge-com:service:webos-second-screen:1" "st": "urn:lge-com:service:webos-second-screen:1",
} },
], ],
"wemo": [ "wemo": [
{ {
"manufacturer": "Belkin International Inc." "manufacturer": "Belkin International Inc.",
} },
], ],
"wilight": [ "wilight": [
{ {
"manufacturer": "All Automacao Ltda" "manufacturer": "All Automacao Ltda",
} },
], ],
"yamaha_musiccast": [ "yamaha_musiccast": [
{ {
"manufacturer": "Yamaha Corporation" "manufacturer": "Yamaha Corporation",
} },
] ],
} }

View file

@ -3,9 +3,7 @@
To update, run python3 -m script.hassfest To update, run python3 -m script.hassfest
""" """
# fmt: off HAS_SUPPORTED_BRANDS = [
HAS_SUPPORTED_BRANDS = (
"denonavr", "denonavr",
"hunterdouglas_powerview", "hunterdouglas_powerview",
"inkbird", "inkbird",
@ -15,5 +13,5 @@ HAS_SUPPORTED_BRANDS = (
"thermobeacon", "thermobeacon",
"wemo", "wemo",
"yalexs_ble", "yalexs_ble",
"zwave_js" "zwave_js",
) ]

View file

@ -3,113 +3,111 @@
To update, run python3 -m script.hassfest To update, run python3 -m script.hassfest
""" """
# fmt: off
USB = [ USB = [
{ {
"domain": "insteon", "domain": "insteon",
"vid": "10BF" "vid": "10BF",
}, },
{ {
"domain": "modem_callerid", "domain": "modem_callerid",
"vid": "0572", "vid": "0572",
"pid": "1340" "pid": "1340",
}, },
{ {
"domain": "velbus", "domain": "velbus",
"vid": "10CF", "vid": "10CF",
"pid": "0B1B" "pid": "0B1B",
}, },
{ {
"domain": "velbus", "domain": "velbus",
"vid": "10CF", "vid": "10CF",
"pid": "0516" "pid": "0516",
}, },
{ {
"domain": "velbus", "domain": "velbus",
"vid": "10CF", "vid": "10CF",
"pid": "0517" "pid": "0517",
}, },
{ {
"domain": "velbus", "domain": "velbus",
"vid": "10CF", "vid": "10CF",
"pid": "0518" "pid": "0518",
}, },
{ {
"domain": "zha", "domain": "zha",
"vid": "10C4", "vid": "10C4",
"pid": "EA60", "pid": "EA60",
"description": "*2652*" "description": "*2652*",
}, },
{ {
"domain": "zha", "domain": "zha",
"vid": "1A86", "vid": "1A86",
"pid": "55D4", "pid": "55D4",
"description": "*sonoff*plus*" "description": "*sonoff*plus*",
}, },
{ {
"domain": "zha", "domain": "zha",
"vid": "10C4", "vid": "10C4",
"pid": "EA60", "pid": "EA60",
"description": "*sonoff*plus*" "description": "*sonoff*plus*",
}, },
{ {
"domain": "zha", "domain": "zha",
"vid": "10C4", "vid": "10C4",
"pid": "EA60", "pid": "EA60",
"description": "*tubeszb*" "description": "*tubeszb*",
}, },
{ {
"domain": "zha", "domain": "zha",
"vid": "1A86", "vid": "1A86",
"pid": "7523", "pid": "7523",
"description": "*tubeszb*" "description": "*tubeszb*",
}, },
{ {
"domain": "zha", "domain": "zha",
"vid": "1A86", "vid": "1A86",
"pid": "7523", "pid": "7523",
"description": "*zigstar*" "description": "*zigstar*",
}, },
{ {
"domain": "zha", "domain": "zha",
"vid": "1CF1", "vid": "1CF1",
"pid": "0030", "pid": "0030",
"description": "*conbee*" "description": "*conbee*",
}, },
{ {
"domain": "zha", "domain": "zha",
"vid": "10C4", "vid": "10C4",
"pid": "8A2A", "pid": "8A2A",
"description": "*zigbee*" "description": "*zigbee*",
}, },
{ {
"domain": "zha", "domain": "zha",
"vid": "0403", "vid": "0403",
"pid": "6015", "pid": "6015",
"description": "*zigate*" "description": "*zigate*",
}, },
{ {
"domain": "zha", "domain": "zha",
"vid": "10C4", "vid": "10C4",
"pid": "EA60", "pid": "EA60",
"description": "*zigate*" "description": "*zigate*",
}, },
{ {
"domain": "zha", "domain": "zha",
"vid": "10C4", "vid": "10C4",
"pid": "8B34", "pid": "8B34",
"description": "*bv 2010/10*" "description": "*bv 2010/10*",
}, },
{ {
"domain": "zwave_js", "domain": "zwave_js",
"vid": "0658", "vid": "0658",
"pid": "0200" "pid": "0200",
}, },
{ {
"domain": "zwave_js", "domain": "zwave_js",
"vid": "10C4", "vid": "10C4",
"pid": "8A2A", "pid": "8A2A",
"description": "*z-wave*" "description": "*z-wave*",
} },
] ]

View file

@ -3,425 +3,423 @@
To update, run python3 -m script.hassfest To update, run python3 -m script.hassfest
""" """
# fmt: off
ZEROCONF = { ZEROCONF = {
"_Volumio._tcp.local.": [ "_Volumio._tcp.local.": [
{ {
"domain": "volumio" "domain": "volumio",
} },
], ],
"_airplay._tcp.local.": [ "_airplay._tcp.local.": [
{ {
"domain": "apple_tv", "domain": "apple_tv",
"properties": { "properties": {
"model": "appletv*" "model": "appletv*",
} },
}, },
{ {
"domain": "apple_tv", "domain": "apple_tv",
"properties": { "properties": {
"model": "audioaccessory*" "model": "audioaccessory*",
} },
}, },
{ {
"domain": "apple_tv", "domain": "apple_tv",
"properties": { "properties": {
"am": "airport*" "am": "airport*",
} },
}, },
{ {
"domain": "samsungtv", "domain": "samsungtv",
"properties": { "properties": {
"manufacturer": "samsung*" "manufacturer": "samsung*",
} },
} },
], ],
"_airport._tcp.local.": [ "_airport._tcp.local.": [
{ {
"domain": "apple_tv" "domain": "apple_tv",
} },
], ],
"_api._tcp.local.": [ "_api._tcp.local.": [
{ {
"domain": "baf", "domain": "baf",
"properties": { "properties": {
"model": "haiku*" "model": "haiku*",
} },
}, },
{ {
"domain": "baf", "domain": "baf",
"properties": { "properties": {
"model": "i6*" "model": "i6*",
} },
} },
], ],
"_api._udp.local.": [ "_api._udp.local.": [
{ {
"domain": "guardian" "domain": "guardian",
} },
], ],
"_appletv-v2._tcp.local.": [ "_appletv-v2._tcp.local.": [
{ {
"domain": "apple_tv" "domain": "apple_tv",
} },
], ],
"_axis-video._tcp.local.": [ "_axis-video._tcp.local.": [
{ {
"domain": "axis", "domain": "axis",
"properties": { "properties": {
"macaddress": "00408c*" "macaddress": "00408c*",
} },
}, },
{ {
"domain": "axis", "domain": "axis",
"properties": { "properties": {
"macaddress": "accc8e*" "macaddress": "accc8e*",
} },
}, },
{ {
"domain": "axis", "domain": "axis",
"properties": { "properties": {
"macaddress": "b8a44f*" "macaddress": "b8a44f*",
} },
}, },
{ {
"domain": "doorbird", "domain": "doorbird",
"properties": { "properties": {
"macaddress": "1ccae3*" "macaddress": "1ccae3*",
} },
} },
], ],
"_bond._tcp.local.": [ "_bond._tcp.local.": [
{ {
"domain": "bond" "domain": "bond",
} },
], ],
"_companion-link._tcp.local.": [ "_companion-link._tcp.local.": [
{ {
"domain": "apple_tv" "domain": "apple_tv",
} },
], ],
"_daap._tcp.local.": [ "_daap._tcp.local.": [
{ {
"domain": "forked_daapd" "domain": "forked_daapd",
} },
], ],
"_dkapi._tcp.local.": [ "_dkapi._tcp.local.": [
{ {
"domain": "daikin" "domain": "daikin",
} },
], ],
"_dvl-deviceapi._tcp.local.": [ "_dvl-deviceapi._tcp.local.": [
{ {
"domain": "devolo_home_control" "domain": "devolo_home_control",
}, },
{ {
"domain": "devolo_home_network", "domain": "devolo_home_network",
"properties": { "properties": {
"MT": "*" "MT": "*",
} },
} },
], ],
"_easylink._tcp.local.": [ "_easylink._tcp.local.": [
{ {
"domain": "modern_forms", "domain": "modern_forms",
"name": "wac*" "name": "wac*",
} },
], ],
"_elg._tcp.local.": [ "_elg._tcp.local.": [
{ {
"domain": "elgato" "domain": "elgato",
} },
], ],
"_enphase-envoy._tcp.local.": [ "_enphase-envoy._tcp.local.": [
{ {
"domain": "enphase_envoy" "domain": "enphase_envoy",
} },
], ],
"_esphomelib._tcp.local.": [ "_esphomelib._tcp.local.": [
{ {
"domain": "esphome" "domain": "esphome",
}, },
{ {
"domain": "zha", "domain": "zha",
"name": "tube*" "name": "tube*",
} },
], ],
"_fbx-api._tcp.local.": [ "_fbx-api._tcp.local.": [
{ {
"domain": "freebox" "domain": "freebox",
} },
], ],
"_googlecast._tcp.local.": [ "_googlecast._tcp.local.": [
{ {
"domain": "cast" "domain": "cast",
} },
], ],
"_hap._tcp.local.": [ "_hap._tcp.local.": [
{ {
"domain": "homekit_controller" "domain": "homekit_controller",
}, },
{ {
"domain": "zwave_me", "domain": "zwave_me",
"name": "*z.wave-me*" "name": "*z.wave-me*",
} },
], ],
"_hap._udp.local.": [ "_hap._udp.local.": [
{ {
"domain": "homekit_controller" "domain": "homekit_controller",
} },
], ],
"_homekit._tcp.local.": [ "_homekit._tcp.local.": [
{ {
"domain": "homekit" "domain": "homekit",
} },
], ],
"_hscp._tcp.local.": [ "_hscp._tcp.local.": [
{ {
"domain": "apple_tv" "domain": "apple_tv",
} },
], ],
"_http._tcp.local.": [ "_http._tcp.local.": [
{ {
"domain": "awair", "domain": "awair",
"name": "awair*" "name": "awair*",
}, },
{ {
"domain": "bosch_shc", "domain": "bosch_shc",
"name": "bosch shc*" "name": "bosch shc*",
}, },
{ {
"domain": "nam", "domain": "nam",
"name": "nam-*" "name": "nam-*",
}, },
{ {
"domain": "nam", "domain": "nam",
"properties": { "properties": {
"manufacturer": "nettigo" "manufacturer": "nettigo",
} },
}, },
{ {
"domain": "pure_energie", "domain": "pure_energie",
"name": "smartbridge*" "name": "smartbridge*",
}, },
{ {
"domain": "rachio", "domain": "rachio",
"name": "rachio*" "name": "rachio*",
}, },
{ {
"domain": "rainmachine", "domain": "rainmachine",
"name": "rainmachine*" "name": "rainmachine*",
}, },
{ {
"domain": "shelly", "domain": "shelly",
"name": "shelly*" "name": "shelly*",
} },
], ],
"_hue._tcp.local.": [ "_hue._tcp.local.": [
{ {
"domain": "hue" "domain": "hue",
} },
], ],
"_hwenergy._tcp.local.": [ "_hwenergy._tcp.local.": [
{ {
"domain": "homewizard" "domain": "homewizard",
} },
], ],
"_ipp._tcp.local.": [ "_ipp._tcp.local.": [
{ {
"domain": "ipp" "domain": "ipp",
} },
], ],
"_ipps._tcp.local.": [ "_ipps._tcp.local.": [
{ {
"domain": "ipp" "domain": "ipp",
} },
], ],
"_kizbox._tcp.local.": [ "_kizbox._tcp.local.": [
{ {
"domain": "overkiz", "domain": "overkiz",
"name": "gateway*" "name": "gateway*",
} },
], ],
"_leap._tcp.local.": [ "_leap._tcp.local.": [
{ {
"domain": "lutron_caseta" "domain": "lutron_caseta",
} },
], ],
"_lookin._tcp.local.": [ "_lookin._tcp.local.": [
{ {
"domain": "lookin" "domain": "lookin",
} },
], ],
"_mediaremotetv._tcp.local.": [ "_mediaremotetv._tcp.local.": [
{ {
"domain": "apple_tv" "domain": "apple_tv",
} },
], ],
"_miio._udp.local.": [ "_miio._udp.local.": [
{ {
"domain": "xiaomi_aqara" "domain": "xiaomi_aqara",
}, },
{ {
"domain": "xiaomi_miio" "domain": "xiaomi_miio",
}, },
{ {
"domain": "yeelight", "domain": "yeelight",
"name": "yeelink-*" "name": "yeelink-*",
} },
], ],
"_nanoleafapi._tcp.local.": [ "_nanoleafapi._tcp.local.": [
{ {
"domain": "nanoleaf" "domain": "nanoleaf",
} },
], ],
"_nanoleafms._tcp.local.": [ "_nanoleafms._tcp.local.": [
{ {
"domain": "nanoleaf" "domain": "nanoleaf",
} },
], ],
"_nut._tcp.local.": [ "_nut._tcp.local.": [
{ {
"domain": "nut" "domain": "nut",
} },
], ],
"_octoprint._tcp.local.": [ "_octoprint._tcp.local.": [
{ {
"domain": "octoprint" "domain": "octoprint",
} },
], ],
"_plexmediasvr._tcp.local.": [ "_plexmediasvr._tcp.local.": [
{ {
"domain": "plex" "domain": "plex",
} },
], ],
"_plugwise._tcp.local.": [ "_plugwise._tcp.local.": [
{ {
"domain": "plugwise" "domain": "plugwise",
} },
], ],
"_powerview._tcp.local.": [ "_powerview._tcp.local.": [
{ {
"domain": "hunterdouglas_powerview" "domain": "hunterdouglas_powerview",
} },
], ],
"_printer._tcp.local.": [ "_printer._tcp.local.": [
{ {
"domain": "brother", "domain": "brother",
"name": "brother*" "name": "brother*",
} },
], ],
"_raop._tcp.local.": [ "_raop._tcp.local.": [
{ {
"domain": "apple_tv", "domain": "apple_tv",
"properties": { "properties": {
"am": "appletv*" "am": "appletv*",
} },
}, },
{ {
"domain": "apple_tv", "domain": "apple_tv",
"properties": { "properties": {
"am": "audioaccessory*" "am": "audioaccessory*",
} },
}, },
{ {
"domain": "apple_tv", "domain": "apple_tv",
"properties": { "properties": {
"am": "airport*" "am": "airport*",
} },
} },
], ],
"_sideplay._tcp.local.": [ "_sideplay._tcp.local.": [
{ {
"domain": "ecobee", "domain": "ecobee",
"properties": { "properties": {
"mdl": "eb-*" "mdl": "eb-*",
} },
}, },
{ {
"domain": "ecobee", "domain": "ecobee",
"properties": { "properties": {
"mdl": "ecobee*" "mdl": "ecobee*",
} },
} },
], ],
"_sleep-proxy._udp.local.": [ "_sleep-proxy._udp.local.": [
{ {
"domain": "apple_tv" "domain": "apple_tv",
} },
], ],
"_sonos._tcp.local.": [ "_sonos._tcp.local.": [
{ {
"domain": "sonos" "domain": "sonos",
} },
], ],
"_soundtouch._tcp.local.": [ "_soundtouch._tcp.local.": [
{ {
"domain": "soundtouch" "domain": "soundtouch",
} },
], ],
"_spotify-connect._tcp.local.": [ "_spotify-connect._tcp.local.": [
{ {
"domain": "spotify" "domain": "spotify",
} },
], ],
"_ssh._tcp.local.": [ "_ssh._tcp.local.": [
{ {
"domain": "smappee", "domain": "smappee",
"name": "smappee1*" "name": "smappee1*",
}, },
{ {
"domain": "smappee", "domain": "smappee",
"name": "smappee2*" "name": "smappee2*",
}, },
{ {
"domain": "smappee", "domain": "smappee",
"name": "smappee50*" "name": "smappee50*",
} },
], ],
"_system-bridge._tcp.local.": [ "_system-bridge._tcp.local.": [
{ {
"domain": "system_bridge" "domain": "system_bridge",
} },
], ],
"_touch-able._tcp.local.": [ "_touch-able._tcp.local.": [
{ {
"domain": "apple_tv" "domain": "apple_tv",
} },
], ],
"_viziocast._tcp.local.": [ "_viziocast._tcp.local.": [
{ {
"domain": "vizio" "domain": "vizio",
} },
], ],
"_wled._tcp.local.": [ "_wled._tcp.local.": [
{ {
"domain": "wled" "domain": "wled",
} },
], ],
"_xbmc-jsonrpc-h._tcp.local.": [ "_xbmc-jsonrpc-h._tcp.local.": [
{ {
"domain": "kodi" "domain": "kodi",
} },
], ],
"_zigate-zigbee-gateway._tcp.local.": [ "_zigate-zigbee-gateway._tcp.local.": [
{ {
"domain": "zha", "domain": "zha",
"name": "*zigate*" "name": "*zigate*",
} },
], ],
"_zigstar_gw._tcp.local.": [ "_zigstar_gw._tcp.local.": [
{ {
"domain": "zha", "domain": "zha",
"name": "*zigstar*" "name": "*zigstar*",
} },
], ],
"_zwave-js-server._tcp.local.": [ "_zwave-js-server._tcp.local.": [
{ {
"domain": "zwave_js" "domain": "zwave_js",
} },
] ],
} }
HOMEKIT = { HOMEKIT = {
@ -483,5 +481,5 @@ HOMEKIT = {
"ecobee*": "ecobee", "ecobee*": "ecobee",
"iSmartGate": "gogogate2", "iSmartGate": "gogogate2",
"iZone": "izone", "iZone": "izone",
"tado": "tado" "tado": "tado",
} }

View file

@ -1,9 +1,10 @@
"""Generate application_credentials data.""" """Generate application_credentials data."""
from __future__ import annotations from __future__ import annotations
import json import black
from .model import Config, Integration from .model import Config, Integration
from .serializer import to_string
BASE = """ BASE = """
\"\"\"Automatically generated by hassfest. \"\"\"Automatically generated by hassfest.
@ -11,8 +12,6 @@ BASE = """
To update, run python3 -m script.hassfest To update, run python3 -m script.hassfest
\"\"\" \"\"\"
# fmt: off
APPLICATION_CREDENTIALS = {} APPLICATION_CREDENTIALS = {}
""".strip() """.strip()
@ -30,7 +29,7 @@ def generate_and_validate(integrations: dict[str, Integration], config: Config)
match_list.append(domain) match_list.append(domain)
return BASE.format(json.dumps(match_list, indent=4)) return black.format_str(BASE.format(to_string(match_list)), mode=black.Mode())
def validate(integrations: dict[str, Integration], config: Config) -> None: def validate(integrations: dict[str, Integration], config: Config) -> None:
@ -45,7 +44,7 @@ def validate(integrations: dict[str, Integration], config: Config) -> None:
if config.specific_integrations: if config.specific_integrations:
return return
if application_credentials_path.read_text(encoding="utf-8").strip() != content: if application_credentials_path.read_text(encoding="utf-8") != content:
config.add_error( config.add_error(
"application_credentials", "application_credentials",
"File application_credentials.py is not up to date. Run python3 -m script.hassfest", "File application_credentials.py is not up to date. Run python3 -m script.hassfest",
@ -59,5 +58,5 @@ def generate(integrations: dict[str, Integration], config: Config):
config.root / "homeassistant/generated/application_credentials.py" config.root / "homeassistant/generated/application_credentials.py"
) )
application_credentials_path.write_text( application_credentials_path.write_text(
f"{config.cache['application_credentials']}\n", encoding="utf-8" f"{config.cache['application_credentials']}", encoding="utf-8"
) )

View file

@ -1,9 +1,10 @@
"""Generate bluetooth file.""" """Generate bluetooth file."""
from __future__ import annotations from __future__ import annotations
import json import black
from .model import Config, Integration from .model import Config, Integration
from .serializer import to_string
BASE = """ BASE = """
\"\"\"Automatically generated by hassfest. \"\"\"Automatically generated by hassfest.
@ -12,8 +13,6 @@ To update, run python3 -m script.hassfest
\"\"\" \"\"\"
from __future__ import annotations from __future__ import annotations
# fmt: off
BLUETOOTH: list[dict[str, bool | str | int | list[int]]] = {} BLUETOOTH: list[dict[str, bool | str | int | list[int]]] = {}
""".strip() """.strip()
@ -36,11 +35,7 @@ def generate_and_validate(integrations: list[dict[str, str]]):
for entry in match_types: for entry in match_types:
match_list.append({"domain": domain, **entry}) match_list.append({"domain": domain, **entry})
return BASE.format( return black.format_str(BASE.format(to_string(match_list)), mode=black.Mode())
json.dumps(match_list, indent=4)
.replace('": true', '": True')
.replace('": false', '": False')
)
def validate(integrations: dict[str, Integration], config: Config): def validate(integrations: dict[str, Integration], config: Config):
@ -52,7 +47,7 @@ def validate(integrations: dict[str, Integration], config: Config):
return return
with open(str(bluetooth_path)) as fp: with open(str(bluetooth_path)) as fp:
current = fp.read().strip() current = fp.read()
if current != content: if current != content:
config.add_error( config.add_error(
"bluetooth", "bluetooth",
@ -66,4 +61,4 @@ def generate(integrations: dict[str, Integration], config: Config):
"""Generate bluetooth file.""" """Generate bluetooth file."""
bluetooth_path = config.root / "homeassistant/generated/bluetooth.py" bluetooth_path = config.root / "homeassistant/generated/bluetooth.py"
with open(str(bluetooth_path), "w") as fp: with open(str(bluetooth_path), "w") as fp:
fp.write(f"{config.cache['bluetooth']}\n") fp.write(f"{config.cache['bluetooth']}")

View file

@ -1,9 +1,10 @@
"""Generate config flow file.""" """Generate config flow file."""
from __future__ import annotations from __future__ import annotations
import json import black
from .model import Config, Integration from .model import Config, Integration
from .serializer import to_string
BASE = """ BASE = """
\"\"\"Automatically generated by hassfest. \"\"\"Automatically generated by hassfest.
@ -11,8 +12,6 @@ BASE = """
To update, run python3 -m script.hassfest To update, run python3 -m script.hassfest
\"\"\" \"\"\"
# fmt: off
FLOWS = {} FLOWS = {}
""".strip() """.strip()
@ -85,7 +84,7 @@ def generate_and_validate(integrations: dict[str, Integration], config: Config):
domains[integration.integration_type].append(domain) domains[integration.integration_type].append(domain)
return BASE.format(json.dumps(domains, indent=4)) return black.format_str(BASE.format(to_string(domains)), mode=black.Mode())
def validate(integrations: dict[str, Integration], config: Config): def validate(integrations: dict[str, Integration], config: Config):
@ -97,7 +96,7 @@ def validate(integrations: dict[str, Integration], config: Config):
return return
with open(str(config_flow_path)) as fp: with open(str(config_flow_path)) as fp:
if fp.read().strip() != content: if fp.read() != content:
config.add_error( config.add_error(
"config_flow", "config_flow",
"File config_flows.py is not up to date. " "File config_flows.py is not up to date. "
@ -111,4 +110,4 @@ def generate(integrations: dict[str, Integration], config: Config):
"""Generate config flow file.""" """Generate config flow file."""
config_flow_path = config.root / "homeassistant/generated/config_flows.py" config_flow_path = config.root / "homeassistant/generated/config_flows.py"
with open(str(config_flow_path), "w") as fp: with open(str(config_flow_path), "w") as fp:
fp.write(f"{config.cache['config_flow']}\n") fp.write(f"{config.cache['config_flow']}")

View file

@ -1,8 +1,7 @@
"""Generate dhcp file.""" """Generate dhcp file."""
from __future__ import annotations from __future__ import annotations
import pprint import black
import re
from .model import Config, Integration from .model import Config, Integration
@ -13,8 +12,6 @@ To update, run python3 -m script.hassfest
\"\"\" \"\"\"
from __future__ import annotations from __future__ import annotations
# fmt: off
DHCP: list[dict[str, str | bool]] = {} DHCP: list[dict[str, str | bool]] = {}
""".strip() """.strip()
@ -37,14 +34,7 @@ def generate_and_validate(integrations: list[dict[str, str]]):
for entry in match_types: for entry in match_types:
match_list.append({"domain": domain, **entry}) match_list.append({"domain": domain, **entry})
# JSON will format `True` as `true` return black.format_str(BASE.format(str(match_list)), mode=black.Mode())
# re.sub for flake8 E128
formatted = pprint.pformat(match_list)
formatted_aligned_continuation = re.sub(r"^\[\{", "[\n {", formatted)
formatted_align_indent = re.sub(
r"(?m)^ ", " ", formatted_aligned_continuation, flags=re.MULTILINE, count=0
)
return BASE.format(formatted_align_indent)
def validate(integrations: dict[str, Integration], config: Config): def validate(integrations: dict[str, Integration], config: Config):
@ -56,7 +46,7 @@ def validate(integrations: dict[str, Integration], config: Config):
return return
with open(str(dhcp_path)) as fp: with open(str(dhcp_path)) as fp:
current = fp.read().strip() current = fp.read()
if current != content: if current != content:
config.add_error( config.add_error(
"dhcp", "dhcp",
@ -70,4 +60,4 @@ def generate(integrations: dict[str, Integration], config: Config):
"""Generate dhcp file.""" """Generate dhcp file."""
dhcp_path = config.root / "homeassistant/generated/dhcp.py" dhcp_path = config.root / "homeassistant/generated/dhcp.py"
with open(str(dhcp_path), "w") as fp: with open(str(dhcp_path), "w") as fp:
fp.write(f"{config.cache['dhcp']}\n") fp.write(f"{config.cache['dhcp']}")

View file

@ -2,9 +2,11 @@
from __future__ import annotations from __future__ import annotations
from collections import defaultdict from collections import defaultdict
import json
import black
from .model import Config, Integration from .model import Config, Integration
from .serializer import to_string
BASE = """ BASE = """
\"\"\"Automatically generated by hassfest. \"\"\"Automatically generated by hassfest.
@ -12,8 +14,6 @@ BASE = """
To update, run python3 -m script.hassfest To update, run python3 -m script.hassfest
\"\"\" \"\"\"
# fmt: off
MQTT = {} MQTT = {}
""".strip() """.strip()
@ -37,7 +37,7 @@ def generate_and_validate(integrations: dict[str, Integration]):
for topic in mqtt: for topic in mqtt:
data[domain].append(topic) data[domain].append(topic)
return BASE.format(json.dumps(data, indent=4)) return black.format_str(BASE.format(to_string(data)), mode=black.Mode())
def validate(integrations: dict[str, Integration], config: Config): def validate(integrations: dict[str, Integration], config: Config):
@ -49,7 +49,7 @@ def validate(integrations: dict[str, Integration], config: Config):
return return
with open(str(mqtt_path)) as fp: with open(str(mqtt_path)) as fp:
if fp.read().strip() != content: if fp.read() != content:
config.add_error( config.add_error(
"mqtt", "mqtt",
"File mqtt.py is not up to date. Run python3 -m script.hassfest", "File mqtt.py is not up to date. Run python3 -m script.hassfest",
@ -62,4 +62,4 @@ def generate(integrations: dict[str, Integration], config: Config):
"""Generate MQTT file.""" """Generate MQTT file."""
mqtt_path = config.root / "homeassistant/generated/mqtt.py" mqtt_path = config.root / "homeassistant/generated/mqtt.py"
with open(str(mqtt_path), "w") as fp: with open(str(mqtt_path), "w") as fp:
fp.write(f"{config.cache['mqtt']}\n") fp.write(f"{config.cache['mqtt']}")

View file

@ -0,0 +1,37 @@
"""Hassfest utils."""
from __future__ import annotations
from typing import Any
def _dict_to_str(data: dict) -> str:
"""Return a string representation of a dict."""
items = [f"'{key}':{to_string(value)}" for key, value in data.items()]
result = "{"
for item in items:
result += str(item)
result += ","
result += "}"
return result
def _list_to_str(data: dict) -> str:
"""Return a string representation of a list."""
items = [to_string(value) for value in data]
result = "["
for item in items:
result += str(item)
result += ","
result += "]"
return result
def to_string(data: Any) -> str:
"""Return a string representation of the input."""
if isinstance(data, dict):
return _dict_to_str(data)
if isinstance(data, list):
return _list_to_str(data)
if isinstance(data, str):
return "'" + data + "'"
return data

View file

@ -1,10 +1,12 @@
"""Generate ssdp file.""" """Generate ssdp file."""
from __future__ import annotations from __future__ import annotations
from collections import OrderedDict, defaultdict from collections import defaultdict
import json
import black
from .model import Config, Integration from .model import Config, Integration
from .serializer import to_string
BASE = """ BASE = """
\"\"\"Automatically generated by hassfest. \"\"\"Automatically generated by hassfest.
@ -12,15 +14,13 @@ BASE = """
To update, run python3 -m script.hassfest To update, run python3 -m script.hassfest
\"\"\" \"\"\"
# fmt: off
SSDP = {} SSDP = {}
""".strip() """.strip()
def sort_dict(value): def sort_dict(value):
"""Sort a dictionary.""" """Sort a dictionary."""
return OrderedDict((key, value[key]) for key in sorted(value)) return {key: value[key] for key in sorted(value)}
def generate_and_validate(integrations: dict[str, Integration]): def generate_and_validate(integrations: dict[str, Integration]):
@ -42,7 +42,7 @@ def generate_and_validate(integrations: dict[str, Integration]):
for matcher in ssdp: for matcher in ssdp:
data[domain].append(sort_dict(matcher)) data[domain].append(sort_dict(matcher))
return BASE.format(json.dumps(data, indent=4)) return black.format_str(BASE.format(to_string(data)), mode=black.Mode())
def validate(integrations: dict[str, Integration], config: Config): def validate(integrations: dict[str, Integration], config: Config):
@ -54,7 +54,7 @@ def validate(integrations: dict[str, Integration], config: Config):
return return
with open(str(ssdp_path)) as fp: with open(str(ssdp_path)) as fp:
if fp.read().strip() != content: if fp.read() != content:
config.add_error( config.add_error(
"ssdp", "ssdp",
"File ssdp.py is not up to date. Run python3 -m script.hassfest", "File ssdp.py is not up to date. Run python3 -m script.hassfest",
@ -67,4 +67,4 @@ def generate(integrations: dict[str, Integration], config: Config):
"""Generate ssdp file.""" """Generate ssdp file."""
ssdp_path = config.root / "homeassistant/generated/ssdp.py" ssdp_path = config.root / "homeassistant/generated/ssdp.py"
with open(str(ssdp_path), "w") as fp: with open(str(ssdp_path), "w") as fp:
fp.write(f"{config.cache['ssdp']}\n") fp.write(f"{config.cache['ssdp']}")

View file

@ -1,9 +1,10 @@
"""Generate supported_brands data.""" """Generate supported_brands data."""
from __future__ import annotations from __future__ import annotations
import json import black
from .model import Config, Integration from .model import Config, Integration
from .serializer import to_string
BASE = """ BASE = """
\"\"\"Automatically generated by hassfest. \"\"\"Automatically generated by hassfest.
@ -11,9 +12,7 @@ BASE = """
To update, run python3 -m script.hassfest To update, run python3 -m script.hassfest
\"\"\" \"\"\"
# fmt: off HAS_SUPPORTED_BRANDS = {}
HAS_SUPPORTED_BRANDS = ({})
""".strip() """.strip()
@ -26,7 +25,7 @@ def generate_and_validate(integrations: dict[str, Integration], config: Config)
if integration.supported_brands if integration.supported_brands
] ]
return BASE.format(json.dumps(brands, indent=4)[1:-1]) return black.format_str(BASE.format(to_string(brands)), mode=black.Mode())
def validate(integrations: dict[str, Integration], config: Config) -> None: def validate(integrations: dict[str, Integration], config: Config) -> None:
@ -39,7 +38,7 @@ def validate(integrations: dict[str, Integration], config: Config) -> None:
if config.specific_integrations: if config.specific_integrations:
return return
if supported_brands_path.read_text(encoding="utf-8").strip() != content: if supported_brands_path.read_text(encoding="utf-8") != content:
config.add_error( config.add_error(
"supported_brands", "supported_brands",
"File supported_brands.py is not up to date. Run python3 -m script.hassfest", "File supported_brands.py is not up to date. Run python3 -m script.hassfest",
@ -51,5 +50,5 @@ def generate(integrations: dict[str, Integration], config: Config):
"""Generate supported_brands data.""" """Generate supported_brands data."""
supported_brands_path = config.root / "homeassistant/generated/supported_brands.py" supported_brands_path = config.root / "homeassistant/generated/supported_brands.py"
supported_brands_path.write_text( supported_brands_path.write_text(
f"{config.cache['supported_brands']}\n", encoding="utf-8" f"{config.cache['supported_brands']}", encoding="utf-8"
) )

View file

@ -1,9 +1,10 @@
"""Generate usb file.""" """Generate usb file."""
from __future__ import annotations from __future__ import annotations
import json import black
from .model import Config, Integration from .model import Config, Integration
from .serializer import to_string
BASE = """ BASE = """
\"\"\"Automatically generated by hassfest. \"\"\"Automatically generated by hassfest.
@ -11,8 +12,6 @@ BASE = """
To update, run python3 -m script.hassfest To update, run python3 -m script.hassfest
\"\"\" \"\"\"
# fmt: off
USB = {} USB = {}
""".strip() """.strip()
@ -40,7 +39,7 @@ def generate_and_validate(integrations: list[dict[str, str]]) -> str:
} }
) )
return BASE.format(json.dumps(match_list, indent=4)) return black.format_str(BASE.format(to_string(match_list)), mode=black.Mode())
def validate(integrations: dict[str, Integration], config: Config) -> None: def validate(integrations: dict[str, Integration], config: Config) -> None:
@ -52,7 +51,7 @@ def validate(integrations: dict[str, Integration], config: Config) -> None:
return return
with open(str(usb_path)) as fp: with open(str(usb_path)) as fp:
current = fp.read().strip() current = fp.read()
if current != content: if current != content:
config.add_error( config.add_error(
"usb", "usb",
@ -66,4 +65,4 @@ def generate(integrations: dict[str, Integration], config: Config) -> None:
"""Generate usb file.""" """Generate usb file."""
usb_path = config.root / "homeassistant/generated/usb.py" usb_path = config.root / "homeassistant/generated/usb.py"
with open(str(usb_path), "w") as fp: with open(str(usb_path), "w") as fp:
fp.write(f"{config.cache['usb']}\n") fp.write(f"{config.cache['usb']}")

View file

@ -1,12 +1,14 @@
"""Generate zeroconf file.""" """Generate zeroconf file."""
from __future__ import annotations from __future__ import annotations
from collections import OrderedDict, defaultdict from collections import defaultdict
import json
import black
from homeassistant.loader import async_process_zeroconf_match_dict from homeassistant.loader import async_process_zeroconf_match_dict
from .model import Config, Integration from .model import Config, Integration
from .serializer import to_string
BASE = """ BASE = """
\"\"\"Automatically generated by hassfest. \"\"\"Automatically generated by hassfest.
@ -14,8 +16,6 @@ BASE = """
To update, run python3 -m script.hassfest To update, run python3 -m script.hassfest
\"\"\" \"\"\"
# fmt: off
ZEROCONF = {} ZEROCONF = {}
HOMEKIT = {} HOMEKIT = {}
@ -82,12 +82,12 @@ def generate_and_validate(integrations: dict[str, Integration]):
warned.add(key_2) warned.add(key_2)
break break
zeroconf = OrderedDict( zeroconf = {key: service_type_dict[key] for key in sorted(service_type_dict)}
(key, service_type_dict[key]) for key in sorted(service_type_dict) homekit = {key: homekit_dict[key] for key in sorted(homekit_dict)}
)
homekit = OrderedDict((key, homekit_dict[key]) for key in sorted(homekit_dict))
return BASE.format(json.dumps(zeroconf, indent=4), json.dumps(homekit, indent=4)) return black.format_str(
BASE.format(to_string(zeroconf), to_string(homekit)), mode=black.Mode()
)
def validate(integrations: dict[str, Integration], config: Config): def validate(integrations: dict[str, Integration], config: Config):
@ -99,7 +99,7 @@ def validate(integrations: dict[str, Integration], config: Config):
return return
with open(str(zeroconf_path)) as fp: with open(str(zeroconf_path)) as fp:
current = fp.read().strip() current = fp.read()
if current != content: if current != content:
config.add_error( config.add_error(
"zeroconf", "zeroconf",
@ -113,4 +113,4 @@ def generate(integrations: dict[str, Integration], config: Config):
"""Generate zeroconf file.""" """Generate zeroconf file."""
zeroconf_path = config.root / "homeassistant/generated/zeroconf.py" zeroconf_path = config.root / "homeassistant/generated/zeroconf.py"
with open(str(zeroconf_path), "w") as fp: with open(str(zeroconf_path), "w") as fp:
fp.write(f"{config.cache['zeroconf']}\n") fp.write(f"{config.cache['zeroconf']}")