diff --git a/pkgs/servers/home-assistant/component-packages.nix b/pkgs/servers/home-assistant/component-packages.nix index 54983a1d9f7..98e046eb547 100644 --- a/pkgs/servers/home-assistant/component-packages.nix +++ b/pkgs/servers/home-assistant/component-packages.nix @@ -1,4 +1,4 @@ -# Generated from parse-requirements.py +# Generated by parse-requirements.py # Do not edit! { @@ -6,125 +6,432 @@ components = { "abode" = ps: with ps; [ ]; "ads" = ps: with ps; [ ]; + "alarm_control_panel" = ps: with ps; [ ]; + "alarm_control_panel.abode" = ps: with ps; [ ]; + "alarm_control_panel.alarmdecoder" = ps: with ps; [ ]; "alarm_control_panel.alarmdotcom" = ps: with ps; [ ]; + "alarm_control_panel.arlo" = ps: with ps; [ ]; + "alarm_control_panel.canary" = ps: with ps; [ ]; "alarm_control_panel.concord232" = ps: with ps; [ ]; + "alarm_control_panel.demo" = ps: with ps; [ ]; + "alarm_control_panel.egardia" = ps: with ps; [ ]; + "alarm_control_panel.envisalink" = ps: with ps; [ ]; "alarm_control_panel.ialarm" = ps: with ps; [ ]; + "alarm_control_panel.ifttt" = ps: with ps; [ ]; + "alarm_control_panel.manual" = ps: with ps; [ ]; + "alarm_control_panel.manual_mqtt" = ps: with ps; [ paho-mqtt ]; + "alarm_control_panel.mqtt" = ps: with ps; [ paho-mqtt ]; "alarm_control_panel.nx584" = ps: with ps; [ ]; + "alarm_control_panel.satel_integra" = ps: with ps; [ ]; "alarm_control_panel.simplisafe" = ps: with ps; [ ]; + "alarm_control_panel.spc" = ps: with ps; [ ]; "alarm_control_panel.totalconnect" = ps: with ps; [ ]; + "alarm_control_panel.verisure" = ps: with ps; [ ]; + "alarm_control_panel.wink" = ps: with ps; [ ]; "alarmdecoder" = ps: with ps; [ ]; - "amcrest" = ps: with ps; [ ]; + "alert" = ps: with ps; [ ]; + "alexa" = ps: with ps; [ aiohttp-cors ]; + "alexa.const" = ps: with ps; [ ]; + "alexa.flash_briefings" = ps: with ps; [ ]; + "alexa.intent" = ps: with ps; [ ]; + "alexa.smart_home" = ps: with ps; [ ]; + "amcrest" = ps: with ps; [ ha-ffmpeg ]; "android_ip_webcam" = ps: with ps; [ ]; "apcupsd" = ps: with ps; [ ]; + "api" = ps: with ps; [ aiohttp-cors ]; "apple_tv" = ps: with ps; [ ]; "arduino" = ps: with ps; [ ]; "arlo" = ps: with ps; [ ]; "asterisk_mbox" = ps: with ps; [ ]; "august" = ps: with ps; [ ]; + "auth" = ps: with ps; [ aiohttp-cors ]; + "auth.client" = ps: with ps; [ ]; + "automation" = ps: with ps; [ ]; + "automation.event" = ps: with ps; [ ]; + "automation.homeassistant" = ps: with ps; [ ]; + "automation.litejet" = ps: with ps; [ ]; + "automation.mqtt" = ps: with ps; [ paho-mqtt ]; + "automation.numeric_state" = ps: with ps; [ ]; + "automation.state" = ps: with ps; [ ]; + "automation.sun" = ps: with ps; [ ]; + "automation.template" = ps: with ps; [ ]; + "automation.time" = ps: with ps; [ ]; + "automation.zone" = ps: with ps; [ ]; "axis" = ps: with ps; [ ]; "bbb_gpio" = ps: with ps; [ ]; + "binary_sensor" = ps: with ps; [ ]; + "binary_sensor.abode" = ps: with ps; [ ]; + "binary_sensor.ads" = ps: with ps; [ ]; + "binary_sensor.alarmdecoder" = ps: with ps; [ ]; + "binary_sensor.android_ip_webcam" = ps: with ps; [ ]; + "binary_sensor.apcupsd" = ps: with ps; [ ]; + "binary_sensor.arest" = ps: with ps; [ ]; + "binary_sensor.august" = ps: with ps; [ ]; + "binary_sensor.aurora" = ps: with ps; [ ]; + "binary_sensor.axis" = ps: with ps; [ ]; + "binary_sensor.bayesian" = ps: with ps; [ ]; + "binary_sensor.bbb_gpio" = ps: with ps; [ ]; + "binary_sensor.blink" = ps: with ps; [ ]; + "binary_sensor.bloomsky" = ps: with ps; [ ]; + "binary_sensor.bmw_connected_drive" = ps: with ps; [ ]; + "binary_sensor.command_line" = ps: with ps; [ ]; "binary_sensor.concord232" = ps: with ps; [ ]; + "binary_sensor.deconz" = ps: with ps; [ ]; + "binary_sensor.demo" = ps: with ps; [ ]; + "binary_sensor.digital_ocean" = ps: with ps; [ digital-ocean ]; + "binary_sensor.ecobee" = ps: with ps; [ ]; + "binary_sensor.egardia" = ps: with ps; [ ]; + "binary_sensor.eight_sleep" = ps: with ps; [ ]; + "binary_sensor.enocean" = ps: with ps; [ ]; + "binary_sensor.envisalink" = ps: with ps; [ ]; + "binary_sensor.ffmpeg_motion" = ps: with ps; [ ha-ffmpeg ]; + "binary_sensor.ffmpeg_noise" = ps: with ps; [ ha-ffmpeg ]; "binary_sensor.flic" = ps: with ps; [ ]; + "binary_sensor.gc100" = ps: with ps; [ ]; "binary_sensor.hikvision" = ps: with ps; [ ]; + "binary_sensor.hive" = ps: with ps; [ ]; + "binary_sensor.homematic" = ps: with ps; [ pyhomematic ]; + "binary_sensor.ihc" = ps: with ps; [ ]; + "binary_sensor.insteon_plm" = ps: with ps; [ ]; "binary_sensor.iss" = ps: with ps; [ ]; + "binary_sensor.isy994" = ps: with ps; [ ]; + "binary_sensor.knx" = ps: with ps; [ ]; + "binary_sensor.linode" = ps: with ps; [ linode-api ]; + "binary_sensor.maxcube" = ps: with ps; [ ]; + "binary_sensor.modbus" = ps: with ps; [ ]; + "binary_sensor.mqtt" = ps: with ps; [ paho-mqtt ]; + "binary_sensor.mychevy" = ps: with ps; [ ]; + "binary_sensor.mysensors" = ps: with ps; [ ]; + "binary_sensor.mystrom" = ps: with ps; [ aiohttp-cors ]; + "binary_sensor.nest" = ps: with ps; [ ]; + "binary_sensor.netatmo" = ps: with ps; [ ]; "binary_sensor.nx584" = ps: with ps; [ ]; + "binary_sensor.octoprint" = ps: with ps; [ ]; + "binary_sensor.pilight" = ps: with ps; [ ]; + "binary_sensor.ping" = ps: with ps; [ ]; + "binary_sensor.qwikswitch" = ps: with ps; [ ]; + "binary_sensor.raincloud" = ps: with ps; [ ]; + "binary_sensor.random" = ps: with ps; [ ]; + "binary_sensor.raspihats" = ps: with ps; [ ]; + "binary_sensor.rest" = ps: with ps; [ ]; + "binary_sensor.rfxtrx" = ps: with ps; [ ]; + "binary_sensor.ring" = ps: with ps; [ ]; + "binary_sensor.rpi_gpio" = ps: with ps; [ ]; + "binary_sensor.rpi_pfio" = ps: with ps; [ ]; + "binary_sensor.satel_integra" = ps: with ps; [ ]; + "binary_sensor.skybell" = ps: with ps; [ ]; + "binary_sensor.sleepiq" = ps: with ps; [ ]; + "binary_sensor.spc" = ps: with ps; [ ]; "binary_sensor.tapsaff" = ps: with ps; [ ]; + "binary_sensor.tcp" = ps: with ps; [ ]; + "binary_sensor.tellduslive" = ps: with ps; [ ]; + "binary_sensor.template" = ps: with ps; [ ]; + "binary_sensor.tesla" = ps: with ps; [ ]; + "binary_sensor.threshold" = ps: with ps; [ ]; "binary_sensor.trend" = ps: with ps; [ numpy ]; + "binary_sensor.upcloud" = ps: with ps; [ ]; + "binary_sensor.velbus" = ps: with ps; [ ]; + "binary_sensor.vera" = ps: with ps; [ ]; + "binary_sensor.verisure" = ps: with ps; [ ]; + "binary_sensor.volvooncall" = ps: with ps; [ ]; + "binary_sensor.vultr" = ps: with ps; [ vultr ]; + "binary_sensor.wemo" = ps: with ps; [ ]; + "binary_sensor.wink" = ps: with ps; [ ]; "binary_sensor.workday" = ps: with ps; [ ]; + "binary_sensor.xiaomi_aqara" = ps: with ps; [ ]; + "binary_sensor.zha" = ps: with ps; [ ]; + "binary_sensor.zigbee" = ps: with ps; [ ]; + "binary_sensor.zwave" = ps: with ps; [ ]; "blink" = ps: with ps; [ ]; + "bloomsky" = ps: with ps; [ ]; "bmw_connected_drive" = ps: with ps; [ ]; + "browser" = ps: with ps; [ ]; + "calendar" = ps: with ps; [ ]; "calendar.caldav" = ps: with ps; [ ]; + "calendar.demo" = ps: with ps; [ ]; + "calendar.google" = ps: with ps; [ ]; "calendar.todoist" = ps: with ps; [ todoist ]; + "camera" = ps: with ps; [ aiohttp-cors ]; + "camera.abode" = ps: with ps; [ ]; + "camera.amcrest" = ps: with ps; [ ha-ffmpeg ]; + "camera.arlo" = ps: with ps; [ ha-ffmpeg ]; + "camera.august" = ps: with ps; [ ]; + "camera.axis" = ps: with ps; [ ]; + "camera.blink" = ps: with ps; [ ]; + "camera.bloomsky" = ps: with ps; [ ]; + "camera.canary" = ps: with ps; [ ha-ffmpeg ]; + "camera.demo" = ps: with ps; [ ]; + "camera.doorbird" = ps: with ps; [ ]; + "camera.ffmpeg" = ps: with ps; [ ha-ffmpeg ]; "camera.foscam" = ps: with ps; [ ]; - "camera.onvif" = ps: with ps; [ ]; + "camera.generic" = ps: with ps; [ ]; + "camera.local_file" = ps: with ps; [ ]; + "camera.mjpeg" = ps: with ps; [ ]; + "camera.mqtt" = ps: with ps; [ paho-mqtt ]; + "camera.neato" = ps: with ps; [ ]; + "camera.nest" = ps: with ps; [ ]; + "camera.netatmo" = ps: with ps; [ ]; + "camera.onvif" = ps: with ps; [ ha-ffmpeg ]; "camera.proxy" = ps: with ps; [ pillow ]; + "camera.ring" = ps: with ps; [ ha-ffmpeg ]; + "camera.rpi_camera" = ps: with ps; [ ]; + "camera.skybell" = ps: with ps; [ ]; "camera.synology" = ps: with ps; [ ]; + "camera.usps" = ps: with ps; [ ]; "camera.uvc" = ps: with ps; [ ]; + "camera.verisure" = ps: with ps; [ ]; "camera.xeoma" = ps: with ps; [ ]; + "camera.yi" = ps: with ps; [ ha-ffmpeg ]; + "camera.zoneminder" = ps: with ps; [ ]; "canary" = ps: with ps; [ ]; + "climate" = ps: with ps; [ ]; "climate.daikin" = ps: with ps; [ ]; + "climate.demo" = ps: with ps; [ ]; + "climate.ecobee" = ps: with ps; [ ]; "climate.econet" = ps: with ps; [ ]; "climate.ephember" = ps: with ps; [ ]; "climate.eq3btsmart" = ps: with ps; [ construct ]; "climate.flexit" = ps: with ps; [ ]; + "climate.fritzbox" = ps: with ps; [ ]; + "climate.generic_thermostat" = ps: with ps; [ ]; "climate.heatmiser" = ps: with ps; [ ]; + "climate.hive" = ps: with ps; [ ]; + "climate.homematic" = ps: with ps; [ pyhomematic ]; "climate.honeywell" = ps: with ps; [ ]; + "climate.knx" = ps: with ps; [ ]; + "climate.maxcube" = ps: with ps; [ ]; + "climate.melissa" = ps: with ps; [ ]; + "climate.modbus" = ps: with ps; [ ]; + "climate.mqtt" = ps: with ps; [ paho-mqtt ]; + "climate.mysensors" = ps: with ps; [ ]; + "climate.nest" = ps: with ps; [ ]; + "climate.netatmo" = ps: with ps; [ ]; + "climate.nuheat" = ps: with ps; [ ]; "climate.oem" = ps: with ps; [ ]; "climate.proliphix" = ps: with ps; [ ]; "climate.radiotherm" = ps: with ps; [ ]; "climate.sensibo" = ps: with ps; [ ]; + "climate.tado" = ps: with ps; [ ]; + "climate.tesla" = ps: with ps; [ ]; + "climate.toon" = ps: with ps; [ ]; "climate.touchline" = ps: with ps; [ ]; "climate.venstar" = ps: with ps; [ ]; - "cloud" = ps: with ps; [ warrant ]; + "climate.vera" = ps: with ps; [ ]; + "climate.wink" = ps: with ps; [ ]; + "climate.zwave" = ps: with ps; [ ]; + "cloud" = ps: with ps; [ warrant aiohttp-cors ]; + "cloud.auth_api" = ps: with ps; [ ]; + "cloud.const" = ps: with ps; [ ]; + "cloud.http_api" = ps: with ps; [ ]; + "cloud.iot" = ps: with ps; [ ]; "coinbase" = ps: with ps; [ ]; "comfoconnect" = ps: with ps; [ ]; + "config" = ps: with ps; [ aiohttp-cors ]; + "config.automation" = ps: with ps; [ ]; "config.config_entries" = ps: with ps; [ ]; + "config.core" = ps: with ps; [ ]; + "config.customize" = ps: with ps; [ ]; + "config.entity_registry" = ps: with ps; [ ]; + "config.group" = ps: with ps; [ ]; + "config.hassbian" = ps: with ps; [ ]; + "config.script" = ps: with ps; [ ]; + "config.zwave" = ps: with ps; [ ]; + "configurator" = ps: with ps; [ ]; + "conversation" = ps: with ps; [ aiohttp-cors ]; + "counter" = ps: with ps; [ ]; + "cover" = ps: with ps; [ ]; + "cover.abode" = ps: with ps; [ ]; + "cover.command_line" = ps: with ps; [ ]; + "cover.demo" = ps: with ps; [ ]; + "cover.garadget" = ps: with ps; [ ]; "cover.gogogate2" = ps: with ps; [ ]; + "cover.group" = ps: with ps; [ ]; + "cover.homematic" = ps: with ps; [ pyhomematic ]; + "cover.isy994" = ps: with ps; [ ]; + "cover.knx" = ps: with ps; [ ]; + "cover.lutron" = ps: with ps; [ ]; + "cover.lutron_caseta" = ps: with ps; [ ]; + "cover.mqtt" = ps: with ps; [ paho-mqtt ]; "cover.myq" = ps: with ps; [ ]; + "cover.mysensors" = ps: with ps; [ ]; + "cover.opengarage" = ps: with ps; [ ]; + "cover.rflink" = ps: with ps; [ ]; + "cover.rfxtrx" = ps: with ps; [ ]; + "cover.rpi_gpio" = ps: with ps; [ ]; + "cover.scsgate" = ps: with ps; [ ]; + "cover.tahoma" = ps: with ps; [ ]; + "cover.tellduslive" = ps: with ps; [ ]; + "cover.tellstick" = ps: with ps; [ ]; + "cover.template" = ps: with ps; [ ]; + "cover.velbus" = ps: with ps; [ ]; + "cover.vera" = ps: with ps; [ ]; + "cover.wink" = ps: with ps; [ ]; + "cover.xiaomi_aqara" = ps: with ps; [ ]; + "cover.zwave" = ps: with ps; [ ]; "daikin" = ps: with ps; [ ]; "datadog" = ps: with ps; [ datadog ]; "deconz" = ps: with ps; [ ]; + "deconz.config_flow" = ps: with ps; [ ]; + "deconz.const" = ps: with ps; [ ]; + "demo" = ps: with ps; [ aiohttp-cors ]; + "device_sun_light_trigger" = ps: with ps; [ ]; + "device_tracker" = ps: with ps; [ ]; + "device_tracker.actiontec" = ps: with ps; [ ]; "device_tracker.aruba" = ps: with ps; [ pexpect ]; "device_tracker.asuswrt" = ps: with ps; [ pexpect ]; - "device_tracker.automatic" = ps: with ps; [ ]; + "device_tracker.automatic" = ps: with ps; [ aiohttp-cors ]; "device_tracker.bbox" = ps: with ps; [ ]; "device_tracker.bluetooth_le_tracker" = ps: with ps; [ ]; "device_tracker.bluetooth_tracker" = ps: with ps; [ ]; + "device_tracker.bmw_connected_drive" = ps: with ps; [ ]; + "device_tracker.bt_home_hub_5" = ps: with ps; [ ]; "device_tracker.cisco_ios" = ps: with ps; [ pexpect ]; + "device_tracker.ddwrt" = ps: with ps; [ ]; + "device_tracker.demo" = ps: with ps; [ ]; "device_tracker.fritz" = ps: with ps; [ fritzconnection ]; + "device_tracker.geofency" = ps: with ps; [ aiohttp-cors ]; "device_tracker.google_maps" = ps: with ps; [ ]; + "device_tracker.gpslogger" = ps: with ps; [ aiohttp-cors ]; + "device_tracker.hitron_coda" = ps: with ps; [ ]; + "device_tracker.huawei_router" = ps: with ps; [ ]; "device_tracker.icloud" = ps: with ps; [ ]; + "device_tracker.keenetic_ndms2" = ps: with ps; [ ]; "device_tracker.linksys_ap" = ps: with ps; [ beautifulsoup4 ]; + "device_tracker.linksys_smart" = ps: with ps; [ ]; + "device_tracker.locative" = ps: with ps; [ aiohttp-cors ]; + "device_tracker.luci" = ps: with ps; [ ]; + "device_tracker.meraki" = ps: with ps; [ aiohttp-cors ]; "device_tracker.mikrotik" = ps: with ps; [ ]; + "device_tracker.mqtt" = ps: with ps; [ paho-mqtt ]; + "device_tracker.mqtt_json" = ps: with ps; [ paho-mqtt ]; + "device_tracker.mysensors" = ps: with ps; [ ]; "device_tracker.netgear" = ps: with ps; [ ]; "device_tracker.nmap_tracker" = ps: with ps; [ ]; - "device_tracker.owntracks" = ps: with ps; [ libnacl ]; - "device_tracker.owntracks_http" = ps: with ps; [ libnacl ]; + "device_tracker.owntracks" = ps: with ps; [ libnacl paho-mqtt ]; + "device_tracker.owntracks_http" = ps: with ps; [ libnacl aiohttp-cors ]; + "device_tracker.ping" = ps: with ps; [ ]; + "device_tracker.sky_hub" = ps: with ps; [ ]; "device_tracker.snmp" = ps: with ps; [ pysnmp ]; + "device_tracker.swisscom" = ps: with ps; [ ]; + "device_tracker.tado" = ps: with ps; [ ]; + "device_tracker.tesla" = ps: with ps; [ ]; + "device_tracker.thomson" = ps: with ps; [ ]; "device_tracker.tile" = ps: with ps; [ ]; + "device_tracker.tomato" = ps: with ps; [ ]; + "device_tracker.tplink" = ps: with ps; [ ]; "device_tracker.trackr" = ps: with ps; [ ]; + "device_tracker.ubus" = ps: with ps; [ ]; "device_tracker.unifi" = ps: with ps; [ pyunifi ]; "device_tracker.unifi_direct" = ps: with ps; [ pexpect ]; "device_tracker.upc_connect" = ps: with ps; [ defusedxml ]; + "device_tracker.volvooncall" = ps: with ps; [ ]; + "device_tracker.xiaomi" = ps: with ps; [ ]; "device_tracker.xiaomi_miio" = ps: with ps; [ construct ]; + "dialogflow" = ps: with ps; [ aiohttp-cors ]; "digital_ocean" = ps: with ps; [ digital-ocean ]; "discovery" = ps: with ps; [ netdisco ]; - "dominos" = ps: with ps; [ ]; + "dominos" = ps: with ps; [ aiohttp-cors ]; "doorbird" = ps: with ps; [ ]; + "downloader" = ps: with ps; [ ]; + "duckdns" = ps: with ps; [ ]; "dweet" = ps: with ps; [ ]; "dyson" = ps: with ps; [ ]; "ecobee" = ps: with ps; [ ]; "egardia" = ps: with ps; [ ]; "eight_sleep" = ps: with ps; [ ]; + "emoncms_history" = ps: with ps; [ ]; "emulated_hue" = ps: with ps; [ aiohttp-cors ]; + "emulated_hue.hue_api" = ps: with ps; [ ]; + "emulated_hue.upnp" = ps: with ps; [ ]; "enocean" = ps: with ps; [ ]; "envisalink" = ps: with ps; [ ]; "eufy" = ps: with ps; [ ]; + "fan" = ps: with ps; [ ]; + "fan.comfoconnect" = ps: with ps; [ ]; + "fan.demo" = ps: with ps; [ ]; + "fan.dyson" = ps: with ps; [ ]; + "fan.insteon_local" = ps: with ps; [ ]; + "fan.insteon_plm" = ps: with ps; [ ]; + "fan.isy994" = ps: with ps; [ ]; + "fan.mqtt" = ps: with ps; [ paho-mqtt ]; + "fan.template" = ps: with ps; [ ]; + "fan.velbus" = ps: with ps; [ ]; + "fan.wink" = ps: with ps; [ ]; "fan.xiaomi_miio" = ps: with ps; [ construct ]; + "fan.zha" = ps: with ps; [ ]; + "fan.zwave" = ps: with ps; [ ]; "feedreader" = ps: with ps; [ feedparser ]; "ffmpeg" = ps: with ps; [ ha-ffmpeg ]; "folder_watcher" = ps: with ps; [ watchdog ]; + "foursquare" = ps: with ps; [ aiohttp-cors ]; + "freedns" = ps: with ps; [ ]; "fritzbox" = ps: with ps; [ ]; - "frontend" = ps: with ps; [ ]; + "frontend" = ps: with ps; [ aiohttp-cors ]; "gc100" = ps: with ps; [ ]; "goalfeed" = ps: with ps; [ ]; "google" = ps: with ps; [ google_api_python_client oauth2client ]; + "google_assistant" = ps: with ps; [ aiohttp-cors ]; + "google_assistant.auth" = ps: with ps; [ ]; + "google_assistant.const" = ps: with ps; [ ]; + "google_assistant.helpers" = ps: with ps; [ ]; + "google_assistant.http" = ps: with ps; [ ]; + "google_assistant.smart_home" = ps: with ps; [ ]; + "google_assistant.trait" = ps: with ps; [ ]; + "google_domains" = ps: with ps; [ ]; + "graphite" = ps: with ps; [ ]; + "group" = ps: with ps; [ ]; + "hassio" = ps: with ps; [ aiohttp-cors ]; + "hassio.handler" = ps: with ps; [ ]; + "hassio.http" = ps: with ps; [ ]; "hdmi_cec" = ps: with ps; [ ]; + "history" = ps: with ps; [ aiohttp-cors sqlalchemy ]; + "history_graph" = ps: with ps; [ aiohttp-cors sqlalchemy ]; "hive" = ps: with ps; [ ]; "homekit" = ps: with ps; [ ]; + "homekit.const" = ps: with ps; [ ]; + "homekit.util" = ps: with ps; [ ]; "homekit_controller" = ps: with ps; [ ]; "homematic" = ps: with ps; [ pyhomematic ]; "homematicip_cloud" = ps: with ps; [ ]; "http" = ps: with ps; [ aiohttp-cors ]; + "http.auth" = ps: with ps; [ ]; + "http.ban" = ps: with ps; [ ]; + "http.const" = ps: with ps; [ ]; + "http.cors" = ps: with ps; [ ]; + "http.data_validator" = ps: with ps; [ ]; + "http.real_ip" = ps: with ps; [ ]; + "http.static" = ps: with ps; [ ]; + "http.view" = ps: with ps; [ ]; "hue" = ps: with ps; [ aiohue ]; + "hue.bridge" = ps: with ps; [ ]; + "hue.config_flow" = ps: with ps; [ ]; + "hue.const" = ps: with ps; [ ]; + "hue.errors" = ps: with ps; [ ]; "ifttt" = ps: with ps; [ ]; "ihc" = ps: with ps; [ ]; + "ihc.const" = ps: with ps; [ ]; + "ihc.ihcdevice" = ps: with ps; [ ]; + "image_processing" = ps: with ps; [ aiohttp-cors ]; + "image_processing.demo" = ps: with ps; [ ]; "image_processing.dlib_face_detect" = ps: with ps; [ face_recognition ]; "image_processing.dlib_face_identify" = ps: with ps; [ face_recognition ]; + "image_processing.microsoft_face_detect" = ps: with ps; [ aiohttp-cors ]; + "image_processing.microsoft_face_identify" = ps: with ps; [ aiohttp-cors ]; + "image_processing.openalpr_cloud" = ps: with ps; [ ]; + "image_processing.openalpr_local" = ps: with ps; [ ]; "image_processing.opencv" = ps: with ps; [ numpy ]; + "image_processing.seven_segments" = ps: with ps; [ ]; "influxdb" = ps: with ps; [ influxdb ]; + "input_boolean" = ps: with ps; [ ]; + "input_datetime" = ps: with ps; [ ]; + "input_number" = ps: with ps; [ ]; + "input_select" = ps: with ps; [ ]; + "input_text" = ps: with ps; [ ]; "insteon_local" = ps: with ps; [ ]; "insteon_plm" = ps: with ps; [ ]; + "intent_script" = ps: with ps; [ ]; + "introduction" = ps: with ps; [ ]; + "ios" = ps: with ps; [ aiohttp-cors zeroconf ]; "iota" = ps: with ps; [ ]; "isy994" = ps: with ps; [ ]; "joaoapps_join" = ps: with ps; [ ]; @@ -134,41 +441,110 @@ "kira" = ps: with ps; [ ]; "knx" = ps: with ps; [ ]; "lametric" = ps: with ps; [ ]; + "light" = ps: with ps; [ ]; + "light.abode" = ps: with ps; [ ]; + "light.ads" = ps: with ps; [ ]; "light.avion" = ps: with ps; [ ]; "light.blinksticklight" = ps: with ps; [ BlinkStick ]; "light.blinkt" = ps: with ps; [ ]; + "light.deconz" = ps: with ps; [ ]; "light.decora" = ps: with ps; [ ]; "light.decora_wifi" = ps: with ps; [ ]; + "light.demo" = ps: with ps; [ ]; + "light.enocean" = ps: with ps; [ ]; + "light.eufy" = ps: with ps; [ ]; "light.flux_led" = ps: with ps; [ ]; "light.greenwave" = ps: with ps; [ ]; + "light.group" = ps: with ps; [ ]; + "light.hive" = ps: with ps; [ ]; + "light.homekit_controller" = ps: with ps; [ ]; + "light.homematic" = ps: with ps; [ pyhomematic ]; + "light.hue" = ps: with ps; [ aiohue ]; + "light.hyperion" = ps: with ps; [ ]; "light.iglo" = ps: with ps; [ ]; + "light.ihc" = ps: with ps; [ ]; + "light.insteon_local" = ps: with ps; [ ]; + "light.insteon_plm" = ps: with ps; [ ]; + "light.isy994" = ps: with ps; [ ]; + "light.knx" = ps: with ps; [ ]; "light.lifx" = ps: with ps; [ ]; "light.lifx_legacy" = ps: with ps; [ ]; "light.limitlessled" = ps: with ps; [ ]; + "light.litejet" = ps: with ps; [ ]; + "light.lutron" = ps: with ps; [ ]; + "light.lutron_caseta" = ps: with ps; [ ]; + "light.mochad" = ps: with ps; [ ]; + "light.mqtt" = ps: with ps; [ paho-mqtt ]; + "light.mqtt_json" = ps: with ps; [ paho-mqtt ]; + "light.mqtt_template" = ps: with ps; [ paho-mqtt ]; + "light.mysensors" = ps: with ps; [ ]; "light.mystrom" = ps: with ps; [ ]; "light.nanoleaf_aurora" = ps: with ps; [ ]; "light.osramlightify" = ps: with ps; [ ]; "light.piglow" = ps: with ps; [ ]; + "light.qwikswitch" = ps: with ps; [ ]; + "light.rflink" = ps: with ps; [ ]; + "light.rfxtrx" = ps: with ps; [ ]; "light.rpi_gpio_pwm" = ps: with ps; [ ]; + "light.scsgate" = ps: with ps; [ ]; "light.sensehat" = ps: with ps; [ ]; + "light.skybell" = ps: with ps; [ ]; + "light.tellduslive" = ps: with ps; [ ]; + "light.tellstick" = ps: with ps; [ ]; + "light.template" = ps: with ps; [ ]; "light.tikteck" = ps: with ps; [ ]; "light.tplink" = ps: with ps; [ ]; + "light.tradfri" = ps: with ps; [ ]; + "light.velbus" = ps: with ps; [ ]; + "light.vera" = ps: with ps; [ ]; + "light.wemo" = ps: with ps; [ ]; + "light.wink" = ps: with ps; [ ]; + "light.x10" = ps: with ps; [ ]; + "light.xiaomi_aqara" = ps: with ps; [ ]; "light.xiaomi_miio" = ps: with ps; [ construct ]; "light.yeelight" = ps: with ps; [ ]; "light.yeelightsunflower" = ps: with ps; [ ]; "light.zengge" = ps: with ps; [ ]; + "light.zha" = ps: with ps; [ ]; + "light.zigbee" = ps: with ps; [ ]; + "light.zwave" = ps: with ps; [ ]; "linode" = ps: with ps; [ linode-api ]; "lirc" = ps: with ps; [ ]; "litejet" = ps: with ps; [ ]; + "lock" = ps: with ps; [ ]; + "lock.abode" = ps: with ps; [ ]; + "lock.august" = ps: with ps; [ ]; + "lock.bmw_connected_drive" = ps: with ps; [ ]; + "lock.demo" = ps: with ps; [ ]; + "lock.homematic" = ps: with ps; [ pyhomematic ]; + "lock.isy994" = ps: with ps; [ ]; + "lock.lockitron" = ps: with ps; [ ]; + "lock.mqtt" = ps: with ps; [ paho-mqtt ]; "lock.nello" = ps: with ps; [ ]; "lock.nuki" = ps: with ps; [ ]; "lock.sesame" = ps: with ps; [ ]; + "lock.tesla" = ps: with ps; [ ]; + "lock.vera" = ps: with ps; [ ]; + "lock.verisure" = ps: with ps; [ ]; + "lock.volvooncall" = ps: with ps; [ ]; + "lock.wink" = ps: with ps; [ ]; + "lock.zwave" = ps: with ps; [ ]; + "logbook" = ps: with ps; [ aiohttp-cors sqlalchemy ]; + "logentries" = ps: with ps; [ ]; + "logger" = ps: with ps; [ ]; "lutron" = ps: with ps; [ ]; "lutron_caseta" = ps: with ps; [ ]; + "mailbox" = ps: with ps; [ aiohttp-cors ]; + "mailbox.asterisk_mbox" = ps: with ps; [ ]; + "mailbox.demo" = ps: with ps; [ ]; + "mailgun" = ps: with ps; [ aiohttp-cors ]; + "map" = ps: with ps; [ ]; "matrix" = ps: with ps; [ matrix-client ]; "maxcube" = ps: with ps; [ ]; - "media_extractor" = ps: with ps; [ youtube-dl-light ]; + "media_extractor" = ps: with ps; [ youtube-dl-light aiohttp-cors ]; + "media_player" = ps: with ps; [ aiohttp-cors ]; "media_player.anthemav" = ps: with ps; [ ]; + "media_player.apple_tv" = ps: with ps; [ ]; "media_player.aquostv" = ps: with ps; [ ]; "media_player.blackbird" = ps: with ps; [ ]; "media_player.bluesound" = ps: with ps; [ xmltodict ]; @@ -177,18 +553,24 @@ "media_player.channels" = ps: with ps; [ ]; "media_player.clementine" = ps: with ps; [ ]; "media_player.cmus" = ps: with ps; [ ]; + "media_player.demo" = ps: with ps; [ ]; + "media_player.denon" = ps: with ps; [ ]; "media_player.denonavr" = ps: with ps; [ ]; "media_player.directv" = ps: with ps; [ ]; "media_player.dunehd" = ps: with ps; [ ]; "media_player.emby" = ps: with ps; [ ]; + "media_player.firetv" = ps: with ps; [ ]; "media_player.frontier_silicon" = ps: with ps; [ ]; "media_player.gpmdp" = ps: with ps; [ websocket_client ]; "media_player.gstreamer" = ps: with ps; [ ]; - "media_player.kodi" = ps: with ps; [ jsonrpc-async jsonrpc-websocket ]; + "media_player.hdmi_cec" = ps: with ps; [ ]; + "media_player.itunes" = ps: with ps; [ ]; + "media_player.kodi" = ps: with ps; [ jsonrpc-websocket jsonrpc-async ]; "media_player.lg_netcast" = ps: with ps; [ ]; "media_player.liveboxplaytv" = ps: with ps; [ ]; "media_player.mediaroom" = ps: with ps; [ ]; "media_player.monoprice" = ps: with ps; [ ]; + "media_player.mpchc" = ps: with ps; [ ]; "media_player.mpd" = ps: with ps; [ mpd2 ]; "media_player.nad" = ps: with ps; [ ]; "media_player.nadtcp" = ps: with ps; [ ]; @@ -197,6 +579,7 @@ "media_player.panasonic_viera" = ps: with ps; [ wakeonlan ]; "media_player.pandora" = ps: with ps; [ pexpect ]; "media_player.philips_js" = ps: with ps; [ ]; + "media_player.pioneer" = ps: with ps; [ ]; "media_player.plex" = ps: with ps; [ ]; "media_player.roku" = ps: with ps; [ ]; "media_player.russound_rio" = ps: with ps; [ ]; @@ -206,57 +589,103 @@ "media_player.songpal" = ps: with ps; [ ]; "media_player.sonos" = ps: with ps; [ ]; "media_player.soundtouch" = ps: with ps; [ libsoundtouch ]; - "media_player.spotify" = ps: with ps; [ spotipy ]; + "media_player.spotify" = ps: with ps; [ aiohttp-cors ]; + "media_player.squeezebox" = ps: with ps; [ ]; + "media_player.ue_smart_radio" = ps: with ps; [ ]; + "media_player.universal" = ps: with ps; [ ]; "media_player.vizio" = ps: with ps; [ ]; "media_player.vlc" = ps: with ps; [ ]; + "media_player.volumio" = ps: with ps; [ ]; "media_player.webostv" = ps: with ps; [ websockets ]; "media_player.xiaomi_tv" = ps: with ps; [ ]; "media_player.yamaha" = ps: with ps; [ ]; "media_player.yamaha_musiccast" = ps: with ps; [ ]; "media_player.ziggo_mediabox_xl" = ps: with ps; [ ]; "melissa" = ps: with ps; [ ]; + "microsoft_face" = ps: with ps; [ aiohttp-cors ]; "mochad" = ps: with ps; [ ]; "modbus" = ps: with ps; [ ]; "mqtt" = ps: with ps; [ paho-mqtt ]; - "mqtt.server" = ps: with ps; [ hbmqtt ]; + "mqtt.discovery" = ps: with ps; [ ]; + "mqtt.server" = ps: with ps; [ aiohttp-cors hbmqtt ]; + "mqtt_eventstream" = ps: with ps; [ paho-mqtt ]; + "mqtt_statestream" = ps: with ps; [ paho-mqtt ]; "mychevy" = ps: with ps; [ ]; "mycroft" = ps: with ps; [ ]; "mysensors" = ps: with ps; [ ]; + "namecheapdns" = ps: with ps; [ ]; "neato" = ps: with ps; [ ]; "nest" = ps: with ps; [ ]; "netatmo" = ps: with ps; [ ]; + "no_ip" = ps: with ps; [ ]; + "notify" = ps: with ps; [ ]; "notify.apns" = ps: with ps; [ ]; "notify.aws_lambda" = ps: with ps; [ boto3 ]; "notify.aws_sns" = ps: with ps; [ boto3 ]; "notify.aws_sqs" = ps: with ps; [ boto3 ]; "notify.ciscospark" = ps: with ps; [ ]; + "notify.clickatell" = ps: with ps; [ ]; + "notify.clicksend" = ps: with ps; [ ]; + "notify.clicksend_tts" = ps: with ps; [ ]; + "notify.command_line" = ps: with ps; [ ]; + "notify.demo" = ps: with ps; [ ]; "notify.discord" = ps: with ps; [ ]; + "notify.ecobee" = ps: with ps; [ ]; + "notify.facebook" = ps: with ps; [ ]; + "notify.file" = ps: with ps; [ ]; "notify.free_mobile" = ps: with ps; [ ]; "notify.gntp" = ps: with ps; [ ]; + "notify.group" = ps: with ps; [ ]; "notify.hipchat" = ps: with ps; [ ]; - "notify.html5" = ps: with ps; [ pyjwt ]; + "notify.html5" = ps: with ps; [ pyjwt aiohttp-cors ]; + "notify.instapush" = ps: with ps; [ ]; + "notify.ios" = ps: with ps; [ aiohttp-cors zeroconf ]; "notify.joaoapps_join" = ps: with ps; [ ]; + "notify.knx" = ps: with ps; [ ]; "notify.kodi" = ps: with ps; [ jsonrpc-async ]; "notify.lametric" = ps: with ps; [ ]; - "notify.mailgun" = ps: with ps; [ ]; + "notify.lannouncer" = ps: with ps; [ ]; + "notify.llamalab_automate" = ps: with ps; [ ]; + "notify.mailgun" = ps: with ps; [ aiohttp-cors ]; "notify.mastodon" = ps: with ps; [ ]; + "notify.matrix" = ps: with ps; [ matrix-client ]; "notify.message_bird" = ps: with ps; [ ]; + "notify.mycroft" = ps: with ps; [ ]; + "notify.mysensors" = ps: with ps; [ ]; + "notify.nfandroidtv" = ps: with ps; [ ]; + "notify.nma" = ps: with ps; [ ]; + "notify.prowl" = ps: with ps; [ ]; "notify.pushbullet" = ps: with ps; [ pushbullet ]; "notify.pushetta" = ps: with ps; [ ]; "notify.pushover" = ps: with ps; [ python-pushover ]; + "notify.pushsafer" = ps: with ps; [ ]; + "notify.rest" = ps: with ps; [ ]; "notify.rocketchat" = ps: with ps; [ ]; "notify.sendgrid" = ps: with ps; [ ]; "notify.simplepush" = ps: with ps; [ ]; "notify.slack" = ps: with ps; [ ]; + "notify.smtp" = ps: with ps; [ ]; "notify.stride" = ps: with ps; [ ]; + "notify.synology_chat" = ps: with ps; [ ]; + "notify.syslog" = ps: with ps; [ ]; + "notify.telegram" = ps: with ps; [ python-telegram-bot ]; + "notify.telstra" = ps: with ps; [ ]; + "notify.twilio_call" = ps: with ps; [ aiohttp-cors twilio ]; + "notify.twilio_sms" = ps: with ps; [ aiohttp-cors twilio ]; "notify.twitter" = ps: with ps; [ ]; "notify.webostv" = ps: with ps; [ ]; "notify.xmpp" = ps: with ps; [ pyasn1-modules pyasn1 sleekxmpp ]; "notify.yessssms" = ps: with ps; [ ]; "nuheat" = ps: with ps; [ ]; "nuimo_controller" = ps: with ps; [ ]; + "octoprint" = ps: with ps; [ ]; + "panel_custom" = ps: with ps; [ aiohttp-cors ]; + "panel_iframe" = ps: with ps; [ aiohttp-cors ]; + "persistent_notification" = ps: with ps; [ ]; "pilight" = ps: with ps; [ ]; - "prometheus" = ps: with ps; [ prometheus_client ]; + "plant" = ps: with ps; [ ]; + "prometheus" = ps: with ps; [ prometheus_client aiohttp-cors ]; + "proximity" = ps: with ps; [ ]; "python_script" = ps: with ps; [ ]; "qwikswitch" = ps: with ps; [ ]; "rainbird" = ps: with ps; [ ]; @@ -264,50 +693,115 @@ "rainmachine" = ps: with ps; [ ]; "raspihats" = ps: with ps; [ ]; "recorder" = ps: with ps; [ sqlalchemy ]; + "recorder.const" = ps: with ps; [ ]; + "recorder.migration" = ps: with ps; [ ]; + "recorder.purge" = ps: with ps; [ ]; + "recorder.util" = ps: with ps; [ ]; "remember_the_milk" = ps: with ps; [ httplib2 ]; + "remote" = ps: with ps; [ ]; + "remote.apple_tv" = ps: with ps; [ ]; + "remote.demo" = ps: with ps; [ ]; "remote.harmony" = ps: with ps; [ ]; "remote.itach" = ps: with ps; [ ]; + "remote.kira" = ps: with ps; [ ]; "remote.xiaomi_miio" = ps: with ps; [ construct ]; + "rest_command" = ps: with ps; [ ]; "rflink" = ps: with ps; [ ]; "rfxtrx" = ps: with ps; [ ]; "ring" = ps: with ps; [ ]; "rpi_gpio" = ps: with ps; [ ]; "rpi_pfio" = ps: with ps; [ ]; + "rss_feed_template" = ps: with ps; [ aiohttp-cors ]; "satel_integra" = ps: with ps; [ ]; + "scene" = ps: with ps; [ ]; + "scene.deconz" = ps: with ps; [ ]; + "scene.homeassistant" = ps: with ps; [ ]; "scene.hunterdouglas_powerview" = ps: with ps; [ ]; + "scene.knx" = ps: with ps; [ ]; + "scene.lifx_cloud" = ps: with ps; [ ]; + "scene.litejet" = ps: with ps; [ ]; + "scene.lutron_caseta" = ps: with ps; [ ]; + "scene.tahoma" = ps: with ps; [ ]; + "scene.velux" = ps: with ps; [ ]; + "scene.vera" = ps: with ps; [ ]; + "scene.wink" = ps: with ps; [ ]; + "script" = ps: with ps; [ ]; "scsgate" = ps: with ps; [ ]; + "sensor" = ps: with ps; [ ]; + "sensor.abode" = ps: with ps; [ ]; + "sensor.ads" = ps: with ps; [ ]; "sensor.airvisual" = ps: with ps; [ pyairvisual ]; + "sensor.alarmdecoder" = ps: with ps; [ ]; "sensor.alpha_vantage" = ps: with ps; [ ]; + "sensor.amcrest" = ps: with ps; [ ha-ffmpeg ]; + "sensor.android_ip_webcam" = ps: with ps; [ ]; + "sensor.apcupsd" = ps: with ps; [ ]; + "sensor.api_streams" = ps: with ps; [ ]; + "sensor.arduino" = ps: with ps; [ ]; + "sensor.arest" = ps: with ps; [ ]; + "sensor.arlo" = ps: with ps; [ ]; + "sensor.arwn" = ps: with ps; [ paho-mqtt ]; "sensor.bbox" = ps: with ps; [ ]; "sensor.bh1750" = ps: with ps; [ ]; "sensor.bitcoin" = ps: with ps; [ ]; + "sensor.blink" = ps: with ps; [ ]; "sensor.blockchain" = ps: with ps; [ ]; + "sensor.bloomsky" = ps: with ps; [ ]; "sensor.bme280" = ps: with ps; [ ]; "sensor.bme680" = ps: with ps; [ ]; + "sensor.bmw_connected_drive" = ps: with ps; [ ]; + "sensor.bom" = ps: with ps; [ ]; "sensor.broadlink" = ps: with ps; [ ]; "sensor.buienradar" = ps: with ps; [ ]; + "sensor.canary" = ps: with ps; [ ]; + "sensor.cert_expiry" = ps: with ps; [ ]; + "sensor.citybikes" = ps: with ps; [ ]; + "sensor.coinbase" = ps: with ps; [ ]; "sensor.coinmarketcap" = ps: with ps; [ coinmarketcap ]; + "sensor.comed_hourly_pricing" = ps: with ps; [ ]; + "sensor.comfoconnect" = ps: with ps; [ ]; + "sensor.command_line" = ps: with ps; [ ]; "sensor.cpuspeed" = ps: with ps; [ ]; "sensor.crimereports" = ps: with ps; [ ]; "sensor.cups" = ps: with ps; [ pycups ]; + "sensor.currencylayer" = ps: with ps; [ ]; + "sensor.daikin" = ps: with ps; [ ]; "sensor.darksky" = ps: with ps; [ ]; + "sensor.deconz" = ps: with ps; [ ]; "sensor.deluge" = ps: with ps; [ deluge-client ]; + "sensor.demo" = ps: with ps; [ ]; "sensor.deutsche_bahn" = ps: with ps; [ ]; "sensor.dht" = ps: with ps; [ ]; "sensor.discogs" = ps: with ps; [ discogs_client ]; "sensor.dnsip" = ps: with ps; [ aiodns ]; "sensor.dovado" = ps: with ps; [ ]; "sensor.dsmr" = ps: with ps; [ ]; + "sensor.dte_energy_bridge" = ps: with ps; [ ]; + "sensor.dublin_bus_transport" = ps: with ps; [ ]; + "sensor.dwd_weather_warnings" = ps: with ps; [ ]; "sensor.dweet" = ps: with ps; [ ]; + "sensor.dyson" = ps: with ps; [ ]; + "sensor.ebox" = ps: with ps; [ ]; + "sensor.ecobee" = ps: with ps; [ ]; "sensor.eddystone_temperature" = ps: with ps; [ construct ]; + "sensor.efergy" = ps: with ps; [ ]; + "sensor.eight_sleep" = ps: with ps; [ ]; "sensor.eliqonline" = ps: with ps; [ ]; + "sensor.emoncms" = ps: with ps; [ ]; + "sensor.enocean" = ps: with ps; [ ]; "sensor.envirophat" = ps: with ps; [ ]; + "sensor.envisalink" = ps: with ps; [ ]; "sensor.etherscan" = ps: with ps; [ ]; + "sensor.fail2ban" = ps: with ps; [ ]; "sensor.fastdotcom" = ps: with ps; [ ]; "sensor.fedex" = ps: with ps; [ ]; "sensor.fido" = ps: with ps; [ ]; - "sensor.fitbit" = ps: with ps; [ ]; + "sensor.file" = ps: with ps; [ ]; + "sensor.filesize" = ps: with ps; [ ]; + "sensor.filter" = ps: with ps; [ ]; + "sensor.fitbit" = ps: with ps; [ aiohttp-cors ]; "sensor.fixer" = ps: with ps; [ ]; + "sensor.folder" = ps: with ps; [ ]; "sensor.foobot" = ps: with ps; [ ]; "sensor.fritzbox_callmonitor" = ps: with ps; [ fritzconnection ]; "sensor.fritzbox_netmonitor" = ps: with ps; [ fritzconnection ]; @@ -315,42 +809,93 @@ "sensor.geizhals" = ps: with ps; [ beautifulsoup4 ]; "sensor.geo_rss_events" = ps: with ps; [ feedparser ]; "sensor.gitter" = ps: with ps; [ ]; + "sensor.glances" = ps: with ps; [ ]; "sensor.google_travel_time" = ps: with ps; [ ]; + "sensor.google_wifi" = ps: with ps; [ ]; "sensor.gpsd" = ps: with ps; [ ]; "sensor.gtfs" = ps: with ps; [ ]; + "sensor.haveibeenpwned" = ps: with ps; [ ]; + "sensor.hddtemp" = ps: with ps; [ ]; + "sensor.history_stats" = ps: with ps; [ aiohttp-cors sqlalchemy ]; + "sensor.hive" = ps: with ps; [ ]; + "sensor.homematic" = ps: with ps; [ pyhomematic ]; + "sensor.homematicip_cloud" = ps: with ps; [ ]; "sensor.hp_ilo" = ps: with ps; [ ]; "sensor.htu21d" = ps: with ps; [ ]; "sensor.hydroquebec" = ps: with ps; [ ]; + "sensor.ihc" = ps: with ps; [ ]; "sensor.imap" = ps: with ps; [ aioimaplib ]; + "sensor.imap_email_content" = ps: with ps; [ ]; "sensor.influxdb" = ps: with ps; [ influxdb ]; + "sensor.insteon_plm" = ps: with ps; [ ]; + "sensor.ios" = ps: with ps; [ aiohttp-cors zeroconf ]; + "sensor.iota" = ps: with ps; [ ]; "sensor.irish_rail_transport" = ps: with ps; [ ]; + "sensor.isy994" = ps: with ps; [ ]; + "sensor.juicenet" = ps: with ps; [ ]; + "sensor.kira" = ps: with ps; [ ]; + "sensor.knx" = ps: with ps; [ ]; "sensor.kwb" = ps: with ps; [ ]; "sensor.lacrosse" = ps: with ps; [ ]; "sensor.lastfm" = ps: with ps; [ pylast ]; "sensor.linux_battery" = ps: with ps; [ batinfo ]; + "sensor.london_air" = ps: with ps; [ ]; + "sensor.london_underground" = ps: with ps; [ ]; "sensor.loopenergy" = ps: with ps; [ ]; "sensor.luftdaten" = ps: with ps; [ luftdaten ]; "sensor.lyft" = ps: with ps; [ ]; + "sensor.melissa" = ps: with ps; [ ]; "sensor.metoffice" = ps: with ps; [ ]; "sensor.mfi" = ps: with ps; [ ]; "sensor.mhz19" = ps: with ps; [ ]; "sensor.miflora" = ps: with ps; [ ]; + "sensor.min_max" = ps: with ps; [ ]; "sensor.mitemp_bt" = ps: with ps; [ ]; + "sensor.modbus" = ps: with ps; [ ]; "sensor.modem_callerid" = ps: with ps; [ ]; + "sensor.mold_indicator" = ps: with ps; [ ]; + "sensor.moon" = ps: with ps; [ ]; "sensor.mopar" = ps: with ps; [ ]; + "sensor.mqtt" = ps: with ps; [ paho-mqtt ]; + "sensor.mqtt_room" = ps: with ps; [ paho-mqtt ]; "sensor.mvglive" = ps: with ps; [ PyMVGLive ]; + "sensor.mychevy" = ps: with ps; [ ]; + "sensor.mysensors" = ps: with ps; [ ]; "sensor.nederlandse_spoorwegen" = ps: with ps; [ ]; + "sensor.nest" = ps: with ps; [ ]; + "sensor.netatmo" = ps: with ps; [ ]; + "sensor.netdata" = ps: with ps; [ ]; "sensor.neurio_energy" = ps: with ps; [ ]; "sensor.nut" = ps: with ps; [ ]; + "sensor.nzbget" = ps: with ps; [ ]; + "sensor.octoprint" = ps: with ps; [ ]; + "sensor.ohmconnect" = ps: with ps; [ ]; + "sensor.onewire" = ps: with ps; [ ]; "sensor.openevse" = ps: with ps; [ ]; + "sensor.openexchangerates" = ps: with ps; [ ]; + "sensor.openhardwaremonitor" = ps: with ps; [ ]; + "sensor.opensky" = ps: with ps; [ ]; "sensor.openweathermap" = ps: with ps; [ pyowm ]; "sensor.otp" = ps: with ps; [ ]; + "sensor.pi_hole" = ps: with ps; [ ]; + "sensor.pilight" = ps: with ps; [ ]; "sensor.plex" = ps: with ps; [ ]; "sensor.pocketcasts" = ps: with ps; [ ]; "sensor.pollen" = ps: with ps; [ ]; "sensor.postnl" = ps: with ps; [ ]; "sensor.pushbullet" = ps: with ps; [ pushbullet ]; + "sensor.pvoutput" = ps: with ps; [ ]; + "sensor.pyload" = ps: with ps; [ ]; "sensor.qnap" = ps: with ps; [ ]; + "sensor.qwikswitch" = ps: with ps; [ ]; + "sensor.radarr" = ps: with ps; [ ]; + "sensor.rainbird" = ps: with ps; [ ]; + "sensor.raincloud" = ps: with ps; [ ]; + "sensor.random" = ps: with ps; [ ]; + "sensor.rest" = ps: with ps; [ ]; + "sensor.rflink" = ps: with ps; [ ]; + "sensor.rfxtrx" = ps: with ps; [ ]; + "sensor.ring" = ps: with ps; [ ]; "sensor.ripple" = ps: with ps; [ ]; "sensor.sabnzbd" = ps: with ps; [ ]; "sensor.scrape" = ps: with ps; [ beautifulsoup4 ]; @@ -361,89 +906,228 @@ "sensor.serial_pm" = ps: with ps; [ ]; "sensor.shodan" = ps: with ps; [ ]; "sensor.sht31" = ps: with ps; [ ]; + "sensor.sigfox" = ps: with ps; [ ]; + "sensor.simulated" = ps: with ps; [ ]; + "sensor.skybeacon" = ps: with ps; [ ]; + "sensor.skybell" = ps: with ps; [ ]; + "sensor.sleepiq" = ps: with ps; [ ]; "sensor.sma" = ps: with ps; [ ]; + "sensor.smappee" = ps: with ps; [ ]; "sensor.snmp" = ps: with ps; [ pysnmp ]; "sensor.sochain" = ps: with ps; [ ]; "sensor.socialblade" = ps: with ps; [ ]; + "sensor.sonarr" = ps: with ps; [ ]; "sensor.speedtest" = ps: with ps; [ ]; "sensor.spotcrime" = ps: with ps; [ ]; "sensor.sql" = ps: with ps; [ sqlalchemy ]; "sensor.startca" = ps: with ps; [ xmltodict ]; + "sensor.statistics" = ps: with ps; [ ]; "sensor.steam_online" = ps: with ps; [ ]; + "sensor.supervisord" = ps: with ps; [ ]; "sensor.swiss_hydrological_data" = ps: with ps; [ xmltodict ]; "sensor.swiss_public_transport" = ps: with ps; [ ]; "sensor.syncthru" = ps: with ps; [ ]; "sensor.synologydsm" = ps: with ps; [ ]; "sensor.systemmonitor" = ps: with ps; [ psutil ]; "sensor.sytadin" = ps: with ps; [ beautifulsoup4 ]; + "sensor.tado" = ps: with ps; [ ]; + "sensor.tahoma" = ps: with ps; [ ]; "sensor.tank_utility" = ps: with ps; [ ]; + "sensor.tcp" = ps: with ps; [ ]; "sensor.ted5000" = ps: with ps; [ xmltodict ]; + "sensor.teksavvy" = ps: with ps; [ ]; + "sensor.tellduslive" = ps: with ps; [ ]; + "sensor.tellstick" = ps: with ps; [ ]; "sensor.temper" = ps: with ps; [ ]; + "sensor.template" = ps: with ps; [ ]; + "sensor.tesla" = ps: with ps; [ ]; + "sensor.thethingsnetwork" = ps: with ps; [ ]; "sensor.thinkingcleaner" = ps: with ps; [ ]; "sensor.tibber" = ps: with ps; [ ]; + "sensor.time_date" = ps: with ps; [ ]; + "sensor.toon" = ps: with ps; [ ]; + "sensor.torque" = ps: with ps; [ aiohttp-cors ]; + "sensor.tradfri" = ps: with ps; [ ]; + "sensor.trafikverket_weatherstation" = ps: with ps; [ ]; "sensor.transmission" = ps: with ps; [ transmissionrpc ]; "sensor.travisci" = ps: with ps; [ ]; "sensor.twitch" = ps: with ps; [ ]; "sensor.uber" = ps: with ps; [ ]; + "sensor.uk_transport" = ps: with ps; [ ]; + "sensor.upnp" = ps: with ps; [ aiohttp-cors ]; "sensor.ups" = ps: with ps; [ ]; + "sensor.uptime" = ps: with ps; [ ]; "sensor.uscis" = ps: with ps; [ ]; + "sensor.usps" = ps: with ps; [ ]; "sensor.vasttrafik" = ps: with ps; [ ]; + "sensor.vera" = ps: with ps; [ ]; + "sensor.verisure" = ps: with ps; [ ]; + "sensor.version" = ps: with ps; [ ]; + "sensor.viaggiatreno" = ps: with ps; [ ]; + "sensor.volvooncall" = ps: with ps; [ ]; + "sensor.vultr" = ps: with ps; [ vultr ]; "sensor.waqi" = ps: with ps; [ ]; + "sensor.waterfurnace" = ps: with ps; [ ]; "sensor.waze_travel_time" = ps: with ps; [ ]; "sensor.whois" = ps: with ps; [ ]; + "sensor.wink" = ps: with ps; [ ]; + "sensor.worldclock" = ps: with ps; [ ]; + "sensor.worldtidesinfo" = ps: with ps; [ ]; + "sensor.worxlandroid" = ps: with ps; [ ]; + "sensor.wsdot" = ps: with ps; [ ]; + "sensor.wunderground" = ps: with ps; [ ]; "sensor.xbox_live" = ps: with ps; [ ]; + "sensor.xiaomi_aqara" = ps: with ps; [ ]; "sensor.xiaomi_miio" = ps: with ps; [ construct ]; "sensor.yahoo_finance" = ps: with ps; [ ]; "sensor.yr" = ps: with ps; [ xmltodict ]; "sensor.yweather" = ps: with ps; [ yahooweather ]; + "sensor.zabbix" = ps: with ps; [ ]; + "sensor.zamg" = ps: with ps; [ ]; "sensor.zestimate" = ps: with ps; [ xmltodict ]; + "sensor.zha" = ps: with ps; [ ]; + "sensor.zigbee" = ps: with ps; [ ]; + "sensor.zoneminder" = ps: with ps; [ ]; + "sensor.zwave" = ps: with ps; [ ]; + "shell_command" = ps: with ps; [ ]; "shiftr" = ps: with ps; [ paho-mqtt ]; + "shopping_list" = ps: with ps; [ aiohttp-cors ]; "skybell" = ps: with ps; [ ]; "sleepiq" = ps: with ps; [ ]; "smappee" = ps: with ps; [ ]; + "snips" = ps: with ps; [ paho-mqtt ]; "spc" = ps: with ps; [ websockets ]; + "splunk" = ps: with ps; [ ]; "statsd" = ps: with ps; [ statsd ]; + "sun" = ps: with ps; [ ]; + "switch" = ps: with ps; [ ]; + "switch.abode" = ps: with ps; [ ]; "switch.acer_projector" = ps: with ps; [ pyserial ]; + "switch.ads" = ps: with ps; [ ]; + "switch.amcrest" = ps: with ps; [ ha-ffmpeg ]; + "switch.android_ip_webcam" = ps: with ps; [ ]; "switch.anel_pwrctrl" = ps: with ps; [ ]; + "switch.arduino" = ps: with ps; [ ]; + "switch.arest" = ps: with ps; [ ]; + "switch.bbb_gpio" = ps: with ps; [ ]; "switch.broadlink" = ps: with ps; [ ]; + "switch.command_line" = ps: with ps; [ ]; "switch.deluge" = ps: with ps; [ deluge-client ]; + "switch.demo" = ps: with ps; [ ]; + "switch.digital_ocean" = ps: with ps; [ digital-ocean ]; "switch.digitalloggers" = ps: with ps; [ ]; "switch.dlink" = ps: with ps; [ ]; + "switch.doorbird" = ps: with ps; [ ]; "switch.edimax" = ps: with ps; [ ]; + "switch.enocean" = ps: with ps; [ ]; + "switch.eufy" = ps: with ps; [ ]; + "switch.flux" = ps: with ps; [ ]; + "switch.fritzbox" = ps: with ps; [ ]; "switch.fritzdect" = ps: with ps; [ ]; + "switch.gc100" = ps: with ps; [ ]; + "switch.hdmi_cec" = ps: with ps; [ ]; "switch.hikvisioncam" = ps: with ps; [ ]; + "switch.hive" = ps: with ps; [ ]; + "switch.homekit_controller" = ps: with ps; [ ]; + "switch.homematic" = ps: with ps; [ pyhomematic ]; + "switch.hook" = ps: with ps; [ ]; + "switch.ihc" = ps: with ps; [ ]; + "switch.insteon_local" = ps: with ps; [ ]; + "switch.insteon_plm" = ps: with ps; [ ]; + "switch.isy994" = ps: with ps; [ ]; + "switch.kankun" = ps: with ps; [ ]; + "switch.knx" = ps: with ps; [ ]; + "switch.linode" = ps: with ps; [ linode-api ]; + "switch.litejet" = ps: with ps; [ ]; + "switch.lutron_caseta" = ps: with ps; [ ]; "switch.mfi" = ps: with ps; [ ]; + "switch.mochad" = ps: with ps; [ ]; + "switch.modbus" = ps: with ps; [ ]; + "switch.mqtt" = ps: with ps; [ paho-mqtt ]; + "switch.mysensors" = ps: with ps; [ ]; "switch.mystrom" = ps: with ps; [ ]; - "switch.netio" = ps: with ps; [ ]; + "switch.neato" = ps: with ps; [ ]; + "switch.netio" = ps: with ps; [ aiohttp-cors ]; "switch.orvibo" = ps: with ps; [ ]; + "switch.pilight" = ps: with ps; [ ]; + "switch.pulseaudio_loopback" = ps: with ps; [ ]; + "switch.qwikswitch" = ps: with ps; [ ]; "switch.rachio" = ps: with ps; [ ]; + "switch.rainbird" = ps: with ps; [ ]; + "switch.raincloud" = ps: with ps; [ ]; + "switch.rainmachine" = ps: with ps; [ ]; + "switch.raspihats" = ps: with ps; [ ]; + "switch.rest" = ps: with ps; [ ]; + "switch.rflink" = ps: with ps; [ ]; + "switch.rfxtrx" = ps: with ps; [ ]; + "switch.rpi_gpio" = ps: with ps; [ ]; + "switch.rpi_pfio" = ps: with ps; [ ]; "switch.rpi_rf" = ps: with ps; [ ]; + "switch.scsgate" = ps: with ps; [ ]; + "switch.skybell" = ps: with ps; [ ]; + "switch.smappee" = ps: with ps; [ ]; "switch.snmp" = ps: with ps; [ pysnmp ]; + "switch.tahoma" = ps: with ps; [ ]; + "switch.tellduslive" = ps: with ps; [ ]; + "switch.tellstick" = ps: with ps; [ ]; + "switch.telnet" = ps: with ps; [ ]; + "switch.template" = ps: with ps; [ ]; + "switch.tesla" = ps: with ps; [ ]; "switch.thinkingcleaner" = ps: with ps; [ ]; + "switch.toon" = ps: with ps; [ ]; "switch.tplink" = ps: with ps; [ ]; "switch.transmission" = ps: with ps; [ transmissionrpc ]; + "switch.upcloud" = ps: with ps; [ ]; + "switch.velbus" = ps: with ps; [ ]; + "switch.vera" = ps: with ps; [ ]; + "switch.verisure" = ps: with ps; [ ]; "switch.vesync" = ps: with ps; [ ]; + "switch.volvooncall" = ps: with ps; [ ]; + "switch.vultr" = ps: with ps; [ vultr ]; "switch.wake_on_lan" = ps: with ps; [ wakeonlan ]; + "switch.wemo" = ps: with ps; [ ]; + "switch.wink" = ps: with ps; [ ]; + "switch.xiaomi_aqara" = ps: with ps; [ ]; "switch.xiaomi_miio" = ps: with ps; [ construct ]; + "switch.zha" = ps: with ps; [ ]; + "switch.zigbee" = ps: with ps; [ ]; + "switch.zoneminder" = ps: with ps; [ ]; + "switch.zwave" = ps: with ps; [ ]; + "system_log" = ps: with ps; [ aiohttp-cors ]; "tado" = ps: with ps; [ ]; "tahoma" = ps: with ps; [ ]; "telegram_bot" = ps: with ps; [ python-telegram-bot ]; + "telegram_bot.broadcast" = ps: with ps; [ ]; + "telegram_bot.polling" = ps: with ps; [ ]; + "telegram_bot.webhooks" = ps: with ps; [ aiohttp-cors ]; "tellduslive" = ps: with ps; [ ]; "tellstick" = ps: with ps; [ ]; "tesla" = ps: with ps; [ ]; + "thethingsnetwork" = ps: with ps; [ ]; "thingspeak" = ps: with ps; [ ]; + "timer" = ps: with ps; [ ]; "toon" = ps: with ps; [ ]; "tradfri" = ps: with ps; [ ]; - "tts" = ps: with ps; [ mutagen ]; + "tts" = ps: with ps; [ mutagen aiohttp-cors ]; "tts.amazon_polly" = ps: with ps; [ boto3 ]; "tts.baidu" = ps: with ps; [ ]; + "tts.demo" = ps: with ps; [ ]; "tts.google" = ps: with ps; [ ]; + "tts.marytts" = ps: with ps; [ ]; "tts.microsoft" = ps: with ps; [ ]; - "twilio" = ps: with ps; [ twilio ]; + "tts.picotts" = ps: with ps; [ ]; + "tts.voicerss" = ps: with ps; [ ]; + "tts.yandextts" = ps: with ps; [ ]; + "twilio" = ps: with ps; [ aiohttp-cors twilio ]; "upcloud" = ps: with ps; [ ]; "updater" = ps: with ps; [ distro ]; - "upnp" = ps: with ps; [ ]; + "upnp" = ps: with ps; [ aiohttp-cors ]; "usps" = ps: with ps; [ ]; + "vacuum" = ps: with ps; [ ]; + "vacuum.demo" = ps: with ps; [ ]; + "vacuum.dyson" = ps: with ps; [ ]; + "vacuum.mqtt" = ps: with ps; [ paho-mqtt ]; + "vacuum.neato" = ps: with ps; [ ]; "vacuum.roomba" = ps: with ps; [ ]; "vacuum.xiaomi_miio" = ps: with ps; [ construct ]; "velbus" = ps: with ps; [ ]; @@ -454,18 +1138,36 @@ "vultr" = ps: with ps; [ vultr ]; "wake_on_lan" = ps: with ps; [ wakeonlan ]; "waterfurnace" = ps: with ps; [ ]; + "weather" = ps: with ps; [ ]; + "weather.bom" = ps: with ps; [ ]; "weather.buienradar" = ps: with ps; [ ]; "weather.darksky" = ps: with ps; [ ]; + "weather.demo" = ps: with ps; [ ]; + "weather.ecobee" = ps: with ps; [ ]; "weather.metoffice" = ps: with ps; [ ]; "weather.openweathermap" = ps: with ps; [ pyowm ]; "weather.yweather" = ps: with ps; [ yahooweather ]; + "weather.zamg" = ps: with ps; [ ]; + "weblink" = ps: with ps; [ ]; + "websocket_api" = ps: with ps; [ aiohttp-cors ]; "wemo" = ps: with ps; [ ]; "wink" = ps: with ps; [ ]; "xiaomi_aqara" = ps: with ps; [ ]; "zabbix" = ps: with ps; [ ]; - "zeroconf" = ps: with ps; [ zeroconf ]; + "zeroconf" = ps: with ps; [ aiohttp-cors zeroconf ]; "zha" = ps: with ps; [ ]; + "zha.const" = ps: with ps; [ ]; "zigbee" = ps: with ps; [ ]; - "zwave" = ps: with ps; [ pydispatcher python_openzwave ]; + "zone" = ps: with ps; [ ]; + "zone.config_flow" = ps: with ps; [ ]; + "zone.const" = ps: with ps; [ ]; + "zone.zone" = ps: with ps; [ ]; + "zoneminder" = ps: with ps; [ ]; + "zwave" = ps: with ps; [ python_openzwave pydispatcher ]; + "zwave.const" = ps: with ps; [ ]; + "zwave.discovery_schemas" = ps: with ps; [ ]; + "zwave.node_entity" = ps: with ps; [ ]; + "zwave.util" = ps: with ps; [ ]; + "zwave.workaround" = ps: with ps; [ ]; }; } diff --git a/pkgs/servers/home-assistant/parse-requirements.py b/pkgs/servers/home-assistant/parse-requirements.py index 5beeaccf088..4518d4dd406 100755 --- a/pkgs/servers/home-assistant/parse-requirements.py +++ b/pkgs/servers/home-assistant/parse-requirements.py @@ -1,5 +1,5 @@ #! /usr/bin/env nix-shell -#! nix-shell -i python3 -p "python3.withPackages (ps: with ps; [ ])" +#! nix-shell -i python3 -p "python3.withPackages (ps: with ps; [ requests pyyaml pytz pip jinja2 voluptuous typing aiohttp async-timeout astral certifi attrs ])" # # This script downloads https://github.com/home-assistant/home-assistant/blob/master/requirements_all.txt. # This file contains lines of the form @@ -14,15 +14,17 @@ # Then, a Nix attribute set mapping component name to dependencies is created. from urllib.request import urlopen -from collections import OrderedDict +import tempfile +from io import BytesIO +import tarfile +import importlib import subprocess import os import sys import json import re -GENERAL_PREFIX = '# homeassistant.' -COMPONENT_PREFIX = GENERAL_PREFIX + 'components.' +COMPONENT_PREFIX = 'homeassistant.components' PKG_SET = 'python3Packages' # If some requirements are matched by multiple python packages, @@ -37,28 +39,32 @@ def get_version(): m = re.search('hassVersion = "([\\d\\.]+)";', f.read()) return m.group(1) -def fetch_reqs(version='master'): - requirements = {} - with urlopen('https://github.com/home-assistant/home-assistant/raw/{}/requirements_all.txt'.format(version)) as response: - components = [] - for line in response.read().decode().splitlines(): - if line == '': - components = [] - elif line[:len(COMPONENT_PREFIX)] == COMPONENT_PREFIX: - component = line[len(COMPONENT_PREFIX):] - components.append(component) - if component not in requirements: - requirements[component] = [] - elif line[:len(GENERAL_PREFIX)] != GENERAL_PREFIX: # skip lines like "# homeassistant.scripts.xyz" - # Some dependencies are commented out because they don't build on all platforms - # Since they are still required for running the component, don't skip them - if line[:2] == '# ': - line = line[2:] - # Some requirements are specified by url, e.g. https://example.org/foobar#xyz==1.0.0 - # Therefore, if there's a "#" in the line, only take the part after it - line = line[line.find('#') + 1:] - for component in components: - requirements[component].append(line) +def parse_components(version='master'): + components = {} + with tempfile.TemporaryDirectory() as tmp: + with urlopen('https://github.com/home-assistant/home-assistant/archive/{}.tar.gz'.format(version)) as response: + tarfile.open(fileobj=BytesIO(response.read())).extractall(tmp) + # Use part of a script from the Home Assistant codebase + sys.path.append(tmp + '/home-assistant-{}'.format(version)) + from script.gen_requirements_all import explore_module + for package in explore_module(COMPONENT_PREFIX, True): + # Remove 'homeassistant.components.' prefix + component = package[len(COMPONENT_PREFIX + '.'):] + try: + module = importlib.import_module(package) + components[component] = {} + components[component]['requirements'] = getattr(module, 'REQUIREMENTS', []) + components[component]['dependencies'] = getattr(module, 'DEPENDENCIES', []) + # If there is an ImportError, the imported file is not the main file of the component + except ImportError: + continue + return components + +# Recursively get the requirements of a component and its dependencies +def get_reqs(components, component): + requirements = set(components[component]['requirements']) + for dependency in components[component]['dependencies']: + requirements.update(get_reqs(components, dependency)) return requirements # Store a JSON dump of Nixpkgs' python3Packages @@ -95,11 +101,11 @@ def name_to_attr_path(req): version = get_version() print('Generating component-packages.nix for version {}'.format(version)) -requirements = fetch_reqs(version=version) +components = parse_components(version=version) build_inputs = {} -for component, reqs in OrderedDict(sorted(requirements.items())).items(): +for component in sorted(components.keys()): attr_paths = [] - for req in reqs: + for req in get_reqs(components, component): name = req.split('==')[0] attr_path = name_to_attr_path(name) if attr_path is not None: @@ -108,11 +114,8 @@ for component, reqs in OrderedDict(sorted(requirements.items())).items(): else: build_inputs[component] = attr_paths -# Only select components which have any dependency -#build_inputs = {k: v for k, v in build_inputs.items() if len(v) > 0} - with open(os.path.dirname(sys.argv[0]) + '/component-packages.nix', 'w') as f: - f.write('# Generated from parse-requirements.py\n') + f.write('# Generated by parse-requirements.py\n') f.write('# Do not edit!\n\n') f.write('{\n') f.write(' version = "{}";\n'.format(version))