Use black to format hassfest generated files ()

pull/78722/head^2
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
"""
# fmt: off
APPLICATION_CREDENTIALS = [
"geocaching",
"google",
@ -19,5 +17,5 @@ APPLICATION_CREDENTIALS = [
"spotify",
"withings",
"xbox",
"yolink"
"yolink",
]

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,9 +1,10 @@
"""Generate application_credentials data."""
from __future__ import annotations
import json
import black
from .model import Config, Integration
from .serializer import to_string
BASE = """
\"\"\"Automatically generated by hassfest.
@ -11,8 +12,6 @@ BASE = """
To update, run python3 -m script.hassfest
\"\"\"
# fmt: off
APPLICATION_CREDENTIALS = {}
""".strip()
@ -30,7 +29,7 @@ def generate_and_validate(integrations: dict[str, Integration], config: Config)
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:
@ -45,7 +44,7 @@ def validate(integrations: dict[str, Integration], config: Config) -> None:
if config.specific_integrations:
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(
"application_credentials",
"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"
)
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."""
from __future__ import annotations
import json
import black
from .model import Config, Integration
from .serializer import to_string
BASE = """
\"\"\"Automatically generated by hassfest.
@ -12,8 +13,6 @@ To update, run python3 -m script.hassfest
\"\"\"
from __future__ import annotations
# fmt: off
BLUETOOTH: list[dict[str, bool | str | int | list[int]]] = {}
""".strip()
@ -36,11 +35,7 @@ def generate_and_validate(integrations: list[dict[str, str]]):
for entry in match_types:
match_list.append({"domain": domain, **entry})
return BASE.format(
json.dumps(match_list, indent=4)
.replace('": true', '": True')
.replace('": false', '": False')
)
return black.format_str(BASE.format(to_string(match_list)), mode=black.Mode())
def validate(integrations: dict[str, Integration], config: Config):
@ -52,7 +47,7 @@ def validate(integrations: dict[str, Integration], config: Config):
return
with open(str(bluetooth_path)) as fp:
current = fp.read().strip()
current = fp.read()
if current != content:
config.add_error(
"bluetooth",
@ -66,4 +61,4 @@ def generate(integrations: dict[str, Integration], config: Config):
"""Generate bluetooth file."""
bluetooth_path = config.root / "homeassistant/generated/bluetooth.py"
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."""
from __future__ import annotations
import json
import black
from .model import Config, Integration
from .serializer import to_string
BASE = """
\"\"\"Automatically generated by hassfest.
@ -11,8 +12,6 @@ BASE = """
To update, run python3 -m script.hassfest
\"\"\"
# fmt: off
FLOWS = {}
""".strip()
@ -85,7 +84,7 @@ def generate_and_validate(integrations: dict[str, Integration], config: Config):
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):
@ -97,7 +96,7 @@ def validate(integrations: dict[str, Integration], config: Config):
return
with open(str(config_flow_path)) as fp:
if fp.read().strip() != content:
if fp.read() != content:
config.add_error(
"config_flow",
"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."""
config_flow_path = config.root / "homeassistant/generated/config_flows.py"
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."""
from __future__ import annotations
import pprint
import re
import black
from .model import Config, Integration
@ -13,8 +12,6 @@ To update, run python3 -m script.hassfest
\"\"\"
from __future__ import annotations
# fmt: off
DHCP: list[dict[str, str | bool]] = {}
""".strip()
@ -37,14 +34,7 @@ def generate_and_validate(integrations: list[dict[str, str]]):
for entry in match_types:
match_list.append({"domain": domain, **entry})
# JSON will format `True` as `true`
# 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)
return black.format_str(BASE.format(str(match_list)), mode=black.Mode())
def validate(integrations: dict[str, Integration], config: Config):
@ -56,7 +46,7 @@ def validate(integrations: dict[str, Integration], config: Config):
return
with open(str(dhcp_path)) as fp:
current = fp.read().strip()
current = fp.read()
if current != content:
config.add_error(
"dhcp",
@ -70,4 +60,4 @@ def generate(integrations: dict[str, Integration], config: Config):
"""Generate dhcp file."""
dhcp_path = config.root / "homeassistant/generated/dhcp.py"
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 collections import defaultdict
import json
import black
from .model import Config, Integration
from .serializer import to_string
BASE = """
\"\"\"Automatically generated by hassfest.
@ -12,8 +14,6 @@ BASE = """
To update, run python3 -m script.hassfest
\"\"\"
# fmt: off
MQTT = {}
""".strip()
@ -37,7 +37,7 @@ def generate_and_validate(integrations: dict[str, Integration]):
for topic in mqtt:
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):
@ -49,7 +49,7 @@ def validate(integrations: dict[str, Integration], config: Config):
return
with open(str(mqtt_path)) as fp:
if fp.read().strip() != content:
if fp.read() != content:
config.add_error(
"mqtt",
"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."""
mqtt_path = config.root / "homeassistant/generated/mqtt.py"
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."""
from __future__ import annotations
from collections import OrderedDict, defaultdict
import json
from collections import defaultdict
import black
from .model import Config, Integration
from .serializer import to_string
BASE = """
\"\"\"Automatically generated by hassfest.
@ -12,15 +14,13 @@ BASE = """
To update, run python3 -m script.hassfest
\"\"\"
# fmt: off
SSDP = {}
""".strip()
def sort_dict(value):
"""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]):
@ -42,7 +42,7 @@ def generate_and_validate(integrations: dict[str, Integration]):
for matcher in ssdp:
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):
@ -54,7 +54,7 @@ def validate(integrations: dict[str, Integration], config: Config):
return
with open(str(ssdp_path)) as fp:
if fp.read().strip() != content:
if fp.read() != content:
config.add_error(
"ssdp",
"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."""
ssdp_path = config.root / "homeassistant/generated/ssdp.py"
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."""
from __future__ import annotations
import json
import black
from .model import Config, Integration
from .serializer import to_string
BASE = """
\"\"\"Automatically generated by hassfest.
@ -11,9 +12,7 @@ BASE = """
To update, run python3 -m script.hassfest
\"\"\"
# fmt: off
HAS_SUPPORTED_BRANDS = ({})
HAS_SUPPORTED_BRANDS = {}
""".strip()
@ -26,7 +25,7 @@ def generate_and_validate(integrations: dict[str, Integration], config: Config)
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:
@ -39,7 +38,7 @@ def validate(integrations: dict[str, Integration], config: Config) -> None:
if config.specific_integrations:
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(
"supported_brands",
"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."""
supported_brands_path = config.root / "homeassistant/generated/supported_brands.py"
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."""
from __future__ import annotations
import json
import black
from .model import Config, Integration
from .serializer import to_string
BASE = """
\"\"\"Automatically generated by hassfest.
@ -11,8 +12,6 @@ BASE = """
To update, run python3 -m script.hassfest
\"\"\"
# fmt: off
USB = {}
""".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:
@ -52,7 +51,7 @@ def validate(integrations: dict[str, Integration], config: Config) -> None:
return
with open(str(usb_path)) as fp:
current = fp.read().strip()
current = fp.read()
if current != content:
config.add_error(
"usb",
@ -66,4 +65,4 @@ def generate(integrations: dict[str, Integration], config: Config) -> None:
"""Generate usb file."""
usb_path = config.root / "homeassistant/generated/usb.py"
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."""
from __future__ import annotations
from collections import OrderedDict, defaultdict
import json
from collections import defaultdict
import black
from homeassistant.loader import async_process_zeroconf_match_dict
from .model import Config, Integration
from .serializer import to_string
BASE = """
\"\"\"Automatically generated by hassfest.
@ -14,8 +16,6 @@ BASE = """
To update, run python3 -m script.hassfest
\"\"\"
# fmt: off
ZEROCONF = {}
HOMEKIT = {}
@ -82,12 +82,12 @@ def generate_and_validate(integrations: dict[str, Integration]):
warned.add(key_2)
break
zeroconf = OrderedDict(
(key, service_type_dict[key]) for key in sorted(service_type_dict)
)
homekit = OrderedDict((key, homekit_dict[key]) for key in sorted(homekit_dict))
zeroconf = {key: service_type_dict[key] for key in sorted(service_type_dict)}
homekit = {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):
@ -99,7 +99,7 @@ def validate(integrations: dict[str, Integration], config: Config):
return
with open(str(zeroconf_path)) as fp:
current = fp.read().strip()
current = fp.read()
if current != content:
config.add_error(
"zeroconf",
@ -113,4 +113,4 @@ def generate(integrations: dict[str, Integration], config: Config):
"""Generate zeroconf file."""
zeroconf_path = config.root / "homeassistant/generated/zeroconf.py"
with open(str(zeroconf_path), "w") as fp:
fp.write(f"{config.cache['zeroconf']}\n")
fp.write(f"{config.cache['zeroconf']}")