update
This commit is contained in:
parent
91fc9c38ff
commit
f261b582b0
|
@ -1 +1 @@
|
|||
2021.9.6
|
||||
2022.8.7
|
|
@ -15,3 +15,4 @@ node_modules
|
|||
/custom_components/scheduler
|
||||
/custom_components/pyscript
|
||||
/themes
|
||||
/.storage/hacs/*.hacs
|
3038
.storage/auth
3038
.storage/auth
File diff suppressed because it is too large
Load Diff
|
@ -1,9 +1,11 @@
|
|||
{
|
||||
"version": 1,
|
||||
"minor_version": 1,
|
||||
"key": "auth_module.totp",
|
||||
"data": {
|
||||
"users": {
|
||||
"2ffcb10d3db745b396789364fdef72ec": "VSSLF24TFVBBITYM"
|
||||
"2ffcb10d3db745b396789364fdef72ec": "VSSLF24TFVBBITYM",
|
||||
"bd0f10a32b324e85998881cb5b748d0f": "BUFHT7N5LWOYLARK2NPWFPTFN6FP6Z2D"
|
||||
}
|
||||
},
|
||||
"key": "auth_module.totp",
|
||||
"version": 1
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,14 +1,15 @@
|
|||
{
|
||||
"version": 1,
|
||||
"key": "frontend.user_data_2ffcb10d3db745b396789364fdef72ec",
|
||||
"data": {
|
||||
"core": {
|
||||
"showAdvanced": true
|
||||
},
|
||||
"language": {
|
||||
"language": "de",
|
||||
"number_format": "language",
|
||||
"time_format": "language"
|
||||
}
|
||||
"version": 1,
|
||||
"minor_version": 1,
|
||||
"key": "frontend.user_data_2ffcb10d3db745b396789364fdef72ec",
|
||||
"data": {
|
||||
"core": {
|
||||
"showAdvanced": true
|
||||
},
|
||||
"language": {
|
||||
"language": "de",
|
||||
"number_format": "language",
|
||||
"time_format": "language"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"version": 1,
|
||||
"minor_version": 1,
|
||||
"key": "frontend.user_data_bd0f10a32b324e85998881cb5b748d0f",
|
||||
"data": {
|
||||
"core": {
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
{
|
||||
"version": 1,
|
||||
"minor_version": 1,
|
||||
"key": "google_assistant",
|
||||
"data": {
|
||||
"agent_user_ids": {
|
||||
"2ffcb10d3db745b396789364fdef72ec": {}
|
||||
"2ffcb10d3db745b396789364fdef72ec": {
|
||||
"local_webhook_id": "7f9f90ea0609767552e3c86e6b4629b30ccf378e57084c5d3a3d461c909102f5"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,20 +1,67 @@
|
|||
{
|
||||
"version": "6",
|
||||
"key": "hacs.hacs",
|
||||
"data": {
|
||||
"view": "Grid",
|
||||
"compact": false,
|
||||
"onboarding_done": false,
|
||||
"archived_repositories": [
|
||||
"atomic7777/atomic_calendar",
|
||||
"atomic7777/atomic_calendar",
|
||||
"mampfes/hacs_wiffi",
|
||||
"PTST/O365-HomeAssistant"
|
||||
],
|
||||
"renamed_repositories": {
|
||||
"xMrVizzy/Minecraft-Version": "kraineff/minecraft-version",
|
||||
"xMrVizzy/Philips-AirPurifier": "kraineff/philips-airpurifier",
|
||||
"scottyphillips/mitsubishi_hass": "scottyphillips/echonetlite_homeassistant"
|
||||
}
|
||||
}
|
||||
"version": "6",
|
||||
"minor_version": 1,
|
||||
"key": "hacs.hacs",
|
||||
"data": {
|
||||
"archived_repositories": [
|
||||
"atomic7777/atomic_calendar",
|
||||
"mampfes/hacs_wiffi",
|
||||
"PTST/O365-HomeAssistant",
|
||||
"pilotak/homeassistant-mikrotik",
|
||||
"estevez-dev/extended-banner-card",
|
||||
"custom-components/custom_components",
|
||||
"custom-components/sensor.custom_components",
|
||||
"Michsior14/ha-laser-egg",
|
||||
"custom-components/sensor.tautulli",
|
||||
"ppanagiotis/pymusiccast",
|
||||
"Kraineff/philips-airpurifier",
|
||||
"jensweimann/awb",
|
||||
"briis/smartweather",
|
||||
"KoljaWindeler/kaco",
|
||||
"dr1rrb/ha-twinkly",
|
||||
"heinoldenhuis/home_assistant_omnik_solar",
|
||||
"DSorlov/hasl-platform",
|
||||
"iantrich/aftership-card",
|
||||
"nagyrobi/home-assistant-custom-components-pfsense-gateways",
|
||||
"pippyn/Home-Assistant-Sensor-Groningen-Afvalwijzer",
|
||||
"maykar/kiosk-mode",
|
||||
"custom-cards/upcoming-media-card",
|
||||
"maykar/lovelace-swipe-navigation",
|
||||
"custom-components/sensor.plex_recently_added",
|
||||
"custom-components/sensor.sonarr_upcoming_media",
|
||||
"custom-components/sensor.radarr_upcoming_media",
|
||||
"maykar/plex_assistant",
|
||||
"custom-components/wienerlinien",
|
||||
"GeorgeSG/lovelace-folder-card",
|
||||
"KTibow/lovelace-dark-soft-ui-theme",
|
||||
"KTibow/lovelace-light-soft-ui-theme",
|
||||
"DCSBL/ha-homewizard-energy",
|
||||
"eavanvalkenburg/sia",
|
||||
"Cyr-ius/hass-hue-service-advanced",
|
||||
"Cyr-ius/hass-cozytouch",
|
||||
"georgezhao2010/climate_ewelink",
|
||||
"custom-components/sensor.custom_aftership"
|
||||
],
|
||||
"renamed_repositories": {
|
||||
"xMrVizzy/Minecraft-Version": "kraineff/minecraft-version",
|
||||
"xMrVizzy/Philips-AirPurifier": "kraineff/philips-airpurifier",
|
||||
"scottyphillips/mitsubishi_hass": "scottyphillips/echonetlite_homeassistant",
|
||||
"idittansikte/bootstrap-grid-card": "ownbee/bootstrap-grid-card",
|
||||
"marksie1988/atomic-calendar-revive": "totaldebug/atomic-calendar-revive",
|
||||
"PepegaBruh/CryptoTracker": "BigNocciolino/CryptoTracker",
|
||||
"custom-components/blueprint": "custom-components/integration_blueprint",
|
||||
"9a4gl/hass-peltec": "9a4gl/hass-centrometal-boiler",
|
||||
"78wesley/Darkish-Theme": "78wesley/Home-Assistant-Darkish-Theme",
|
||||
"KartoffelToby/ai_thermostat": "KartoffelToby/better_thermostat",
|
||||
"nbogojevic/homeassistant-midea-dehumidifier-lan": "nbogojevic/homeassistant-midea-air-appliances-lan",
|
||||
"nikrolls/homeassistant-goldair-climate": "nicole-ashley/homeassistant-goldair-climate",
|
||||
"ulic75/power-distribution-card": "ulic75/power-flow-card",
|
||||
"wills106/homsassistant-solax-modbus": "wills106/homeassistant-solax-modbus",
|
||||
"dmitry-k/yandex_smart_home": "dext0r/yandex_smart_home",
|
||||
"uvjustin/alarmdotcom": "pyalarmdotcom/alarmdotcom",
|
||||
"wernerhp/ha_integration_load_shedding": "wernerhp/ha.integration.load_shedding",
|
||||
"TheLastProject/lovelace-valetudo-map-card": "Hypfer/lovelace-valetudo-map-card"
|
||||
},
|
||||
"ignored_repositories": []
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"version": "6",
|
||||
"minor_version": 1,
|
||||
"key": "hacs/144899700.hacs",
|
||||
"data": {
|
||||
"archived": false,
|
||||
|
@ -13,9 +14,9 @@
|
|||
"domain": "",
|
||||
"domains": [],
|
||||
"downloads": 0,
|
||||
"etag_repository": "W/\"342e0bde964bee684ad6a005abf2196c8b89b3c55ce9d6059659c29d33f84571\"",
|
||||
"etag_repository": "W/\"dcee04e155a6f214619452084692a69a604122200203c448889608db87867fa8\"",
|
||||
"file_name": "slider-entity-row.js",
|
||||
"filename": "",
|
||||
"filename": null,
|
||||
"first_install": false,
|
||||
"fork": false,
|
||||
"full_name": "thomasloven/lovelace-slider-entity-row",
|
||||
|
@ -26,28 +27,28 @@
|
|||
"id": "144899700",
|
||||
"iot_class": null,
|
||||
"installed": true,
|
||||
"installed_commit": "99126b3",
|
||||
"installed_version": "17.1.0",
|
||||
"open_issues": 26,
|
||||
"last_commit": "c227e5a",
|
||||
"last_version": "17.1.0",
|
||||
"last_updated": "2021-08-13T00:34:38Z",
|
||||
"installed_commit": "3587bef",
|
||||
"installed_version": "17.2.1",
|
||||
"open_issues": 27,
|
||||
"last_commit": "c84a0ad",
|
||||
"last_version": "17.2.1",
|
||||
"last_updated": "2022-08-13T19:01:37Z",
|
||||
"manifest_name": null,
|
||||
"new": false,
|
||||
"persistent_directory": null,
|
||||
"pushed_at": "2021-08-13T00:34:38",
|
||||
"pushed_at": "2022-08-13T19:01:37",
|
||||
"releases": true,
|
||||
"render_readme": true,
|
||||
"published_tags": [
|
||||
"17.2.1",
|
||||
"17.2.0",
|
||||
"17.1.0",
|
||||
"17.0.1",
|
||||
"17.0.0",
|
||||
"16",
|
||||
"15"
|
||||
"17.0.0"
|
||||
],
|
||||
"selected_tag": null,
|
||||
"show_beta": false,
|
||||
"stargazers_count": 501,
|
||||
"stargazers_count": 648,
|
||||
"topics": [],
|
||||
"zip_release": false
|
||||
}
|
||||
|
|
|
@ -1,64 +1,65 @@
|
|||
{
|
||||
"version": "6",
|
||||
"key": "hacs/172733314.hacs",
|
||||
"data": {
|
||||
"archived": false,
|
||||
"authors": [
|
||||
"@ludeeus"
|
||||
],
|
||||
"category": "integration",
|
||||
"content_in_root": false,
|
||||
"country": [],
|
||||
"config_flow": true,
|
||||
"default_branch": "main",
|
||||
"description": "HACS gives you a powerful UI to handle downloads of all your custom needs.",
|
||||
"domain": "hacs",
|
||||
"domains": [],
|
||||
"downloads": 34817,
|
||||
"etag_repository": "W/\"379595670a046ed8414f2a3a3fcf1547bfbac2dc64d78ead9f24630c16cb80ee\"",
|
||||
"file_name": "",
|
||||
"filename": "hacs.zip",
|
||||
"first_install": false,
|
||||
"fork": false,
|
||||
"full_name": "hacs/integration",
|
||||
"hacs": "0.19.0",
|
||||
"hide": false,
|
||||
"hide_default_branch": true,
|
||||
"homeassistant": "2021.2.0",
|
||||
"id": "172733314",
|
||||
"iot_class": null,
|
||||
"installed": true,
|
||||
"installed_commit": "b4ae25f",
|
||||
"installed_version": "1.15.2",
|
||||
"open_issues": 6,
|
||||
"last_commit": "b4ae25f",
|
||||
"last_version": "1.15.2",
|
||||
"last_updated": "2021-09-19T01:33:31Z",
|
||||
"manifest_name": "HACS",
|
||||
"new": false,
|
||||
"persistent_directory": null,
|
||||
"pushed_at": "2021-09-19T01:33:31",
|
||||
"releases": true,
|
||||
"render_readme": false,
|
||||
"published_tags": [
|
||||
"1.15.2",
|
||||
"1.15.1",
|
||||
"1.15.0",
|
||||
"1.14.1",
|
||||
"1.14.0"
|
||||
],
|
||||
"selected_tag": null,
|
||||
"show_beta": false,
|
||||
"stargazers_count": 1913,
|
||||
"topics": [
|
||||
"community",
|
||||
"hacktoberfest",
|
||||
"hacs",
|
||||
"home-assistant",
|
||||
"integration",
|
||||
"package-manager",
|
||||
"python"
|
||||
],
|
||||
"zip_release": true
|
||||
}
|
||||
"version": "6",
|
||||
"minor_version": 1,
|
||||
"key": "hacs/172733314.hacs",
|
||||
"data": {
|
||||
"archived": false,
|
||||
"authors": [
|
||||
"@ludeeus"
|
||||
],
|
||||
"category": "integration",
|
||||
"content_in_root": false,
|
||||
"country": [],
|
||||
"config_flow": true,
|
||||
"default_branch": "main",
|
||||
"description": "HACS gives you a powerful UI to handle downloads of all your custom needs.",
|
||||
"domain": "hacs",
|
||||
"domains": [],
|
||||
"downloads": 7257,
|
||||
"etag_repository": "W/\"711c9f5308bfaed56466dbb84dc11ce170e3abaf8bed0ee5cb0b4c189afc1f1c\"",
|
||||
"file_name": "",
|
||||
"filename": "hacs.zip",
|
||||
"first_install": false,
|
||||
"fork": false,
|
||||
"full_name": "hacs/integration",
|
||||
"hacs": "0.19.0",
|
||||
"hide": false,
|
||||
"hide_default_branch": true,
|
||||
"homeassistant": "2022.8.0",
|
||||
"id": "172733314",
|
||||
"iot_class": null,
|
||||
"installed": true,
|
||||
"installed_commit": "8fa59ee",
|
||||
"installed_version": "1.27.0",
|
||||
"open_issues": 0,
|
||||
"last_commit": "8fa59ee",
|
||||
"last_version": "1.27.1",
|
||||
"last_updated": "2022-08-28T08:21:31Z",
|
||||
"manifest_name": "HACS",
|
||||
"new": false,
|
||||
"persistent_directory": null,
|
||||
"pushed_at": "2022-08-28T08:21:31",
|
||||
"releases": true,
|
||||
"render_readme": false,
|
||||
"published_tags": [
|
||||
"1.27.1",
|
||||
"1.27.0",
|
||||
"1.26.2",
|
||||
"1.26.1",
|
||||
"1.26.0"
|
||||
],
|
||||
"selected_tag": "1.27.0",
|
||||
"show_beta": false,
|
||||
"stargazers_count": 2860,
|
||||
"topics": [
|
||||
"community",
|
||||
"hacktoberfest",
|
||||
"hacs",
|
||||
"home-assistant",
|
||||
"integration",
|
||||
"package-manager",
|
||||
"python"
|
||||
],
|
||||
"zip_release": true
|
||||
}
|
||||
}
|
|
@ -1,61 +1,63 @@
|
|||
{
|
||||
"version": "6",
|
||||
"key": "hacs/215327195.hacs",
|
||||
"data": {
|
||||
"archived": false,
|
||||
"authors": [],
|
||||
"category": "plugin",
|
||||
"content_in_root": true,
|
||||
"country": [],
|
||||
"config_flow": false,
|
||||
"default_branch": "master",
|
||||
"description": "\ud83d\udca1 A Lovelace custom card for RGB lights",
|
||||
"domain": "",
|
||||
"domains": [
|
||||
"light"
|
||||
],
|
||||
"downloads": 11082,
|
||||
"etag_repository": "W/\"f9d6a68e2ff6e1221e937b06ad04632a8722eeb6d8f68274fb25e991e617131d\"",
|
||||
"file_name": "card.js",
|
||||
"filename": "card.js",
|
||||
"first_install": false,
|
||||
"fork": false,
|
||||
"full_name": "bokub/rgb-light-card",
|
||||
"hacs": null,
|
||||
"hide": false,
|
||||
"hide_default_branch": false,
|
||||
"homeassistant": null,
|
||||
"id": "215327195",
|
||||
"iot_class": null,
|
||||
"installed": true,
|
||||
"installed_commit": "8390d2e",
|
||||
"installed_version": "1.9.0",
|
||||
"open_issues": 7,
|
||||
"last_commit": "8390d2e",
|
||||
"last_version": "1.9.0",
|
||||
"last_updated": "2021-07-07T08:49:28Z",
|
||||
"manifest_name": null,
|
||||
"new": false,
|
||||
"persistent_directory": null,
|
||||
"pushed_at": "2021-07-07T08:49:28",
|
||||
"releases": true,
|
||||
"render_readme": true,
|
||||
"published_tags": [
|
||||
"1.9.0",
|
||||
"1.8.0",
|
||||
"1.7.1",
|
||||
"1.6.0",
|
||||
"1.5.0"
|
||||
],
|
||||
"selected_tag": null,
|
||||
"show_beta": false,
|
||||
"stargazers_count": 228,
|
||||
"topics": [
|
||||
"home-assistant",
|
||||
"lovelace",
|
||||
"lovelace-custom-card",
|
||||
"rgb-lights"
|
||||
],
|
||||
"zip_release": false
|
||||
}
|
||||
"version": "6",
|
||||
"minor_version": 1,
|
||||
"key": "hacs/215327195.hacs",
|
||||
"data": {
|
||||
"archived": false,
|
||||
"authors": [],
|
||||
"category": "plugin",
|
||||
"content_in_root": true,
|
||||
"country": [],
|
||||
"config_flow": false,
|
||||
"default_branch": "master",
|
||||
"description": "💡 A Lovelace custom card for RGB lights",
|
||||
"domain": "",
|
||||
"domains": [
|
||||
"light"
|
||||
],
|
||||
"downloads": 12380,
|
||||
"etag_repository": "W/\"b5f74cfb36458239d165665039ad8868468ef47299c90d6095e79f2e48ecc5e2\"",
|
||||
"file_name": "card.js",
|
||||
"filename": "card.js",
|
||||
"first_install": false,
|
||||
"fork": false,
|
||||
"full_name": "bokub/rgb-light-card",
|
||||
"hacs": null,
|
||||
"hide": false,
|
||||
"hide_default_branch": false,
|
||||
"homeassistant": null,
|
||||
"id": "215327195",
|
||||
"iot_class": null,
|
||||
"installed": true,
|
||||
"installed_commit": "abb7c78",
|
||||
"installed_version": "1.11.0",
|
||||
"open_issues": 6,
|
||||
"last_commit": "abb7c78",
|
||||
"last_version": "1.11.0",
|
||||
"last_updated": "2022-07-02T09:17:13Z",
|
||||
"manifest_name": null,
|
||||
"new": false,
|
||||
"persistent_directory": null,
|
||||
"pushed_at": "2022-07-02T09:17:13",
|
||||
"releases": true,
|
||||
"render_readme": true,
|
||||
"published_tags": [
|
||||
"1.11.0",
|
||||
"1.10.0",
|
||||
"1.9.0",
|
||||
"1.8.0",
|
||||
"1.7.1"
|
||||
],
|
||||
"selected_tag": null,
|
||||
"show_beta": false,
|
||||
"stargazers_count": 311,
|
||||
"topics": [
|
||||
"hacktoberfest",
|
||||
"home-assistant",
|
||||
"lovelace",
|
||||
"lovelace-custom-card",
|
||||
"rgb-lights"
|
||||
],
|
||||
"zip_release": false
|
||||
}
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"version": "6",
|
||||
"minor_version": 1,
|
||||
"key": "hacs/222422187.hacs",
|
||||
"data": {
|
||||
"archived": false,
|
||||
|
@ -13,9 +14,9 @@
|
|||
"domain": "",
|
||||
"domains": [],
|
||||
"downloads": 0,
|
||||
"etag_repository": "W/\"16ee27999cb17285ad3ea04a235626d26d0f218fe81f5cce0d9e6218eaff6ece\"",
|
||||
"etag_repository": "W/\"cecf357175700b3cc1db9c4389607d4d10ef7369436b93d42529460c5e1dd05c\"",
|
||||
"file_name": "ios-dark-mode.yaml",
|
||||
"filename": "",
|
||||
"filename": null,
|
||||
"first_install": false,
|
||||
"fork": false,
|
||||
"full_name": "basnijholt/lovelace-ios-dark-mode-theme",
|
||||
|
@ -26,22 +27,22 @@
|
|||
"id": "222422187",
|
||||
"iot_class": null,
|
||||
"installed": true,
|
||||
"installed_commit": "555c937",
|
||||
"installed_commit": "9c012f7",
|
||||
"installed_version": null,
|
||||
"open_issues": 22,
|
||||
"last_commit": "555c937",
|
||||
"open_issues": 29,
|
||||
"last_commit": "9c012f7",
|
||||
"last_version": null,
|
||||
"last_updated": "2021-07-06T10:58:37Z",
|
||||
"last_updated": "2022-05-27T18:41:09Z",
|
||||
"manifest_name": null,
|
||||
"new": false,
|
||||
"persistent_directory": null,
|
||||
"pushed_at": "2021-07-06T10:58:37",
|
||||
"pushed_at": "2022-05-27T18:41:09",
|
||||
"releases": false,
|
||||
"render_readme": true,
|
||||
"published_tags": [],
|
||||
"selected_tag": null,
|
||||
"show_beta": false,
|
||||
"stargazers_count": 324,
|
||||
"stargazers_count": 375,
|
||||
"topics": [
|
||||
"dark-mode",
|
||||
"darkmode",
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"version": "6",
|
||||
"minor_version": 1,
|
||||
"key": "hacs/231674882.hacs",
|
||||
"data": {
|
||||
"archived": false,
|
||||
|
@ -13,9 +14,9 @@
|
|||
"domain": "",
|
||||
"domains": [],
|
||||
"downloads": 0,
|
||||
"etag_repository": "W/\"88f3462e324504ca32d5316d7b4ad0db14bf7c5cab7fd03b4eb1af815efd0015\"",
|
||||
"etag_repository": "W/\"d9e5ddb563c27cbe6f0cc04e78ed92c7517cd7e1f3c872746eb5bfad4fa3ef87\"",
|
||||
"file_name": "template-entity-row.js",
|
||||
"filename": "",
|
||||
"filename": null,
|
||||
"first_install": false,
|
||||
"fork": false,
|
||||
"full_name": "thomasloven/lovelace-template-entity-row",
|
||||
|
@ -28,14 +29,14 @@
|
|||
"installed": true,
|
||||
"installed_commit": "3c7d493",
|
||||
"installed_version": "1.3.0",
|
||||
"open_issues": 4,
|
||||
"last_commit": "3c7d493",
|
||||
"open_issues": 14,
|
||||
"last_commit": "e3da7ba",
|
||||
"last_version": "1.3.0",
|
||||
"last_updated": "2021-06-26T18:46:48Z",
|
||||
"last_updated": "2022-08-24T08:27:00Z",
|
||||
"manifest_name": null,
|
||||
"new": false,
|
||||
"persistent_directory": null,
|
||||
"pushed_at": "2021-06-26T18:46:48",
|
||||
"pushed_at": "2022-08-24T08:27:00",
|
||||
"releases": true,
|
||||
"render_readme": true,
|
||||
"published_tags": [
|
||||
|
@ -47,7 +48,7 @@
|
|||
],
|
||||
"selected_tag": null,
|
||||
"show_beta": false,
|
||||
"stargazers_count": 76,
|
||||
"stargazers_count": 118,
|
||||
"topics": [],
|
||||
"zip_release": false
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"version": "6",
|
||||
"minor_version": 1,
|
||||
"key": "hacs/286186485.hacs",
|
||||
"data": {
|
||||
"archived": false,
|
||||
|
@ -13,13 +14,11 @@
|
|||
"default_branch": "main",
|
||||
"description": "Custom component for HA that enables the creation of scheduler entities",
|
||||
"domain": "scheduler",
|
||||
"domains": [
|
||||
"switch"
|
||||
],
|
||||
"downloads": 10,
|
||||
"etag_repository": "W/\"b86deefce5d113affb12546b777cfc592f6cf10fc7c270a435310f1538cae127\"",
|
||||
"domains": [],
|
||||
"downloads": 173,
|
||||
"etag_repository": "W/\"64b7c6bf6cebec946299473fb7ec1abfcdf1d3d69a65cc0dbfea133ed5b06360\"",
|
||||
"file_name": "",
|
||||
"filename": "",
|
||||
"filename": null,
|
||||
"first_install": false,
|
||||
"fork": false,
|
||||
"full_name": "nielsfaber/scheduler-component",
|
||||
|
@ -28,32 +27,30 @@
|
|||
"hide_default_branch": false,
|
||||
"homeassistant": null,
|
||||
"id": "286186485",
|
||||
"iot_class": [
|
||||
"Local Push"
|
||||
],
|
||||
"iot_class": null,
|
||||
"installed": true,
|
||||
"installed_commit": "731233c",
|
||||
"installed_version": "v3.2.1",
|
||||
"open_issues": 8,
|
||||
"last_commit": "731233c",
|
||||
"last_version": "v3.2.1",
|
||||
"last_updated": "2021-09-12T06:58:44Z",
|
||||
"installed_commit": "b683d53",
|
||||
"installed_version": "v3.2.10",
|
||||
"open_issues": 5,
|
||||
"last_commit": "b683d53",
|
||||
"last_version": "v3.2.10",
|
||||
"last_updated": "2022-06-02T06:36:20Z",
|
||||
"manifest_name": "Scheduler integration",
|
||||
"new": false,
|
||||
"persistent_directory": null,
|
||||
"pushed_at": "2021-09-12T06:58:44",
|
||||
"pushed_at": "2022-06-02T06:36:20",
|
||||
"releases": true,
|
||||
"render_readme": "true",
|
||||
"render_readme": true,
|
||||
"published_tags": [
|
||||
"v3.2.1",
|
||||
"v3.2.0",
|
||||
"v3.1.3",
|
||||
"v.3.1.2",
|
||||
"v3.1.1"
|
||||
"v3.2.10",
|
||||
"v3.2.9",
|
||||
"v3.2.8",
|
||||
"v3.2.7",
|
||||
"v3.2.6"
|
||||
],
|
||||
"selected_tag": null,
|
||||
"show_beta": false,
|
||||
"stargazers_count": 153,
|
||||
"stargazers_count": 292,
|
||||
"topics": [
|
||||
"custom-component",
|
||||
"hacs",
|
||||
|
|
|
@ -1,69 +1,70 @@
|
|||
{
|
||||
"version": "6",
|
||||
"key": "hacs/286270157.hacs",
|
||||
"data": {
|
||||
"archived": false,
|
||||
"authors": [],
|
||||
"category": "plugin",
|
||||
"content_in_root": false,
|
||||
"country": [],
|
||||
"config_flow": false,
|
||||
"default_branch": "main",
|
||||
"description": "HA Lovelace card for control of scheduler entities",
|
||||
"domain": "",
|
||||
"domains": [],
|
||||
"downloads": 3085,
|
||||
"etag_repository": "W/\"2b51dcc9829014317e51aeae737ee5a6c89128a85a366d4a868728ad635c1c43\"",
|
||||
"file_name": "scheduler-card.js",
|
||||
"filename": "",
|
||||
"first_install": false,
|
||||
"fork": false,
|
||||
"full_name": "nielsfaber/scheduler-card",
|
||||
"hacs": null,
|
||||
"hide": false,
|
||||
"hide_default_branch": false,
|
||||
"homeassistant": null,
|
||||
"id": "286270157",
|
||||
"iot_class": null,
|
||||
"installed": true,
|
||||
"installed_commit": "951cf22",
|
||||
"installed_version": "v2.2.0",
|
||||
"open_issues": 10,
|
||||
"last_commit": "951cf22",
|
||||
"last_version": "v2.2.0",
|
||||
"last_updated": "2021-09-10T07:18:06Z",
|
||||
"manifest_name": null,
|
||||
"new": false,
|
||||
"persistent_directory": null,
|
||||
"pushed_at": "2021-09-10T07:18:06",
|
||||
"releases": true,
|
||||
"render_readme": "true",
|
||||
"published_tags": [
|
||||
"v2.2.0",
|
||||
"v2.1.4",
|
||||
"v2.1.3",
|
||||
"v2.1.2",
|
||||
"v2.1.1"
|
||||
],
|
||||
"selected_tag": null,
|
||||
"show_beta": false,
|
||||
"stargazers_count": 246,
|
||||
"topics": [
|
||||
"assistant",
|
||||
"automation",
|
||||
"card",
|
||||
"custom-card",
|
||||
"home",
|
||||
"home-assistant",
|
||||
"homeassistant",
|
||||
"lovelace",
|
||||
"schedule",
|
||||
"scheduler",
|
||||
"sunrise",
|
||||
"sunset",
|
||||
"week",
|
||||
"weekly"
|
||||
],
|
||||
"zip_release": false
|
||||
}
|
||||
"version": "6",
|
||||
"minor_version": 1,
|
||||
"key": "hacs/286270157.hacs",
|
||||
"data": {
|
||||
"archived": false,
|
||||
"authors": [],
|
||||
"category": "plugin",
|
||||
"content_in_root": false,
|
||||
"country": [],
|
||||
"config_flow": false,
|
||||
"default_branch": "main",
|
||||
"description": "HA Lovelace card for control of scheduler entities",
|
||||
"domain": "",
|
||||
"domains": [],
|
||||
"downloads": 4124,
|
||||
"etag_repository": "W/\"ae9399bf823de6e5d633fc8e5c539f19b44ee94baa4d2c29a92686279538b91a\"",
|
||||
"file_name": "scheduler-card.js",
|
||||
"filename": "scheduler-card.js",
|
||||
"first_install": false,
|
||||
"fork": false,
|
||||
"full_name": "nielsfaber/scheduler-card",
|
||||
"hacs": null,
|
||||
"hide": false,
|
||||
"hide_default_branch": false,
|
||||
"homeassistant": null,
|
||||
"id": "286270157",
|
||||
"iot_class": null,
|
||||
"installed": true,
|
||||
"installed_commit": "5b7d19b",
|
||||
"installed_version": "v2.3.6",
|
||||
"open_issues": 9,
|
||||
"last_commit": "5b7d19b",
|
||||
"last_version": "v2.3.6",
|
||||
"last_updated": "2022-08-23T19:00:00Z",
|
||||
"manifest_name": null,
|
||||
"new": false,
|
||||
"persistent_directory": null,
|
||||
"pushed_at": "2022-08-23T19:00:00",
|
||||
"releases": true,
|
||||
"render_readme": true,
|
||||
"published_tags": [
|
||||
"v2.3.6",
|
||||
"v2.3.5",
|
||||
"v2.3.4",
|
||||
"v2.3.3",
|
||||
"v2.3.2"
|
||||
],
|
||||
"selected_tag": null,
|
||||
"show_beta": false,
|
||||
"stargazers_count": 440,
|
||||
"topics": [
|
||||
"assistant",
|
||||
"automation",
|
||||
"card",
|
||||
"custom-card",
|
||||
"home",
|
||||
"home-assistant",
|
||||
"homeassistant",
|
||||
"lovelace",
|
||||
"schedule",
|
||||
"scheduler",
|
||||
"sunrise",
|
||||
"sunset",
|
||||
"week",
|
||||
"weekly"
|
||||
],
|
||||
"zip_release": false
|
||||
}
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"version": 1,
|
||||
"minor_version": 1,
|
||||
"key": "homekit.e1101f79ce9b41a28359a95f85e57b63.aids",
|
||||
"data": {
|
||||
"allocations": {
|
||||
|
@ -89,7 +90,26 @@
|
|||
"script.bedroom_waves": 3287422185,
|
||||
"script.bedroom_rain": 2176118223,
|
||||
"script.bedroom_sleep_music_long": 2167838011,
|
||||
"script.bedroom_sleep_music_short": 2422372189
|
||||
"script.bedroom_sleep_music_short": 2422372189,
|
||||
"hue.light.3ae16067-778e-47d9-86c5-d75d28b7f01b": 1762055787,
|
||||
"hue.light.d6c3f683-2a24-4fc4-8055-eec68b3bb2f5": 4252871793,
|
||||
"hue.light.22ffd26f-a76f-4c88-b2d8-2220ef7f8537": 1463708737,
|
||||
"hue.light.a07ffc61-1d40-406b-b699-eb25c70d9cc4": 2276656891,
|
||||
"hue.light.2e84b76c-748f-4375-82ab-05e15f4b7223": 2014439809,
|
||||
"hue.light.58c1bf6f-844e-4690-a21e-f543ae544478": 363823799,
|
||||
"hue.light.652b0901-18b3-4172-9c06-ca11a9cde172": 1710044888,
|
||||
"hue.light.0aa6b6e3-7835-44bd-b1fe-06e7d38357bd": 3764471800,
|
||||
"hue.light.8780e8b9-f420-4679-b434-3a3a02a32d17": 2802754275,
|
||||
"hue.light.06259ccb-4b42-4f43-b33f-73b6fa5088c8": 3008706353,
|
||||
"hue.light.56174d32-5767-458d-b3bf-f18fee04e33b": 3899854062,
|
||||
"hue.light.c720f6e9-2444-4b36-be7a-b08cc4eed965": 1758205815,
|
||||
"hue.light.de928995-bdc2-40d3-94a4-8aaee26a730f": 1173734377,
|
||||
"hue.light.0d5d67e0-1f5b-4fe6-aae7-ac6f1f37fcaf": 2788850002,
|
||||
"hue.light.78da0de5-c611-4b7e-8dc1-5d66347bed9b": 2202441427,
|
||||
"hue.light.91b4abd8-c147-4b27-86ae-de083b6e860b": 2105360777,
|
||||
"hue.light.d00eeb4b-0aa8-494f-aa64-1f84faa38213": 4065476362,
|
||||
"hue.light.67247d33-bc41-4308-b2bb-144abd298001": 700545104,
|
||||
"hue.light.515b9513-f060-4955-9dad-3e41e16f89ca": 2146599903
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1 +1 @@
|
|||
{"mac": "2C:5F:45:B9:36:2A", "config_version": 61, "paired_clients": {"6ae4feba-9725-4653-8a32-bfae21591972": "4463182fbace66328d3e534cf78b6f81ccfd0e4250bdb1d954418e3eed738269"}, "client_properties": {"6ae4feba-9725-4653-8a32-bfae21591972": {"permissions": 1}}, "accessories_hash": "bed3649f89379771e280dffafd0465eb2a44ac1e67d939a65d8a9b95205f1806c1deb6b19d199ef517803acc4016f778bec3362e2db196b98c3a9957448cbf7d", "private_key": "03d847a9e20598ee99c5b47cfc64c07ce83c7aebc6720e26e83fdd4c359e33c7", "public_key": "f4de2e4b9a98f38d27af5914310f92b861f6cdbc02e22945554c07bbc3868f70"}
|
||||
{"mac": "2C:5F:45:B9:36:2A", "config_version": 105, "paired_clients": {"6ae4feba-9725-4653-8a32-bfae21591972": "4463182fbace66328d3e534cf78b6f81ccfd0e4250bdb1d954418e3eed738269"}, "client_properties": {"6ae4feba-9725-4653-8a32-bfae21591972": {"permissions": 1}}, "accessories_hash": "3e51708bb39e78df9fc35a4d21ddd3074f65e8177782f44c74d9ddd16534a62372e388e17e23897dc6af9b39286e8742d6704ddd2d6a89e3623f7a083fa79749", "private_key": "03d847a9e20598ee99c5b47cfc64c07ce83c7aebc6720e26e83fdd4c359e33c7", "public_key": "f4de2e4b9a98f38d27af5914310f92b861f6cdbc02e22945554c07bbc3868f70"}
|
|
@ -1,17 +1,18 @@
|
|||
{
|
||||
"version": 1,
|
||||
"key": "http",
|
||||
"data": {
|
||||
"use_x_forwarded_for": true,
|
||||
"trusted_proxies": [
|
||||
"192.168.178.80"
|
||||
],
|
||||
"ssl_profile": "modern",
|
||||
"server_port": 8123,
|
||||
"login_attempts_threshold": -1,
|
||||
"ip_ban_enabled": true,
|
||||
"cors_allowed_origins": [
|
||||
"https://cast.home-assistant.io"
|
||||
]
|
||||
}
|
||||
"version": 1,
|
||||
"minor_version": 1,
|
||||
"key": "http",
|
||||
"data": {
|
||||
"use_x_forwarded_for": true,
|
||||
"trusted_proxies": [
|
||||
"192.168.178.80"
|
||||
],
|
||||
"ip_ban_enabled": true,
|
||||
"cors_allowed_origins": [
|
||||
"https://cast.home-assistant.io"
|
||||
],
|
||||
"login_attempts_threshold": -1,
|
||||
"ssl_profile": "modern",
|
||||
"server_port": 8123
|
||||
}
|
||||
}
|
|
@ -16,62 +16,6 @@
|
|||
"icon": "mdi:home",
|
||||
"badges": [],
|
||||
"cards": [
|
||||
{
|
||||
"type": "conditional",
|
||||
"conditions": [
|
||||
{
|
||||
"entity": "cover.kinderzimmer_rollo",
|
||||
"state_not": "open"
|
||||
}
|
||||
],
|
||||
"card": {
|
||||
"type": "vertical-stack",
|
||||
"cards": [
|
||||
{
|
||||
"type": "entities",
|
||||
"entities": [
|
||||
{
|
||||
"entity": "switch.tasmota07",
|
||||
"name": "F\u00f6n",
|
||||
"icon": "mdi:hair-dryer"
|
||||
},
|
||||
{
|
||||
"entity": "timer.fon_timer",
|
||||
"name": "Timer",
|
||||
"icon": "mdi:timer"
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"name": "Aus in 10 min",
|
||||
"action_name": "Los",
|
||||
"tap_action": {
|
||||
"action": "call-service",
|
||||
"service": "timer.start",
|
||||
"service_data": {
|
||||
"entity_id": "timer.fon_timer",
|
||||
"duration": "00:10:00"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
"name": "Aus in 15 min",
|
||||
"action_name": "Los",
|
||||
"tap_action": {
|
||||
"action": "call-service",
|
||||
"service": "timer.start",
|
||||
"service_data": {
|
||||
"entity_id": "timer.fon_timer",
|
||||
"duration": "00:15:00"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"title": "F\u00f6n"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "entities",
|
||||
"entities": [
|
||||
|
|
|
@ -91,6 +91,10 @@
|
|||
{
|
||||
"entity": "light.gang_bogen",
|
||||
"name": "Gang Bogen"
|
||||
},
|
||||
{
|
||||
"entity": "automation.gang_bogen_nachtlicht",
|
||||
"name": "Autom. Bogenlicht"
|
||||
}
|
||||
],
|
||||
"show_header_toggle": false,
|
||||
|
@ -562,6 +566,11 @@
|
|||
"entity": "light.kinderzimmer_deckenlampe",
|
||||
"name": "Deckenlampe"
|
||||
},
|
||||
{
|
||||
"entity": "light.music_mouse_regal_licht",
|
||||
"name": "Regal",
|
||||
"icon": "hue:bulb-group-lightstrip"
|
||||
},
|
||||
{
|
||||
"entity": "light.kinderzimmer_fluter",
|
||||
"name": "Fluter",
|
||||
|
@ -572,16 +581,6 @@
|
|||
"name": "Rollo Klein",
|
||||
"type": "custom:state-card-custom-cover"
|
||||
},
|
||||
{
|
||||
"entity": "switch.tasmota06",
|
||||
"name": "Kamera Schlafzimmer",
|
||||
"icon": "mdi:video"
|
||||
},
|
||||
{
|
||||
"entity": "switch.tasmota07",
|
||||
"name": "F\u00f6n Schlafzimmer",
|
||||
"icon": "mdi:hair-dryer"
|
||||
},
|
||||
{
|
||||
"entity": "cover.kinderzimmer_rollo",
|
||||
"name": "Rollo"
|
||||
|
@ -644,82 +643,6 @@
|
|||
"icon": "mdi:tree",
|
||||
"badges": [],
|
||||
"cards": [
|
||||
{
|
||||
"type": "vertical-stack",
|
||||
"title": "Pool",
|
||||
"cards": [
|
||||
{
|
||||
"type": "horizontal-stack",
|
||||
"cards": [
|
||||
{
|
||||
"type": "button",
|
||||
"name": "Pumpe",
|
||||
"icon": "mdi:pump",
|
||||
"entity": "switch.poolpumpesteckdose",
|
||||
"show_state": true
|
||||
},
|
||||
{
|
||||
"type": "gauge",
|
||||
"entity": "sensor.pool_temperature",
|
||||
"min": 10,
|
||||
"name": "Temperatur",
|
||||
"max": 30,
|
||||
"severity": {
|
||||
"green": 18,
|
||||
"yellow": 20,
|
||||
"red": 24
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "gauge",
|
||||
"entity": "sensor.pool_ph",
|
||||
"min": 6,
|
||||
"name": "pH (7.0-7.4)",
|
||||
"max": 9,
|
||||
"severity": {
|
||||
"green": 6.9,
|
||||
"yellow": 7.4,
|
||||
"red": 8
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "gauge",
|
||||
"entity": "sensor.pool_oxydo_reduction_potential",
|
||||
"min": 400,
|
||||
"name": "Redox (650-750)",
|
||||
"max": 650,
|
||||
"severity": {
|
||||
"green": 650,
|
||||
"yellow": 500,
|
||||
"red": 400
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "entities",
|
||||
"entities": [
|
||||
{
|
||||
"entity": "sensor.pool_pumpe_heute"
|
||||
},
|
||||
{
|
||||
"entity": "sensor.pool_pumpe_gestern"
|
||||
},
|
||||
{
|
||||
"type": "divider"
|
||||
},
|
||||
{
|
||||
"entity": "sensor.pool_tds",
|
||||
"name": "Partikel (TDS)"
|
||||
},
|
||||
{
|
||||
"entity": "sensor.pool_rssi",
|
||||
"name": "Empfang Boje"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "entities",
|
||||
"entities": [
|
||||
|
@ -762,29 +685,41 @@
|
|||
"state_color": true
|
||||
},
|
||||
{
|
||||
"type": "custom:mini-graph-card",
|
||||
"hours_to_show": 96,
|
||||
"line_color": "#FF8552",
|
||||
"height": 250,
|
||||
"smoothing": true,
|
||||
"lower_bound": 7,
|
||||
"upper_bound": 8.5,
|
||||
"lower_bound_secondary": 500,
|
||||
"upper_bound_secondary": 750,
|
||||
"show": {
|
||||
"labels": true
|
||||
},
|
||||
"type": "entities",
|
||||
"entities": [
|
||||
{
|
||||
"entity": "sensor.pool_ph",
|
||||
"name": "pH"
|
||||
"entity": "switch.tasmota01",
|
||||
"name": "Balkon",
|
||||
"icon": "mdi:balcony"
|
||||
},
|
||||
{
|
||||
"entity": "sensor.pool_oxydo_reduction_potential",
|
||||
"y_axis": "secondary",
|
||||
"name": "ORP"
|
||||
"entity": "switch.tasmota02",
|
||||
"name": "Eingang",
|
||||
"icon": "mdi:window-closed-variant"
|
||||
},
|
||||
{
|
||||
"entity": "switch.tasmota04",
|
||||
"name": "Esszimmer",
|
||||
"icon": "mdi:window-closed-variant"
|
||||
},
|
||||
{
|
||||
"entity": "switch.tasmota05",
|
||||
"name": "Wohnzimmer",
|
||||
"icon": "mdi:string-lights"
|
||||
},
|
||||
{
|
||||
"entity": "switch.tasmota06",
|
||||
"name": "Arbeitszimmer",
|
||||
"icon": "mdi:star-four-points"
|
||||
},
|
||||
{
|
||||
"entity": "switch.tasmota07",
|
||||
"name": "Treppe",
|
||||
"icon": "mdi:stairs"
|
||||
}
|
||||
]
|
||||
],
|
||||
"title": "Weihnachten",
|
||||
"show_header_toggle": false
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"version": 1,
|
||||
"minor_version": 1,
|
||||
"key": "lovelace.05_detail",
|
||||
"data": {
|
||||
"config": {
|
||||
|
@ -47,30 +48,13 @@
|
|||
{
|
||||
"entities": [
|
||||
{
|
||||
"entity": "binary_sensor.rauchmelder_gang_oben_sensor",
|
||||
"name": "Gang Erster Stock",
|
||||
"secondary_info": "last-changed"
|
||||
"entity": "binary_sensor.rauchmelder_schlafzimmer_smoke_alarm_smoke_detected"
|
||||
},
|
||||
{
|
||||
"entity": "binary_sensor.rauchmelder_gang_sensor",
|
||||
"name": "Gang unten",
|
||||
"secondary_info": "last-changed"
|
||||
"entity": "binary_sensor.rauchmelder_unten_gang_smoke_alarm_smoke_detected"
|
||||
},
|
||||
{
|
||||
"entity": "binary_sensor.rauchmelder_schlafzimmer_sensor",
|
||||
"name": "Schlafzimmer unten",
|
||||
"secondary_info": "last-changed"
|
||||
},
|
||||
{
|
||||
"entity": "binary_sensor.rauchmelder_wohnzimmer_sensor",
|
||||
"name": "Wohnzimmer unten",
|
||||
"secondary_info": "last-changed"
|
||||
},
|
||||
{
|
||||
"type": "divider"
|
||||
},
|
||||
{
|
||||
"entity": "binary_sensor.rauchmelder_heizraum_siren_sensor"
|
||||
"entity": "binary_sensor.smoke_detector_and_siren_smoke_alarm_smoke_detected"
|
||||
}
|
||||
],
|
||||
"show_header_toggle": false,
|
||||
|
@ -134,6 +118,20 @@
|
|||
"icon": "mdi:bell",
|
||||
"title": "Klingel",
|
||||
"type": "entities"
|
||||
},
|
||||
{
|
||||
"type": "custom:valetudo-map-card",
|
||||
"entity": "camera.map_data",
|
||||
"title": "Staubsauger",
|
||||
"vacuum_entity": "vacuum.vacuum",
|
||||
"rotate": 0,
|
||||
"crop": {
|
||||
"top": 0,
|
||||
"bottom": 0,
|
||||
"left": 80,
|
||||
"right": 0
|
||||
},
|
||||
"min_height": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -660,7 +658,7 @@
|
|||
"type": "entities",
|
||||
"entities": [
|
||||
{
|
||||
"entity": "sensor.prusaprinter_current_state",
|
||||
"entity": "sensor.octoprint_current_state",
|
||||
"name": "Status",
|
||||
"secondary_info": "last-changed"
|
||||
},
|
||||
|
@ -668,17 +666,17 @@
|
|||
"type": "custom:template-entity-row",
|
||||
"icon": "mdi:clock",
|
||||
"name": "Fertig in",
|
||||
"state": "{{ states('sensor.prusaprinter_time_remaining') | int // 3600}}h {{ states('sensor.prusaprinter_time_remaining') | int // 60 % 60}}min",
|
||||
"secondary": "Druckt seit {{ states('sensor.prusaprinter_time_elapsed') | int // 3600}}h {{ states('sensor.prusaprinter_time_elapsed') | int // 60 % 60}}min",
|
||||
"state": "{{ states('sensor.octoprint_time_remaining') | int // 3600}}h {{ states('sensor.octoprint_time_remaining') | int // 60 % 60}}min",
|
||||
"secondary": "Druckt seit {{ states('sensor.octoprint_time_elapsed') | int // 3600}}h {{ states('sensor.octoprint_time_elapsed') | int // 60 % 60}}min",
|
||||
"active": "{{ is_state('light.bed_light', 'off') }}"
|
||||
},
|
||||
{
|
||||
"entity": "sensor.prusaprinter_actual_bed_temp",
|
||||
"entity": "sensor.octoprint_actual_bed_temp",
|
||||
"name": "Print Bed",
|
||||
"icon": "mdi:card"
|
||||
},
|
||||
{
|
||||
"entity": "sensor.prusaprinter_actual_tool0_temp",
|
||||
"entity": "sensor.octoprint_actual_tool0_temp",
|
||||
"name": "Nozzle",
|
||||
"icon": "mdi:printer-3d-nozzle"
|
||||
},
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
{
|
||||
"version": 1,
|
||||
"minor_version": 1,
|
||||
"key": "lovelace_resources",
|
||||
"data": {
|
||||
"items": [
|
||||
{
|
||||
"id": "2dd231ecf4fa46d1b9ba696f28da7731",
|
||||
"type": "module",
|
||||
"url": "/local/custom_ui/state-card-custom-cover.js?v=1.04"
|
||||
"url": "/local/custom_ui/state-card-custom-cover.js?v=1.09"
|
||||
},
|
||||
{
|
||||
"id": "526c1c7115cd4bb396cf02a83b884365",
|
||||
|
@ -16,15 +17,15 @@
|
|||
{
|
||||
"id": "55ef5e325ab444d19e15a1183a97fb35",
|
||||
"type": "module",
|
||||
"url": "/local/custom_ui/room-glance-card.js?v=1.1"
|
||||
"url": "/local/custom_ui/room-glance-card.js?v=1.09"
|
||||
},
|
||||
{
|
||||
"url": "/hacsfiles/scheduler-card/scheduler-card.js?hacstag=286270157220",
|
||||
"url": "/hacsfiles/scheduler-card/scheduler-card.js?hacstag=286270157236",
|
||||
"type": "module",
|
||||
"id": "af379618bd83489a9f2f15a0be498eaf"
|
||||
},
|
||||
{
|
||||
"url": "/hacsfiles/lovelace-slider-entity-row/slider-entity-row.js?hacstag=1448997001710",
|
||||
"url": "/hacsfiles/lovelace-slider-entity-row/slider-entity-row.js?hacstag=1448997001721",
|
||||
"type": "module",
|
||||
"id": "7067680a3f314af285c5ebe1605e0451"
|
||||
},
|
||||
|
@ -34,27 +35,27 @@
|
|||
"id": "aa48cd5ffa8a4e0883ce06e64391cf46"
|
||||
},
|
||||
{
|
||||
"url": "/hacsfiles/rgb-light-card/card.js?hacstag=215327195190",
|
||||
"url": "/hacsfiles/rgb-light-card/card.js?hacstag=2153271951110",
|
||||
"type": "module",
|
||||
"id": "9fa16ed42d0c480ab9dc711cb98790e7"
|
||||
},
|
||||
{
|
||||
"url": "/hacsfiles/mini-graph-card/mini-graph-card-bundle.js?hacstag=1512800620100",
|
||||
"url": "/hacsfiles/mini-graph-card/mini-graph-card-bundle.js?hacstag=1512800620110",
|
||||
"type": "module",
|
||||
"id": "5fb0764a8bb54c4aaf4a4be15022095b"
|
||||
},
|
||||
{
|
||||
"url": "/hacsfiles/mini-media-player/mini-media-player-bundle.js?hacstag=1485208381130",
|
||||
"url": "/hacsfiles/mini-media-player/mini-media-player-bundle.js?hacstag=1485208381164",
|
||||
"type": "module",
|
||||
"id": "9f7ce776f265476f89246c9926a933a8"
|
||||
},
|
||||
{
|
||||
"url": "/hacsfiles/lovelace-multiple-entity-row/multiple-entity-row.js?hacstag=178921037420",
|
||||
"url": "/hacsfiles/lovelace-multiple-entity-row/multiple-entity-row.js?hacstag=178921037441",
|
||||
"type": "module",
|
||||
"id": "295d5e67ee594e31935e535c2c4b7bd4"
|
||||
},
|
||||
{
|
||||
"url": "/hacsfiles/hass-hue-icons/hass-hue-icons.js?hacstag=3844345221088",
|
||||
"url": "/hacsfiles/hass-hue-icons/hass-hue-icons.js?hacstag=3844345221243",
|
||||
"type": "module",
|
||||
"id": "59ab7764b5724e75ac5ff57fdcd54e2c"
|
||||
},
|
||||
|
@ -69,14 +70,19 @@
|
|||
"id": "c5461acbb2e742e4b06cebf73181ffc7"
|
||||
},
|
||||
{
|
||||
"url": "/hacsfiles/apexcharts-card/apexcharts-card.js?hacstag=331701152190",
|
||||
"url": "/hacsfiles/apexcharts-card/apexcharts-card.js?hacstag=331701152201",
|
||||
"type": "module",
|
||||
"id": "322b6b5391e84fd1bb126c8448db1ebb"
|
||||
},
|
||||
{
|
||||
"url": "/hacsfiles/kiosk-mode/kiosk-mode.js?hacstag=303101606171",
|
||||
"url": "/hacsfiles/kiosk-mode/kiosk-mode.js?hacstag=303101606172",
|
||||
"type": "module",
|
||||
"id": "58eff8b61ebf463b86570a8c975adda3"
|
||||
},
|
||||
{
|
||||
"url": "/hacsfiles/lovelace-valetudo-map-card/valetudo-map-card.js?hacstag=20303610820211205",
|
||||
"type": "module",
|
||||
"id": "44c1654a1a8b4e078c2d69bf52ba2ce5"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
123
automations.yaml
123
automations.yaml
|
@ -1,5 +1,5 @@
|
|||
- id: '1575130335468'
|
||||
alias: FernbedienungWeihnachtslichterOben
|
||||
alias: Fernbedienung Weihnachtslichter Oben
|
||||
description: ''
|
||||
trigger:
|
||||
- event_data:
|
||||
|
@ -13,6 +13,7 @@
|
|||
- data:
|
||||
entity_id: switch.mobile_steckdose_schalter_2
|
||||
service: switch.toggle
|
||||
mode: single
|
||||
- id: '1575202743482'
|
||||
alias: Wecker Licht an
|
||||
description: ''
|
||||
|
@ -44,7 +45,7 @@
|
|||
- 0.414
|
||||
service: light.turn_on
|
||||
- id: '1589377976830'
|
||||
alias: AlarmMartinHandy
|
||||
alias: Alarm Martin Handy
|
||||
description: ''
|
||||
trigger:
|
||||
- entity_id: binary_sensor.gang_bewegungsmelder_schlafzimmer, binary_sensor.gang_bewegungsmelder_ost,
|
||||
|
@ -65,7 +66,7 @@
|
|||
- delay: '30'
|
||||
mode: single
|
||||
- id: '1598594894559'
|
||||
alias: KlingelAufHandy
|
||||
alias: Klingel Auf Handy
|
||||
description: ''
|
||||
trigger:
|
||||
- entity_id: switch.klingel_aussentur
|
||||
|
@ -84,7 +85,7 @@
|
|||
service: notify.ios_martins_ipad
|
||||
mode: single
|
||||
- id: '1606655282153'
|
||||
alias: _WeihnachtslichterAnUm6
|
||||
alias: Weihnachtslichter an morgens um 6
|
||||
description: ''
|
||||
trigger:
|
||||
- platform: time
|
||||
|
@ -96,10 +97,13 @@
|
|||
entity_id:
|
||||
- switch.tasmota01
|
||||
- switch.tasmota02
|
||||
- switch.tasmota03
|
||||
- switch.tasmota04
|
||||
- switch.tasmota05
|
||||
- switch.tasmota06
|
||||
- switch.tasmota07
|
||||
mode: single
|
||||
- id: '1607412098745'
|
||||
alias: _WeihnachtslichterAusMorgens
|
||||
alias: Weihnachtslichter aus morgens
|
||||
description: ''
|
||||
trigger:
|
||||
- platform: sun
|
||||
|
@ -112,12 +116,13 @@
|
|||
entity_id:
|
||||
- switch.tasmota01
|
||||
- switch.tasmota02
|
||||
- switch.tasmota03
|
||||
- switch.mobile_steckdose_schalter_1
|
||||
- switch.mobile_steckdose_schalter_2
|
||||
- switch.tasmota04
|
||||
- switch.tasmota05
|
||||
- switch.tasmota06
|
||||
- switch.tasmota07
|
||||
mode: single
|
||||
- id: '1607412144113'
|
||||
alias: _Weihnachtslichter An Abends
|
||||
alias: Weihnachtslichter An Abends
|
||||
description: ''
|
||||
trigger:
|
||||
- platform: sun
|
||||
|
@ -129,12 +134,13 @@
|
|||
entity_id:
|
||||
- switch.tasmota01
|
||||
- switch.tasmota02
|
||||
- switch.tasmota03
|
||||
- switch.mobile_steckdose_schalter_1
|
||||
- switch.mobile_steckdose_schalter_2
|
||||
- switch.tasmota04
|
||||
- switch.tasmota05
|
||||
- switch.tasmota06
|
||||
- switch.tasmota07
|
||||
mode: single
|
||||
- id: '1607412210097'
|
||||
alias: _Weihnachtslichter Aus Abends
|
||||
alias: Weihnachtslichter Aus Abends
|
||||
description: ''
|
||||
trigger:
|
||||
- platform: time
|
||||
|
@ -146,12 +152,13 @@
|
|||
entity_id:
|
||||
- switch.tasmota01
|
||||
- switch.tasmota02
|
||||
- switch.tasmota03
|
||||
- switch.mobile_steckdose_schalter_1
|
||||
- switch.mobile_steckdose_schalter_2
|
||||
- switch.tasmota04
|
||||
- switch.tasmota05
|
||||
- switch.tasmota06
|
||||
- switch.tasmota07
|
||||
mode: single
|
||||
- id: '1612028092169'
|
||||
alias: 0_BewegungsmelderSchlafzimmerNacht
|
||||
alias: Bewegungsmelder Schlafzimmer Nacht
|
||||
description: ''
|
||||
trigger:
|
||||
- platform: state
|
||||
|
@ -198,3 +205,83 @@
|
|||
target:
|
||||
entity_id: switch.tasmota07
|
||||
mode: single
|
||||
- id: '1632393568599'
|
||||
alias: Herd vorgeheizt -> iPad
|
||||
description: ''
|
||||
trigger:
|
||||
- platform: numeric_state
|
||||
entity_id: sensor.backofen_verbrauch
|
||||
below: '20'
|
||||
for:
|
||||
hours: 0
|
||||
minutes: 0
|
||||
seconds: 5
|
||||
milliseconds: 0
|
||||
condition: []
|
||||
action:
|
||||
- service: notify.mobile_app_martins_ipad
|
||||
data:
|
||||
title: Herd vorgeheizt
|
||||
message: herd ist heiss :)
|
||||
mode: single
|
||||
- id: '1633435293611'
|
||||
alias: Gang Bogen Nachtlicht
|
||||
description: ''
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id:
|
||||
- binary_sensor.gang_bewegungsmelder_schlafzimmer
|
||||
- binary_sensor.gang_bewegungsmelder_wohnzimmer
|
||||
from: 'off'
|
||||
to: 'on'
|
||||
condition:
|
||||
- condition: template
|
||||
value_template: '{{ state_attr(''sun.sun'', ''elevation'') < 5 }}'
|
||||
action:
|
||||
- service: light.turn_on
|
||||
target:
|
||||
entity_id: light.gang_bogen
|
||||
data:
|
||||
brightness_pct: 50
|
||||
xy_color:
|
||||
- 0.607
|
||||
- 0.378
|
||||
- delay:
|
||||
hours: 0
|
||||
minutes: 2
|
||||
seconds: 0
|
||||
milliseconds: 0
|
||||
- service: light.turn_off
|
||||
target:
|
||||
entity_id: light.gang_bogen
|
||||
data:
|
||||
transition: 5
|
||||
mode: restart
|
||||
- id: '1634461079797'
|
||||
alias: 3D Drucker State Change
|
||||
description: ''
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: binary_sensor.octoprint_printing
|
||||
condition: []
|
||||
action:
|
||||
- service: notify.telegram_martin
|
||||
data:
|
||||
title: 3D Drucker
|
||||
message: 3D Drucker hat Zustand gewechselt
|
||||
mode: single
|
||||
- id: '1656971839915'
|
||||
alias: Rollos zu nachts
|
||||
description: ''
|
||||
trigger:
|
||||
- platform: time
|
||||
at: 04:00:00
|
||||
condition: []
|
||||
action:
|
||||
- service: cover.close_cover
|
||||
data: {}
|
||||
target:
|
||||
entity_id:
|
||||
- cover.schlafzimmer_rollo_klein
|
||||
- cover.schlafzimmer_rollo_gross
|
||||
mode: single
|
||||
|
|
|
@ -1,263 +0,0 @@
|
|||
attr global userattr cmdIcon devStateIcon devStateStyle icon sortby webCmd widgetOverride
|
||||
attr global autoload_undefined_devices 1
|
||||
attr global logfile -
|
||||
attr global modpath .
|
||||
attr global motd Error messages while initializing FHEM:\
|
||||
attr global statefile ./log/fhem.save
|
||||
attr global updateInBackground 1
|
||||
attr global verbose 3
|
||||
attr global genericDeviceType:switch,light,blind,thermostat
|
||||
|
||||
define telnetPort telnet 7072 global
|
||||
|
||||
#define WEB FHEMWEB 8083 global
|
||||
|
||||
#define WEBphone FHEMWEB 8084 global
|
||||
#attr WEBphone stylesheetPrefix smallscreen
|
||||
|
||||
#define WEBtablet FHEMWEB 8085 global
|
||||
#attr WEBtablet stylesheetPrefix touchpad
|
||||
|
||||
# Fake FileLog entry, to access the fhem log from FHEMWEB
|
||||
#define Logfile FileLog ./log/fhem-%Y-%m.log fakelog
|
||||
|
||||
define autocreate autocreate
|
||||
attr autocreate autosave 1
|
||||
#attr autocreate filelog ./log/%NAME-%Y.log
|
||||
|
||||
#define eventTypes eventTypes ./log/eventTypes.txt
|
||||
|
||||
# Disable this to avoid looking for new USB devices on startup
|
||||
#define initialUsbCheck notify global:INITIALIZED usb create
|
||||
|
||||
define CUL_0 CUL __device_placeholder__@9600 1034
|
||||
attr CUL_0 hmId 62a77d
|
||||
attr CUL_0 rfmode HomeMatic
|
||||
|
||||
define Arbeitszimmer_Rollo CUL_HM 339336
|
||||
attr Arbeitszimmer_Rollo IODev CUL_0
|
||||
attr Arbeitszimmer_Rollo autoReadReg 4_reqStatus
|
||||
attr Arbeitszimmer_Rollo expert 2_full
|
||||
attr Arbeitszimmer_Rollo firmware 2.3
|
||||
attr Arbeitszimmer_Rollo model HM-LC-Bl1PBU-FM
|
||||
attr Arbeitszimmer_Rollo room CUL_HM
|
||||
attr Arbeitszimmer_Rollo serialNr LEQ1440417
|
||||
attr Arbeitszimmer_Rollo subType blindActuator
|
||||
attr Arbeitszimmer_Rollo webCmd statusRequest:toggleDir:on:off:up:down:stop
|
||||
attr Arbeitszimmer_Rollo room Homekit
|
||||
|
||||
|
||||
define Arbeitszimmer_Deckenlampe CUL_HM 1AA382
|
||||
attr Arbeitszimmer_Deckenlampe IODev CUL_0
|
||||
attr Arbeitszimmer_Deckenlampe autoReadReg 4_reqStatus
|
||||
attr Arbeitszimmer_Deckenlampe expert 2_full
|
||||
attr Arbeitszimmer_Deckenlampe firmware 2.2
|
||||
attr Arbeitszimmer_Deckenlampe model HM-LC-Dim1TPBU-FM
|
||||
attr Arbeitszimmer_Deckenlampe room CUL_HM
|
||||
attr Arbeitszimmer_Deckenlampe serialNr JEQ0201891
|
||||
attr Arbeitszimmer_Deckenlampe subType dimmer
|
||||
attr Arbeitszimmer_Deckenlampe webCmd getConfig:clear msgEvents
|
||||
define Arbeitszimmer_Deckenlampe_Sw CUL_HM 1AA38201
|
||||
attr Arbeitszimmer_Deckenlampe_Sw model HM-LC-Dim1TPBU-FM
|
||||
attr Arbeitszimmer_Deckenlampe_Sw peerIDs
|
||||
attr Arbeitszimmer_Deckenlampe_Sw webCmd statusRequest:toggle:on:off:up:down
|
||||
define Arbeitszimmer_Deckenlampe_Sw1_V_01 CUL_HM 1AA38202
|
||||
attr Arbeitszimmer_Deckenlampe_Sw1_V_01 model HM-LC-Dim1TPBU-FM
|
||||
attr Arbeitszimmer_Deckenlampe_Sw1_V_01 webCmd statusRequest:toggle:on:off:up:down
|
||||
define Arbeitszimmer_Deckenlampe_Sw1_V_02 CUL_HM 1AA38203
|
||||
attr Arbeitszimmer_Deckenlampe_Sw1_V_02 model HM-LC-Dim1TPBU-FM
|
||||
attr Arbeitszimmer_Deckenlampe_Sw1_V_02 webCmd statusRequest:toggle:on:off:up:down
|
||||
attr Arbeitszimmer_Deckenlampe room Homekit
|
||||
|
||||
|
||||
|
||||
define Schlafzimmer_Deckenlampe CUL_HM 1AA1C7
|
||||
attr Schlafzimmer_Deckenlampe IODev CUL_0
|
||||
attr Schlafzimmer_Deckenlampe autoReadReg 4_reqStatus
|
||||
attr Schlafzimmer_Deckenlampe expert 2_full
|
||||
attr Schlafzimmer_Deckenlampe firmware 2.2
|
||||
attr Schlafzimmer_Deckenlampe model HM-LC-Dim1TPBU-FM
|
||||
attr Schlafzimmer_Deckenlampe room CUL_HM
|
||||
attr Schlafzimmer_Deckenlampe serialNr JEQ0201456
|
||||
attr Schlafzimmer_Deckenlampe subType dimmer
|
||||
attr Schlafzimmer_Deckenlampe webCmd getConfig:clear msgEvents
|
||||
define Schlafzimmer_Deckenlampe_Sw CUL_HM 1AA1C701
|
||||
attr Schlafzimmer_Deckenlampe_Sw model HM-LC-Dim1TPBU-FM
|
||||
attr Schlafzimmer_Deckenlampe_Sw peerIDs
|
||||
attr Schlafzimmer_Deckenlampe_Sw webCmd statusRequest:toggle:on:off:up:down
|
||||
define Schlafzimmer_Deckenlampe_Sw1_V_01 CUL_HM 1AA1C702
|
||||
attr Schlafzimmer_Deckenlampe_Sw1_V_01 model HM-LC-Dim1TPBU-FM
|
||||
attr Schlafzimmer_Deckenlampe_Sw1_V_01 webCmd statusRequest:toggle:on:off:up:down
|
||||
define Schlafzimmer_Deckenlampe_Sw1_V_02 CUL_HM 1AA1C703
|
||||
attr Schlafzimmer_Deckenlampe_Sw1_V_02 model HM-LC-Dim1TPBU-FM
|
||||
attr Schlafzimmer_Deckenlampe_Sw1_V_02 webCmd statusRequest:toggle:on:off:up:down
|
||||
attr Schlafzimmer_Deckenlampe room Homekit
|
||||
|
||||
|
||||
|
||||
define Schlafzimmer_RolloKlein CUL_HM 338C2A
|
||||
attr Schlafzimmer_RolloKlein IODev CUL_0
|
||||
attr Schlafzimmer_RolloKlein autoReadReg 4_reqStatus
|
||||
attr Schlafzimmer_RolloKlein expert 2_full
|
||||
attr Schlafzimmer_RolloKlein firmware 2.3
|
||||
attr Schlafzimmer_RolloKlein model HM-LC-Bl1PBU-FM
|
||||
attr Schlafzimmer_RolloKlein room CUL_HM
|
||||
attr Schlafzimmer_RolloKlein serialNr LEQ1439693
|
||||
attr Schlafzimmer_RolloKlein subType blindActuator
|
||||
attr Schlafzimmer_RolloKlein webCmd statusRequest:toggleDir:on:off:up:down:stop
|
||||
attr Schlafzimmer_RolloKlein room Homekit
|
||||
|
||||
|
||||
|
||||
|
||||
define Schlafzimmer_RolloGross CUL_HM 338C33
|
||||
attr Schlafzimmer_RolloGross IODev CUL_0
|
||||
attr Schlafzimmer_RolloGross autoReadReg 4_reqStatus
|
||||
attr Schlafzimmer_RolloGross expert 2_full
|
||||
attr Schlafzimmer_RolloGross firmware 2.3
|
||||
attr Schlafzimmer_RolloGross model HM-LC-Bl1PBU-FM
|
||||
attr Schlafzimmer_RolloGross room CUL_HM
|
||||
attr Schlafzimmer_RolloGross serialNr LEQ1439702
|
||||
attr Schlafzimmer_RolloGross subType blindActuator
|
||||
attr Schlafzimmer_RolloGross webCmd statusRequest:toggleDir:on:off:up:down:stop
|
||||
attr Schlafzimmer_RolloGross room Homekit
|
||||
|
||||
|
||||
|
||||
define Kinderzimmer_Deckenlampe CUL_HM 1B5305
|
||||
attr Kinderzimmer_Deckenlampe IODev CUL_0
|
||||
attr Kinderzimmer_Deckenlampe autoReadReg 4_reqStatus
|
||||
attr Kinderzimmer_Deckenlampe expert 2_full
|
||||
attr Kinderzimmer_Deckenlampe firmware 2.2
|
||||
attr Kinderzimmer_Deckenlampe model HM-LC-Dim1TPBU-FM
|
||||
attr Kinderzimmer_Deckenlampe room CUL_HM
|
||||
attr Kinderzimmer_Deckenlampe serialNr JEQ0199674
|
||||
attr Kinderzimmer_Deckenlampe subType dimmer
|
||||
attr Kinderzimmer_Deckenlampe webCmd getConfig:clear msgEvents
|
||||
define Kinderzimmer_Deckenlampe_Sw CUL_HM 1B530501
|
||||
attr Kinderzimmer_Deckenlampe_Sw model HM-LC-Dim1TPBU-FM
|
||||
attr Kinderzimmer_Deckenlampe_Sw peerIDs
|
||||
attr Kinderzimmer_Deckenlampe_Sw webCmd statusRequest:toggle:on:off:up:down
|
||||
define Kinderzimmer_Deckenlampe_Sw1_V_01 CUL_HM 1B530502
|
||||
attr Kinderzimmer_Deckenlampe_Sw1_V_01 model HM-LC-Dim1TPBU-FM
|
||||
attr Kinderzimmer_Deckenlampe_Sw1_V_01 webCmd statusRequest:toggle:on:off:up:down
|
||||
define Kinderzimmer_Deckenlampe_Sw1_V_02 CUL_HM 1B530503
|
||||
attr Kinderzimmer_Deckenlampe_Sw1_V_02 model HM-LC-Dim1TPBU-FM
|
||||
attr Kinderzimmer_Deckenlampe_Sw1_V_02 webCmd statusRequest:toggle:on:off:up:down
|
||||
attr Kinderzimmer_Deckenlampe room Homekit
|
||||
|
||||
|
||||
|
||||
|
||||
define Kinderzimmer_Rollo CUL_HM 1AF5DD
|
||||
attr Kinderzimmer_Rollo IODev CUL_0
|
||||
attr Kinderzimmer_Rollo autoReadReg 4_reqStatus
|
||||
attr Kinderzimmer_Rollo expert 2_full
|
||||
attr Kinderzimmer_Rollo firmware 2.1
|
||||
attr Kinderzimmer_Rollo model HM-LC-Bl1PBU-FM
|
||||
attr Kinderzimmer_Rollo room CUL_HM
|
||||
attr Kinderzimmer_Rollo serialNr JEQ0109195
|
||||
attr Kinderzimmer_Rollo subType blindActuator
|
||||
attr Kinderzimmer_Rollo webCmd statusRequest:toggleDir:on:off:up:down:stop
|
||||
attr Kinderzimmer_Rollo room Homekit
|
||||
|
||||
|
||||
|
||||
define Steckdose_Dimmer CUL_HM 20E8F1
|
||||
attr Steckdose_Dimmer IODev CUL_0
|
||||
attr Steckdose_Dimmer autoReadReg 4_reqStatus
|
||||
attr Steckdose_Dimmer expert 2_full
|
||||
attr Steckdose_Dimmer firmware 2.3
|
||||
attr Steckdose_Dimmer model HM-LC-Dim1T-Pl-2
|
||||
attr Steckdose_Dimmer room CUL_HM
|
||||
attr Steckdose_Dimmer serialNr KEQ0124588
|
||||
attr Steckdose_Dimmer subType dimmer
|
||||
attr Steckdose_Dimmer webCmd statusRequest:toggle:on:off:up:down
|
||||
attr Steckdose_Dimmer room Homekit
|
||||
|
||||
|
||||
|
||||
define Bad_Luefter CUL_HM 1B7501
|
||||
attr Bad_Luefter IODev CUL_0
|
||||
attr Bad_Luefter autoReadReg 4_reqStatus
|
||||
attr Bad_Luefter expert 2_full
|
||||
attr Bad_Luefter firmware 2.1
|
||||
attr Bad_Luefter model HM-LC-Sw1PBU-FM
|
||||
attr Bad_Luefter room CUL_HM
|
||||
attr Bad_Luefter serialNr JEQ0099033
|
||||
attr Bad_Luefter subType switch
|
||||
attr Bad_Luefter webCmd statusRequest:toggle:on:off
|
||||
attr Bad_Luefter room Homekit
|
||||
|
||||
|
||||
|
||||
define Arbeitszimmer_Bewegungsmelder CUL_HM 2F2A4B
|
||||
attr Arbeitszimmer_Bewegungsmelder IODev CUL_0
|
||||
attr Arbeitszimmer_Bewegungsmelder actCycle 000:20
|
||||
attr Arbeitszimmer_Bewegungsmelder actStatus alive
|
||||
attr Arbeitszimmer_Bewegungsmelder autoReadReg 4_reqStatus
|
||||
attr Arbeitszimmer_Bewegungsmelder expert 2_full
|
||||
attr Arbeitszimmer_Bewegungsmelder firmware 1.6
|
||||
attr Arbeitszimmer_Bewegungsmelder model HM-SEC-MDIR-2
|
||||
attr Arbeitszimmer_Bewegungsmelder room CUL_HM
|
||||
attr Arbeitszimmer_Bewegungsmelder serialNr LEQ0797237
|
||||
attr Arbeitszimmer_Bewegungsmelder subType motionDetector
|
||||
attr Arbeitszimmer_Bewegungsmelder room Homekit
|
||||
|
||||
|
||||
define ActionDetector CUL_HM 000000
|
||||
attr ActionDetector event-on-change-reading .*
|
||||
attr ActionDetector model ActionDetector
|
||||
|
||||
|
||||
define MobileSteckdoseSchalter1 CUL_HM 453335
|
||||
attr MobileSteckdoseSchalter1 IODev CUL_0
|
||||
attr MobileSteckdoseSchalter1 actCycle 000:10
|
||||
attr MobileSteckdoseSchalter1 actStatus dead
|
||||
attr MobileSteckdoseSchalter1 autoReadReg 4_reqStatus
|
||||
attr MobileSteckdoseSchalter1 expert 2_full
|
||||
attr MobileSteckdoseSchalter1 firmware 1.6
|
||||
attr MobileSteckdoseSchalter1 model HM-ES-PMSw1-Pl
|
||||
attr MobileSteckdoseSchalter1 room CUL_HM
|
||||
attr MobileSteckdoseSchalter1 serialNr NEQ0153825
|
||||
attr MobileSteckdoseSchalter1 subType powerMeter
|
||||
attr MobileSteckdoseSchalter1 webCmd getConfig:clear msgEvents
|
||||
define MobileSteckdoseSchalter1_Sw CUL_HM 45333501
|
||||
attr MobileSteckdoseSchalter1_Sw model HM-ES-PMSw1-Pl
|
||||
attr MobileSteckdoseSchalter1_Sw peerIDs
|
||||
define MobileSteckdoseSchalter1_Pwr CUL_HM 45333502
|
||||
attr MobileSteckdoseSchalter1_Pwr model HM-ES-PMSw1-Pl
|
||||
define MobileSteckdoseSchalter1_SenPwr CUL_HM 45333503
|
||||
attr MobileSteckdoseSchalter1_SenPwr model HM-ES-PMSw1-Pl
|
||||
define MobileSteckdoseSchalter1_SenI CUL_HM 45333504
|
||||
attr MobileSteckdoseSchalter1_SenI model HM-ES-PMSw1-Pl
|
||||
define MobileSteckdoseSchalter1_SenU CUL_HM 45333505
|
||||
attr MobileSteckdoseSchalter1_SenU model HM-ES-PMSw1-Pl
|
||||
define MobileSteckdoseSchalter1_SenF CUL_HM 45333506
|
||||
attr MobileSteckdoseSchalter1_SenF model HM-ES-PMSw1-Pl
|
||||
define MobileSteckdoseSchalter2 CUL_HM 338E72
|
||||
attr MobileSteckdoseSchalter2 IODev CUL_0
|
||||
attr MobileSteckdoseSchalter2 actCycle 000:10
|
||||
attr MobileSteckdoseSchalter2 actStatus dead
|
||||
attr MobileSteckdoseSchalter2 autoReadReg 4_reqStatus
|
||||
attr MobileSteckdoseSchalter2 expert 2_full
|
||||
attr MobileSteckdoseSchalter2 firmware 1.6
|
||||
attr MobileSteckdoseSchalter2 model HM-ES-PMSw1-Pl
|
||||
attr MobileSteckdoseSchalter2 room CUL_HM
|
||||
attr MobileSteckdoseSchalter2 serialNr LEQ1345055
|
||||
attr MobileSteckdoseSchalter2 subType powerMeter
|
||||
attr MobileSteckdoseSchalter2 webCmd getConfig:clear msgEvents
|
||||
define MobileSteckdoseSchalter2_Sw CUL_HM 338E7201
|
||||
attr MobileSteckdoseSchalter2_Sw model HM-ES-PMSw1-Pl
|
||||
attr MobileSteckdoseSchalter2_Sw peerIDs
|
||||
define MobileSteckdoseSchalter2_Pwr CUL_HM 338E7202
|
||||
attr MobileSteckdoseSchalter2_Pwr model HM-ES-PMSw1-Pl
|
||||
define MobileSteckdoseSchalter2_SenPwr CUL_HM 338E7203
|
||||
attr MobileSteckdoseSchalter2_SenPwr model HM-ES-PMSw1-Pl
|
||||
define MobileSteckdoseSchalter2_SenI CUL_HM 338E7204
|
||||
attr MobileSteckdoseSchalter2_SenI model HM-ES-PMSw1-Pl
|
||||
define MobileSteckdoseSchalter2_SenU CUL_HM 338E7205
|
||||
attr MobileSteckdoseSchalter2_SenU model HM-ES-PMSw1-Pl
|
||||
define MobileSteckdoseSchalter2_SenF CUL_HM 338E7206
|
||||
attr MobileSteckdoseSchalter2_SenF model HM-ES-PMSw1-Pl
|
||||
|
|
@ -1,9 +1,5 @@
|
|||
# Add only entities here that are auto-discovered (not KNX devices)
|
||||
|
||||
#default_view:
|
||||
# view: true
|
||||
# icon: mdi:home
|
||||
|
||||
living_area:
|
||||
name: Wohnbereich
|
||||
entities:
|
||||
|
|
|
@ -1,337 +0,0 @@
|
|||
import re
|
||||
import os
|
||||
from ruamel.yaml import YAML
|
||||
|
||||
yaml = YAML()
|
||||
|
||||
# -------------------------------------- put the config here -----------------------------------------------------------
|
||||
|
||||
|
||||
def get_config():
|
||||
return {
|
||||
'bedroom': {
|
||||
'ir_host': 'bedroompi.fritz.box',
|
||||
'media_player': 'media_player.bedroompi',
|
||||
'group': 'group.bedroom',
|
||||
|
||||
'mapping': {
|
||||
'btn_1': '[playlist] Good Morning',
|
||||
'btn_2': '[playlist] Good Night Long',
|
||||
'btn_3': '[playlist] Good Night',
|
||||
|
||||
'btn_4': '[playlist] Bar Classics',
|
||||
'btn_5': '[playlist] Sentimental Moods',
|
||||
'btn_6': '[playlist] Pop',
|
||||
|
||||
'btn_7': '[radio] B 5 aktuell',
|
||||
'btn_8': '[radio] BR-Klassik',
|
||||
'btn_9': '[playlist] http://opml.radiotime.com/Tune.ashx?id=s25028&formats=aac,ogg,mp3', # Klassik Radio
|
||||
|
||||
'key_numeric_star': [
|
||||
*repeat_one_crossfade('media_player.bedroompi'),
|
||||
service('media_player.play_media', 'media_player.bedroompi',
|
||||
media_content_id='Foen', media_content_type='music'),
|
||||
service('media_player.volume_set', 'media_player.bedroompi', volume_level=60),
|
||||
],
|
||||
'btn_0': '[radio] Bayern 3',
|
||||
'key_numeric_pound': '[radio] Bayern 2',
|
||||
|
||||
'key_red': '[scene] schlafzimmer_stillen',
|
||||
'key_green': '[scene] schlafzimmer_orange',
|
||||
'key_yellow': '[scene] schlafzimmer_ganz_hell',
|
||||
'key_blue': '[scene] nachtswennallelieberschlafen',
|
||||
|
||||
'key_tv': [service('script.turn_on', 'script.timed_sleep',
|
||||
variables={'media_content_id': 'spotify:playlist:37i9dQZF1DXbcPC6Vvqudd', # Regen
|
||||
'light_off_secs': 15 * 60,
|
||||
'music_off_secs': 45 * 60,
|
||||
'shuffle': 1,
|
||||
})],
|
||||
'key_video': [service('script.turn_on', 'script.timed_sleep',
|
||||
variables={'media_content_id': 'Good Night',
|
||||
'light_off_secs': 15 * 60,
|
||||
'music_off_secs': 45 * 60,
|
||||
'shuffle': 0,
|
||||
})],
|
||||
'key_music': [service('script.turn_on', 'script.timed_sleep',
|
||||
variables={'media_content_id': 'spotify:playlist:37i9dQZF1DXbcPC6Vvqudd', # Regen
|
||||
'light_off_secs': 5 * 60,
|
||||
'music_off_secs': 20 * 60,
|
||||
'shuffle': 1,
|
||||
})],
|
||||
'key_pictures': [service('script.turn_on', 'script.timed_sleep',
|
||||
variables={'media_content_id': 'Good Night',
|
||||
'light_off_secs': 5 * 60,
|
||||
'music_off_secs': 20 * 60,
|
||||
'shuffle': 0,
|
||||
})],
|
||||
|
||||
'key_power': [ # Music & Lights off
|
||||
service('media_player.media_pause', 'media_player.bedroompi'),
|
||||
service('light.turn_off', 'group.bedroom'),
|
||||
],
|
||||
'key_ok': [ # Grosser Rollo zu, kleiner halb zu
|
||||
service('cover.close_cover', 'cover.schlafzimmer_rollo_gross'),
|
||||
service('cover_half.set_half', 'cover.schlafzimmer_rollo_klein'),
|
||||
],
|
||||
'key_mute': [service('light.turn_off', 'group.all_downstairs_but_bedroom_and_outside')],
|
||||
'key_channel': [service('light.turn_off', 'group.all_downstairs_but_bedroom')],
|
||||
}
|
||||
},
|
||||
'living_area': {
|
||||
'ir_host': 'kitchenpi.fritz.box',
|
||||
'media_player': 'media_player.kitchenpi',
|
||||
'group': 'group.living_area',
|
||||
|
||||
'mapping': {
|
||||
'btn_4': '[playlist] Bar Classics',
|
||||
'btn_5': '[playlist] Sentimental Moods',
|
||||
'btn_6': '[playlist] Pop',
|
||||
|
||||
'btn_7': '[radio] B 5 aktuell',
|
||||
'btn_8': '[radio] BR-Klassik',
|
||||
'btn_9': '[playlist] http://opml.radiotime.com/Tune.ashx?id=s25028&formats=aac,ogg,mp3', # Klassik Radio
|
||||
|
||||
'key_numeric_star': '[radio] Antenne Bayern',
|
||||
'btn_0': '[radio] Bayern 3',
|
||||
'key_numeric_pound': '[radio] Bayern 2',
|
||||
|
||||
'key_red': '[scene] wohnbereich_orange',
|
||||
'key_green': '[scene] wohnbereich_grun',
|
||||
'key_yellow': '[scene] wohnbereich_hell',
|
||||
'key_blue': '[scene] wohnbereich_blau_grun',
|
||||
}
|
||||
},
|
||||
'first_floor_dining_room': {
|
||||
'ir_host': 'esszimmerradio.fritz.box',
|
||||
'media_player': 'media_player.esszimmer',
|
||||
'mapping': {
|
||||
'btn_1': '[radio] Bayern 1',
|
||||
'btn_2': '[radio] Bayern 2',
|
||||
'btn_3': '[radio] BR Heimat',
|
||||
'btn_4': '[radio] Bayern+',
|
||||
'btn_5': '[radio] B 5 Aktuell',
|
||||
'btn_6': '[radio] BR-Klassik',
|
||||
'btn_7': '[playlist] Gesammelte Weihnachtslieder',
|
||||
'btn_8': '[playlist] Harmonic Brass Christmas',
|
||||
'btn_9': '[playlist] German Brass Christmas',
|
||||
'key_numeric_star': '[playlist] Weihnachten mit den Wiener Sängerknaben',
|
||||
'btn_0': '[playlist] Weihnachten mit den Wiener Sängerknaben',
|
||||
'key_numeric_pound': '[playlist] SammlungGeorg',
|
||||
}
|
||||
},
|
||||
'first_floor_living_room': {
|
||||
'ir_host': 'musikserverWohnzimmerOben.fritz.box',
|
||||
'media_player': 'media_player.wohnzimmer',
|
||||
'mapping': {
|
||||
'btn_1': '[radio] Bayern 1',
|
||||
'btn_2': '[radio] Bayern 2',
|
||||
'btn_3': '[radio] BR Heimat',
|
||||
'btn_4': '[radio] Bayern+',
|
||||
'btn_5': '[radio] B 5 Aktuell',
|
||||
'btn_6': '[radio] BR-Klassik',
|
||||
'btn_7': '[playlist] Gesammelte Weihnachtslieder',
|
||||
'btn_8': '[playlist] Harmonic Brass Christmas',
|
||||
'btn_9': '[playlist] German Brass Christmas',
|
||||
'key_numeric_star': '[playlist] Weihnachten mit den Wiener Sängerknaben',
|
||||
'btn_0': '[playlist] Weihnachten mit den Wiener Sängerknaben',
|
||||
'key_numeric_pound': '[playlist] SammlungGeorg',
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
# ----------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
description_regex = re.compile(r'\[\s*(.*)\s*\](.*)')
|
||||
|
||||
|
||||
def split_description(d):
|
||||
res = description_regex.match(d)
|
||||
return res.group(1).strip(), res.group(2).strip()
|
||||
|
||||
|
||||
def default_music_settings(media_player):
|
||||
return [
|
||||
service('media_player.shuffle_set', media_player, shuffle=False),
|
||||
service('media_player.squeezebox_call_method', media_player, command='playlist repeat 0'),
|
||||
service('media_player.squeezebox_call_method', media_player, command="playerpref transitionType 0"),
|
||||
]
|
||||
|
||||
|
||||
def repeat_one_crossfade(media_player):
|
||||
return [
|
||||
service('media_player.repeat_set', media_player, repeat='one'),
|
||||
service('media_player.squeezebox_call_method', media_player, command="playerpref transitionType 1"),
|
||||
]
|
||||
|
||||
|
||||
def automation_from_config(ir_description):
|
||||
ir_host = ir_description['ir_host']
|
||||
|
||||
result = []
|
||||
for key, description in ir_description['mapping'].items():
|
||||
automation = {'alias': f'IR {ir_host} {key}',
|
||||
'trigger': ir_trigger(ir_host, key)}
|
||||
if isinstance(description, list):
|
||||
action = description
|
||||
elif isinstance(description, str):
|
||||
function, value = split_description(description)
|
||||
if function == 'playlist':
|
||||
media_player = ir_description['media_player']
|
||||
action = [*default_music_settings(media_player),
|
||||
service('media_player.play_media', media_player,
|
||||
media_content_id=value, media_content_type='music')]
|
||||
elif function == 'radio':
|
||||
media_player = ir_description['media_player']
|
||||
action = service('media_player.play_media', media_player,
|
||||
media_content_id=value, media_content_type='channel')
|
||||
elif function == 'scene':
|
||||
action = service('scene.turn_on', 'scene.' + value)
|
||||
elif function == 'timed_light_off':
|
||||
group = ir_description['group']
|
||||
action = service('light.turn_off', group, transition=str(60 * int(value)))
|
||||
else:
|
||||
raise ValueError("Invalid prefix " + function)
|
||||
else:
|
||||
raise ValueError("Invalid type for entry " + key)
|
||||
|
||||
automation['action'] = action
|
||||
result.append(automation)
|
||||
return result
|
||||
|
||||
|
||||
def ir_trigger(ir_host, button_name):
|
||||
return {
|
||||
'platform': 'event',
|
||||
'event_type': 'ir_command_received',
|
||||
'event_data': {
|
||||
'button_name': button_name,
|
||||
'repeat_counter': 0,
|
||||
'host': ir_host,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def service(service_name, entity_id, **kwargs):
|
||||
kwargs['entity_id'] = entity_id
|
||||
return {
|
||||
'service': service_name,
|
||||
'data': kwargs
|
||||
}
|
||||
|
||||
|
||||
def default_shutter_controls(device_group, ir_host):
|
||||
"""Default rules for Hauppauge IR for Shutter control with up, down, left, right buttons"""
|
||||
return [
|
||||
{
|
||||
'alias': f'IR {ir_host} Rollo auf',
|
||||
'trigger': ir_trigger(ir_host, 'key_up'),
|
||||
'action': service('cover.open_cover', device_group),
|
||||
},
|
||||
{
|
||||
'alias': f'IR {ir_host} Rollo zu',
|
||||
'trigger': ir_trigger(ir_host, 'key_down'),
|
||||
'action': service('cover.close_cover', device_group),
|
||||
},
|
||||
{
|
||||
'alias': f'IR {ir_host} Rollo halb',
|
||||
'trigger': [ir_trigger(ir_host, 'key_left'), ir_trigger(ir_host, 'key_right')],
|
||||
'action': service('cover_half.set_half', device_group),
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
def default_light_controls(device_group, ir_host):
|
||||
"""Default light rules for Hauppauge IR for light dimming with channel up/down and light off with stop button"""
|
||||
return [
|
||||
{
|
||||
'alias': f'IR {ir_host} Licht heller',
|
||||
'trigger': ir_trigger(ir_host, 'key_channelup'),
|
||||
'action': service('dimmer.dim', device_group, offset=30),
|
||||
},
|
||||
{
|
||||
'alias': f'IR {ir_host} Licht dunkler',
|
||||
'trigger': ir_trigger(ir_host, 'key_channeldown'),
|
||||
'action': service('dimmer.dim', device_group, offset=-30),
|
||||
},
|
||||
{
|
||||
'alias': f'IR {ir_host} Licht viel heller',
|
||||
'trigger': ir_trigger(ir_host, 'key_menu'),
|
||||
'action': service('dimmer.dim', device_group, offset=130),
|
||||
},
|
||||
{
|
||||
'alias': f'IR {ir_host} Licht viel dunkler',
|
||||
'trigger': ir_trigger(ir_host, 'key_stop'),
|
||||
'action': service('dimmer.dim', device_group, offset=-130),
|
||||
},
|
||||
{
|
||||
'alias': f'IR {ir_host} Licht aus',
|
||||
'trigger': ir_trigger(ir_host, 'key_goto'),
|
||||
'action': service('light.turn_off', device_group),
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
def default_music_controls(device_group, ir_host):
|
||||
"""Default music control (play, pause, next) for Hauppauge IR"""
|
||||
return [
|
||||
{
|
||||
'alias': f'IR {ir_host} Musik Play',
|
||||
'trigger': ir_trigger(ir_host, 'key_play'),
|
||||
'action': service('media_player.media_play_pause', device_group),
|
||||
},
|
||||
{
|
||||
'alias': f'IR {ir_host} Musik Pause',
|
||||
'trigger': ir_trigger(ir_host, 'key_pause'),
|
||||
'action': service('media_player.turn_off', device_group),
|
||||
},
|
||||
{
|
||||
'alias': f'IR {ir_host} Musik Next',
|
||||
'trigger': [ir_trigger(ir_host, 'key_forward'), ir_trigger(ir_host, 'key_fastforward')],
|
||||
'action': service('media_player.media_next_track', device_group),
|
||||
},
|
||||
{
|
||||
'alias': f'IR {ir_host} Musik Prev',
|
||||
'trigger': [ir_trigger(ir_host, 'key_previous'), ir_trigger(ir_host, 'key_rewind')],
|
||||
'action': service('media_player.media_next_track', device_group),
|
||||
},
|
||||
{
|
||||
'alias': f'IR {ir_host} Vol Up',
|
||||
'trigger': ir_trigger(ir_host, 'key_volumeup'),
|
||||
'action': service('media_player.volume_up', device_group),
|
||||
},
|
||||
{
|
||||
'alias': f'IR {ir_host} Vol Down',
|
||||
'trigger': ir_trigger(ir_host, 'key_volumedown'),
|
||||
'action': service('media_player.volume_down', device_group),
|
||||
},
|
||||
{
|
||||
'alias': f'IR {ir_host} Shuffle On',
|
||||
'trigger': ir_trigger(ir_host, 'key_menu'),
|
||||
'action': service('media_player.shuffle_set', device_group, shuffle=True),
|
||||
},
|
||||
{
|
||||
'alias': f'IR {ir_host} Shuffle Off',
|
||||
'trigger': ir_trigger(ir_host, 'key_exit'),
|
||||
'action': service('media_player.shuffle_set', device_group, shuffle=False),
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
def create_rules(folder):
|
||||
for name, data in get_config().items():
|
||||
rules = []
|
||||
rules += automation_from_config(data)
|
||||
|
||||
if 'group' in data:
|
||||
rules += default_shutter_controls(data['group'], data['ir_host'])
|
||||
rules += default_light_controls(data['group'], data['ir_host'])
|
||||
if 'media_player' in data:
|
||||
rules += default_music_controls(data['media_player'], data['ir_host'])
|
||||
|
||||
file_name = os.path.join(folder, "ir_" + name + '.yaml')
|
||||
with open(file_name, 'w') as f:
|
||||
f.write("# Dont' edit manually! this is generated!\n\n")
|
||||
yaml.dump(rules, f)
|
|
@ -3,7 +3,6 @@ import argparse
|
|||
from util import DeviceInfo, add_to_group, name_to_id
|
||||
from ruamel.yaml import YAML
|
||||
import knx_conf as knx
|
||||
from ir_automations import create_rules as create_automation_rules
|
||||
|
||||
script_path = os.path.dirname(os.path.realpath(__file__))
|
||||
yaml = YAML()
|
||||
|
@ -13,8 +12,8 @@ yaml.preserve_quotes = True
|
|||
sensor_exclude_list = [
|
||||
'sensor.fritz_box_7490_bytes_received',
|
||||
'sensor.fritz_box_7490_bytes_sent',
|
||||
#'sensor.fritz_box_7490_kbyte_sec_received',
|
||||
#'sensor.fritz_box_7490_kbyte_sec_sent',
|
||||
# 'sensor.fritz_box_7490_kbyte_sec_received',
|
||||
# 'sensor.fritz_box_7490_kbyte_sec_sent',
|
||||
'sensor.fritz_box_7490_packets_received',
|
||||
'sensor.fritz_box_7490_packets_sec_received',
|
||||
'sensor.fritz_box_7490_packets_sec_sent',
|
||||
|
@ -165,7 +164,6 @@ def add_knx_devices(devices, groups):
|
|||
return template_sensors
|
||||
|
||||
|
||||
|
||||
def add_meta_groups(groups):
|
||||
all_devices = set()
|
||||
for group in groups.values():
|
||||
|
@ -256,11 +254,10 @@ def create_config(target_directory, development=False):
|
|||
manual_config_dict = yaml.load(open(manual_config_path, encoding="utf-8"))
|
||||
|
||||
knx_conf = {
|
||||
'rate_limit': 20,
|
||||
'tunneling': {
|
||||
'host': '192.168.178.65',
|
||||
'port': 3671
|
||||
}
|
||||
#'tunneling': {
|
||||
# 'host': '192.168.178.65',
|
||||
# 'port': 3671
|
||||
#}
|
||||
}
|
||||
template_sensors = add_knx_devices(knx_conf, group_dict)
|
||||
|
||||
|
@ -298,8 +295,6 @@ def create_config(target_directory, development=False):
|
|||
additional_file = 'secrets_development.yaml' if development else 'secrets_deploy.yaml'
|
||||
output.write(open(os.path.join(script_path, additional_file), 'r').read())
|
||||
|
||||
#create_automation_rules(os.path.join(target_directory, 'automations'))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
|
|
|
@ -8,7 +8,6 @@ mobile_app:
|
|||
person:
|
||||
sun:
|
||||
system_health:
|
||||
updater:
|
||||
#logbook:
|
||||
|
||||
input_boolean:
|
||||
|
@ -155,94 +154,94 @@ switch:
|
|||
name: esszimmer_oben_radio_steckdose
|
||||
host: esszimmerradio.fritz.box
|
||||
num_power_plugs: 4
|
||||
- platform: mqtt
|
||||
name: PoolPumpeSteckdose
|
||||
state_topic: "stat/poolpumpesteckdose/POWER"
|
||||
command_topic: "cmnd/poolpumpesteckdose/POWER"
|
||||
availability_topic: "tele/poolpumpesteckdose/LWT"
|
||||
qos: 1
|
||||
payload_on: "ON"
|
||||
payload_off: "OFF"
|
||||
payload_available: "Online"
|
||||
payload_not_available: "Offline"
|
||||
retain: false
|
||||
- platform: mqtt
|
||||
name: Tasmota01
|
||||
state_topic: "stat/tasmota01/POWER"
|
||||
command_topic: "cmnd/tasmota01/POWER"
|
||||
availability_topic: "tele/tasmota01/LWT"
|
||||
qos: 1
|
||||
payload_on: "ON"
|
||||
payload_off: "OFF"
|
||||
payload_available: "Online"
|
||||
payload_not_available: "Offline"
|
||||
retain: false
|
||||
- platform: mqtt
|
||||
name: Tasmota02
|
||||
state_topic: "stat/tasmota02/POWER"
|
||||
command_topic: "cmnd/tasmota02/POWER"
|
||||
availability_topic: "tele/tasmota02/LWT"
|
||||
qos: 1
|
||||
payload_on: "ON"
|
||||
payload_off: "OFF"
|
||||
payload_available: "Online"
|
||||
payload_not_available: "Offline"
|
||||
retain: false
|
||||
- platform: mqtt
|
||||
name: Tasmota03
|
||||
state_topic: "stat/tasmota03/POWER"
|
||||
command_topic: "cmnd/tasmota03/POWER"
|
||||
availability_topic: "tele/tasmota03/LWT"
|
||||
qos: 1
|
||||
payload_on: "ON"
|
||||
payload_off: "OFF"
|
||||
payload_available: "Online"
|
||||
payload_not_available: "Offline"
|
||||
retain: false
|
||||
- platform: mqtt
|
||||
name: Tasmota04
|
||||
state_topic: "stat/tasmota04/POWER"
|
||||
command_topic: "cmnd/tasmota04/POWER"
|
||||
availability_topic: "tele/tasmota04/LWT"
|
||||
qos: 1
|
||||
payload_on: "ON"
|
||||
payload_off: "OFF"
|
||||
payload_available: "Online"
|
||||
payload_not_available: "Offline"
|
||||
retain: false
|
||||
- platform: mqtt
|
||||
name: Tasmota05
|
||||
state_topic: "stat/tasmota05/POWER"
|
||||
command_topic: "cmnd/tasmota05/POWER"
|
||||
availability_topic: "tele/tasmota05/LWT"
|
||||
qos: 1
|
||||
payload_on: "ON"
|
||||
payload_off: "OFF"
|
||||
payload_available: "Online"
|
||||
payload_not_available: "Offline"
|
||||
retain: false
|
||||
- platform: mqtt
|
||||
name: Tasmota06
|
||||
state_topic: "stat/tasmota06/POWER"
|
||||
command_topic: "cmnd/tasmota06/POWER"
|
||||
availability_topic: "tele/tasmota06/LWT"
|
||||
qos: 1
|
||||
payload_on: "ON"
|
||||
payload_off: "OFF"
|
||||
payload_available: "Online"
|
||||
payload_not_available: "Offline"
|
||||
retain: false
|
||||
- platform: mqtt
|
||||
name: Tasmota07
|
||||
state_topic: "stat/tasmota07/POWER"
|
||||
command_topic: "cmnd/tasmota07/POWER"
|
||||
availability_topic: "tele/tasmota07/LWT"
|
||||
qos: 1
|
||||
payload_on: "ON"
|
||||
payload_off: "OFF"
|
||||
payload_available: "Online"
|
||||
payload_not_available: "Offline"
|
||||
retain: false
|
||||
# - platform: mqtt
|
||||
# name: PoolPumpeSteckdose
|
||||
# state_topic: "stat/poolpumpesteckdose/POWER"
|
||||
# command_topic: "cmnd/poolpumpesteckdose/POWER"
|
||||
# availability_topic: "tele/poolpumpesteckdose/LWT"
|
||||
# qos: 1
|
||||
# payload_on: "ON"
|
||||
# payload_off: "OFF"
|
||||
# payload_available: "Online"
|
||||
# payload_not_available: "Offline"
|
||||
# retain: false
|
||||
# - platform: mqtt
|
||||
# name: Tasmota01
|
||||
# state_topic: "stat/tasmota01/POWER"
|
||||
# command_topic: "cmnd/tasmota01/POWER"
|
||||
# availability_topic: "tele/tasmota01/LWT"
|
||||
# qos: 1
|
||||
# payload_on: "ON"
|
||||
# payload_off: "OFF"
|
||||
# payload_available: "Online"
|
||||
# payload_not_available: "Offline"
|
||||
# retain: false
|
||||
# - platform: mqtt
|
||||
# name: Tasmota02
|
||||
# state_topic: "stat/tasmota02/POWER"
|
||||
# command_topic: "cmnd/tasmota02/POWER"
|
||||
# availability_topic: "tele/tasmota02/LWT"
|
||||
# qos: 1
|
||||
# payload_on: "ON"
|
||||
# payload_off: "OFF"
|
||||
# payload_available: "Online"
|
||||
# payload_not_available: "Offline"
|
||||
# retain: false
|
||||
# - platform: mqtt
|
||||
# name: Tasmota03
|
||||
# state_topic: "stat/tasmota03/POWER"
|
||||
# command_topic: "cmnd/tasmota03/POWER"
|
||||
# availability_topic: "tele/tasmota03/LWT"
|
||||
# qos: 1
|
||||
# payload_on: "ON"
|
||||
# payload_off: "OFF"
|
||||
# payload_available: "Online"
|
||||
# payload_not_available: "Offline"
|
||||
# retain: false
|
||||
# - platform: mqtt
|
||||
# name: Tasmota04
|
||||
# state_topic: "stat/tasmota04/POWER"
|
||||
# command_topic: "cmnd/tasmota04/POWER"
|
||||
# availability_topic: "tele/tasmota04/LWT"
|
||||
# qos: 1
|
||||
# payload_on: "ON"
|
||||
# payload_off: "OFF"
|
||||
# payload_available: "Online"
|
||||
# payload_not_available: "Offline"
|
||||
# retain: false
|
||||
# - platform: mqtt
|
||||
# name: Tasmota05
|
||||
# state_topic: "stat/tasmota05/POWER"
|
||||
# command_topic: "cmnd/tasmota05/POWER"
|
||||
# availability_topic: "tele/tasmota05/LWT"
|
||||
# qos: 1
|
||||
# payload_on: "ON"
|
||||
# payload_off: "OFF"
|
||||
# payload_available: "Online"
|
||||
# payload_not_available: "Offline"
|
||||
# retain: false
|
||||
# - platform: mqtt
|
||||
# name: Tasmota06
|
||||
# state_topic: "stat/tasmota06/POWER"
|
||||
# command_topic: "cmnd/tasmota06/POWER"
|
||||
# availability_topic: "tele/tasmota06/LWT"
|
||||
# qos: 1
|
||||
# payload_on: "ON"
|
||||
# payload_off: "OFF"
|
||||
# payload_available: "Online"
|
||||
# payload_not_available: "Offline"
|
||||
# retain: false
|
||||
# - platform: mqtt
|
||||
# name: Tasmota07
|
||||
# state_topic: "stat/tasmota07/POWER"
|
||||
# command_topic: "cmnd/tasmota07/POWER"
|
||||
# availability_topic: "tele/tasmota07/LWT"
|
||||
# qos: 1
|
||||
# payload_on: "ON"
|
||||
# payload_off: "OFF"
|
||||
# payload_available: "Online"
|
||||
# payload_not_available: "Offline"
|
||||
# retain: false
|
||||
|
||||
long_click:
|
||||
duration: 0.6
|
||||
|
@ -479,9 +478,9 @@ homematic:
|
|||
username: homeassistant
|
||||
password: !secret homematic_pw
|
||||
|
||||
zwave:
|
||||
usb_path: /dev/serial/by-id/usb-0658_0200-if00
|
||||
network_key: "0xE0, 0x64, 0x50, 0x55, 0x20, 0x63, 0xC7, 0x05, 0x62, 0xD3, 0xEA, 0x91, 0x87, 0xE0, 0x1E, 0x74"
|
||||
#zwave:
|
||||
# usb_path: /dev/serial/by-id/usb-0658_0200-if00
|
||||
# network_key: "0xE0, 0x64, 0x50, 0x55, 0x20, 0x63, 0xC7, 0x05, 0x62, 0xD3, 0xEA, 0x91, 0x87, 0xE0, 0x1E, 0x74"
|
||||
|
||||
|
||||
sysdweb:
|
||||
|
@ -549,13 +548,6 @@ media_player:
|
|||
- platform: squeezebox_telnet
|
||||
host: musikserverWohnzimmerOben.fritz.box
|
||||
|
||||
# set up via frontend :(
|
||||
#vacuum:
|
||||
# - platform: xiaomi_miio
|
||||
# host: vacuum.fritz.box
|
||||
# token: !secret vacuum_token
|
||||
|
||||
|
||||
sensor:
|
||||
- platform: mqtt
|
||||
state_topic: 'monitor/kitchen/martin_handy'
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -87,10 +87,12 @@ export class RoomGlanceCard extends LitElement {
|
|||
return html`
|
||||
<ha-icon-button
|
||||
icon="${buttonCfg.icon || "mdi:checkbox-blank"}"
|
||||
style="color: ${buttonCfg.color || ""};"
|
||||
title="${buttonCfg.name}"
|
||||
@click=${this.serviceHandler("scene", "turn_on", {entity_id: buttonCfg.scene})}
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-icon style="color: ${buttonCfg.color || ""};"
|
||||
icon="${buttonCfg.icon || "mdi:checkbox-blank"}"></ha-icon>
|
||||
</ha-icon-button>
|
||||
`;
|
||||
}
|
||||
|
||||
|
@ -99,18 +101,24 @@ export class RoomGlanceCard extends LitElement {
|
|||
<ha-icon-button
|
||||
icon="mdi:close-circle"
|
||||
@click=${this.serviceHandler("light", "turn_off")}
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-icon icon="mdi:close-circle"></ha-icon>
|
||||
</ha-icon-button>
|
||||
|
||||
<ha-icon-button
|
||||
icon="mdi:chevron-up"
|
||||
title="Heller"
|
||||
@click=${this.serviceHandler("dimmer", "dim", {offset: 30})}
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-icon icon="mdi:chevron-up"></ha-icon>
|
||||
</ha-icon-button>
|
||||
<ha-icon-button
|
||||
icon="mdi:chevron-down"
|
||||
title="Dunkler"
|
||||
@click=${this.serviceHandler("dimmer", "dim", {offset: -30})}
|
||||
></ha-icon-button>`;
|
||||
>
|
||||
<ha-icon icon="mdi:chevron-down"></ha-icon>
|
||||
</ha-icon-button>`;
|
||||
}
|
||||
|
||||
private renderCoverControl() {
|
||||
|
@ -118,19 +126,27 @@ export class RoomGlanceCard extends LitElement {
|
|||
<ha-icon-button
|
||||
icon="hass:menu"
|
||||
@click=${this.serviceHandler("cover_half", "set_half")}
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-icon icon="hass:menu"></ha-icon>
|
||||
</ha-icon-button>
|
||||
<ha-icon-button
|
||||
icon="hass:arrow-up"
|
||||
@click=${this.serviceHandler("cover", "open_cover")}
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-icon icon="hass:arrow-up"></ha-icon>
|
||||
</ha-icon-button>
|
||||
<ha-icon-button
|
||||
icon="hass:stop"
|
||||
@click=${this.serviceHandler("cover", "stop_cover")}
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-icon icon="hass:stop"></ha-icon>
|
||||
</ha-icon-button>
|
||||
<ha-icon-button
|
||||
icon="hass:arrow-down"
|
||||
@click=${this.serviceHandler("cover", "close_cover")}
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-icon icon="hass:arrow-down"></ha-icon>
|
||||
</ha-icon-button>
|
||||
`;
|
||||
}
|
||||
|
||||
|
@ -227,9 +243,7 @@ export class RoomGlanceCard extends LitElement {
|
|||
}
|
||||
|
||||
ha-icon {
|
||||
cursor: pointer;
|
||||
padding: 8px;
|
||||
color: #a9a9a9;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
ha-icon.state-on {
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
* subject to an additional IP rights grant found at
|
||||
* http://polymer.github.io/PATENTS.txt
|
||||
*/
|
||||
const i=new WeakMap,n=t=>"function"==typeof t&&i.has(t),r=void 0!==window.customElements&&void 0!==window.customElements.polyfillWrapFlushCallback,o=(t,e,s=null)=>{for(;e!==s;){const s=e.nextSibling;t.removeChild(e),e=s}},a={},l={},h=`{{lit-${String(Math.random()).slice(2)}}}`,c=`\x3c!--${h}--\x3e`,p=new RegExp(`${h}|${c}`),d="$lit$";class u{constructor(t,e){this.parts=[],this.element=e;const s=[],i=[],n=document.createTreeWalker(e.content,133,null,!1);let r=0,o=-1,a=0;const{strings:l,values:{length:c}}=t;for(;a<c;){const t=n.nextNode();if(null!==t){if(o++,1===t.nodeType){if(t.hasAttributes()){const e=t.attributes,{length:s}=e;let i=0;for(let t=0;t<s;t++)_(e[t].name,d)&&i++;for(;i-- >0;){const e=l[a],s=y.exec(e)[2],i=s.toLowerCase()+d,n=t.getAttribute(i);t.removeAttribute(i);const r=n.split(p);this.parts.push({type:"attribute",index:o,name:s,strings:r}),a+=r.length-1}}"TEMPLATE"===t.tagName&&(i.push(t),n.currentNode=t.content)}else if(3===t.nodeType){const e=t.data;if(e.indexOf(h)>=0){const i=t.parentNode,n=e.split(p),r=n.length-1;for(let e=0;e<r;e++){let s,r=n[e];if(""===r)s=m();else{const t=y.exec(r);null!==t&&_(t[2],d)&&(r=r.slice(0,t.index)+t[1]+t[2].slice(0,-d.length)+t[3]),s=document.createTextNode(r)}i.insertBefore(s,t),this.parts.push({type:"node",index:++o})}""===n[r]?(i.insertBefore(m(),t),s.push(t)):t.data=n[r],a+=r}}else if(8===t.nodeType)if(t.data===h){const e=t.parentNode;null!==t.previousSibling&&o!==r||(o++,e.insertBefore(m(),t)),r=o,this.parts.push({type:"node",index:o}),null===t.nextSibling?t.data="":(s.push(t),o--),a++}else{let e=-1;for(;-1!==(e=t.data.indexOf(h,e+1));)this.parts.push({type:"node",index:-1}),a++}}else n.currentNode=i.pop()}for(const t of s)t.parentNode.removeChild(t)}}const _=(t,e)=>{const s=t.length-e.length;return s>=0&&t.slice(s)===e},f=t=>-1!==t.index,m=()=>document.createComment(""),y=/([ \x09\x0a\x0c\x0d])([^\0-\x1F\x7F-\x9F "'>=\/]+)([ \x09\x0a\x0c\x0d]*=[ \x09\x0a\x0c\x0d]*(?:[^ \x09\x0a\x0c\x0d"'`<>=]*|"[^"]*|'[^']*))$/;
|
||||
const i=new WeakMap,n=t=>"function"==typeof t&&i.has(t),r=void 0!==window.customElements&&void 0!==window.customElements.polyfillWrapFlushCallback,o=(t,e,s=null)=>{for(;e!==s;){const s=e.nextSibling;t.removeChild(e),e=s}},a={},l={},h=`{{lit-${String(Math.random()).slice(2)}}}`,c=`\x3c!--${h}--\x3e`,p=new RegExp(`${h}|${c}`),u="$lit$";class d{constructor(t,e){this.parts=[],this.element=e;const s=[],i=[],n=document.createTreeWalker(e.content,133,null,!1);let r=0,o=-1,a=0;const{strings:l,values:{length:c}}=t;for(;a<c;){const t=n.nextNode();if(null!==t){if(o++,1===t.nodeType){if(t.hasAttributes()){const e=t.attributes,{length:s}=e;let i=0;for(let t=0;t<s;t++)_(e[t].name,u)&&i++;for(;i-- >0;){const e=l[a],s=g.exec(e)[2],i=s.toLowerCase()+u,n=t.getAttribute(i);t.removeAttribute(i);const r=n.split(p);this.parts.push({type:"attribute",index:o,name:s,strings:r}),a+=r.length-1}}"TEMPLATE"===t.tagName&&(i.push(t),n.currentNode=t.content)}else if(3===t.nodeType){const e=t.data;if(e.indexOf(h)>=0){const i=t.parentNode,n=e.split(p),r=n.length-1;for(let e=0;e<r;e++){let s,r=n[e];if(""===r)s=m();else{const t=g.exec(r);null!==t&&_(t[2],u)&&(r=r.slice(0,t.index)+t[1]+t[2].slice(0,-u.length)+t[3]),s=document.createTextNode(r)}i.insertBefore(s,t),this.parts.push({type:"node",index:++o})}""===n[r]?(i.insertBefore(m(),t),s.push(t)):t.data=n[r],a+=r}}else if(8===t.nodeType)if(t.data===h){const e=t.parentNode;null!==t.previousSibling&&o!==r||(o++,e.insertBefore(m(),t)),r=o,this.parts.push({type:"node",index:o}),null===t.nextSibling?t.data="":(s.push(t),o--),a++}else{let e=-1;for(;-1!==(e=t.data.indexOf(h,e+1));)this.parts.push({type:"node",index:-1}),a++}}else n.currentNode=i.pop()}for(const t of s)t.parentNode.removeChild(t)}}const _=(t,e)=>{const s=t.length-e.length;return s>=0&&t.slice(s)===e},f=t=>-1!==t.index,m=()=>document.createComment(""),g=/([ \x09\x0a\x0c\x0d])([^\0-\x1F\x7F-\x9F "'>=\/]+)([ \x09\x0a\x0c\x0d]*=[ \x09\x0a\x0c\x0d]*(?:[^ \x09\x0a\x0c\x0d"'`<>=]*|"[^"]*|'[^']*))$/;
|
||||
/**
|
||||
* @license
|
||||
* Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
|
||||
|
@ -26,7 +26,7 @@ const i=new WeakMap,n=t=>"function"==typeof t&&i.has(t),r=void 0!==window.custom
|
|||
* subject to an additional IP rights grant found at
|
||||
* http://polymer.github.io/PATENTS.txt
|
||||
*/
|
||||
class g{constructor(t,e,s){this.__parts=[],this.template=t,this.processor=e,this.options=s}update(t){let e=0;for(const s of this.__parts)void 0!==s&&s.setValue(t[e]),e++;for(const t of this.__parts)void 0!==t&&t.commit()}_clone(){const t=r?this.template.element.content.cloneNode(!0):document.importNode(this.template.element.content,!0),e=[],s=this.template.parts,i=document.createTreeWalker(t,133,null,!1);let n,o=0,a=0,l=i.nextNode();for(;o<s.length;)if(n=s[o],f(n)){for(;a<n.index;)a++,"TEMPLATE"===l.nodeName&&(e.push(l),i.currentNode=l.content),null===(l=i.nextNode())&&(i.currentNode=e.pop(),l=i.nextNode());if("node"===n.type){const t=this.processor.handleTextExpression(this.options);t.insertAfterNode(l.previousSibling),this.__parts.push(t)}else this.__parts.push(...this.processor.handleAttributeExpressions(l,n.name,n.strings,this.options));o++}else this.__parts.push(void 0),o++;return r&&(document.adoptNode(t),customElements.upgrade(t)),t}}
|
||||
class y{constructor(t,e,s){this.__parts=[],this.template=t,this.processor=e,this.options=s}update(t){let e=0;for(const s of this.__parts)void 0!==s&&s.setValue(t[e]),e++;for(const t of this.__parts)void 0!==t&&t.commit()}_clone(){const t=r?this.template.element.content.cloneNode(!0):document.importNode(this.template.element.content,!0),e=[],s=this.template.parts,i=document.createTreeWalker(t,133,null,!1);let n,o=0,a=0,l=i.nextNode();for(;o<s.length;)if(n=s[o],f(n)){for(;a<n.index;)a++,"TEMPLATE"===l.nodeName&&(e.push(l),i.currentNode=l.content),null===(l=i.nextNode())&&(i.currentNode=e.pop(),l=i.nextNode());if("node"===n.type){const t=this.processor.handleTextExpression(this.options);t.insertAfterNode(l.previousSibling),this.__parts.push(t)}else this.__parts.push(...this.processor.handleAttributeExpressions(l,n.name,n.strings,this.options));o++}else this.__parts.push(void 0),o++;return r&&(document.adoptNode(t),customElements.upgrade(t)),t}}
|
||||
/**
|
||||
* @license
|
||||
* Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
|
||||
|
@ -39,7 +39,7 @@ class g{constructor(t,e,s){this.__parts=[],this.template=t,this.processor=e,this
|
|||
* Code distributed by Google as part of the polymer project is also
|
||||
* subject to an additional IP rights grant found at
|
||||
* http://polymer.github.io/PATENTS.txt
|
||||
*/class v{constructor(t,e,s,i){this.strings=t,this.values=e,this.type=s,this.processor=i}getHTML(){const t=this.strings.length-1;let e="",s=!1;for(let i=0;i<t;i++){const t=this.strings[i],n=t.lastIndexOf("\x3c!--");s=(n>-1||s)&&-1===t.indexOf("--\x3e",n+1);const r=y.exec(t);e+=null===r?t+(s?h:c):t.substr(0,r.index)+r[1]+r[2]+d+r[3]+h}return e+=this.strings[t]}getTemplateElement(){const t=document.createElement("template");return t.innerHTML=this.getHTML(),t}}
|
||||
*/class v{constructor(t,e,s,i){this.strings=t,this.values=e,this.type=s,this.processor=i}getHTML(){const t=this.strings.length-1;let e="",s=!1;for(let i=0;i<t;i++){const t=this.strings[i],n=t.lastIndexOf("\x3c!--");s=(n>-1||s)&&-1===t.indexOf("--\x3e",n+1);const r=g.exec(t);e+=null===r?t+(s?h:c):t.substr(0,r.index)+r[1]+r[2]+u+r[3]+h}return e+=this.strings[t]}getTemplateElement(){const t=document.createElement("template");return t.innerHTML=this.getHTML(),t}}
|
||||
/**
|
||||
* @license
|
||||
* Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
|
||||
|
@ -53,7 +53,7 @@ class g{constructor(t,e,s){this.__parts=[],this.template=t,this.processor=e,this
|
|||
* subject to an additional IP rights grant found at
|
||||
* http://polymer.github.io/PATENTS.txt
|
||||
*/
|
||||
const S=t=>null===t||!("object"==typeof t||"function"==typeof t),b=t=>Array.isArray(t)||!(!t||!t[Symbol.iterator]);class w{constructor(t,e,s){this.dirty=!0,this.element=t,this.name=e,this.strings=s,this.parts=[];for(let t=0;t<s.length-1;t++)this.parts[t]=this._createPart()}_createPart(){return new P(this)}_getValue(){const t=this.strings,e=t.length-1;let s="";for(let i=0;i<e;i++){s+=t[i];const e=this.parts[i];if(void 0!==e){const t=e.value;if(S(t)||!b(t))s+="string"==typeof t?t:String(t);else for(const e of t)s+="string"==typeof e?e:String(e)}}return s+=t[e]}commit(){this.dirty&&(this.dirty=!1,this.element.setAttribute(this.name,this._getValue()))}}class P{constructor(t){this.value=void 0,this.committer=t}setValue(t){t===a||S(t)&&t===this.value||(this.value=t,n(t)||(this.committer.dirty=!0))}commit(){for(;n(this.value);){const t=this.value;this.value=a,t(this)}this.value!==a&&this.committer.commit()}}class C{constructor(t){this.value=void 0,this.__pendingValue=void 0,this.options=t}appendInto(t){this.startNode=t.appendChild(m()),this.endNode=t.appendChild(m())}insertAfterNode(t){this.startNode=t,this.endNode=t.nextSibling}appendIntoPart(t){t.__insert(this.startNode=m()),t.__insert(this.endNode=m())}insertAfterPart(t){t.__insert(this.startNode=m()),this.endNode=t.endNode,t.endNode=this.startNode}setValue(t){this.__pendingValue=t}commit(){for(;n(this.__pendingValue);){const t=this.__pendingValue;this.__pendingValue=a,t(this)}const t=this.__pendingValue;t!==a&&(S(t)?t!==this.value&&this.__commitText(t):t instanceof v?this.__commitTemplateResult(t):t instanceof Node?this.__commitNode(t):b(t)?this.__commitIterable(t):t===l?(this.value=l,this.clear()):this.__commitText(t))}__insert(t){this.endNode.parentNode.insertBefore(t,this.endNode)}__commitNode(t){this.value!==t&&(this.clear(),this.__insert(t),this.value=t)}__commitText(t){const e=this.startNode.nextSibling;t=null==t?"":t,e===this.endNode.previousSibling&&3===e.nodeType?e.data=t:this.__commitNode(document.createTextNode("string"==typeof t?t:String(t))),this.value=t}__commitTemplateResult(t){const e=this.options.templateFactory(t);if(this.value instanceof g&&this.value.template===e)this.value.update(t.values);else{const s=new g(e,t.processor,this.options),i=s._clone();s.update(t.values),this.__commitNode(i),this.value=s}}__commitIterable(t){Array.isArray(this.value)||(this.value=[],this.clear());const e=this.value;let s,i=0;for(const n of t)void 0===(s=e[i])&&(s=new C(this.options),e.push(s),0===i?s.appendIntoPart(this):s.insertAfterPart(e[i-1])),s.setValue(n),s.commit(),i++;i<e.length&&(e.length=i,this.clear(s&&s.endNode))}clear(t=this.startNode){o(this.startNode.parentNode,t.nextSibling,this.endNode)}}class x{constructor(t,e,s){if(this.value=void 0,this.__pendingValue=void 0,2!==s.length||""!==s[0]||""!==s[1])throw new Error("Boolean attributes can only contain a single expression");this.element=t,this.name=e,this.strings=s}setValue(t){this.__pendingValue=t}commit(){for(;n(this.__pendingValue);){const t=this.__pendingValue;this.__pendingValue=a,t(this)}if(this.__pendingValue===a)return;const t=!!this.__pendingValue;this.value!==t&&(t?this.element.setAttribute(this.name,""):this.element.removeAttribute(this.name),this.value=t),this.__pendingValue=a}}class O extends w{constructor(t,e,s){super(t,e,s),this.single=2===s.length&&""===s[0]&&""===s[1]}_createPart(){return new T(this)}_getValue(){return this.single?this.parts[0].value:super._getValue()}commit(){this.dirty&&(this.dirty=!1,this.element[this.name]=this._getValue())}}class T extends P{}let N=!1;try{const t={get capture(){return N=!0,!1}};window.addEventListener("test",t,t),window.removeEventListener("test",t,t)}catch(t){}class A{constructor(t,e,s){this.value=void 0,this.__pendingValue=void 0,this.element=t,this.eventName=e,this.eventContext=s,this.__boundHandleEvent=t=>this.handleEvent(t)}setValue(t){this.__pendingValue=t}commit(){for(;n(this.__pendingValue);){const t=this.__pendingValue;this.__pendingValue=a,t(this)}if(this.__pendingValue===a)return;const t=this.__pendingValue,e=this.value,s=null==t||null!=e&&(t.capture!==e.capture||t.once!==e.once||t.passive!==e.passive),i=null!=t&&(null==e||s);s&&this.element.removeEventListener(this.eventName,this.__boundHandleEvent,this.__options),i&&(this.__options=j(t),this.element.addEventListener(this.eventName,this.__boundHandleEvent,this.__options)),this.value=t,this.__pendingValue=a}handleEvent(t){"function"==typeof this.value?this.value.call(this.eventContext||this.element,t):this.value.handleEvent(t)}}const j=t=>t&&(N?{capture:t.capture,passive:t.passive,once:t.once}:t.capture);
|
||||
const S=t=>null===t||!("object"==typeof t||"function"==typeof t),b=t=>Array.isArray(t)||!(!t||!t[Symbol.iterator]);class w{constructor(t,e,s){this.dirty=!0,this.element=t,this.name=e,this.strings=s,this.parts=[];for(let t=0;t<s.length-1;t++)this.parts[t]=this._createPart()}_createPart(){return new P(this)}_getValue(){const t=this.strings,e=t.length-1;let s="";for(let i=0;i<e;i++){s+=t[i];const e=this.parts[i];if(void 0!==e){const t=e.value;if(S(t)||!b(t))s+="string"==typeof t?t:String(t);else for(const e of t)s+="string"==typeof e?e:String(e)}}return s+=t[e]}commit(){this.dirty&&(this.dirty=!1,this.element.setAttribute(this.name,this._getValue()))}}class P{constructor(t){this.value=void 0,this.committer=t}setValue(t){t===a||S(t)&&t===this.value||(this.value=t,n(t)||(this.committer.dirty=!0))}commit(){for(;n(this.value);){const t=this.value;this.value=a,t(this)}this.value!==a&&this.committer.commit()}}class C{constructor(t){this.value=void 0,this.__pendingValue=void 0,this.options=t}appendInto(t){this.startNode=t.appendChild(m()),this.endNode=t.appendChild(m())}insertAfterNode(t){this.startNode=t,this.endNode=t.nextSibling}appendIntoPart(t){t.__insert(this.startNode=m()),t.__insert(this.endNode=m())}insertAfterPart(t){t.__insert(this.startNode=m()),this.endNode=t.endNode,t.endNode=this.startNode}setValue(t){this.__pendingValue=t}commit(){for(;n(this.__pendingValue);){const t=this.__pendingValue;this.__pendingValue=a,t(this)}const t=this.__pendingValue;t!==a&&(S(t)?t!==this.value&&this.__commitText(t):t instanceof v?this.__commitTemplateResult(t):t instanceof Node?this.__commitNode(t):b(t)?this.__commitIterable(t):t===l?(this.value=l,this.clear()):this.__commitText(t))}__insert(t){this.endNode.parentNode.insertBefore(t,this.endNode)}__commitNode(t){this.value!==t&&(this.clear(),this.__insert(t),this.value=t)}__commitText(t){const e=this.startNode.nextSibling;t=null==t?"":t,e===this.endNode.previousSibling&&3===e.nodeType?e.data=t:this.__commitNode(document.createTextNode("string"==typeof t?t:String(t))),this.value=t}__commitTemplateResult(t){const e=this.options.templateFactory(t);if(this.value instanceof y&&this.value.template===e)this.value.update(t.values);else{const s=new y(e,t.processor,this.options),i=s._clone();s.update(t.values),this.__commitNode(i),this.value=s}}__commitIterable(t){Array.isArray(this.value)||(this.value=[],this.clear());const e=this.value;let s,i=0;for(const n of t)void 0===(s=e[i])&&(s=new C(this.options),e.push(s),0===i?s.appendIntoPart(this):s.insertAfterPart(e[i-1])),s.setValue(n),s.commit(),i++;i<e.length&&(e.length=i,this.clear(s&&s.endNode))}clear(t=this.startNode){o(this.startNode.parentNode,t.nextSibling,this.endNode)}}class x{constructor(t,e,s){if(this.value=void 0,this.__pendingValue=void 0,2!==s.length||""!==s[0]||""!==s[1])throw new Error("Boolean attributes can only contain a single expression");this.element=t,this.name=e,this.strings=s}setValue(t){this.__pendingValue=t}commit(){for(;n(this.__pendingValue);){const t=this.__pendingValue;this.__pendingValue=a,t(this)}if(this.__pendingValue===a)return;const t=!!this.__pendingValue;this.value!==t&&(t?this.element.setAttribute(this.name,""):this.element.removeAttribute(this.name),this.value=t),this.__pendingValue=a}}class O extends w{constructor(t,e,s){super(t,e,s),this.single=2===s.length&&""===s[0]&&""===s[1]}_createPart(){return new T(this)}_getValue(){return this.single?this.parts[0].value:super._getValue()}commit(){this.dirty&&(this.dirty=!1,this.element[this.name]=this._getValue())}}class T extends P{}let N=!1;try{const t={get capture(){return N=!0,!1}};window.addEventListener("test",t,t),window.removeEventListener("test",t,t)}catch(t){}class A{constructor(t,e,s){this.value=void 0,this.__pendingValue=void 0,this.element=t,this.eventName=e,this.eventContext=s,this.__boundHandleEvent=t=>this.handleEvent(t)}setValue(t){this.__pendingValue=t}commit(){for(;n(this.__pendingValue);){const t=this.__pendingValue;this.__pendingValue=a,t(this)}if(this.__pendingValue===a)return;const t=this.__pendingValue,e=this.value,s=null==t||null!=e&&(t.capture!==e.capture||t.once!==e.once||t.passive!==e.passive),i=null!=t&&(null==e||s);s&&this.element.removeEventListener(this.eventName,this.__boundHandleEvent,this.__options),i&&(this.__options=j(t),this.element.addEventListener(this.eventName,this.__boundHandleEvent,this.__options)),this.value=t,this.__pendingValue=a}handleEvent(t){"function"==typeof this.value?this.value.call(this.eventContext||this.element,t):this.value.handleEvent(t)}}const j=t=>t&&(N?{capture:t.capture,passive:t.passive,once:t.once}:t.capture);
|
||||
/**
|
||||
* @license
|
||||
* Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
|
||||
|
@ -79,7 +79,7 @@ const S=t=>null===t||!("object"==typeof t||"function"==typeof t),b=t=>Array.isAr
|
|||
* Code distributed by Google as part of the polymer project is also
|
||||
* subject to an additional IP rights grant found at
|
||||
* http://polymer.github.io/PATENTS.txt
|
||||
*/function V(t){let e=k.get(t.type);void 0===e&&(e={stringsArray:new WeakMap,keyString:new Map},k.set(t.type,e));let s=e.stringsArray.get(t.strings);if(void 0!==s)return s;const i=t.strings.join(h);return void 0===(s=e.keyString.get(i))&&(s=new u(t,t.getTemplateElement()),e.keyString.set(i,s)),e.stringsArray.set(t.strings,s),s}const k=new Map,M=new WeakMap;
|
||||
*/function V(t){let e=k.get(t.type);void 0===e&&(e={stringsArray:new WeakMap,keyString:new Map},k.set(t.type,e));let s=e.stringsArray.get(t.strings);if(void 0!==s)return s;const i=t.strings.join(h);return void 0===(s=e.keyString.get(i))&&(s=new d(t,t.getTemplateElement()),e.keyString.set(i,s)),e.stringsArray.set(t.strings,s),s}const k=new Map,M=new WeakMap;
|
||||
/**
|
||||
* @license
|
||||
* Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
|
||||
|
@ -120,7 +120,7 @@ const S=t=>null===t||!("object"==typeof t||"function"==typeof t),b=t=>Array.isAr
|
|||
* subject to an additional IP rights grant found at
|
||||
* http://polymer.github.io/PATENTS.txt
|
||||
*/
|
||||
const q=(t,e)=>`${t}--${e}`;let I=!0;void 0===window.ShadyCSS?I=!1:void 0===window.ShadyCSS.prepareTemplateDom&&(console.warn("Incompatible ShadyCSS version detected. Please update to at least @webcomponents/webcomponentsjs@2.0.2 and @webcomponents/shadycss@1.3.1."),I=!1);const H=t=>e=>{const s=q(e.type,t);let i=k.get(s);void 0===i&&(i={stringsArray:new WeakMap,keyString:new Map},k.set(s,i));let n=i.stringsArray.get(e.strings);if(void 0!==n)return n;const r=e.strings.join(h);if(void 0===(n=i.keyString.get(r))){const s=e.getTemplateElement();I&&window.ShadyCSS.prepareTemplateDom(s,t),n=new u(e,s),i.keyString.set(r,n)}return i.stringsArray.set(e.strings,n),n},D=["html","svg"],L=new Set,B=(t,e,s)=>{L.add(s);const i=t.querySelectorAll("style"),{length:n}=i;if(0===n)return void window.ShadyCSS.prepareTemplateStyles(e.element,s);const r=document.createElement("style");for(let t=0;t<n;t++){const e=i[t];e.parentNode.removeChild(e),r.textContent+=e.textContent}(t=>{D.forEach(e=>{const s=k.get(q(e,t));void 0!==s&&s.keyString.forEach(t=>{const{element:{content:e}}=t,s=new Set;Array.from(e.querySelectorAll("style")).forEach(t=>{s.add(t)}),z(t,s)})})})(s);const o=e.element.content;!function(t,e,s=null){const{element:{content:i},parts:n}=t;if(null==s)return void i.appendChild(e);const r=document.createTreeWalker(i,U,null,!1);let o=$(n),a=0,l=-1;for(;r.nextNode();)for(l++,r.currentNode===s&&(a=F(e),s.parentNode.insertBefore(e,s));-1!==o&&n[o].index===l;){if(a>0){for(;-1!==o;)n[o].index+=a,o=$(n,o);return}o=$(n,o)}}(e,r,o.firstChild),window.ShadyCSS.prepareTemplateStyles(e.element,s);const a=o.querySelector("style");if(window.ShadyCSS.nativeShadow&&null!==a)t.insertBefore(a.cloneNode(!0),t.firstChild);else{o.insertBefore(r,o.firstChild);const t=new Set;t.add(r),z(e,t)}};
|
||||
const q=(t,e)=>`${t}--${e}`;let I=!0;void 0===window.ShadyCSS?I=!1:void 0===window.ShadyCSS.prepareTemplateDom&&(console.warn("Incompatible ShadyCSS version detected. Please update to at least @webcomponents/webcomponentsjs@2.0.2 and @webcomponents/shadycss@1.3.1."),I=!1);const H=t=>e=>{const s=q(e.type,t);let i=k.get(s);void 0===i&&(i={stringsArray:new WeakMap,keyString:new Map},k.set(s,i));let n=i.stringsArray.get(e.strings);if(void 0!==n)return n;const r=e.strings.join(h);if(void 0===(n=i.keyString.get(r))){const s=e.getTemplateElement();I&&window.ShadyCSS.prepareTemplateDom(s,t),n=new d(e,s),i.keyString.set(r,n)}return i.stringsArray.set(e.strings,n),n},D=["html","svg"],L=new Set,B=(t,e,s)=>{L.add(s);const i=t.querySelectorAll("style"),{length:n}=i;if(0===n)return void window.ShadyCSS.prepareTemplateStyles(e.element,s);const r=document.createElement("style");for(let t=0;t<n;t++){const e=i[t];e.parentNode.removeChild(e),r.textContent+=e.textContent}(t=>{D.forEach(e=>{const s=k.get(q(e,t));void 0!==s&&s.keyString.forEach(t=>{const{element:{content:e}}=t,s=new Set;Array.from(e.querySelectorAll("style")).forEach(t=>{s.add(t)}),z(t,s)})})})(s);const o=e.element.content;!function(t,e,s=null){const{element:{content:i},parts:n}=t;if(null==s)return void i.appendChild(e);const r=document.createTreeWalker(i,U,null,!1);let o=$(n),a=0,l=-1;for(;r.nextNode();)for(l++,r.currentNode===s&&(a=F(e),s.parentNode.insertBefore(e,s));-1!==o&&n[o].index===l;){if(a>0){for(;-1!==o;)n[o].index+=a,o=$(n,o);return}o=$(n,o)}}(e,r,o.firstChild),window.ShadyCSS.prepareTemplateStyles(e.element,s);const a=o.querySelector("style");if(window.ShadyCSS.nativeShadow&&null!==a)t.insertBefore(a.cloneNode(!0),t.firstChild);else{o.insertBefore(r,o.firstChild);const t=new Set;t.add(r),z(e,t)}};
|
||||
/**
|
||||
* @license
|
||||
* Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
|
||||
|
@ -162,7 +162,7 @@ const st=(t,e)=>"method"!==e.kind||!e.descriptor||"value"in e.descriptor?{kind:"
|
|||
* subject to an additional IP rights grant found at
|
||||
* http://polymer.github.io/PATENTS.txt
|
||||
*/
|
||||
(window.litElementVersions||(window.litElementVersions=[])).push("2.0.1");const ot=t=>t.flat?t.flat(1/0):function t(e,s=[]){for(let i=0,n=e.length;i<n;i++){const n=e[i];Array.isArray(n)?t(n,s):s.push(n)}return s}(t);class at extends et{static finalize(){super.finalize(),this._styles=this.hasOwnProperty(JSCompiler_renameProperty("styles",this))?this._getUniqueStyles():this._styles||[]}static _getUniqueStyles(){const t=this.styles,e=[];if(Array.isArray(t)){ot(t).reduceRight((t,e)=>(t.add(e),t),new Set).forEach(t=>e.unshift(t))}else t&&e.push(t);return e}initialize(){super.initialize(),this.renderRoot=this.createRenderRoot(),window.ShadowRoot&&this.renderRoot instanceof window.ShadowRoot&&this.adoptStyles()}createRenderRoot(){return this.attachShadow({mode:"open"})}adoptStyles(){const t=this.constructor._styles;0!==t.length&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow?rt?this.renderRoot.adoptedStyleSheets=t.map(t=>t.styleSheet):this._needsShimAdoptedStyleSheets=!0:window.ShadyCSS.ScopingShim.prepareAdoptedCssText(t.map(t=>t.cssText),this.localName))}connectedCallback(){super.connectedCallback(),this.hasUpdated&&void 0!==window.ShadyCSS&&window.ShadyCSS.styleElement(this)}update(t){super.update(t);const e=this.render();e instanceof v&&this.constructor.render(e,this.renderRoot,{scopeName:this.localName,eventContext:this}),this._needsShimAdoptedStyleSheets&&(this._needsShimAdoptedStyleSheets=!1,this.constructor._styles.forEach(t=>{const e=document.createElement("style");e.textContent=t.cssText,this.renderRoot.appendChild(e)}))}render(){}}at.finalized=!0,at.render=(t,e,s)=>{const i=s.scopeName,n=M.has(e),r=I&&11===e.nodeType&&!!e.host&&t instanceof v,a=r&&!L.has(i),l=a?document.createDocumentFragment():e;if(((t,e,s)=>{let i=M.get(e);void 0===i&&(o(e,e.firstChild),M.set(e,i=new C(Object.assign({templateFactory:V},s))),i.appendInto(e)),i.setValue(t),i.commit()})(t,l,Object.assign({templateFactory:H(i)},s)),a){const t=M.get(l);M.delete(l),t.value instanceof g&&B(l,t.value.template,i),o(e,e.firstChild),e.appendChild(l),M.set(e,t)}!n&&r&&window.ShadyCSS.styleElement(e.host)};const lt=(t,e)=>0!=(t.attributes.supported_features&e);class ht{constructor(t,e){this.hass=t,this.stateObj=e,this._attr=e.attributes,this._feat=this._attr.supported_features}get isFullyOpen(){return void 0!==this._attr.current_position?100===this._attr.current_position:"open"===this.stateObj.state}get isFullyClosed(){return void 0!==this._attr.current_position?0===this._attr.current_position:"closed"===this.stateObj.state}get isFullyOpenTilt(){return 100===this._attr.current_tilt_position}get isFullyClosedTilt(){return 0===this._attr.current_tilt_position}get isOpening(){return"opening"===this.stateObj.state}get isClosing(){return"closing"===this.stateObj.state}get supportsOpen(){return lt(this.stateObj,1)}get supportsClose(){return lt(this.stateObj,2)}get supportsSetPosition(){return lt(this.stateObj,4)}get supportsStop(){return lt(this.stateObj,8)}get supportsOpenTilt(){return lt(this.stateObj,16)}get supportsCloseTilt(){return lt(this.stateObj,32)}get supportsStopTilt(){return lt(this.stateObj,64)}get supportsSetTiltPosition(){return lt(this.stateObj,128)}get isTiltOnly(){const t=this.supportsOpen||this.supportsClose||this.supportsStop;return(this.supportsOpenTilt||this.supportsCloseTilt||this.supportsStopTilt)&&!t}openCover(){this.callService("open_cover")}closeCover(){this.callService("close_cover")}stopCover(){this.callService("stop_cover")}openCoverTilt(){this.callService("open_cover_tilt")}closeCoverTilt(){this.callService("close_cover_tilt")}stopCoverTilt(){this.callService("stop_cover_tilt")}setCoverPosition(t){this.callService("set_cover_position",{position:t})}setCoverTiltPosition(t){this.callService("set_cover_tilt_position",{tilt_position:t})}callService(t,e={}){e.entity_id=this.stateObj.entity_id,this.hass.callService("cover",t,e)}}s.d(e,"StateCardCustomCover",function(){return pt});var ct=function(t,e,s,i){var n,r=arguments.length,o=r<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,s):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,e,s,i);else for(var a=t.length-1;a>=0;a--)(n=t[a])&&(o=(r<3?n(o):r>3?n(e,s,o):n(e,s))||o);return r>3&&o&&Object.defineProperty(e,s,o),o};let pt=class extends at{constructor(){super(...arguments),this.inDialog=!1}get stateObj(){return this.hass&&this._config?this.hass.states[this._config.entity]:null}setConfig(t){if(!t||!t.entity)throw new Error("Invalid configuration");this._config=t}get entityObj(){if(this.hass&&this.stateObj)return new ht(this.hass,this.stateObj);throw new Error("Trying to get entityObj before setting hass & config")}static getCardSize(){return 1}stateInfoTemplate(){return R`
|
||||
(window.litElementVersions||(window.litElementVersions=[])).push("2.0.1");const ot=t=>t.flat?t.flat(1/0):function t(e,s=[]){for(let i=0,n=e.length;i<n;i++){const n=e[i];Array.isArray(n)?t(n,s):s.push(n)}return s}(t);class at extends et{static finalize(){super.finalize(),this._styles=this.hasOwnProperty(JSCompiler_renameProperty("styles",this))?this._getUniqueStyles():this._styles||[]}static _getUniqueStyles(){const t=this.styles,e=[];if(Array.isArray(t)){ot(t).reduceRight((t,e)=>(t.add(e),t),new Set).forEach(t=>e.unshift(t))}else t&&e.push(t);return e}initialize(){super.initialize(),this.renderRoot=this.createRenderRoot(),window.ShadowRoot&&this.renderRoot instanceof window.ShadowRoot&&this.adoptStyles()}createRenderRoot(){return this.attachShadow({mode:"open"})}adoptStyles(){const t=this.constructor._styles;0!==t.length&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow?rt?this.renderRoot.adoptedStyleSheets=t.map(t=>t.styleSheet):this._needsShimAdoptedStyleSheets=!0:window.ShadyCSS.ScopingShim.prepareAdoptedCssText(t.map(t=>t.cssText),this.localName))}connectedCallback(){super.connectedCallback(),this.hasUpdated&&void 0!==window.ShadyCSS&&window.ShadyCSS.styleElement(this)}update(t){super.update(t);const e=this.render();e instanceof v&&this.constructor.render(e,this.renderRoot,{scopeName:this.localName,eventContext:this}),this._needsShimAdoptedStyleSheets&&(this._needsShimAdoptedStyleSheets=!1,this.constructor._styles.forEach(t=>{const e=document.createElement("style");e.textContent=t.cssText,this.renderRoot.appendChild(e)}))}render(){}}at.finalized=!0,at.render=(t,e,s)=>{const i=s.scopeName,n=M.has(e),r=I&&11===e.nodeType&&!!e.host&&t instanceof v,a=r&&!L.has(i),l=a?document.createDocumentFragment():e;if(((t,e,s)=>{let i=M.get(e);void 0===i&&(o(e,e.firstChild),M.set(e,i=new C(Object.assign({templateFactory:V},s))),i.appendInto(e)),i.setValue(t),i.commit()})(t,l,Object.assign({templateFactory:H(i)},s)),a){const t=M.get(l);M.delete(l),t.value instanceof y&&B(l,t.value.template,i),o(e,e.firstChild),e.appendChild(l),M.set(e,t)}!n&&r&&window.ShadyCSS.styleElement(e.host)};const lt=(t,e)=>0!=(t.attributes.supported_features&e);class ht{constructor(t,e){this.hass=t,this.stateObj=e,this._attr=e.attributes,this._feat=this._attr.supported_features}get isFullyOpen(){return void 0!==this._attr.current_position?100===this._attr.current_position:"open"===this.stateObj.state}get isFullyClosed(){return void 0!==this._attr.current_position?0===this._attr.current_position:"closed"===this.stateObj.state}get isFullyOpenTilt(){return 100===this._attr.current_tilt_position}get isFullyClosedTilt(){return 0===this._attr.current_tilt_position}get isOpening(){return"opening"===this.stateObj.state}get isClosing(){return"closing"===this.stateObj.state}get supportsOpen(){return lt(this.stateObj,1)}get supportsClose(){return lt(this.stateObj,2)}get supportsSetPosition(){return lt(this.stateObj,4)}get supportsStop(){return lt(this.stateObj,8)}get supportsOpenTilt(){return lt(this.stateObj,16)}get supportsCloseTilt(){return lt(this.stateObj,32)}get supportsStopTilt(){return lt(this.stateObj,64)}get supportsSetTiltPosition(){return lt(this.stateObj,128)}get isTiltOnly(){const t=this.supportsOpen||this.supportsClose||this.supportsStop;return(this.supportsOpenTilt||this.supportsCloseTilt||this.supportsStopTilt)&&!t}openCover(){this.callService("open_cover")}closeCover(){this.callService("close_cover")}stopCover(){this.callService("stop_cover")}openCoverTilt(){this.callService("open_cover_tilt")}closeCoverTilt(){this.callService("close_cover_tilt")}stopCoverTilt(){this.callService("stop_cover_tilt")}setCoverPosition(t){this.callService("set_cover_position",{position:t})}setCoverTiltPosition(t){this.callService("set_cover_tilt_position",{tilt_position:t})}callService(t,e={}){e.entity_id=this.stateObj.entity_id,this.hass.callService("cover",t,e)}}s.d(e,"StateCardCustomCover",function(){return pt});var ct=function(t,e,s,i){var n,r=arguments.length,o=r<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,s):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,e,s,i);else for(var a=t.length-1;a>=0;a--)(n=t[a])&&(o=(r<3?n(o):r>3?n(e,s,o):n(e,s))||o);return r>3&&o&&Object.defineProperty(e,s,o),o};let pt=class extends at{constructor(){super(...arguments),this.inDialog=!1}get stateObj(){return this.hass&&this._config?this.hass.states[this._config.entity]:null}setConfig(t){if(!t||!t.entity)throw new Error("Invalid configuration");this._config=t}get entityObj(){if(this.hass&&this.stateObj)return new ht(this.hass,this.stateObj);throw new Error("Trying to get entityObj before setting hass & config")}static getCardSize(){return 1}stateInfoTemplate(){return R`
|
||||
State info template
|
||||
`}render(){if(!this._config||!this.hass)return R``;const t=this.entityObj,e=this.hass.states[this._config.entity];return e?R`
|
||||
<style include="iron-flex iron-flex-alignment"></style>
|
||||
|
@ -179,6 +179,10 @@ const st=(t,e)=>"method"!==e.kind||!e.descriptor||"value"in e.descriptor?{kind:"
|
|||
--mdc-icon-size: 25px;
|
||||
}
|
||||
|
||||
ha-icon {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
[invisible] {
|
||||
visibility: hidden !important;
|
||||
}
|
||||
|
@ -189,17 +193,23 @@ const st=(t,e)=>"method"!==e.kind||!e.descriptor||"value"in e.descriptor?{kind:"
|
|||
<ha-icon-button
|
||||
icon="hass:menu"
|
||||
@click=${this.onHalfOpenTap}
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-icon icon="hass:menu"> </ha-icon>
|
||||
</ha-icon-button>
|
||||
<ha-icon-button
|
||||
icon="hass:arrow-up"
|
||||
@click=${this.onOpenTap}
|
||||
.disabled="${this.computeOpenDisabled(e,this.entityObj)}"
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-icon icon="hass:arrow-up"> </ha-icon>
|
||||
</ha-icon-button>
|
||||
<ha-icon-button
|
||||
icon="hass:arrow-down"
|
||||
@click=${this.onCloseTap}
|
||||
.disabled="${this.computeClosedDisabled(e,t)}"
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-icon icon="hass:arrow-down"> </ha-icon>
|
||||
</ha-icon-button>
|
||||
</div>
|
||||
</hui-generic-entity-row>
|
||||
`:R`
|
||||
|
|
|
@ -83,6 +83,10 @@ export class StateCardCustomCover extends LitElement {
|
|||
--mdc-icon-size: 25px;
|
||||
}
|
||||
|
||||
ha-icon {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
[invisible] {
|
||||
visibility: hidden !important;
|
||||
}
|
||||
|
@ -93,17 +97,23 @@ export class StateCardCustomCover extends LitElement {
|
|||
<ha-icon-button
|
||||
icon="hass:menu"
|
||||
@click=${this.onHalfOpenTap}
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-icon icon="hass:menu"> </ha-icon>
|
||||
</ha-icon-button>
|
||||
<ha-icon-button
|
||||
icon="hass:arrow-up"
|
||||
@click=${this.onOpenTap}
|
||||
.disabled="${this.computeOpenDisabled(stateObj, this.entityObj)}"
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-icon icon="hass:arrow-up"> </ha-icon>
|
||||
</ha-icon-button>
|
||||
<ha-icon-button
|
||||
icon="hass:arrow-down"
|
||||
@click=${this.onCloseTap}
|
||||
.disabled="${this.computeClosedDisabled(stateObj, entityObj)}"
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-icon icon="hass:arrow-down"> </ha-icon>
|
||||
</ha-icon-button>
|
||||
</div>
|
||||
</hui-generic-entity-row>
|
||||
`;
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
|
||||
martins_ipad:
|
||||
hide_if_away: false
|
||||
icon:
|
||||
mac:
|
||||
name: Martin’s iPad
|
||||
picture:
|
||||
track: true
|
|
@ -0,0 +1,416 @@
|
|||
# Dont' edit manually! this is generated!
|
||||
|
||||
sensor:
|
||||
- name: Gang Bewegungsmelder West Helligkeit
|
||||
state_address: 0/0/42
|
||||
type: illuminance
|
||||
- name: Gang Bewegungsmelder Mitte Helligkeit
|
||||
state_address: 0/0/45
|
||||
type: illuminance
|
||||
- name: Gang Bewegungsmelder Ost Helligkeit
|
||||
state_address: 0/0/48
|
||||
type: illuminance
|
||||
- name: Esszimmer Temperatur
|
||||
state_address: 0/0/6
|
||||
type: temperature
|
||||
- name: Treppenhaus Oben Temperatur
|
||||
state_address: 0/0/5
|
||||
type: temperature
|
||||
- name: Eingangsbereich Temperatur
|
||||
state_address: 0/0/24
|
||||
type: temperature
|
||||
- name: Wohnzimmer Gang Temperatur
|
||||
state_address: 0/0/25
|
||||
type: temperature
|
||||
- name: Wohnzimmer Terassentür Temperatur
|
||||
state_address: 0/0/26
|
||||
type: temperature
|
||||
- name: Vorratsraum Steckdose 1 Betriebsstunden
|
||||
state_address: 0/5/62
|
||||
type: 2byte_unsigned
|
||||
- name: Vorratsraum Steckdose 1 Verbrauch mA
|
||||
state_address: 0/5/65
|
||||
type: DPT-9
|
||||
- name: Vorratsraum Steckdose 1 Verbrauch Summe
|
||||
state_address: 0/5/70
|
||||
type: 4byte_unsigned
|
||||
- name: Vorratsraum Steckdose 2 Betriebsstunden
|
||||
state_address: 0/5/80
|
||||
type: 2byte_unsigned
|
||||
- name: Vorratsraum Steckdose 2 Verbrauch mA
|
||||
state_address: 0/5/83
|
||||
type: DPT-9
|
||||
- name: Vorratsraum Steckdose 2 Verbrauch Summe
|
||||
state_address: 0/5/88
|
||||
type: 4byte_unsigned
|
||||
- name: Gefrierschrank Betriebsstunden
|
||||
state_address: 0/5/98
|
||||
type: 2byte_unsigned
|
||||
- name: Gefrierschrank Verbrauch mA
|
||||
state_address: 0/5/101
|
||||
type: DPT-9
|
||||
- name: Gefrierschrank Verbrauch Summe
|
||||
state_address: 0/5/106
|
||||
type: 4byte_unsigned
|
||||
- name: Trockner Betriebsstunden
|
||||
state_address: 0/5/26
|
||||
type: 2byte_unsigned
|
||||
- name: Trockner Verbrauch mA
|
||||
state_address: 0/5/29
|
||||
type: DPT-9
|
||||
- name: Trockner Verbrauch Summe
|
||||
state_address: 0/5/34
|
||||
type: 4byte_unsigned
|
||||
- name: Waschmaschine Betriebsstunden
|
||||
state_address: 0/5/8
|
||||
type: 2byte_unsigned
|
||||
- name: Waschmaschine Verbrauch mA
|
||||
state_address: 0/5/11
|
||||
type: DPT-9
|
||||
- name: Waschmaschine Verbrauch Summe
|
||||
state_address: 0/5/16
|
||||
type: 4byte_unsigned
|
||||
- name: Küche Steckdosen rechts Betriebsstunden
|
||||
state_address: 0/4/98
|
||||
type: 2byte_unsigned
|
||||
- name: Küche Steckdosen rechts Verbrauch mA
|
||||
state_address: 0/4/101
|
||||
type: DPT-9
|
||||
- name: Küche Steckdosen rechts Verbrauch Summe
|
||||
state_address: 0/4/106
|
||||
type: 4byte_unsigned
|
||||
- name: Dunstabzug Betriebsstunden
|
||||
state_address: 0/4/116
|
||||
type: 2byte_unsigned
|
||||
- name: Dunstabzug Verbrauch mA
|
||||
state_address: 0/4/119
|
||||
type: DPT-9
|
||||
- name: Dunstabzug Verbrauch Summe
|
||||
state_address: 0/4/124
|
||||
type: 4byte_unsigned
|
||||
- name: Spülmaschine Betriebsstunden
|
||||
state_address: 0/4/8
|
||||
type: 2byte_unsigned
|
||||
- name: Spülmaschine Verbrauch mA
|
||||
state_address: 0/4/11
|
||||
type: DPT-9
|
||||
- name: Backofen Betriebsstunden
|
||||
state_address: 0/4/26
|
||||
type: 2byte_unsigned
|
||||
- name: Backofen Verbrauch mA
|
||||
state_address: 0/4/29
|
||||
type: DPT-9
|
||||
- name: Backofen Verbrauch Summe
|
||||
state_address: 0/4/34
|
||||
type: 4byte_unsigned
|
||||
- name: Herd Phase 1 Betriebsstunden
|
||||
state_address: 0/4/44
|
||||
type: 2byte_unsigned
|
||||
- name: Herd Phase 1 Verbrauch mA
|
||||
state_address: 0/4/47
|
||||
type: DPT-9
|
||||
- name: Herd Phase 1 Verbrauch Summe
|
||||
state_address: 0/4/52
|
||||
type: 4byte_unsigned
|
||||
- name: Herd Phase 2 Betriebsstunden
|
||||
state_address: 0/4/62
|
||||
type: 2byte_unsigned
|
||||
- name: Herd Phase 2 Verbrauch mA
|
||||
state_address: 0/4/65
|
||||
type: DPT-9
|
||||
- name: Herd Phase 2 Verbrauch Summe
|
||||
state_address: 0/4/70
|
||||
type: 4byte_unsigned
|
||||
- name: Herd Phase 3 Betriebsstunden
|
||||
state_address: 0/4/80
|
||||
type: 2byte_unsigned
|
||||
- name: Herd Phase 3 Verbrauch mA
|
||||
state_address: 0/4/83
|
||||
type: DPT-9
|
||||
- name: Herd Phase 3 Verbrauch Summe
|
||||
state_address: 0/4/88
|
||||
type: 4byte_unsigned
|
||||
- name: Arbeitszimmer Steckdose Betriebsstunden
|
||||
state_address: 0/4/134
|
||||
type: 2byte_unsigned
|
||||
- name: Arbeitszimmer Steckdose Verbrauch mA
|
||||
state_address: 0/4/137
|
||||
type: DPT-9
|
||||
- name: Arbeitszimmer Steckdose Verbrauch Summe
|
||||
state_address: 0/4/142
|
||||
type: 4byte_unsigned
|
||||
- name: Wohnzimmer Steckdose 1 Betriebsstunden
|
||||
state_address: 0/4/152
|
||||
type: 2byte_unsigned
|
||||
- name: Wohnzimmer Steckdose 1 Verbrauch mA
|
||||
state_address: 0/4/155
|
||||
type: DPT-9
|
||||
- name: Wohnzimmer Steckdose 1 Verbrauch Summe
|
||||
state_address: 0/4/160
|
||||
type: 4byte_unsigned
|
||||
- name: Wohnzimmer Steckdose 2 Betriebsstunden
|
||||
state_address: 0/4/170
|
||||
type: 2byte_unsigned
|
||||
- name: Wohnzimmer Steckdose 2 Verbrauch mA
|
||||
state_address: 0/4/173
|
||||
type: DPT-9
|
||||
- name: Wohnzimmer Steckdose 2 Verbrauch Summe
|
||||
state_address: 0/4/178
|
||||
type: 4byte_unsigned
|
||||
binary_sensor:
|
||||
- name: Gang Bewegungsmelder Schlafzimmer
|
||||
state_address: 0/0/40
|
||||
device_class: motion
|
||||
- name: Gang Bewegungsmelder Wohnzimmer
|
||||
state_address: 0/0/41
|
||||
device_class: motion
|
||||
- name: Gang Bewegungsmelder Mitte
|
||||
state_address: 0/0/44
|
||||
device_class: motion
|
||||
- name: Gang Bewegungsmelder Ost
|
||||
state_address: 0/0/47
|
||||
device_class: motion
|
||||
light:
|
||||
- name: Wohnzimmer Deckenlampe
|
||||
address: 0/1/3
|
||||
state_address: 0/1/8
|
||||
brightness_address: 0/1/7
|
||||
brightness_state_address: 0/1/9
|
||||
- name: Esszimmer Deckenlampe West
|
||||
address: 0/1/21
|
||||
state_address: 0/1/26
|
||||
brightness_address: 0/1/25
|
||||
brightness_state_address: 0/1/27
|
||||
- name: Esszimmer Deckenlampe Mitte
|
||||
address: 0/1/39
|
||||
state_address: 0/1/44
|
||||
brightness_address: 0/1/43
|
||||
brightness_state_address: 0/1/45
|
||||
- name: Esszimmer Schrankleuchte
|
||||
address: 0/2/39
|
||||
state_address: 0/2/44
|
||||
brightness_address: 0/2/43
|
||||
brightness_state_address: 0/2/45
|
||||
- name: Küche Deckenlampe
|
||||
address: 0/1/57
|
||||
state_address: 0/1/62
|
||||
brightness_address: 0/1/61
|
||||
brightness_state_address: 0/1/63
|
||||
- name: Aussen Terassenlicht
|
||||
address: 0/2/21
|
||||
state_address: 0/2/26
|
||||
brightness_address: 0/2/25
|
||||
brightness_state_address: 0/2/27
|
||||
- name: Gang Licht
|
||||
address: 0/3/3
|
||||
state_address: 0/3/8
|
||||
brightness_address: 0/3/7
|
||||
brightness_state_address: 0/3/9
|
||||
- name: Bad Licht
|
||||
address: 0/3/21
|
||||
state_address: 0/3/26
|
||||
brightness_address: 0/3/25
|
||||
brightness_state_address: 0/3/27
|
||||
- name: Gang Einganglicht
|
||||
address: 0/3/39
|
||||
state_address: 0/3/44
|
||||
brightness_address: 0/3/43
|
||||
brightness_state_address: 0/3/45
|
||||
- name: Waschküche Licht
|
||||
address: 0/3/57
|
||||
state_address: 0/3/62
|
||||
brightness_address: 0/3/61
|
||||
brightness_state_address: 0/3/63
|
||||
- name: Haustür Licht
|
||||
address: 0/0/1
|
||||
state_address: 0/0/2
|
||||
- name: Haustür Licht NW
|
||||
address: 0/0/3
|
||||
state_address: 0/0/4
|
||||
- name: Treppenhaus Licht
|
||||
address: 0/5/180
|
||||
state_address: 0/5/185
|
||||
- name: Vorratsraum Licht
|
||||
address: 0/5/36
|
||||
state_address: 0/5/41
|
||||
- name: Bewegungsmelder Mitte LED
|
||||
address: 0/0/46
|
||||
- name: Bewegungsmelder West LED
|
||||
address: 0/0/43
|
||||
- name: Bewegungsmelder Ost LED
|
||||
address: 0/0/49
|
||||
cover:
|
||||
- name: Wohnzimmer Fenster Rollo
|
||||
move_long_address: 0/7/10
|
||||
move_short_address: 0/7/11
|
||||
position_address: 0/7/28
|
||||
position_state_address: 0/7/24
|
||||
- name: Wohnzimmer Terrassentür Rollo
|
||||
move_long_address: 0/7/36
|
||||
move_short_address: 0/7/37
|
||||
position_address: 0/7/54
|
||||
position_state_address: 0/7/50
|
||||
- name: Küche Fenster Rollo
|
||||
move_long_address: 0/7/62
|
||||
move_short_address: 0/7/63
|
||||
position_address: 0/7/80
|
||||
position_state_address: 0/7/76
|
||||
- name: Esszimmer Fenster Rollo
|
||||
move_long_address: 0/7/88
|
||||
move_short_address: 0/7/89
|
||||
position_address: 0/7/106
|
||||
position_state_address: 0/7/102
|
||||
switch:
|
||||
- name: Klingel Oben
|
||||
address: 0/0/15
|
||||
state_address: 0/0/15
|
||||
- name: Klingel Innentür
|
||||
address: 0/5/108
|
||||
state_address: 0/5/113
|
||||
- name: Klingel Außentür
|
||||
address: 0/5/126
|
||||
state_address: 0/5/131
|
||||
- name: Esszimmer Szene 0
|
||||
address: 0/0/11
|
||||
state_address: 0/0/11
|
||||
- name: Esszimmer Szene 1
|
||||
address: 0/0/12
|
||||
state_address: 0/0/12
|
||||
- name: Esszimmer Szene 2
|
||||
address: 0/0/9
|
||||
state_address: 0/0/9
|
||||
- name: Esszimmer Szene 3
|
||||
address: 0/0/10
|
||||
state_address: 0/0/10
|
||||
- name: Esszimmer Szene 4
|
||||
address: 0/0/8
|
||||
state_address: 0/0/8
|
||||
- name: Esszimmer Szene 5
|
||||
address: 0/0/19
|
||||
state_address: 0/0/19
|
||||
- name: Wohnzimmer Szene 0
|
||||
address: 0/0/27
|
||||
state_address: 0/0/27
|
||||
- name: Wohnzimmer Szene 1
|
||||
address: 0/0/28
|
||||
state_address: 0/0/28
|
||||
- name: Wohnzimmer Szene 2
|
||||
address: 0/0/29
|
||||
state_address: 0/0/29
|
||||
- name: Wohnzimmer Szene 3
|
||||
address: 0/0/30
|
||||
state_address: 0/0/30
|
||||
- name: Wohnzimmer Szene 4
|
||||
address: 0/0/31
|
||||
state_address: 0/0/31
|
||||
- name: Wohnzimmer Szene 5
|
||||
address: 0/0/32
|
||||
state_address: 0/0/32
|
||||
- name: Eingang Szene 2
|
||||
address: 0/0/20
|
||||
state_address: 0/0/20
|
||||
- name: Eingang Szene 3
|
||||
address: 0/0/21
|
||||
state_address: 0/0/21
|
||||
- name: Eingang Szene 4
|
||||
address: 0/0/22
|
||||
state_address: 0/0/22
|
||||
- name: Eingang Szene 5
|
||||
address: 0/0/23
|
||||
state_address: 0/0/23
|
||||
- name: Wohnzimmer Terrassentür Szene 2
|
||||
address: 0/0/17
|
||||
state_address: 0/0/17
|
||||
- name: Wohnzimmer Terrassentür Szene 3
|
||||
address: 0/0/18
|
||||
state_address: 0/0/18
|
||||
- name: alarm_led_links_normal
|
||||
address: 0/0/7
|
||||
state_address: 0/0/7
|
||||
- name: alarm_led_links_ueberlagert
|
||||
address: 0/0/13
|
||||
state_address: 0/0/13
|
||||
- name: alarm_led_rechts_normal
|
||||
address: 0/0/14
|
||||
state_address: 0/0/14
|
||||
- name: alarm_led_rechts_ueberlagert
|
||||
address: 0/0/16
|
||||
state_address: 0/0/16
|
||||
- name: wc_licht_taster
|
||||
address: 0/5/198
|
||||
state_address: 0/5/198
|
||||
- name: Vorratsraum Steckdose 1
|
||||
address: 0/5/54
|
||||
state_address: 0/5/59
|
||||
- name: Vorratsraum Steckdose 1 Betriebsstunden Reset
|
||||
address: 0/5/63
|
||||
- name: Vorratsraum Steckdose 2
|
||||
address: 0/5/72
|
||||
state_address: 0/5/77
|
||||
- name: Vorratsraum Steckdose 2 Betriebsstunden Reset
|
||||
address: 0/5/81
|
||||
- name: Gefrierschrank
|
||||
address: 0/5/90
|
||||
state_address: 0/5/95
|
||||
- name: Gefrierschrank Betriebsstunden Reset
|
||||
address: 0/5/99
|
||||
- name: Trockner
|
||||
address: 0/5/18
|
||||
state_address: 0/5/23
|
||||
- name: Trockner Betriebsstunden Reset
|
||||
address: 0/5/27
|
||||
- name: Waschmaschine
|
||||
address: 0/5/0
|
||||
state_address: 0/5/5
|
||||
- name: Waschmaschine Betriebsstunden Reset
|
||||
address: 0/5/9
|
||||
- name: Küche Steckdosen rechts
|
||||
address: 0/4/90
|
||||
state_address: 0/4/95
|
||||
- name: Küche Steckdosen rechts Betriebsstunden Reset
|
||||
address: 0/4/99
|
||||
- name: Dunstabzug
|
||||
address: 0/4/108
|
||||
state_address: 0/4/113
|
||||
- name: Dunstabzug Betriebsstunden Reset
|
||||
address: 0/4/117
|
||||
- name: Spülmaschine
|
||||
address: 0/4/0
|
||||
state_address: 0/4/5
|
||||
- name: Spülmaschine Betriebsstunden Reset
|
||||
address: 0/4/9
|
||||
- name: Backofen
|
||||
address: 0/4/18
|
||||
state_address: 0/4/23
|
||||
- name: Backofen Betriebsstunden Reset
|
||||
address: 0/4/27
|
||||
- name: Herd Phase 1
|
||||
address: 0/4/36
|
||||
state_address: 0/4/41
|
||||
- name: Herd Phase 1 Betriebsstunden Reset
|
||||
address: 0/4/45
|
||||
- name: Herd Phase 2
|
||||
address: 0/4/54
|
||||
state_address: 0/4/59
|
||||
- name: Herd Phase 2 Betriebsstunden Reset
|
||||
address: 0/4/63
|
||||
- name: Herd Phase 3
|
||||
address: 0/4/72
|
||||
state_address: 0/4/77
|
||||
- name: Herd Phase 3 Betriebsstunden Reset
|
||||
address: 0/4/81
|
||||
- name: Arbeitszimmer Steckdose
|
||||
address: 0/4/126
|
||||
state_address: 0/4/131
|
||||
- name: Arbeitszimmer Steckdose Betriebsstunden Reset
|
||||
address: 0/4/135
|
||||
- name: Wohnzimmer Steckdose 1
|
||||
address: 0/4/144
|
||||
state_address: 0/4/149
|
||||
- name: Wohnzimmer Steckdose 1 Betriebsstunden Reset
|
||||
address: 0/4/153
|
||||
- name: Wohnzimmer Steckdose 2
|
||||
address: 0/4/162
|
||||
state_address: 0/4/167
|
||||
- name: Wohnzimmer Steckdose 2 Betriebsstunden Reset
|
||||
address: 0/4/171
|
|
@ -1,4 +1,5 @@
|
|||
apps:
|
||||
bad_luefter
|
||||
ir_remote_kitchenpi
|
||||
ir_remote_oben
|
||||
ir_remote_schlafzimmer
|
||||
|
|
|
@ -15,6 +15,11 @@ def timed_sleep_f(content, light_off_mins, music_off_mins, shuffle):
|
|||
return f
|
||||
|
||||
|
||||
@state_trigger("switch.tasmota07 == 'on'")
|
||||
def foen_auto_off():
|
||||
timer.fon_timer.start(duration="00:45:00")
|
||||
|
||||
|
||||
@event_trigger("ir_command_received", "host == 'bedroompi.fritz.box' and repeat_counter == 0")
|
||||
def ir_remote_schlafzimmer(button_name=None, **kwargs):
|
||||
p = {'player': 'media_player.bedroompi'}
|
||||
|
@ -36,7 +41,7 @@ def ir_remote_schlafzimmer(button_name=None, **kwargs):
|
|||
|
||||
'btn_0': radio_f('Bayern 3', **p),
|
||||
'key_numeric_pound': radio_f('Bayern 2', **p),
|
||||
'key_numeric_star': radio_f('Antenne Bayern', **player),
|
||||
#'key_numeric_star': lambda: timer.fon_timer.start(duration="00:10:00"),
|
||||
|
||||
'key_red': scene_f('schlafzimmer_stillen'),
|
||||
'key_green': scene_f('schlafzimmer_orange'),
|
||||
|
@ -51,9 +56,10 @@ def ir_remote_schlafzimmer(button_name=None, **kwargs):
|
|||
if button_name in mapping:
|
||||
mapping[button_name]()
|
||||
elif button_name == "key_numeric_star": # Foen
|
||||
repeat_one_crossfade(**p)
|
||||
media_player.play_media(media_content_id='Foen', media_content_type='music', entity_id=p['player'])
|
||||
media_player.volume_set(volume_level=60, entity_id=p['player'])
|
||||
#repeat_one_crossfade(**p)
|
||||
#media_player.play_media(media_content_id='Foen', media_content_type='music', entity_id=p['player'])
|
||||
#media_player.volume_set(volume_level=60, entity_id=p['player'])
|
||||
timer.fon_timer.start(duration="00:10:00")
|
||||
elif button_name == 'key_power': # Music & Lights off
|
||||
media_player.media_pause(entity_id=p['player'])
|
||||
light.turn_off(entity_id='group.bedroom')
|
||||
|
|
|
@ -1,11 +1,30 @@
|
|||
|
||||
@event_trigger("homematic.keypress", "name == 'schlafzimmer_deckenlampe'")
|
||||
def schlafzimmer_licht(channel=None, param=None):
|
||||
up = (channel == 1)
|
||||
long = (param == "PRESS_LONG")
|
||||
|
||||
# TODO
|
||||
# oben: kurz: orange szene
|
||||
# lang: helle szene
|
||||
# unten: kurz: off, but 1 min bedlight
|
||||
# lang: rollos zu
|
||||
# lang: rollos zu: nur tagsueber wenn komplett offen
|
||||
@event_trigger("homematic.keypress", "name == 'schlafzimmer_deckenlampe'")
|
||||
def schlafzimmer_licht(channel=None, param=None, **kwargs):
|
||||
up = (channel == 2)
|
||||
down = (channel == 1)
|
||||
long = (param == "PRESS_LONG")
|
||||
short = not long
|
||||
log.info(f"Schlafzimmer knopf up {up}, long {long}")
|
||||
|
||||
if up and short:
|
||||
scene.schlafzimmer_orange.turn_on()
|
||||
elif up and long:
|
||||
scene.schlafzimmer_ganz_hell.turn_on()
|
||||
elif down and short:
|
||||
light.turn_off(entity_id='group.bedroom')
|
||||
scene.schlafzimmer_bettlicht_dunkel.turn_on()
|
||||
task.wait_until(timeout=60)
|
||||
light.bett_martin.turn_off()
|
||||
light.bett_rebecca.turn_off()
|
||||
elif down and long:
|
||||
during_day = float(sun.sun.elevation) > 5
|
||||
covers_fully_open = (int(cover.schlafzimmer_rollo_gross.current_position) > 95 or
|
||||
int(cover.schlafzimmer_rollo_klein.current_position) > 95)
|
||||
if during_day and covers_fully_open:
|
||||
cover.schlafzimmer_rollo_gross.close_cover()
|
||||
cover_half.set_half(entity_id="cover.schlafzimmer_rollo_klein")
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -12,7 +12,7 @@
|
|||
* subject to an additional IP rights grant found at
|
||||
* http://polymer.github.io/PATENTS.txt
|
||||
*/
|
||||
const i=new WeakMap,n=t=>"function"==typeof t&&i.has(t),r=void 0!==window.customElements&&void 0!==window.customElements.polyfillWrapFlushCallback,o=(t,e,s=null)=>{for(;e!==s;){const s=e.nextSibling;t.removeChild(e),e=s}},a={},l={},h=`{{lit-${String(Math.random()).slice(2)}}}`,c=`\x3c!--${h}--\x3e`,p=new RegExp(`${h}|${c}`),d="$lit$";class u{constructor(t,e){this.parts=[],this.element=e;const s=[],i=[],n=document.createTreeWalker(e.content,133,null,!1);let r=0,o=-1,a=0;const{strings:l,values:{length:c}}=t;for(;a<c;){const t=n.nextNode();if(null!==t){if(o++,1===t.nodeType){if(t.hasAttributes()){const e=t.attributes,{length:s}=e;let i=0;for(let t=0;t<s;t++)_(e[t].name,d)&&i++;for(;i-- >0;){const e=l[a],s=y.exec(e)[2],i=s.toLowerCase()+d,n=t.getAttribute(i);t.removeAttribute(i);const r=n.split(p);this.parts.push({type:"attribute",index:o,name:s,strings:r}),a+=r.length-1}}"TEMPLATE"===t.tagName&&(i.push(t),n.currentNode=t.content)}else if(3===t.nodeType){const e=t.data;if(e.indexOf(h)>=0){const i=t.parentNode,n=e.split(p),r=n.length-1;for(let e=0;e<r;e++){let s,r=n[e];if(""===r)s=m();else{const t=y.exec(r);null!==t&&_(t[2],d)&&(r=r.slice(0,t.index)+t[1]+t[2].slice(0,-d.length)+t[3]),s=document.createTextNode(r)}i.insertBefore(s,t),this.parts.push({type:"node",index:++o})}""===n[r]?(i.insertBefore(m(),t),s.push(t)):t.data=n[r],a+=r}}else if(8===t.nodeType)if(t.data===h){const e=t.parentNode;null!==t.previousSibling&&o!==r||(o++,e.insertBefore(m(),t)),r=o,this.parts.push({type:"node",index:o}),null===t.nextSibling?t.data="":(s.push(t),o--),a++}else{let e=-1;for(;-1!==(e=t.data.indexOf(h,e+1));)this.parts.push({type:"node",index:-1}),a++}}else n.currentNode=i.pop()}for(const t of s)t.parentNode.removeChild(t)}}const _=(t,e)=>{const s=t.length-e.length;return s>=0&&t.slice(s)===e},f=t=>-1!==t.index,m=()=>document.createComment(""),y=/([ \x09\x0a\x0c\x0d])([^\0-\x1F\x7F-\x9F "'>=\/]+)([ \x09\x0a\x0c\x0d]*=[ \x09\x0a\x0c\x0d]*(?:[^ \x09\x0a\x0c\x0d"'`<>=]*|"[^"]*|'[^']*))$/;
|
||||
const i=new WeakMap,n=t=>"function"==typeof t&&i.has(t),r=void 0!==window.customElements&&void 0!==window.customElements.polyfillWrapFlushCallback,o=(t,e,s=null)=>{for(;e!==s;){const s=e.nextSibling;t.removeChild(e),e=s}},a={},l={},h=`{{lit-${String(Math.random()).slice(2)}}}`,c=`\x3c!--${h}--\x3e`,p=new RegExp(`${h}|${c}`),u="$lit$";class d{constructor(t,e){this.parts=[],this.element=e;const s=[],i=[],n=document.createTreeWalker(e.content,133,null,!1);let r=0,o=-1,a=0;const{strings:l,values:{length:c}}=t;for(;a<c;){const t=n.nextNode();if(null!==t){if(o++,1===t.nodeType){if(t.hasAttributes()){const e=t.attributes,{length:s}=e;let i=0;for(let t=0;t<s;t++)_(e[t].name,u)&&i++;for(;i-- >0;){const e=l[a],s=g.exec(e)[2],i=s.toLowerCase()+u,n=t.getAttribute(i);t.removeAttribute(i);const r=n.split(p);this.parts.push({type:"attribute",index:o,name:s,strings:r}),a+=r.length-1}}"TEMPLATE"===t.tagName&&(i.push(t),n.currentNode=t.content)}else if(3===t.nodeType){const e=t.data;if(e.indexOf(h)>=0){const i=t.parentNode,n=e.split(p),r=n.length-1;for(let e=0;e<r;e++){let s,r=n[e];if(""===r)s=m();else{const t=g.exec(r);null!==t&&_(t[2],u)&&(r=r.slice(0,t.index)+t[1]+t[2].slice(0,-u.length)+t[3]),s=document.createTextNode(r)}i.insertBefore(s,t),this.parts.push({type:"node",index:++o})}""===n[r]?(i.insertBefore(m(),t),s.push(t)):t.data=n[r],a+=r}}else if(8===t.nodeType)if(t.data===h){const e=t.parentNode;null!==t.previousSibling&&o!==r||(o++,e.insertBefore(m(),t)),r=o,this.parts.push({type:"node",index:o}),null===t.nextSibling?t.data="":(s.push(t),o--),a++}else{let e=-1;for(;-1!==(e=t.data.indexOf(h,e+1));)this.parts.push({type:"node",index:-1}),a++}}else n.currentNode=i.pop()}for(const t of s)t.parentNode.removeChild(t)}}const _=(t,e)=>{const s=t.length-e.length;return s>=0&&t.slice(s)===e},f=t=>-1!==t.index,m=()=>document.createComment(""),g=/([ \x09\x0a\x0c\x0d])([^\0-\x1F\x7F-\x9F "'>=\/]+)([ \x09\x0a\x0c\x0d]*=[ \x09\x0a\x0c\x0d]*(?:[^ \x09\x0a\x0c\x0d"'`<>=]*|"[^"]*|'[^']*))$/;
|
||||
/**
|
||||
* @license
|
||||
* Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
|
||||
|
@ -26,7 +26,7 @@ const i=new WeakMap,n=t=>"function"==typeof t&&i.has(t),r=void 0!==window.custom
|
|||
* subject to an additional IP rights grant found at
|
||||
* http://polymer.github.io/PATENTS.txt
|
||||
*/
|
||||
class g{constructor(t,e,s){this.__parts=[],this.template=t,this.processor=e,this.options=s}update(t){let e=0;for(const s of this.__parts)void 0!==s&&s.setValue(t[e]),e++;for(const t of this.__parts)void 0!==t&&t.commit()}_clone(){const t=r?this.template.element.content.cloneNode(!0):document.importNode(this.template.element.content,!0),e=[],s=this.template.parts,i=document.createTreeWalker(t,133,null,!1);let n,o=0,a=0,l=i.nextNode();for(;o<s.length;)if(n=s[o],f(n)){for(;a<n.index;)a++,"TEMPLATE"===l.nodeName&&(e.push(l),i.currentNode=l.content),null===(l=i.nextNode())&&(i.currentNode=e.pop(),l=i.nextNode());if("node"===n.type){const t=this.processor.handleTextExpression(this.options);t.insertAfterNode(l.previousSibling),this.__parts.push(t)}else this.__parts.push(...this.processor.handleAttributeExpressions(l,n.name,n.strings,this.options));o++}else this.__parts.push(void 0),o++;return r&&(document.adoptNode(t),customElements.upgrade(t)),t}}
|
||||
class y{constructor(t,e,s){this.__parts=[],this.template=t,this.processor=e,this.options=s}update(t){let e=0;for(const s of this.__parts)void 0!==s&&s.setValue(t[e]),e++;for(const t of this.__parts)void 0!==t&&t.commit()}_clone(){const t=r?this.template.element.content.cloneNode(!0):document.importNode(this.template.element.content,!0),e=[],s=this.template.parts,i=document.createTreeWalker(t,133,null,!1);let n,o=0,a=0,l=i.nextNode();for(;o<s.length;)if(n=s[o],f(n)){for(;a<n.index;)a++,"TEMPLATE"===l.nodeName&&(e.push(l),i.currentNode=l.content),null===(l=i.nextNode())&&(i.currentNode=e.pop(),l=i.nextNode());if("node"===n.type){const t=this.processor.handleTextExpression(this.options);t.insertAfterNode(l.previousSibling),this.__parts.push(t)}else this.__parts.push(...this.processor.handleAttributeExpressions(l,n.name,n.strings,this.options));o++}else this.__parts.push(void 0),o++;return r&&(document.adoptNode(t),customElements.upgrade(t)),t}}
|
||||
/**
|
||||
* @license
|
||||
* Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
|
||||
|
@ -39,7 +39,7 @@ class g{constructor(t,e,s){this.__parts=[],this.template=t,this.processor=e,this
|
|||
* Code distributed by Google as part of the polymer project is also
|
||||
* subject to an additional IP rights grant found at
|
||||
* http://polymer.github.io/PATENTS.txt
|
||||
*/class v{constructor(t,e,s,i){this.strings=t,this.values=e,this.type=s,this.processor=i}getHTML(){const t=this.strings.length-1;let e="",s=!1;for(let i=0;i<t;i++){const t=this.strings[i],n=t.lastIndexOf("\x3c!--");s=(n>-1||s)&&-1===t.indexOf("--\x3e",n+1);const r=y.exec(t);e+=null===r?t+(s?h:c):t.substr(0,r.index)+r[1]+r[2]+d+r[3]+h}return e+=this.strings[t]}getTemplateElement(){const t=document.createElement("template");return t.innerHTML=this.getHTML(),t}}
|
||||
*/class v{constructor(t,e,s,i){this.strings=t,this.values=e,this.type=s,this.processor=i}getHTML(){const t=this.strings.length-1;let e="",s=!1;for(let i=0;i<t;i++){const t=this.strings[i],n=t.lastIndexOf("\x3c!--");s=(n>-1||s)&&-1===t.indexOf("--\x3e",n+1);const r=g.exec(t);e+=null===r?t+(s?h:c):t.substr(0,r.index)+r[1]+r[2]+u+r[3]+h}return e+=this.strings[t]}getTemplateElement(){const t=document.createElement("template");return t.innerHTML=this.getHTML(),t}}
|
||||
/**
|
||||
* @license
|
||||
* Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
|
||||
|
@ -53,7 +53,7 @@ class g{constructor(t,e,s){this.__parts=[],this.template=t,this.processor=e,this
|
|||
* subject to an additional IP rights grant found at
|
||||
* http://polymer.github.io/PATENTS.txt
|
||||
*/
|
||||
const S=t=>null===t||!("object"==typeof t||"function"==typeof t),b=t=>Array.isArray(t)||!(!t||!t[Symbol.iterator]);class w{constructor(t,e,s){this.dirty=!0,this.element=t,this.name=e,this.strings=s,this.parts=[];for(let t=0;t<s.length-1;t++)this.parts[t]=this._createPart()}_createPart(){return new P(this)}_getValue(){const t=this.strings,e=t.length-1;let s="";for(let i=0;i<e;i++){s+=t[i];const e=this.parts[i];if(void 0!==e){const t=e.value;if(S(t)||!b(t))s+="string"==typeof t?t:String(t);else for(const e of t)s+="string"==typeof e?e:String(e)}}return s+=t[e]}commit(){this.dirty&&(this.dirty=!1,this.element.setAttribute(this.name,this._getValue()))}}class P{constructor(t){this.value=void 0,this.committer=t}setValue(t){t===a||S(t)&&t===this.value||(this.value=t,n(t)||(this.committer.dirty=!0))}commit(){for(;n(this.value);){const t=this.value;this.value=a,t(this)}this.value!==a&&this.committer.commit()}}class C{constructor(t){this.value=void 0,this.__pendingValue=void 0,this.options=t}appendInto(t){this.startNode=t.appendChild(m()),this.endNode=t.appendChild(m())}insertAfterNode(t){this.startNode=t,this.endNode=t.nextSibling}appendIntoPart(t){t.__insert(this.startNode=m()),t.__insert(this.endNode=m())}insertAfterPart(t){t.__insert(this.startNode=m()),this.endNode=t.endNode,t.endNode=this.startNode}setValue(t){this.__pendingValue=t}commit(){for(;n(this.__pendingValue);){const t=this.__pendingValue;this.__pendingValue=a,t(this)}const t=this.__pendingValue;t!==a&&(S(t)?t!==this.value&&this.__commitText(t):t instanceof v?this.__commitTemplateResult(t):t instanceof Node?this.__commitNode(t):b(t)?this.__commitIterable(t):t===l?(this.value=l,this.clear()):this.__commitText(t))}__insert(t){this.endNode.parentNode.insertBefore(t,this.endNode)}__commitNode(t){this.value!==t&&(this.clear(),this.__insert(t),this.value=t)}__commitText(t){const e=this.startNode.nextSibling;t=null==t?"":t,e===this.endNode.previousSibling&&3===e.nodeType?e.data=t:this.__commitNode(document.createTextNode("string"==typeof t?t:String(t))),this.value=t}__commitTemplateResult(t){const e=this.options.templateFactory(t);if(this.value instanceof g&&this.value.template===e)this.value.update(t.values);else{const s=new g(e,t.processor,this.options),i=s._clone();s.update(t.values),this.__commitNode(i),this.value=s}}__commitIterable(t){Array.isArray(this.value)||(this.value=[],this.clear());const e=this.value;let s,i=0;for(const n of t)void 0===(s=e[i])&&(s=new C(this.options),e.push(s),0===i?s.appendIntoPart(this):s.insertAfterPart(e[i-1])),s.setValue(n),s.commit(),i++;i<e.length&&(e.length=i,this.clear(s&&s.endNode))}clear(t=this.startNode){o(this.startNode.parentNode,t.nextSibling,this.endNode)}}class x{constructor(t,e,s){if(this.value=void 0,this.__pendingValue=void 0,2!==s.length||""!==s[0]||""!==s[1])throw new Error("Boolean attributes can only contain a single expression");this.element=t,this.name=e,this.strings=s}setValue(t){this.__pendingValue=t}commit(){for(;n(this.__pendingValue);){const t=this.__pendingValue;this.__pendingValue=a,t(this)}if(this.__pendingValue===a)return;const t=!!this.__pendingValue;this.value!==t&&(t?this.element.setAttribute(this.name,""):this.element.removeAttribute(this.name),this.value=t),this.__pendingValue=a}}class O extends w{constructor(t,e,s){super(t,e,s),this.single=2===s.length&&""===s[0]&&""===s[1]}_createPart(){return new T(this)}_getValue(){return this.single?this.parts[0].value:super._getValue()}commit(){this.dirty&&(this.dirty=!1,this.element[this.name]=this._getValue())}}class T extends P{}let N=!1;try{const t={get capture(){return N=!0,!1}};window.addEventListener("test",t,t),window.removeEventListener("test",t,t)}catch(t){}class A{constructor(t,e,s){this.value=void 0,this.__pendingValue=void 0,this.element=t,this.eventName=e,this.eventContext=s,this.__boundHandleEvent=t=>this.handleEvent(t)}setValue(t){this.__pendingValue=t}commit(){for(;n(this.__pendingValue);){const t=this.__pendingValue;this.__pendingValue=a,t(this)}if(this.__pendingValue===a)return;const t=this.__pendingValue,e=this.value,s=null==t||null!=e&&(t.capture!==e.capture||t.once!==e.once||t.passive!==e.passive),i=null!=t&&(null==e||s);s&&this.element.removeEventListener(this.eventName,this.__boundHandleEvent,this.__options),i&&(this.__options=j(t),this.element.addEventListener(this.eventName,this.__boundHandleEvent,this.__options)),this.value=t,this.__pendingValue=a}handleEvent(t){"function"==typeof this.value?this.value.call(this.eventContext||this.element,t):this.value.handleEvent(t)}}const j=t=>t&&(N?{capture:t.capture,passive:t.passive,once:t.once}:t.capture);
|
||||
const S=t=>null===t||!("object"==typeof t||"function"==typeof t),b=t=>Array.isArray(t)||!(!t||!t[Symbol.iterator]);class w{constructor(t,e,s){this.dirty=!0,this.element=t,this.name=e,this.strings=s,this.parts=[];for(let t=0;t<s.length-1;t++)this.parts[t]=this._createPart()}_createPart(){return new P(this)}_getValue(){const t=this.strings,e=t.length-1;let s="";for(let i=0;i<e;i++){s+=t[i];const e=this.parts[i];if(void 0!==e){const t=e.value;if(S(t)||!b(t))s+="string"==typeof t?t:String(t);else for(const e of t)s+="string"==typeof e?e:String(e)}}return s+=t[e]}commit(){this.dirty&&(this.dirty=!1,this.element.setAttribute(this.name,this._getValue()))}}class P{constructor(t){this.value=void 0,this.committer=t}setValue(t){t===a||S(t)&&t===this.value||(this.value=t,n(t)||(this.committer.dirty=!0))}commit(){for(;n(this.value);){const t=this.value;this.value=a,t(this)}this.value!==a&&this.committer.commit()}}class C{constructor(t){this.value=void 0,this.__pendingValue=void 0,this.options=t}appendInto(t){this.startNode=t.appendChild(m()),this.endNode=t.appendChild(m())}insertAfterNode(t){this.startNode=t,this.endNode=t.nextSibling}appendIntoPart(t){t.__insert(this.startNode=m()),t.__insert(this.endNode=m())}insertAfterPart(t){t.__insert(this.startNode=m()),this.endNode=t.endNode,t.endNode=this.startNode}setValue(t){this.__pendingValue=t}commit(){for(;n(this.__pendingValue);){const t=this.__pendingValue;this.__pendingValue=a,t(this)}const t=this.__pendingValue;t!==a&&(S(t)?t!==this.value&&this.__commitText(t):t instanceof v?this.__commitTemplateResult(t):t instanceof Node?this.__commitNode(t):b(t)?this.__commitIterable(t):t===l?(this.value=l,this.clear()):this.__commitText(t))}__insert(t){this.endNode.parentNode.insertBefore(t,this.endNode)}__commitNode(t){this.value!==t&&(this.clear(),this.__insert(t),this.value=t)}__commitText(t){const e=this.startNode.nextSibling;t=null==t?"":t,e===this.endNode.previousSibling&&3===e.nodeType?e.data=t:this.__commitNode(document.createTextNode("string"==typeof t?t:String(t))),this.value=t}__commitTemplateResult(t){const e=this.options.templateFactory(t);if(this.value instanceof y&&this.value.template===e)this.value.update(t.values);else{const s=new y(e,t.processor,this.options),i=s._clone();s.update(t.values),this.__commitNode(i),this.value=s}}__commitIterable(t){Array.isArray(this.value)||(this.value=[],this.clear());const e=this.value;let s,i=0;for(const n of t)void 0===(s=e[i])&&(s=new C(this.options),e.push(s),0===i?s.appendIntoPart(this):s.insertAfterPart(e[i-1])),s.setValue(n),s.commit(),i++;i<e.length&&(e.length=i,this.clear(s&&s.endNode))}clear(t=this.startNode){o(this.startNode.parentNode,t.nextSibling,this.endNode)}}class x{constructor(t,e,s){if(this.value=void 0,this.__pendingValue=void 0,2!==s.length||""!==s[0]||""!==s[1])throw new Error("Boolean attributes can only contain a single expression");this.element=t,this.name=e,this.strings=s}setValue(t){this.__pendingValue=t}commit(){for(;n(this.__pendingValue);){const t=this.__pendingValue;this.__pendingValue=a,t(this)}if(this.__pendingValue===a)return;const t=!!this.__pendingValue;this.value!==t&&(t?this.element.setAttribute(this.name,""):this.element.removeAttribute(this.name),this.value=t),this.__pendingValue=a}}class O extends w{constructor(t,e,s){super(t,e,s),this.single=2===s.length&&""===s[0]&&""===s[1]}_createPart(){return new T(this)}_getValue(){return this.single?this.parts[0].value:super._getValue()}commit(){this.dirty&&(this.dirty=!1,this.element[this.name]=this._getValue())}}class T extends P{}let N=!1;try{const t={get capture(){return N=!0,!1}};window.addEventListener("test",t,t),window.removeEventListener("test",t,t)}catch(t){}class A{constructor(t,e,s){this.value=void 0,this.__pendingValue=void 0,this.element=t,this.eventName=e,this.eventContext=s,this.__boundHandleEvent=t=>this.handleEvent(t)}setValue(t){this.__pendingValue=t}commit(){for(;n(this.__pendingValue);){const t=this.__pendingValue;this.__pendingValue=a,t(this)}if(this.__pendingValue===a)return;const t=this.__pendingValue,e=this.value,s=null==t||null!=e&&(t.capture!==e.capture||t.once!==e.once||t.passive!==e.passive),i=null!=t&&(null==e||s);s&&this.element.removeEventListener(this.eventName,this.__boundHandleEvent,this.__options),i&&(this.__options=j(t),this.element.addEventListener(this.eventName,this.__boundHandleEvent,this.__options)),this.value=t,this.__pendingValue=a}handleEvent(t){"function"==typeof this.value?this.value.call(this.eventContext||this.element,t):this.value.handleEvent(t)}}const j=t=>t&&(N?{capture:t.capture,passive:t.passive,once:t.once}:t.capture);
|
||||
/**
|
||||
* @license
|
||||
* Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
|
||||
|
@ -79,7 +79,7 @@ const S=t=>null===t||!("object"==typeof t||"function"==typeof t),b=t=>Array.isAr
|
|||
* Code distributed by Google as part of the polymer project is also
|
||||
* subject to an additional IP rights grant found at
|
||||
* http://polymer.github.io/PATENTS.txt
|
||||
*/function V(t){let e=k.get(t.type);void 0===e&&(e={stringsArray:new WeakMap,keyString:new Map},k.set(t.type,e));let s=e.stringsArray.get(t.strings);if(void 0!==s)return s;const i=t.strings.join(h);return void 0===(s=e.keyString.get(i))&&(s=new u(t,t.getTemplateElement()),e.keyString.set(i,s)),e.stringsArray.set(t.strings,s),s}const k=new Map,M=new WeakMap;
|
||||
*/function V(t){let e=k.get(t.type);void 0===e&&(e={stringsArray:new WeakMap,keyString:new Map},k.set(t.type,e));let s=e.stringsArray.get(t.strings);if(void 0!==s)return s;const i=t.strings.join(h);return void 0===(s=e.keyString.get(i))&&(s=new d(t,t.getTemplateElement()),e.keyString.set(i,s)),e.stringsArray.set(t.strings,s),s}const k=new Map,M=new WeakMap;
|
||||
/**
|
||||
* @license
|
||||
* Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
|
||||
|
@ -120,7 +120,7 @@ const S=t=>null===t||!("object"==typeof t||"function"==typeof t),b=t=>Array.isAr
|
|||
* subject to an additional IP rights grant found at
|
||||
* http://polymer.github.io/PATENTS.txt
|
||||
*/
|
||||
const q=(t,e)=>`${t}--${e}`;let I=!0;void 0===window.ShadyCSS?I=!1:void 0===window.ShadyCSS.prepareTemplateDom&&(console.warn("Incompatible ShadyCSS version detected. Please update to at least @webcomponents/webcomponentsjs@2.0.2 and @webcomponents/shadycss@1.3.1."),I=!1);const H=t=>e=>{const s=q(e.type,t);let i=k.get(s);void 0===i&&(i={stringsArray:new WeakMap,keyString:new Map},k.set(s,i));let n=i.stringsArray.get(e.strings);if(void 0!==n)return n;const r=e.strings.join(h);if(void 0===(n=i.keyString.get(r))){const s=e.getTemplateElement();I&&window.ShadyCSS.prepareTemplateDom(s,t),n=new u(e,s),i.keyString.set(r,n)}return i.stringsArray.set(e.strings,n),n},D=["html","svg"],L=new Set,B=(t,e,s)=>{L.add(s);const i=t.querySelectorAll("style"),{length:n}=i;if(0===n)return void window.ShadyCSS.prepareTemplateStyles(e.element,s);const r=document.createElement("style");for(let t=0;t<n;t++){const e=i[t];e.parentNode.removeChild(e),r.textContent+=e.textContent}(t=>{D.forEach(e=>{const s=k.get(q(e,t));void 0!==s&&s.keyString.forEach(t=>{const{element:{content:e}}=t,s=new Set;Array.from(e.querySelectorAll("style")).forEach(t=>{s.add(t)}),z(t,s)})})})(s);const o=e.element.content;!function(t,e,s=null){const{element:{content:i},parts:n}=t;if(null==s)return void i.appendChild(e);const r=document.createTreeWalker(i,U,null,!1);let o=$(n),a=0,l=-1;for(;r.nextNode();)for(l++,r.currentNode===s&&(a=F(e),s.parentNode.insertBefore(e,s));-1!==o&&n[o].index===l;){if(a>0){for(;-1!==o;)n[o].index+=a,o=$(n,o);return}o=$(n,o)}}(e,r,o.firstChild),window.ShadyCSS.prepareTemplateStyles(e.element,s);const a=o.querySelector("style");if(window.ShadyCSS.nativeShadow&&null!==a)t.insertBefore(a.cloneNode(!0),t.firstChild);else{o.insertBefore(r,o.firstChild);const t=new Set;t.add(r),z(e,t)}};
|
||||
const q=(t,e)=>`${t}--${e}`;let I=!0;void 0===window.ShadyCSS?I=!1:void 0===window.ShadyCSS.prepareTemplateDom&&(console.warn("Incompatible ShadyCSS version detected. Please update to at least @webcomponents/webcomponentsjs@2.0.2 and @webcomponents/shadycss@1.3.1."),I=!1);const H=t=>e=>{const s=q(e.type,t);let i=k.get(s);void 0===i&&(i={stringsArray:new WeakMap,keyString:new Map},k.set(s,i));let n=i.stringsArray.get(e.strings);if(void 0!==n)return n;const r=e.strings.join(h);if(void 0===(n=i.keyString.get(r))){const s=e.getTemplateElement();I&&window.ShadyCSS.prepareTemplateDom(s,t),n=new d(e,s),i.keyString.set(r,n)}return i.stringsArray.set(e.strings,n),n},D=["html","svg"],L=new Set,B=(t,e,s)=>{L.add(s);const i=t.querySelectorAll("style"),{length:n}=i;if(0===n)return void window.ShadyCSS.prepareTemplateStyles(e.element,s);const r=document.createElement("style");for(let t=0;t<n;t++){const e=i[t];e.parentNode.removeChild(e),r.textContent+=e.textContent}(t=>{D.forEach(e=>{const s=k.get(q(e,t));void 0!==s&&s.keyString.forEach(t=>{const{element:{content:e}}=t,s=new Set;Array.from(e.querySelectorAll("style")).forEach(t=>{s.add(t)}),z(t,s)})})})(s);const o=e.element.content;!function(t,e,s=null){const{element:{content:i},parts:n}=t;if(null==s)return void i.appendChild(e);const r=document.createTreeWalker(i,U,null,!1);let o=$(n),a=0,l=-1;for(;r.nextNode();)for(l++,r.currentNode===s&&(a=F(e),s.parentNode.insertBefore(e,s));-1!==o&&n[o].index===l;){if(a>0){for(;-1!==o;)n[o].index+=a,o=$(n,o);return}o=$(n,o)}}(e,r,o.firstChild),window.ShadyCSS.prepareTemplateStyles(e.element,s);const a=o.querySelector("style");if(window.ShadyCSS.nativeShadow&&null!==a)t.insertBefore(a.cloneNode(!0),t.firstChild);else{o.insertBefore(r,o.firstChild);const t=new Set;t.add(r),z(e,t)}};
|
||||
/**
|
||||
* @license
|
||||
* Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
|
||||
|
@ -162,7 +162,7 @@ const st=(t,e)=>"method"!==e.kind||!e.descriptor||"value"in e.descriptor?{kind:"
|
|||
* subject to an additional IP rights grant found at
|
||||
* http://polymer.github.io/PATENTS.txt
|
||||
*/
|
||||
(window.litElementVersions||(window.litElementVersions=[])).push("2.0.1");const ot=t=>t.flat?t.flat(1/0):function t(e,s=[]){for(let i=0,n=e.length;i<n;i++){const n=e[i];Array.isArray(n)?t(n,s):s.push(n)}return s}(t);class at extends et{static finalize(){super.finalize(),this._styles=this.hasOwnProperty(JSCompiler_renameProperty("styles",this))?this._getUniqueStyles():this._styles||[]}static _getUniqueStyles(){const t=this.styles,e=[];if(Array.isArray(t)){ot(t).reduceRight((t,e)=>(t.add(e),t),new Set).forEach(t=>e.unshift(t))}else t&&e.push(t);return e}initialize(){super.initialize(),this.renderRoot=this.createRenderRoot(),window.ShadowRoot&&this.renderRoot instanceof window.ShadowRoot&&this.adoptStyles()}createRenderRoot(){return this.attachShadow({mode:"open"})}adoptStyles(){const t=this.constructor._styles;0!==t.length&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow?rt?this.renderRoot.adoptedStyleSheets=t.map(t=>t.styleSheet):this._needsShimAdoptedStyleSheets=!0:window.ShadyCSS.ScopingShim.prepareAdoptedCssText(t.map(t=>t.cssText),this.localName))}connectedCallback(){super.connectedCallback(),this.hasUpdated&&void 0!==window.ShadyCSS&&window.ShadyCSS.styleElement(this)}update(t){super.update(t);const e=this.render();e instanceof v&&this.constructor.render(e,this.renderRoot,{scopeName:this.localName,eventContext:this}),this._needsShimAdoptedStyleSheets&&(this._needsShimAdoptedStyleSheets=!1,this.constructor._styles.forEach(t=>{const e=document.createElement("style");e.textContent=t.cssText,this.renderRoot.appendChild(e)}))}render(){}}at.finalized=!0,at.render=(t,e,s)=>{const i=s.scopeName,n=M.has(e),r=I&&11===e.nodeType&&!!e.host&&t instanceof v,a=r&&!L.has(i),l=a?document.createDocumentFragment():e;if(((t,e,s)=>{let i=M.get(e);void 0===i&&(o(e,e.firstChild),M.set(e,i=new C(Object.assign({templateFactory:V},s))),i.appendInto(e)),i.setValue(t),i.commit()})(t,l,Object.assign({templateFactory:H(i)},s)),a){const t=M.get(l);M.delete(l),t.value instanceof g&&B(l,t.value.template,i),o(e,e.firstChild),e.appendChild(l),M.set(e,t)}!n&&r&&window.ShadyCSS.styleElement(e.host)};const lt=(t,e)=>0!=(t.attributes.supported_features&e);class ht{constructor(t,e){this.hass=t,this.stateObj=e,this._attr=e.attributes,this._feat=this._attr.supported_features}get isFullyOpen(){return void 0!==this._attr.current_position?100===this._attr.current_position:"open"===this.stateObj.state}get isFullyClosed(){return void 0!==this._attr.current_position?0===this._attr.current_position:"closed"===this.stateObj.state}get isFullyOpenTilt(){return 100===this._attr.current_tilt_position}get isFullyClosedTilt(){return 0===this._attr.current_tilt_position}get isOpening(){return"opening"===this.stateObj.state}get isClosing(){return"closing"===this.stateObj.state}get supportsOpen(){return lt(this.stateObj,1)}get supportsClose(){return lt(this.stateObj,2)}get supportsSetPosition(){return lt(this.stateObj,4)}get supportsStop(){return lt(this.stateObj,8)}get supportsOpenTilt(){return lt(this.stateObj,16)}get supportsCloseTilt(){return lt(this.stateObj,32)}get supportsStopTilt(){return lt(this.stateObj,64)}get supportsSetTiltPosition(){return lt(this.stateObj,128)}get isTiltOnly(){const t=this.supportsOpen||this.supportsClose||this.supportsStop;return(this.supportsOpenTilt||this.supportsCloseTilt||this.supportsStopTilt)&&!t}openCover(){this.callService("open_cover")}closeCover(){this.callService("close_cover")}stopCover(){this.callService("stop_cover")}openCoverTilt(){this.callService("open_cover_tilt")}closeCoverTilt(){this.callService("close_cover_tilt")}stopCoverTilt(){this.callService("stop_cover_tilt")}setCoverPosition(t){this.callService("set_cover_position",{position:t})}setCoverTiltPosition(t){this.callService("set_cover_tilt_position",{tilt_position:t})}callService(t,e={}){e.entity_id=this.stateObj.entity_id,this.hass.callService("cover",t,e)}}s.d(e,"StateCardCustomCover",function(){return pt});var ct=function(t,e,s,i){var n,r=arguments.length,o=r<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,s):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,e,s,i);else for(var a=t.length-1;a>=0;a--)(n=t[a])&&(o=(r<3?n(o):r>3?n(e,s,o):n(e,s))||o);return r>3&&o&&Object.defineProperty(e,s,o),o};let pt=class extends at{constructor(){super(...arguments),this.inDialog=!1}get stateObj(){return this.hass&&this._config?this.hass.states[this._config.entity]:null}setConfig(t){if(!t||!t.entity)throw new Error("Invalid configuration");this._config=t}get entityObj(){if(this.hass&&this.stateObj)return new ht(this.hass,this.stateObj);throw new Error("Trying to get entityObj before setting hass & config")}static getCardSize(){return 1}stateInfoTemplate(){return R`
|
||||
(window.litElementVersions||(window.litElementVersions=[])).push("2.0.1");const ot=t=>t.flat?t.flat(1/0):function t(e,s=[]){for(let i=0,n=e.length;i<n;i++){const n=e[i];Array.isArray(n)?t(n,s):s.push(n)}return s}(t);class at extends et{static finalize(){super.finalize(),this._styles=this.hasOwnProperty(JSCompiler_renameProperty("styles",this))?this._getUniqueStyles():this._styles||[]}static _getUniqueStyles(){const t=this.styles,e=[];if(Array.isArray(t)){ot(t).reduceRight((t,e)=>(t.add(e),t),new Set).forEach(t=>e.unshift(t))}else t&&e.push(t);return e}initialize(){super.initialize(),this.renderRoot=this.createRenderRoot(),window.ShadowRoot&&this.renderRoot instanceof window.ShadowRoot&&this.adoptStyles()}createRenderRoot(){return this.attachShadow({mode:"open"})}adoptStyles(){const t=this.constructor._styles;0!==t.length&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow?rt?this.renderRoot.adoptedStyleSheets=t.map(t=>t.styleSheet):this._needsShimAdoptedStyleSheets=!0:window.ShadyCSS.ScopingShim.prepareAdoptedCssText(t.map(t=>t.cssText),this.localName))}connectedCallback(){super.connectedCallback(),this.hasUpdated&&void 0!==window.ShadyCSS&&window.ShadyCSS.styleElement(this)}update(t){super.update(t);const e=this.render();e instanceof v&&this.constructor.render(e,this.renderRoot,{scopeName:this.localName,eventContext:this}),this._needsShimAdoptedStyleSheets&&(this._needsShimAdoptedStyleSheets=!1,this.constructor._styles.forEach(t=>{const e=document.createElement("style");e.textContent=t.cssText,this.renderRoot.appendChild(e)}))}render(){}}at.finalized=!0,at.render=(t,e,s)=>{const i=s.scopeName,n=M.has(e),r=I&&11===e.nodeType&&!!e.host&&t instanceof v,a=r&&!L.has(i),l=a?document.createDocumentFragment():e;if(((t,e,s)=>{let i=M.get(e);void 0===i&&(o(e,e.firstChild),M.set(e,i=new C(Object.assign({templateFactory:V},s))),i.appendInto(e)),i.setValue(t),i.commit()})(t,l,Object.assign({templateFactory:H(i)},s)),a){const t=M.get(l);M.delete(l),t.value instanceof y&&B(l,t.value.template,i),o(e,e.firstChild),e.appendChild(l),M.set(e,t)}!n&&r&&window.ShadyCSS.styleElement(e.host)};const lt=(t,e)=>0!=(t.attributes.supported_features&e);class ht{constructor(t,e){this.hass=t,this.stateObj=e,this._attr=e.attributes,this._feat=this._attr.supported_features}get isFullyOpen(){return void 0!==this._attr.current_position?100===this._attr.current_position:"open"===this.stateObj.state}get isFullyClosed(){return void 0!==this._attr.current_position?0===this._attr.current_position:"closed"===this.stateObj.state}get isFullyOpenTilt(){return 100===this._attr.current_tilt_position}get isFullyClosedTilt(){return 0===this._attr.current_tilt_position}get isOpening(){return"opening"===this.stateObj.state}get isClosing(){return"closing"===this.stateObj.state}get supportsOpen(){return lt(this.stateObj,1)}get supportsClose(){return lt(this.stateObj,2)}get supportsSetPosition(){return lt(this.stateObj,4)}get supportsStop(){return lt(this.stateObj,8)}get supportsOpenTilt(){return lt(this.stateObj,16)}get supportsCloseTilt(){return lt(this.stateObj,32)}get supportsStopTilt(){return lt(this.stateObj,64)}get supportsSetTiltPosition(){return lt(this.stateObj,128)}get isTiltOnly(){const t=this.supportsOpen||this.supportsClose||this.supportsStop;return(this.supportsOpenTilt||this.supportsCloseTilt||this.supportsStopTilt)&&!t}openCover(){this.callService("open_cover")}closeCover(){this.callService("close_cover")}stopCover(){this.callService("stop_cover")}openCoverTilt(){this.callService("open_cover_tilt")}closeCoverTilt(){this.callService("close_cover_tilt")}stopCoverTilt(){this.callService("stop_cover_tilt")}setCoverPosition(t){this.callService("set_cover_position",{position:t})}setCoverTiltPosition(t){this.callService("set_cover_tilt_position",{tilt_position:t})}callService(t,e={}){e.entity_id=this.stateObj.entity_id,this.hass.callService("cover",t,e)}}s.d(e,"StateCardCustomCover",function(){return pt});var ct=function(t,e,s,i){var n,r=arguments.length,o=r<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,s):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,e,s,i);else for(var a=t.length-1;a>=0;a--)(n=t[a])&&(o=(r<3?n(o):r>3?n(e,s,o):n(e,s))||o);return r>3&&o&&Object.defineProperty(e,s,o),o};let pt=class extends at{constructor(){super(...arguments),this.inDialog=!1}get stateObj(){return this.hass&&this._config?this.hass.states[this._config.entity]:null}setConfig(t){if(!t||!t.entity)throw new Error("Invalid configuration");this._config=t}get entityObj(){if(this.hass&&this.stateObj)return new ht(this.hass,this.stateObj);throw new Error("Trying to get entityObj before setting hass & config")}static getCardSize(){return 1}stateInfoTemplate(){return R`
|
||||
State info template
|
||||
`}render(){if(!this._config||!this.hass)return R``;const t=this.entityObj,e=this.hass.states[this._config.entity];return e?R`
|
||||
<style include="iron-flex iron-flex-alignment"></style>
|
||||
|
@ -179,6 +179,10 @@ const st=(t,e)=>"method"!==e.kind||!e.descriptor||"value"in e.descriptor?{kind:"
|
|||
--mdc-icon-size: 25px;
|
||||
}
|
||||
|
||||
ha-icon {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
[invisible] {
|
||||
visibility: hidden !important;
|
||||
}
|
||||
|
@ -189,17 +193,23 @@ const st=(t,e)=>"method"!==e.kind||!e.descriptor||"value"in e.descriptor?{kind:"
|
|||
<ha-icon-button
|
||||
icon="hass:menu"
|
||||
@click=${this.onHalfOpenTap}
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-icon icon="hass:menu"> </ha-icon>
|
||||
</ha-icon-button>
|
||||
<ha-icon-button
|
||||
icon="hass:arrow-up"
|
||||
@click=${this.onOpenTap}
|
||||
.disabled="${this.computeOpenDisabled(e,this.entityObj)}"
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-icon icon="hass:arrow-up"> </ha-icon>
|
||||
</ha-icon-button>
|
||||
<ha-icon-button
|
||||
icon="hass:arrow-down"
|
||||
@click=${this.onCloseTap}
|
||||
.disabled="${this.computeClosedDisabled(e,t)}"
|
||||
></ha-icon-button>
|
||||
>
|
||||
<ha-icon icon="hass:arrow-down"> </ha-icon>
|
||||
</ha-icon-button>
|
||||
</div>
|
||||
</hui-generic-entity-row>
|
||||
`:R`
|
||||
|
|
Loading…
Reference in New Issue