Schlafzimmer szenen, stillen usw

This commit is contained in:
Martin Bauer 2021-02-01 20:02:55 +00:00
parent fbfd8a3557
commit 6ee8c9c348
23 changed files with 2540 additions and 1208 deletions

View File

@ -1 +1 @@
0.115.6
2021.1.5

View File

@ -594,7 +594,7 @@
"access_token_expiration": 1800.0,
"token": "b05205cd745f9313e410b1ae8b6c3244986e4bd12e1f5196caac378619184ed804de6b1df56b77f60e8aa18c659886f4c2ca0815098e3c554726b4450bb37f13",
"jwt_key": "b2d8eb38f6507f5b16322b6885405d34690fdbf2ec2a531647c89f0145bc7fa576b80572d2ee1cda9fbedf347facd6aca9f640310cbbb088d3208781989c0760",
"last_used_at": "2020-09-17T20:26:40.619361+00:00",
"last_used_at": "2021-01-23T10:18:02.917658+00:00",
"last_used_ip": "192.168.178.80"
},
{
@ -734,7 +734,7 @@
"access_token_expiration": 1800.0,
"token": "c60c252317f548195ea325c527f8b2e5c0d8690cd24503fb5128d7d42076086998d7fc8705fbe9ee9e523673c209f33aa58ed80e1baaba896c1790c28792521a",
"jwt_key": "a6f25bdc44af136f1b64c23dccc72184a87285fa080a2b59851d1f0e34ab89ecc39b7d8cde055872ab0dbd5759aabefe6bfe5474aece6155d853e894dbc27913",
"last_used_at": "2020-10-05T14:17:02.995113+00:00",
"last_used_at": "2020-10-20T08:37:24.674779+00:00",
"last_used_ip": "192.168.178.80"
},
{
@ -776,7 +776,7 @@
"access_token_expiration": 1800.0,
"token": "386819a111578c2b8f82434a9cf2bcb3cef896f4f16c3e0a1f951be439ab851e76702f30779f636a8d51bb28b0adcd36bc960c643481b75ebe8a9eeebc5a32ed",
"jwt_key": "db54f0ea0b76b021ed019b10364014313c1557fe8117fd46bb862cb537720b4e1ad4fe11a61c7a4306b2a0ca33babd7aff6d039f2e4888f87d8de4d92ffeec2e",
"last_used_at": "2020-10-05T19:10:33.896412+00:00",
"last_used_at": "2020-12-25T07:45:40.563312+00:00",
"last_used_ip": "192.168.178.80"
},
{
@ -874,7 +874,7 @@
"access_token_expiration": 1800.0,
"token": "587f6d7a948d526f32f41db51cd186ace3d884a03ed46b3f4cbfa869fba1a45b4274a111053c038279449821143f995cd50f1f381801471f84d00385564caff6",
"jwt_key": "8acd2221e057a48d290443abd8ad5a5bfbabb18d8131576356a298aeb253b8cc02b5295d6fa8832512ee39f24b9fc87579832c2028233365ea3ebaa5e55d2544",
"last_used_at": "2020-07-18T11:04:01.222594+00:00",
"last_used_at": "2021-01-27T16:40:51.883783+00:00",
"last_used_ip": "192.168.178.80"
},
{
@ -888,7 +888,7 @@
"access_token_expiration": 1800.0,
"token": "c255c95f61126b8064f8ae84e621ee0a770d2023de82ff066dce12074f950fa29defa6efbf71c538916cd92a00e2849e189b5ce1268c2d48a737e8a5e81d2ade",
"jwt_key": "d86702343e9712dbf76b25d832d1b81d3185ccec78d59087a27b37e348ac89de7f2a63e14ed0f3f38886577bda919f5258732a1b083a89d98853296c29e47106",
"last_used_at": "2020-10-03T21:39:41.378450+00:00",
"last_used_at": "2020-10-23T17:34:08.745574+00:00",
"last_used_ip": "192.168.178.80"
},
{
@ -944,7 +944,7 @@
"access_token_expiration": 1800.0,
"token": "5413aa9dfb9b944f384c07ebc0242e2b7b26c1e674b0c74ace992029b64302e12d0fe038ece34d425714a757ebafce5de46bd101d5b85dc7e3c96cca4f5595ca",
"jwt_key": "afc76b9a4127faea57f23d7020be74daaaaba30e99084db2f2e79fe86775841203355bde3268b851b507e964faa10b6cb15c66beb48a08c9b9cab96648372b87",
"last_used_at": "2020-10-05T14:03:10.284411+00:00",
"last_used_at": "2021-02-01T15:31:11.680396+00:00",
"last_used_ip": "192.168.178.80"
},
{
@ -986,7 +986,7 @@
"access_token_expiration": 1800.0,
"token": "5ef3ab121bf8da837141c97d6d3cee163ab8f3d9500ccfa88b00e7d5541eead3ce479329c4ba2c7cdacd73535f830e60424ae21841de0967416f694cab8b9c0b",
"jwt_key": "1888a3611f1a42b55b412ba801a7ffca654e347049e285a9b5513b15ded3c0f729c7463e9a0f957e0ef878c210338fef196cc449170c4a4f925c38678c07ad70",
"last_used_at": "2020-10-05T20:56:08.570270+00:00",
"last_used_at": "2021-02-01T16:02:58.382652+00:00",
"last_used_ip": "192.168.178.80"
},
{
@ -1014,7 +1014,77 @@
"access_token_expiration": 1800.0,
"token": "1e1726001ee4616f716875a4d8de6f149195902d407334106f774a7aafd9b8c5348414d93c1b7280874746399c81f4e4b27b7b765f23034a3077b943690cfc9e",
"jwt_key": "d4a7bc29bca15964c03ad344771f9a74304c1d46a0b663f8547d76159f3ba318748fd35e3ec5bdf944cbae9c21449294993e3735a68c3971ed85e489d49ee91a",
"last_used_at": "2020-10-05T20:50:06.540955+00:00",
"last_used_at": "2021-02-01T17:23:26.464097+00:00",
"last_used_ip": "192.168.178.80"
},
{
"id": "6e0642fab2524df2b472f94bf1b40ab1",
"user_id": "2ffcb10d3db745b396789364fdef72ec",
"client_id": "https://ha.bauer.tech/",
"client_name": null,
"client_icon": null,
"token_type": "normal",
"created_at": "2020-10-21T11:06:15.175190+00:00",
"access_token_expiration": 1800.0,
"token": "5b070b65e9b585ae0eccf81577c6943aef4b602a8f165348d8394ef2b2f6e976071f728699ca9b5f4e7ff7ff6d44e75d3c79b1258e21698253a44d3d154bf5fd",
"jwt_key": "fd4f48ed396555336989559fff54ba8c840a009dd8368085a35ec725c163865e326a01f3e2695e8f466d017ec69c5173a5c692868642c7d7ed8639bfba308cfc",
"last_used_at": "2020-10-21T11:06:15.175587+00:00",
"last_used_ip": "192.168.178.80"
},
{
"id": "bbb1287659bd40bb87d72666d8547817",
"user_id": "2ffcb10d3db745b396789364fdef72ec",
"client_id": "https://ha.bauer.tech/",
"client_name": null,
"client_icon": null,
"token_type": "normal",
"created_at": "2020-10-22T15:18:22.558241+00:00",
"access_token_expiration": 1800.0,
"token": "d84e7b86d10020c0fbf3908486d3f1546af9e5ebb69608f8c4e8872ff0bb870da53273ae799f4167a10115243ea96a5672b89a10753882b57ab032a3fa3019ee",
"jwt_key": "c7fcd4e2f9bb698841f19b58e7380535ab48d7ca01c7c13b988e6983b043d075fd2134a1c1ba082ed45e603cbd55047510b1ee0b9fa45e06ccdb335c5e94c911",
"last_used_at": "2020-10-31T16:54:45.479969+00:00",
"last_used_ip": "192.168.178.80"
},
{
"id": "60932b9f71444d7e98cd80f786bd711c",
"user_id": "2ffcb10d3db745b396789364fdef72ec",
"client_id": "https://ha.bauer.tech/",
"client_name": null,
"client_icon": null,
"token_type": "normal",
"created_at": "2020-11-04T15:10:34.927590+00:00",
"access_token_expiration": 1800.0,
"token": "b35109ef6674416018047ee788db58de150dc137af697800ddc84743c1f6012ce5561170b49135c0f39fa42da80c47c52284dc599be894038e5dfeedc2d7bc69",
"jwt_key": "ed33e5df5c16d07afe773fb25ca4a8515c7a991d00f347b4e2f4e23c7fd128c2bf19c838d856aa01385bf32e3e8be619d0f90f9a79a036f425013149580e9f46",
"last_used_at": "2021-01-27T12:38:45.853836+00:00",
"last_used_ip": "192.168.178.80"
},
{
"id": "34c89180e1e54a5fbd7d2c13b531fc81",
"user_id": "2ffcb10d3db745b396789364fdef72ec",
"client_id": "https://ha.bauer.tech/",
"client_name": null,
"client_icon": null,
"token_type": "normal",
"created_at": "2020-12-01T22:57:07.836498+00:00",
"access_token_expiration": 1800.0,
"token": "72a02d37245ba4f2d4aab5e5ad42375721b39f83bdac0328e0144842eab954771e0905963bb6a5c35d5fd9789f1d7a57d3517de933465cc1a24d8f6c9c355aa7",
"jwt_key": "23a9f917060a2843d6b67b34d1a48b6f1867ea38fd9794b10e8543f027f6f2f44b535e36417fdd8b610067f76921a93fcd4e4ef371ff7638d2880f553f5a21a6",
"last_used_at": "2021-01-30T20:21:01.473466+00:00",
"last_used_ip": "192.168.178.80"
},
{
"id": "bc4ef31fcdec416c9aa9c2e89d42c351",
"user_id": "2ffcb10d3db745b396789364fdef72ec",
"client_id": "https://ha.bauer.tech/",
"client_name": null,
"client_icon": null,
"token_type": "normal",
"created_at": "2021-01-16T08:36:47.198883+00:00",
"access_token_expiration": 1800.0,
"token": "d50fdcf16944578977db4f0ea2ba627112e737caa23e282ab3121e4216b96794d2fcd663c713c1812fd1cc411352c2d912d52b277743cf4fd125d146f70f9bed",
"jwt_key": "671f3313aa53b5b5e99927a47525c3a852e47581aa525591cb29e8494261818ef88058dd0935395c947b7573993101513d4717ae55d3aefd5dce49c12a3a80a2",
"last_used_at": "2021-02-01T19:31:51.963048+00:00",
"last_used_ip": "192.168.178.80"
},
{
@ -1056,7 +1126,7 @@
"access_token_expiration": 1800.0,
"token": "c008fe893f268d124033d1258fc59917cbf4b392c36016f4f78740688abcb6a1edf23ace480bc2d65b39b616859218a18d8695d4162622c2a5dc5d234c84fe77",
"jwt_key": "5b37cbd04e7087318173ec3df627120cb88f9043126f17e2d4cfff9684e2d782793493d0c847ba7e6f68e8fe82af2d0f324984514c5630833a73620b39e130de",
"last_used_at": "2020-10-04T11:34:17.996735+00:00",
"last_used_at": "2021-02-01T14:29:45.045034+00:00",
"last_used_ip": "192.168.178.80"
},
{
@ -1070,8 +1140,8 @@
"access_token_expiration": 1800.0,
"token": "a9b15071e0ed591eea3d66d903cfba5efa872b44acc5a0abeb7c4518b122ca6136be3c53df37246fbcb2e9abbb085b25921e911907e2346fc0f6fcc4c99f5f05",
"jwt_key": "2a6b9ccfe7a040ceae2e77a05d0c97cd67150297b33f2b4316dfb527418a5dcbc0f96eb0edd11d8288e28824bb7bc65c2ceeeb5d5c893f0c50b3dc9ed77b40ee",
"last_used_at": "2020-02-20T14:04:02.173629+00:00",
"last_used_ip": "127.0.0.1"
"last_used_at": "2020-12-28T21:28:12.883673+00:00",
"last_used_ip": "192.168.178.80"
},
{
"id": "d94991861636455788d6e0ed5ddc8827",
@ -1154,7 +1224,7 @@
"access_token_expiration": 1800.0,
"token": "832326bd02b23b62d231f5129d18042028215dbdee358a4bb25687764faf3815db2818e8a9001f11ba4518c4e9401563d182987eb55e2eb9ddf97135f678e0ba",
"jwt_key": "dffb82d95a8fb848f6ae645aeb8445242f093aa61f99749283904e0f6e2b0c01717a02bc0892bf0b35beca61400e27aae2b742dc14878a107eb60b730b44a025",
"last_used_at": "2020-10-05T19:11:11.528051+00:00",
"last_used_at": "2021-02-01T19:37:49.113104+00:00",
"last_used_ip": "172.30.32.2"
}
]

View File

@ -167,15 +167,16 @@
"light.kinderzimmer_deckenlampe",
"cover.kinderzimmer_rollo"
],
"include_entity_globs": [],
"exclude_entity_globs": [],
"exclude_entities": [],
"include_domains": [],
"exclude_domains": [],
"exclude_entity_globs": [],
"include_entity_globs": []
"exclude_domains": []
},
"auto_start": true,
"safe_mode": false,
"entity_config": {}
"entity_config": {},
"mode": "bridge"
},
"system_options": {
"disable_new_entities": false
@ -270,7 +271,7 @@
"title": "HP Officejet Pro 8610 [9B7880]",
"data": {
"base_path": "/ipp/print",
"host": "192.168.178.74",
"host": "192.168.178.55",
"name": "HP Officejet Pro 8610 [9B7880]",
"port": 631,
"ssl": false,
@ -316,12 +317,12 @@
"title": "MartinHandyP30",
"data": {
"app_data": {
"push_token": "ckSTknpJRqyUSbSvM_zr9Q:APA91bE79K_wlJfkLAQwkKU4qK6aTFahehG3RBfk06bEdZGcJTeO3Qfk9XAezXaFmSfj2-65JoIeBb5s-Xztio1Kc2miqaovquePASnz6WZoGPVfnDqlwjkp9fGR46o58uPRzz6g0tkr",
"push_url": "https://mobile-apps.home-assistant.io/api/sendPush/android/v1"
"push_url": "https://mobile-apps.home-assistant.io/api/sendPush/android/v1",
"push_token": "ckSTknpJRqyUSbSvM_zr9Q:APA91bE79K_wlJfkLAQwkKU4qK6aTFahehG3RBfk06bEdZGcJTeO3Qfk9XAezXaFmSfj2-65JoIeBb5s-Xztio1Kc2miqaovquePASnz6WZoGPVfnDqlwjkp9fGR46o58uPRzz6g0tkr"
},
"app_id": "io.homeassistant.companion.android",
"app_name": "Home Assistant",
"app_version": "2.5.0-full (400)",
"app_version": "2021.1.1-full (555)",
"device_id": "3889c45a8d9e2c62",
"device_name": "MartinHandy",
"manufacturer": "HUAWEI",
@ -347,10 +348,10 @@
"title": "Martin\u2019s iPad",
"data": {
"device_id": "8191AC71-330B-4784-8634-E6F4F0C2DFA2",
"app_version": "2020.6.2 (1)",
"app_version": "2021.1.1 (9)",
"app_name": "Home Assistant",
"manufacturer": "Apple",
"os_version": "14.0.1",
"os_version": "14.4",
"supports_encryption": true,
"device_name": "Martin\u2019s iPad",
"os_name": "iOS",

View File

@ -22,12 +22,13 @@
"manufacturer": "Signify",
"model": "BSB002",
"name": "Philips hue",
"sw_version": "1941056000",
"sw_version": "1942135050",
"entry_type": null,
"id": "8e09114c26574165a8f8fa43ff0c5395",
"via_device_id": null,
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -48,7 +49,8 @@
"id": "31d95a5c59b24732934b4bcde46654a7",
"via_device_id": "8e09114c26574165a8f8fa43ff0c5395",
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -69,7 +71,8 @@
"id": "1dbec2bfe7594794a516405b1a164027",
"via_device_id": "8e09114c26574165a8f8fa43ff0c5395",
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -90,7 +93,8 @@
"id": "00429941ced6498495803f7e1ae65d55",
"via_device_id": "8e09114c26574165a8f8fa43ff0c5395",
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -111,7 +115,8 @@
"id": "00e0dc89c87240699d1286fb79bcc877",
"via_device_id": "8e09114c26574165a8f8fa43ff0c5395",
"area_id": "46ebd507f8f348508653f61054f67eb0",
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -132,7 +137,8 @@
"id": "da7bdf516f614f8fa75f6f611a8cef3c",
"via_device_id": "8e09114c26574165a8f8fa43ff0c5395",
"area_id": "e58ae8bf5c7847af89a727d7949016f0",
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -153,7 +159,8 @@
"id": "27e519bd18974605b39e17156f903a94",
"via_device_id": "8e09114c26574165a8f8fa43ff0c5395",
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -174,7 +181,8 @@
"id": "42fcf3d4fab243d3b3535b88da5520cb",
"via_device_id": "8e09114c26574165a8f8fa43ff0c5395",
"area_id": "46ebd507f8f348508653f61054f67eb0",
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -195,7 +203,8 @@
"id": "d285533d588c4dd98cb2184cd299b882",
"via_device_id": "8e09114c26574165a8f8fa43ff0c5395",
"area_id": "e58ae8bf5c7847af89a727d7949016f0",
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -216,7 +225,8 @@
"id": "77b2e3e9e127481d8b508f8952c08762",
"via_device_id": "8e09114c26574165a8f8fa43ff0c5395",
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -237,7 +247,8 @@
"id": "075d6edf32bb4d6e9c564101a3b253ca",
"via_device_id": "8e09114c26574165a8f8fa43ff0c5395",
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -258,7 +269,8 @@
"id": "4c3bbd2722774287bef53f0eae996c43",
"via_device_id": "8e09114c26574165a8f8fa43ff0c5395",
"area_id": "e58ae8bf5c7847af89a727d7949016f0",
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -279,7 +291,8 @@
"id": "ed71ab3618e04b26b65c561c48b12704",
"via_device_id": "8e09114c26574165a8f8fa43ff0c5395",
"area_id": "46ebd507f8f348508653f61054f67eb0",
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -300,7 +313,8 @@
"id": "c5d6ba59208e4f05a7f8e573f7372316",
"via_device_id": "8e09114c26574165a8f8fa43ff0c5395",
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -321,7 +335,8 @@
"id": "973ccf8026ed4dec8ac55c0c646dafbd",
"via_device_id": "8e09114c26574165a8f8fa43ff0c5395",
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -342,7 +357,8 @@
"id": "80f3a81098d345c5a848625f7c7f934f",
"via_device_id": "8e09114c26574165a8f8fa43ff0c5395",
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -368,7 +384,8 @@
"id": "51f4012aed0b4093b353cdc851755281",
"via_device_id": null,
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -389,7 +406,8 @@
"id": "cff99cfa5ca84b24ba4ff1883f08e02b",
"via_device_id": null,
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -410,7 +428,8 @@
"id": "8e45736652404feda92084feb86a5745",
"via_device_id": null,
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -431,7 +450,8 @@
"id": "7df169040686480db2b1ad5979037e80",
"via_device_id": null,
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -452,7 +472,8 @@
"id": "dd9403c58f084442b1606fe616b3cfb7",
"via_device_id": null,
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -473,7 +494,8 @@
"id": "aa4821c78db245ef90119b9af6fd97bc",
"via_device_id": null,
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -494,7 +516,8 @@
"id": "620ada4df9fc493ca53677a979768dee",
"via_device_id": null,
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -515,7 +538,8 @@
"id": "2d0e7717b4194ecca91589bd83bef38c",
"via_device_id": null,
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -536,7 +560,8 @@
"id": "7465dff14c5e472d904ddb93b09b2770",
"via_device_id": null,
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -557,7 +582,8 @@
"id": "b6158f158b16427388a5dda943f494dd",
"via_device_id": null,
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -578,7 +604,8 @@
"id": "79711ec2ac314065a532b321eef24950",
"via_device_id": null,
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -599,7 +626,8 @@
"id": "487189a878ca49ad91d6b79ec3c7b70a",
"via_device_id": null,
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -620,7 +648,8 @@
"id": "b3954be50d02456ca1cf62085677d14d",
"via_device_id": null,
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -641,7 +670,8 @@
"id": "9b59a0accd104bb781b7136756c15835",
"via_device_id": null,
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -662,7 +692,8 @@
"id": "8ac42fc9656e4882a022db8402456d25",
"via_device_id": null,
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -683,7 +714,8 @@
"id": "4fa58dcef8af4af897a1a9558a015611",
"via_device_id": "8e09114c26574165a8f8fa43ff0c5395",
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -704,7 +736,8 @@
"id": "50781ad2a8d14062a96f4a004924be56",
"via_device_id": "8e09114c26574165a8f8fa43ff0c5395",
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -725,7 +758,8 @@
"id": "6ad58be1b42d4e0988a030fcd5e9d7e8",
"via_device_id": "8e09114c26574165a8f8fa43ff0c5395",
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -746,7 +780,8 @@
"id": "454ec0863be74355983bfdc39531df45",
"via_device_id": "8e09114c26574165a8f8fa43ff0c5395",
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -767,7 +802,8 @@
"id": "022a4fdbf7724dd3962d25a4b4628e20",
"via_device_id": "8e09114c26574165a8f8fa43ff0c5395",
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -788,7 +824,8 @@
"id": "f13e9c76304f4d28983117137046e256",
"via_device_id": "8e09114c26574165a8f8fa43ff0c5395",
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -809,7 +846,8 @@
"id": "6c79bf128b3f417690663f40e64fbc18",
"via_device_id": null,
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -830,7 +868,8 @@
"id": "766b2c2b9f1c4547974914edd271f6ba",
"via_device_id": "6c79bf128b3f417690663f40e64fbc18",
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -851,7 +890,8 @@
"id": "f0876537265d48b28d9c8e9351379955",
"via_device_id": "6c79bf128b3f417690663f40e64fbc18",
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -872,7 +912,8 @@
"id": "13fb850e77be4ca0bab70dc1e2c19aba",
"via_device_id": "6c79bf128b3f417690663f40e64fbc18",
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -893,7 +934,8 @@
"id": "be1c1f75be0e4d40ac8be5e19c7aceb2",
"via_device_id": "6c79bf128b3f417690663f40e64fbc18",
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -914,7 +956,8 @@
"id": "b0fd84c9313f408a9a7a404b60b71bde",
"via_device_id": "8e09114c26574165a8f8fa43ff0c5395",
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -935,7 +978,8 @@
"id": "b8b532e7225448a5a7b1be5c91a501bc",
"via_device_id": "6c79bf128b3f417690663f40e64fbc18",
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -962,7 +1006,8 @@
"id": "abac1bcd6667484bad1460abe8a40412",
"via_device_id": null,
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -983,7 +1028,8 @@
"id": "86655186bf654126b5f179b2d0897eea",
"via_device_id": null,
"area_id": "46ebd507f8f348508653f61054f67eb0",
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -1013,7 +1059,8 @@
"id": "17abd106e210436c8f7e95857cd2fc14",
"via_device_id": null,
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -1029,12 +1076,13 @@
"manufacturer": "Apple",
"model": "iPad7,4",
"name": "Martin\u2019s iPad",
"sw_version": "14.0.1",
"sw_version": "14.4",
"entry_type": null,
"id": "61029ebfaeb04736a98512e93110ebff",
"via_device_id": null,
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
},
{
"config_entries": [
@ -1055,7 +1103,8 @@
"id": "4169e969251746c0b024e2d9b7f0a3c0",
"via_device_id": null,
"area_id": null,
"name_by_user": null
"name_by_user": null,
"disabled_by": null
}
],
"deleted_devices": [
@ -1099,13 +1148,13 @@
],
"connections": [],
"identifiers": [
[
"webhook_id",
"87968208b8c13c3f79fbebf2700c0510ccf67e0d7b62b19651fed96fd9b4a40a"
],
[
"device_id",
"437ea82e3a924ee183d1511c7cc9a98a"
],
[
"webhook_id",
"87968208b8c13c3f79fbebf2700c0510ccf67e0d7b62b19651fed96fd9b4a40a"
]
],
"id": "1aed3276db0143429ca26a0be846fa50"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -29,12 +29,6 @@
"color": "#0050ff",
"name": "Blau",
"scene": "scene.wohnbereich_blau_grun"
},
{
"color": "#ffffff",
"icon": "mdi:weather-night",
"name": "Kuscheln",
"scene": "scene.wohnbereich_kuscheln"
}
],
"type": "custom:room-glance-card"
@ -62,12 +56,12 @@
},
{
"entity": "cover.wohnzimmer_fenster_rollo",
"name": "Wohnzimmer Fenster",
"name": "WZ Fenster",
"type": "custom:state-card-custom-cover"
},
{
"entity": "cover.wohnzimmer_terrassentur_rollo",
"name": "Wohnzimmer T\u00fcr",
"name": "Terrassent\u00fcr",
"type": "custom:state-card-custom-cover"
},
{
@ -133,6 +127,39 @@
]
},
"type": "custom:mini-media-player"
},
{
"type": "entities",
"entities": [
{
"entity": "switch.tasmota01",
"icon": "mdi:led-strip-variant",
"name": "Balkon Lichterkette"
},
{
"entity": "switch.tasmota02",
"icon": "mdi:star-face",
"name": "Arbeitszimmer Stern"
},
{
"entity": "switch.tasmota03",
"icon": "mdi:star-four-points",
"name": "Eingang Stern"
},
{
"entity": "switch.mobile_steckdose_schalter_1",
"icon": "mdi:star",
"name": "K\u00fcche Stern"
},
{
"entity": "switch.mobile_steckdose_schalter_2",
"icon": "mdi:candle",
"name": "Wohnzimmer"
}
],
"title": "Weihnachten",
"state_color": true,
"icon": "mdi:pine-tree"
}
],
"icon": "mdi:sofa",
@ -465,6 +492,16 @@
"entity": "cover.kinderzimmer_rollo",
"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:fan"
}
],
"show_header_toggle": false,

View File

@ -1,4 +1,6 @@
{
"version": 1,
"key": "lovelace_resources",
"data": {
"items": [
{
@ -29,10 +31,8 @@
{
"id": "02ac97946bb44092a5f073752a8b6deb",
"type": "module",
"url": "/local/custom_ui/multiple-entity-row.js?v=3.1.1"
"url": "/local/custom_ui/multiple-entity-row.js?v=3.5.1"
}
]
},
"key": "lovelace_resources",
"version": 1
}
}

View File

@ -17,9 +17,9 @@
"added": true,
"attributes": {},
"device_class": "plug",
"icon": "mdi:power-plug",
"icon": "mdi:power-plug-off",
"name": "Is Charging",
"state": true,
"state": false,
"type": "binary_sensor",
"unique_id": "is_charging",
"webhook_id": "cf6ed33d60ed7470befdf2ec4bd12feecf0be745491431fe61cf57fe91cf400e"
@ -578,17 +578,7 @@
},
"cf6ed33d60ed7470befdf2ec4bd12feecf0be745491431fe61cf57fe91cf400e_audio_sensor": {
"added": true,
"attributes": {
"audio_mode": "normal",
"is_headphones": false,
"is_mic_muted": false,
"is_music_active": false,
"is_speakerphone_on": false,
"volume_level_alarm": 6,
"volume_level_call": 7,
"volume_level_music": 8,
"volume_level_ring": 4
},
"attributes": {},
"icon": "mdi:volume-high",
"name": "Audio Sensor",
"state": "normal",
@ -610,9 +600,9 @@
"added": true,
"attributes": {},
"device_class": "battery",
"icon": "mdi:battery-charging",
"icon": "mdi:battery-70",
"name": "Battery Level",
"state": 100,
"state": 74,
"type": "sensor",
"unique_id": "battery_level",
"unit_of_measurement": "%",
@ -620,15 +610,11 @@
},
"cf6ed33d60ed7470befdf2ec4bd12feecf0be745491431fe61cf57fe91cf400e_battery_state": {
"added": true,
"attributes": {
"battery_health": "good",
"charger_type": "ac",
"is_charging": true
},
"attributes": {},
"device_class": "battery",
"icon": "mdi:battery-charging",
"icon": "mdi:battery-minus",
"name": "Battery State",
"state": "full",
"state": "discharging",
"type": "sensor",
"unique_id": "battery_state",
"webhook_id": "cf6ed33d60ed7470befdf2ec4bd12feecf0be745491431fe61cf57fe91cf400e"
@ -638,8 +624,7 @@
"attributes": {
"connected_not_paired_devices": "[]",
"connected_paired_devices": "[]",
"is_bt_on": false,
"paired_devices": ""
"paired_devices": "[3E:19:06:04:0D:50, A0:56:B2:15:C9:A4]"
},
"icon": "mdi:bluetooth",
"name": "Bluetooth Connection",
@ -652,9 +637,9 @@
"cf6ed33d60ed7470befdf2ec4bd12feecf0be745491431fe61cf57fe91cf400e_charger_type": {
"added": true,
"attributes": {},
"icon": "mdi:power-plug",
"icon": "mdi:battery",
"name": "Charger Type",
"state": "ac",
"state": "none",
"type": "sensor",
"unique_id": "charger_type",
"webhook_id": "cf6ed33d60ed7470befdf2ec4bd12feecf0be745491431fe61cf57fe91cf400e"
@ -706,13 +691,13 @@
"cf6ed33d60ed7470befdf2ec4bd12feecf0be745491431fe61cf57fe91cf400e_last_reboot": {
"added": true,
"attributes": {
"Local Time": "Tue Sep 08 15:45:59 GMT+02:00 2020",
"Time in Milliseconds": 1599572800000.0
"Local Time": "Mon Jan 25 02:51:06 GMT+01:00 2021",
"Time in Milliseconds": 1611539466409
},
"device_class": "timestamp",
"icon": "mdi:restart",
"name": "Last Reboot",
"state": "2020-09-08T13:45:59Z",
"state": "2021-01-25T01:51:06Z",
"type": "sensor",
"unique_id": "last_reboot",
"webhook_id": "cf6ed33d60ed7470befdf2ec4bd12feecf0be745491431fe61cf57fe91cf400e"
@ -732,14 +717,14 @@
"cf6ed33d60ed7470befdf2ec4bd12feecf0be745491431fe61cf57fe91cf400e_next_alarm": {
"added": true,
"attributes": {
"Local Time": "Tue Oct 06 07:50:00 GMT+02:00 2020",
"Local Time": "Tue Feb 02 06:45:00 GMT+01:00 2021",
"Package": "Unknown",
"Time in Milliseconds": 1601963430000.0
"Time in Milliseconds": 1612244700000
},
"device_class": "timestamp",
"icon": "mdi:alarm",
"name": "Next Alarm",
"state": "2020-10-06T05:50:00.000Z",
"state": "2021-02-02T05:45:00.000Z",
"type": "sensor",
"unique_id": "next_alarm",
"webhook_id": "cf6ed33d60ed7470befdf2ec4bd12feecf0be745491431fe61cf57fe91cf400e"
@ -759,7 +744,7 @@
"attributes": {},
"icon": "mdi:leak",
"name": "Proximity Sensor",
"state": "far",
"state": "near",
"type": "sensor",
"unique_id": "proximity_sensor",
"webhook_id": "cf6ed33d60ed7470befdf2ec4bd12feecf0be745491431fe61cf57fe91cf400e"
@ -769,7 +754,7 @@
"attributes": {},
"icon": "mdi:walk",
"name": "Schrittsensor",
"state": "55576",
"state": "19916",
"type": "sensor",
"unique_id": "steps_sensor",
"unit_of_measurement": "steps",
@ -777,15 +762,10 @@
},
"cf6ed33d60ed7470befdf2ec4bd12feecf0be745491431fe61cf57fe91cf400e_storage_sensor": {
"added": true,
"attributes": {
"Free external storage": "No SD Card",
"Free internal storage": "90GB",
"Total external storage": "No SD Card",
"Total internal storage": "110GB"
},
"attributes": {},
"icon": "mdi:harddisk",
"name": "Storage Sensor",
"state": 82,
"state": 78,
"type": "sensor",
"unique_id": "storage_sensor",
"unit_of_measurement": "%",
@ -804,13 +784,7 @@
"cf6ed33d60ed7470befdf2ec4bd12feecf0be745491431fe61cf57fe91cf400e_wifi_connection": {
"added": true,
"attributes": {
"bssid": "7c:ff:4d:05:2e:8d",
"frequency": 5500,
"ip_address": "192.168.178.115",
"is_hidden": false,
"is_wifi_on": true,
"link_speed": 702,
"signal_level": -25
"is_hidden": false
},
"icon": "mdi:wifi",
"name": "WLAN Verbindung",
@ -823,12 +797,12 @@
"attributes": {
"Confidence": "High",
"Types": [
"Unknown"
"Stationary"
]
},
"icon": "mdi:help-circle",
"icon": "mdi:human-male",
"name": "Activity",
"state": "Unknown",
"state": "Stationary",
"type": "sensor",
"unique_id": "activity",
"webhook_id": "2c1e087aa21f2de29ea717b0af4d5de61621ba42229d570cb93181e61c6dc72a",
@ -836,14 +810,14 @@
},
"2c1e087aa21f2de29ea717b0af4d5de61621ba42229d570cb93181e61c6dc72a_storage": {
"attributes": {
"Available": "135,14 GB",
"Available (Important)": "144,50 GB",
"Available (Opportunistic)": "143,22 GB",
"Available": "109,76 GB",
"Available (Important)": "119,30 GB",
"Available (Opportunistic)": "118,01 GB",
"Total": "255,98 GB"
},
"icon": "mdi:database",
"name": "Storage",
"state": "55.95",
"state": "46.10",
"type": "sensor",
"unique_id": "storage",
"unit_of_measurement": "% available",
@ -852,13 +826,13 @@
},
"2c1e087aa21f2de29ea717b0af4d5de61621ba42229d570cb93181e61c6dc72a_battery_level": {
"attributes": {
"Battery State": "Charging",
"Battery State": "Not Charging",
"Low Power Mode": false
},
"device_class": "battery",
"icon": "mdi:battery-charging-20",
"icon": "mdi:battery-50",
"name": "Battery Level",
"state": 22,
"state": 58,
"type": "sensor",
"unique_id": "battery_level",
"unit_of_measurement": "%",
@ -867,13 +841,13 @@
},
"2c1e087aa21f2de29ea717b0af4d5de61621ba42229d570cb93181e61c6dc72a_battery_state": {
"attributes": {
"Battery Level": 22,
"Battery Level": 58,
"Low Power Mode": false
},
"device_class": "battery",
"icon": "mdi:battery-charging-20",
"icon": "mdi:battery-50",
"name": "Battery State",
"state": "Charging",
"state": "Not Charging",
"type": "sensor",
"unique_id": "battery_state",
"webhook_id": "2c1e087aa21f2de29ea717b0af4d5de61621ba42229d570cb93181e61c6dc72a",
@ -923,8 +897,8 @@
"ISO Country Code": "DE",
"Locality": "Rohr",
"Location": [
49.36930146126737,
10.983655038542027
49.369293212890625,
10.983685522613598
],
"Name": "Dietersdorfer Stra\u00dfe 19",
"Ocean": "N/A",
@ -961,7 +935,7 @@
"2c1e087aa21f2de29ea717b0af4d5de61621ba42229d570cb93181e61c6dc72a_last_update_trigger": {
"icon": "mdi:cellphone-wireless",
"name": "Last Update Trigger",
"state": "Background Fetch",
"state": "Significant Location Change",
"type": "sensor",
"unique_id": "last_update_trigger",
"attributes": {},

View File

@ -61,7 +61,9 @@
- data:
message: Bewegung im Gang
title: Alarm
service: notify.ios_martins_ipad
service: notify.mobile_app_martins_ipad
- delay: '30'
mode: single
- id: '1598594894559'
alias: KlingelAufHandy
description: ''
@ -81,3 +83,106 @@
title: Klingel
service: notify.ios_martins_ipad
mode: single
- id: '1606655282153'
alias: _WeihnachtslichterAnUm6
description: ''
trigger:
- platform: time
at: 06:00
condition: []
action:
- service: switch.turn_on
data: {}
entity_id:
- switch.tasmota01
- switch.tasmota02
- switch.tasmota03
mode: single
- id: '1607412098745'
alias: _WeihnachtslichterAusMorgens
description: ''
trigger:
- platform: sun
event: sunrise
offset: 00:15:00
condition: []
action:
- service: switch.turn_off
data: {}
entity_id:
- switch.tasmota01
- switch.tasmota02
- switch.tasmota03
- switch.mobile_steckdose_schalter_1
- switch.mobile_steckdose_schalter_2
mode: single
- id: '1607412144113'
alias: _Weihnachtslichter An Abends
description: ''
trigger:
- platform: sun
event: sunset
condition: []
action:
- service: switch.turn_on
data: {}
entity_id:
- switch.tasmota01
- switch.tasmota02
- switch.tasmota03
- switch.mobile_steckdose_schalter_1
- switch.mobile_steckdose_schalter_2
mode: single
- id: '1607412210097'
alias: _Weihnachtslichter Aus Abends
description: ''
trigger:
- platform: time
at: '22:30'
condition: []
action:
- service: switch.turn_off
data: {}
entity_id:
- switch.tasmota01
- switch.tasmota02
- switch.tasmota03
- switch.mobile_steckdose_schalter_1
- switch.mobile_steckdose_schalter_2
mode: single
- id: '1612028092169'
alias: 0_BewegungsmelderSchlafzimmerNacht
description: ''
trigger:
- platform: state
entity_id: binary_sensor.arbeitszimmer_bewegungsmelder_bewegung
from: 'off'
to: 'on'
condition:
- condition: state
entity_id: light.bett_rebecca
state: 'off'
- condition: state
entity_id: light.bett_martin
state: 'off'
- condition: state
entity_id: light.schlafzimmer_deckenlampe
state: 'off'
- condition: numeric_state
entity_id: cover.schlafzimmer_rollo_gross
attribute: current_position
below: '20'
action:
- service: light.turn_on
data:
xy_color:
- 0.502
- 0.414
brightness: 6
entity_id: light.bett_martin, light.bett_rebecca
- delay: '1'
- service: light.turn_on
data:
transition: 120
entity_id: light.bett_martin, light.bett_rebecca
mode: single

View File

@ -9,7 +9,19 @@
repeat_counter: 0
host: bedroompi.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.bedroompi
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.bedroompi
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.bedroompi
- service: media_player.play_media
data:
media_content_id: Good Morning
media_content_type: music
@ -23,7 +35,19 @@
repeat_counter: 0
host: bedroompi.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.bedroompi
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.bedroompi
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.bedroompi
- service: media_player.play_media
data:
media_content_id: Good Night Long
media_content_type: music
@ -37,7 +61,19 @@
repeat_counter: 0
host: bedroompi.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.bedroompi
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.bedroompi
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.bedroompi
- service: media_player.play_media
data:
media_content_id: Good Night
media_content_type: music
@ -51,7 +87,19 @@
repeat_counter: 0
host: bedroompi.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.bedroompi
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.bedroompi
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.bedroompi
- service: media_player.play_media
data:
media_content_id: Bar Classics
media_content_type: music
@ -65,7 +113,19 @@
repeat_counter: 0
host: bedroompi.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.bedroompi
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.bedroompi
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.bedroompi
- service: media_player.play_media
data:
media_content_id: Sentimental Moods
media_content_type: music
@ -79,7 +139,19 @@
repeat_counter: 0
host: bedroompi.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.bedroompi
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.bedroompi
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.bedroompi
- service: media_player.play_media
data:
media_content_id: Pop
media_content_type: music
@ -121,7 +193,19 @@
repeat_counter: 0
host: bedroompi.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.bedroompi
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.bedroompi
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.bedroompi
- service: media_player.play_media
data:
media_content_id: http://opml.radiotime.com/Tune.ashx?id=s25028&formats=aac,ogg,mp3
media_content_type: music
@ -135,10 +219,22 @@
repeat_counter: 0
host: bedroompi.fritz.box
action:
service: media_player.play_media
- service: media_player.repeat_set
data:
media_content_id: Antenne Bayern
media_content_type: channel
repeat: one
entity_id: media_player.bedroompi
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 1
entity_id: media_player.bedroompi
- service: media_player.play_media
data:
media_content_id: Foen
media_content_type: music
entity_id: media_player.bedroompi
- service: media_player.volume_set
data:
volume_level: 60
entity_id: media_player.bedroompi
- alias: IR bedroompi.fritz.box btn_0
trigger:
@ -215,7 +311,7 @@
action:
service: scene.turn_on
data:
entity_id: scene.schlafzimmer_blau
entity_id: scene.nachtswennallelieberschlafen
- alias: IR bedroompi.fritz.box key_tv
trigger:
platform: event

View File

@ -93,7 +93,19 @@
repeat_counter: 0
host: esszimmerradio.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.esszimmer
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.esszimmer
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.esszimmer
- service: media_player.play_media
data:
media_content_id: Gesammelte Weihnachtslieder
media_content_type: music
@ -107,7 +119,19 @@
repeat_counter: 0
host: esszimmerradio.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.esszimmer
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.esszimmer
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.esszimmer
- service: media_player.play_media
data:
media_content_id: Harmonic Brass Christmas
media_content_type: music
@ -121,7 +145,19 @@
repeat_counter: 0
host: esszimmerradio.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.esszimmer
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.esszimmer
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.esszimmer
- service: media_player.play_media
data:
media_content_id: German Brass Christmas
media_content_type: music
@ -135,7 +171,19 @@
repeat_counter: 0
host: esszimmerradio.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.esszimmer
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.esszimmer
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.esszimmer
- service: media_player.play_media
data:
media_content_id: Weihnachten mit den Wiener Sängerknaben
media_content_type: music
@ -149,7 +197,19 @@
repeat_counter: 0
host: esszimmerradio.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.esszimmer
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.esszimmer
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.esszimmer
- service: media_player.play_media
data:
media_content_id: Weihnachten mit den Wiener Sängerknaben
media_content_type: music
@ -163,7 +223,19 @@
repeat_counter: 0
host: esszimmerradio.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.esszimmer
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.esszimmer
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.esszimmer
- service: media_player.play_media
data:
media_content_id: SammlungGeorg
media_content_type: music

View File

@ -93,7 +93,19 @@
repeat_counter: 0
host: musikserverWohnzimmerOben.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.wohnzimmer
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.wohnzimmer
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.wohnzimmer
- service: media_player.play_media
data:
media_content_id: Gesammelte Weihnachtslieder
media_content_type: music
@ -107,7 +119,19 @@
repeat_counter: 0
host: musikserverWohnzimmerOben.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.wohnzimmer
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.wohnzimmer
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.wohnzimmer
- service: media_player.play_media
data:
media_content_id: Harmonic Brass Christmas
media_content_type: music
@ -121,7 +145,19 @@
repeat_counter: 0
host: musikserverWohnzimmerOben.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.wohnzimmer
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.wohnzimmer
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.wohnzimmer
- service: media_player.play_media
data:
media_content_id: German Brass Christmas
media_content_type: music
@ -135,7 +171,19 @@
repeat_counter: 0
host: musikserverWohnzimmerOben.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.wohnzimmer
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.wohnzimmer
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.wohnzimmer
- service: media_player.play_media
data:
media_content_id: Weihnachten mit den Wiener Sängerknaben
media_content_type: music
@ -149,7 +197,19 @@
repeat_counter: 0
host: musikserverWohnzimmerOben.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.wohnzimmer
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.wohnzimmer
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.wohnzimmer
- service: media_player.play_media
data:
media_content_id: Weihnachten mit den Wiener Sängerknaben
media_content_type: music
@ -163,7 +223,19 @@
repeat_counter: 0
host: musikserverWohnzimmerOben.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.wohnzimmer
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.wohnzimmer
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.wohnzimmer
- service: media_player.play_media
data:
media_content_id: SammlungGeorg
media_content_type: music

View File

@ -9,7 +9,19 @@
repeat_counter: 0
host: kitchenpi.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.kitchenpi
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.kitchenpi
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.kitchenpi
- service: media_player.play_media
data:
media_content_id: Bar Classics
media_content_type: music
@ -23,7 +35,19 @@
repeat_counter: 0
host: kitchenpi.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.kitchenpi
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.kitchenpi
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.kitchenpi
- service: media_player.play_media
data:
media_content_id: Sentimental Moods
media_content_type: music
@ -37,7 +61,19 @@
repeat_counter: 0
host: kitchenpi.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.kitchenpi
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.kitchenpi
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.kitchenpi
- service: media_player.play_media
data:
media_content_id: Pop
media_content_type: music
@ -79,7 +115,19 @@
repeat_counter: 0
host: kitchenpi.fritz.box
action:
service: media_player.play_media
- service: media_player.shuffle_set
data:
shuffle: false
entity_id: media_player.kitchenpi
- service: media_player.squeezebox_call_method
data:
command: playlist repeat 0
entity_id: media_player.kitchenpi
- service: media_player.squeezebox_call_method
data:
command: playerpref transitionType 0
entity_id: media_player.kitchenpi
- service: media_player.play_media
data:
media_content_id: http://opml.radiotime.com/Tune.ashx?id=s25028&formats=aac,ogg,mp3
media_content_type: music

View File

@ -70,3 +70,16 @@ first_floor:
- light.wohnzimmer_stehlampe_oben
# ----------- Custom groups -----------------------------
eating_area:
name: Esszimmer & Küche
entities:
- light.kuche_links
- light.kuche_rechts
- light.kuche_vorne
- light.esszimmer_deckenlampe_west
- light.esszimmer_deckenlampe_mitte
- light.kuche_deckenlampe
- cover.kuche_fenster_rollo
- cover.esszimmer_fenster_rollo

View File

@ -6,6 +6,7 @@ yaml = YAML()
# -------------------------------------- put the config here -----------------------------------------------------------
def get_config():
return {
'bedroom': {
@ -26,14 +27,19 @@ def get_config():
'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',
'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] schlafzimmer_blau',
'key_blue': '[scene] nachtswennallelieberschlafen',
'key_tv': [service('script.turn_on', 'script.timed_sleep',
variables={'media_content_id': 'spotify:playlist:37i9dQZF1DXbcPC6Vvqudd', # Regen
@ -131,7 +137,7 @@ def get_config():
'btn_0': '[playlist] Weihnachten mit den Wiener Sängerknaben',
'key_numeric_pound': '[playlist] SammlungGeorg',
}
},
},
}
@ -146,6 +152,21 @@ def split_description(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']
@ -159,8 +180,9 @@ def automation_from_config(ir_description):
function, value = split_description(description)
if function == 'playlist':
media_player = ir_description['media_player']
action = service('media_player.play_media', media_player,
media_content_id=value, media_content_type='music')
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,

View File

@ -7,7 +7,7 @@ person:
sun:
system_health:
updater:
logbook:
#logbook:
#input_boolean:
#input_datetime:
@ -157,6 +157,83 @@ switch:
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
@ -444,6 +521,16 @@ vacuum:
sensor:
- platform: mqtt
state_topic: 'monitor/kitchen/martin_handy'
value_template: '{{ value_json.confidence }}'
unit_of_measurement: '%'
name: 'bluetooth_martin_handy_kitchen'
- platform: mqtt
state_topic: 'monitor/kitchen/martin_ipad'
value_template: '{{ value_json.confidence }}'
unit_of_measurement: '%'
name: 'bluetooth_martin_ipad_kitchen'
- platform: template
sensors:
motion_combined:
@ -485,8 +572,8 @@ sensor:
group: !include groups.yaml
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include_dir_merge_list scenes
scene: !include scenes.yaml
scene old: !include_dir_merge_list scenes
# Light groups

View File

@ -14,8 +14,9 @@ from homeassistant.components.media_player.const import (
ATTR_MEDIA_ENQUEUE, DOMAIN, MEDIA_TYPE_MUSIC,
SUPPORT_CLEAR_PLAYLIST, SUPPORT_NEXT_TRACK, SUPPORT_PAUSE,
SUPPORT_PLAY, SUPPORT_PLAY_MEDIA, SUPPORT_PREVIOUS_TRACK, SUPPORT_SEEK,
SUPPORT_SHUFFLE_SET, SUPPORT_TURN_OFF, SUPPORT_TURN_ON,
SUPPORT_VOLUME_MUTE, SUPPORT_VOLUME_SET)
SUPPORT_SHUFFLE_SET, SUPPORT_REPEAT_SET, SUPPORT_TURN_OFF, SUPPORT_TURN_ON,
SUPPORT_VOLUME_MUTE, SUPPORT_VOLUME_SET, REPEAT_MODE_ALL, REPEAT_MODE_OFF,
REPEAT_MODE_ONE,)
from homeassistant.const import (
ATTR_COMMAND, CONF_HOST, CONF_PASSWORD, CONF_PORT, CONF_USERNAME, ATTR_ENTITY_ID,
STATE_IDLE, STATE_OFF, STATE_PAUSED, STATE_PLAYING)
@ -29,7 +30,7 @@ DEFAULT_PORT = 9090
SUPPORT_SQUEEZEBOX = SUPPORT_PAUSE | SUPPORT_VOLUME_SET | \
SUPPORT_VOLUME_MUTE | SUPPORT_PREVIOUS_TRACK | SUPPORT_NEXT_TRACK | \
SUPPORT_SEEK | SUPPORT_TURN_ON | SUPPORT_TURN_OFF | SUPPORT_PLAY_MEDIA | \
SUPPORT_PLAY | SUPPORT_SHUFFLE_SET | SUPPORT_CLEAR_PLAYLIST
SUPPORT_PLAY | SUPPORT_SHUFFLE_SET | SUPPORT_CLEAR_PLAYLIST | SUPPORT_REPEAT_SET
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required(CONF_HOST): cv.string,
@ -299,8 +300,10 @@ class SqueezeBoxDevice(MediaPlayerDevice):
self._status['time'] = cmd[1]
elif cmd[:3] == ['prefset', 'server', 'volume']:
self._status['mixer volume'] = cmd[3]
elif cmd[:3] == ['prefset', 'server', 'shuffle']:
self._status['playlist shuffle'] = int(cmd[3])
elif cmd[:3] == ['prefset', 'server', 'repeat']:
self._status['playlist shuffle'] = cmd[3]
self._status['playlist repeat'] = int(cmd[3])
if self.media_position != last_media_position:
self._last_media_position_update = utcnow()
@ -436,6 +439,25 @@ class SqueezeBoxDevice(MediaPlayerDevice):
elif 'playlist_shuffle' in self._status:
return self._status['playlist_shuffle'] == '1'
@property
def repeat(self):
repeat_status = self._status.get('playlist repeat', 0)
if repeat_status == 1:
return REPEAT_MODE_ONE
elif repeat_status == 2:
return REPEAT_MODE_ALL
else:
return REPEAT_MODE_OFF
def set_repeat(self, repeat: str) -> None:
"""Set repeat mode."""
if repeat == REPEAT_MODE_OFF:
self.call_method('playlist', 'repeat', 0)
elif repeat == REPEAT_MODE_ONE:
self.call_method('playlist', 'repeat', 1)
elif repeat == REPEAT_MODE_ALL:
self.call_method('playlist', 'repeat', 2)
@property
def supported_features(self):
"""Flag media player features that are supported."""
@ -448,7 +470,7 @@ class SqueezeBoxDevice(MediaPlayerDevice):
self.call_method('mixer', 'volume', '-5')
def set_volume_level(self, volume):
volume_percent = str(int(volume*100))
volume_percent = str(int(volume * 100))
self.call_method('mixer', 'volume', volume_percent)
def mute_volume(self, mute):

118
scenes.yaml Normal file
View File

@ -0,0 +1,118 @@
- id: '1594067418882'
name: Stillen
entities:
light.bett_rebecca:
brightness: 10
effect: none
effect_list:
- colorloop
- random
friendly_name: Bett Rebecca
hs_color:
- 35.714
- 65.882
max_mireds: 500
min_mireds: 153
rgb_color:
- 255
- 186
- 87
state: 'on'
supported_features: 63
xy_color:
- 0.503
- 0.411
- id: '1594067605702'
name: Stillen
entities:
light.bett_rebecca:
brightness: 10
effect: none
effect_list:
- colorloop
- random
friendly_name: Bett Rebecca
hs_color:
- 35.21
- 65.49
max_mireds: 500
min_mireds: 153
rgb_color:
- 255
- 186
- 88
state: 'on'
supported_features: 63
xy_color:
- 0.503
- 0.41
- id: '1611999354955'
name: 0_NachtsWennAlleLieberSchlafen
entities:
light.kinderzimmer_fluter:
min_mireds: 153
max_mireds: 500
effect_list:
- colorloop
- random
brightness: 5
color_temp: 500
effect: none
friendly_name: Kinderzimmer Stehlampe
supported_features: 63
state: 'on'
light.bad_licht:
friendly_name: Bad Licht
supported_features: 1
state: 'off'
light.bett_rebecca:
min_mireds: 153
max_mireds: 500
effect_list:
- colorloop
- random
brightness: 6
color_temp: 500
effect: none
friendly_name: Bett Rebecca
supported_features: 63
state: 'on'
light.wohnzimmer_regal_rechts:
effect_list:
- colorloop
- random
brightness: 76
hs_color:
- 30.356
- 99.216
rgb_color:
- 255
- 130
- 1
xy_color:
- 0.609
- 0.377
effect: none
friendly_name: Wohnzimmer Regal rechts
supported_features: 61
state: 'on'
light.wohnzimmer_regal_links:
effect_list:
- colorloop
- random
brightness: 76
hs_color:
- 31.542
- 99.216
rgb_color:
- 255
- 135
- 1
xy_color:
- 0.602
- 0.382
effect: none
friendly_name: Wohnzimmer Regal links
supported_features: 61
state: 'on'
icon: mdi:sleep

View File

@ -40,7 +40,7 @@
entities:
light.bett_rebecca:
state: true
brightness: 10
brightness: 6
xy_color:
- 0.502
- 0.414

View File

@ -404,9 +404,7 @@
light.wohnzimmer_kugel:
state: false
light.wohnzimmer_stehlampe:
state: true
brightness: 120
color_temp: 428
state: false
light.wohnzimmer_stehlampe_oben:
state: false
light.wohnzimmer_regal_rechts:

View File

@ -44,6 +44,10 @@ timed_sleep:
entity_id: "media_player.bedroompi"
shuffle: >
{% if shuffle %}True{% else %}False{% endif %}
- service: media_player.repeat_set
data:
entity_id: "media_player.bedroompi"
repeat: "off"
- service: media_player.play_media
data_template:
entity_id: "media_player.bedroompi"

View File

@ -1,7 +1,16 @@
((LitElement) => {
console.info(
'%c MULTIPLE-ENTITY-ROW %c 3.5.1 ',
'color: cyan; background: black; font-weight: bold;',
'color: darkblue; background: white; font-weight: bold;',
);
const html = LitElement.prototype.html;
const css = LitElement.prototype.css;
const UNAVAILABLE = 'unavailable';
const UNKNOWN = 'unknown';
class MultipleEntityRow extends LitElement {
static get properties() {
@ -46,12 +55,17 @@
display: block;
color: var(--secondary-text-color);
}
hui-warning {
width: 100%;
}
state-badge {
flex: 0 0 40px;
cursor: pointer;
}
.icon-small {
width: auto;
}
.entity {
margin-right: 16px;
text-align: center;
cursor: pointer;
}
@ -59,22 +73,32 @@
font-size: 10px;
color: var(--secondary-text-color);
}
.entity:last-of-type {
.entities-row {
flex-direction: row;
display: inline-flex;
justify-content: space-between;
align-items: center;
}
.entities-row .entity {
margin-right: 16px;
}
.entities-row .entity:last-of-type {
margin-right: 0;
}
.state {
min-width: 45px;
.entities-column {
flex-direction: column;
display: flex;
align-items: flex-end;
justify-content: space-evenly;
}
.toggle {
margin-left: 8px;
}
.icon-small {
width: auto;
.entities-column .entity div {
display: inline-block;
vertical-align: middle;
}`;
}
render() {
return html`
return this.state.stateObj ? html`
<state-badge
.stateObj="${this.state.stateObj}"
.overrideIcon="${this._config.icon}"
@ -84,39 +108,50 @@
<div class="flex">
<div class="info" @click="${this.onRowClick}">
${this.state.name}
<div class="secondary">${this.renderSecondaryInfo()}</div>
<div class="secondary" style="${this.state.info && this.state.info.style}">${this.renderSecondaryInfo()}</div>
</div>
${this.state.entities.map(entity => this.renderEntity(entity))}
${this.state.value ? html`
<div class="state entity" @click="${this.onStateClick}">
${this.stateHeader && html`<span>${this.stateHeader}</span>`}
${this.renderMainState()}
</div>` : null}
</div>`;
<div class="${this._config.column ? 'entities-column' : 'entities-row'}">
${this.state.entities.map(entity => this.renderEntity(entity))}
${this.state.value ? html`
<div class="state entity" style="${this.state.style}" @click="${this.onRowClick}">
${this.stateHeader && html`<span>${this.stateHeader}</span>`}
<div>${this.renderMainState()}</div>
</div>` : null}
</div>
</div>` : html`
<hui-warning>
${this._hass.localize('ui.panel.lovelace.warning.entity_not_found', 'entity', this._config.entity)}
</hui-warning>`;
}
renderMainState() {
if (this.state.toggle) return html`<div class="toggle">${this.renderToggle(this.state.stateObj)}</div>`;
else if (this._config.format) return this.renderTimestamp(this.state.value, this._config.format);
else return html`<div>${this.state.value}</div>`;
if (this.state.toggle) return this.renderToggle(this.state.stateObj);
const unit = this.state.unit && !this.state.unavailable ? ` ${this.state.unit}` : null;
return html`${this.renderValue(this.state)}${unit}`;
}
renderSecondaryInfo() {
return this.lastChanged
? html`<ha-relative-time datetime="${this.state.stateObj.last_changed}" .hass="${this._hass}"></ha-relative-time>`
: this.state.info && this.state.info.format
? this.renderTimestamp(this.state.info.value, this.state.info.format)
: (this.state.info && `${this.state.info.name ? `${this.state.info.name} ` : ''}${this.state.info.value}`)
if (this.lastChanged)
return html`<ha-relative-time datetime="${this.state.stateObj.last_changed}" .hass="${this._hass}"></ha-relative-time>`;
if (this.state.info) {
const name = this.state.info.name ? `${this.state.info.name} ` : null;
const unit = this.state.info.unit && !this.state.info.unavailable ? ` ${this.state.info.unit}` : null;
return html`${name}${this.renderValue(this.state.info)}${unit}`;
}
}
renderToggle(stateObj) {
return html`<ha-entity-toggle .stateObj="${stateObj}" .hass="${this._hass}"></ha-entity-toggle>`;
}
renderTimestamp(value, format) {
return !['unknown', 'unavailable'].includes(value.toLowerCase())
? html`<hui-timestamp-display .ts=${new Date(value)} .format=${format} .hass=${this._hass}></hui-timestamp-display>`
: html`${value}`;
renderValue(entity) {
if (entity.unavailable || !entity.format) return entity.value;
if (entity.format === 'duration') return html`${this.secondsToDuration(entity.value)}`;
if (entity.format.startsWith('precision')) {
const precision = parseInt(entity.format.slice(-1), 10);
return html`${parseFloat(entity.value).toFixed(precision)}`;
}
return html`<hui-timestamp-display .ts=${new Date(entity.value)} .format=${entity.format} .hass=${this._hass}></hui-timestamp-display>`;
}
renderIcon(entity) {
@ -125,14 +160,14 @@
renderEntityValue(entity) {
if (entity.toggle) return this.renderToggle(entity.stateObj);
else if (entity.icon) return this.renderIcon(entity);
else if (entity.format) return this.renderTimestamp(entity.value, entity.format);
else return html`${entity.value}`;
if (entity.icon !== undefined) return this.renderIcon(entity);
const unit = entity.unit && !entity.unavailable ? ` ${entity.unit}` : null;
return html`${this.renderValue(entity)}${unit}`;
}
renderEntity(entity) {
return entity ? html`
<div class="entity" @click="${entity.onClick}">
<div class="entity" style="${entity.style}" @click="${entity.onClick}">
<span>${entity.name}</span>
<div>${this.renderEntityValue(entity)}</div>
</div>` : null;
@ -147,10 +182,7 @@
this.lastChanged = config.secondary_info === 'last-changed';
this.stateHeader = config.state_header !== undefined ? config.state_header : null;
this.onRowClick = (!config.tap_action || config.tap_action.action !== 'none')
? this.moreInfoAction(config.tap_action, config.entity)
: null;
this.onStateClick = this.getAction(config.tap_action, config.entity);
this.onRowClick = this.getAction(config.tap_action, config.entity);
this._config = config;
}
@ -161,22 +193,24 @@
if (hass && this._config) {
const mainStateObj = hass.states[this._config.entity];
if (!mainStateObj) throw new Error(`Entity '${this._config.entity}' does not exist.`);
this.state = {
this.state = mainStateObj ? {
...this.state,
stateObj: mainStateObj,
name: this.entityName(this._config.name, mainStateObj),
value: this._config.show_state !== false ? this.entityStateValue(mainStateObj, this._config.unit) : null,
value: this._config.show_state !== false ? this.entityStateValue(mainStateObj) : null,
unit: this._config.unit === false ? null : (this._config.unit || mainStateObj.attributes.unit_of_measurement),
unavailable: [UNKNOWN, UNAVAILABLE].includes(mainStateObj.state),
toggle: this.checkToggle(this._config, mainStateObj),
format: this._config.format || false,
style: this.entityStyles(this._config),
entities: this._config.entities ? this._config.entities.map(entity => this.initEntity(entity, mainStateObj)) : [],
info: this.lastChanged ? null :
typeof this._config.secondary_info === 'string'
? {value: this._config.secondary_info}
: this.initEntity(this._config.secondary_info, mainStateObj),
}
} : {};
}
}
@ -191,7 +225,7 @@
}
checkToggle(config, stateObj) {
return config.toggle === true && stateObj.state && !['unknown', 'unavailable'].includes(stateObj.state)
return config.toggle === true && stateObj.state && ![UNKNOWN, UNAVAILABLE].includes(stateObj.state)
}
initEntity(config, mainStateObj) {
@ -200,18 +234,23 @@
const entity = typeof config === 'string' ? config : config.entity;
const stateObj = entity ? (this._hass && this._hass.states[entity]) : mainStateObj;
if (!stateObj) return {value: this._hass.localize('state.default.unavailable')};
if (config.hide_unavailable && (!stateObj || [UNKNOWN, UNAVAILABLE].includes(stateObj.state))) return null;
if (!stateObj) return {value: this._hass.localize('state.default.unavailable'), unavailable: true};
return {
stateObj: stateObj,
name: entity ? this.entityName(config.name, stateObj) : (config.name || null),
value: config.attribute !== undefined
? this.entityAttribute(stateObj, config.attribute, config.unit)
: this.entityStateValue(stateObj, config.unit),
? this.entityAttribute(stateObj, config.attribute)
: this.entityStateValue(stateObj),
unit: config.unit === false ? null : config.attribute !== undefined ? config.unit : (config.unit || stateObj.attributes.unit_of_measurement),
unavailable: [UNKNOWN, UNAVAILABLE].includes(config.attribute !== undefined ? stateObj.attributes[config.attribute] : stateObj.state),
toggle: this.checkToggle(config, stateObj),
icon: config.icon === true ? stateObj.attributes.icon : config.icon,
icon: config.icon === true ? (stateObj.attributes.icon || null) : config.icon,
format: config.format || false,
state_color: config.state_color || false,
style: this.entityStyles(config),
onClick: this.getAction(config.tap_action, stateObj.entity_id),
};
}
@ -224,94 +263,128 @@
: stateObj.attributes.friendly_name || '';
}
entityAttribute(stateObj, attribute, unit) {
entityAttribute(stateObj, attribute) {
return (attribute in stateObj.attributes)
? `${stateObj.attributes[attribute]}${unit ? ` ${unit}` : ''}`
? stateObj.attributes[attribute]
: this._hass.localize('state.default.unavailable');
}
entityStateValue(stateObj, unit) {
let display;
const domain = stateObj.entity_id.substr(0, stateObj.entity_id.indexOf("."));
if (domain === 'binary_sensor') {
if (stateObj.attributes.device_class) {
display = this._hass.localize(`state.${domain}.${stateObj.attributes.device_class}.${stateObj.state}`);
}
if (!display) {
display = this._hass.localize(`state.${domain}.default.${stateObj.state}`);
}
} else if (unit !== false && (unit || stateObj.attributes.unit_of_measurement) && !['unknown', 'unavailable'].includes(stateObj.state)) {
display = `${stateObj.state} ${unit || stateObj.attributes.unit_of_measurement}`;
} else if (domain === 'zwave') {
display = ['initializing', 'dead'].includes(stateObj.state)
? this._hass.localize(`state.zwave.query_stage.${stateObj.state}`, 'query_stage', stateObj.attributes.query_stage)
: this._hass.localize(`state.zwave.default.${stateObj.state}`);
} else {
display = this._hass.localize(`state.${domain}.${stateObj.state}`);
entityStateValue(stateObj) {
if (stateObj.state === UNKNOWN || stateObj.state === UNAVAILABLE) {
return this._hass.localize(`state.default.${stateObj.state}`);
}
return display ||
this._hass.localize(`state.default.${stateObj.state}`) ||
this._hass.localize(`component.${domain}.state.${stateObj.state}`) ||
stateObj.state;
const domain = stateObj.entity_id.substr(0, stateObj.entity_id.indexOf('.'));
return (
(stateObj.attributes.device_class
&& this._hass.localize(`component.${domain}.state.${stateObj.attributes.device_class}.${stateObj.state}`))
|| this._hass.localize(`component.${domain}.state._.${stateObj.state}`)
|| stateObj.state
);
}
entityStyles(config) {
return config.styles && typeof config.styles === 'object'
? Object.keys(config.styles).map(key => `${key}: ${config.styles[key]};`).join('') : '';
}
getAction(config, entityId) {
if (config && config.action) {
if (config.action === 'none') {
return null;
}
const confirmation = config.confirmation === true ? 'Are you sure?' : config.confirmation;
if (config.action === 'call-service') {
const [domain, service] = config.service.split(".");
return () => {
if (!confirmation || confirm(confirmation)) {
this._hass.callService(domain, service, config.service_data);
this.forwardHaptic('light');
}
if (!config || !config.action || config.action === 'more-info') {
return () => this.fireEvent(this, 'hass-more-info', {entityId: (config && config.entity) || entityId});
}
if (config.action === 'none') {
return null;
}
return () => {
if (config.confirmation) {
this.forwardHaptic('warning');
if (!confirm(config.confirmation === true ? `Are you sure?` : config.confirmation)) {
return;
}
}
if (config.action === 'toggle') {
return () => {
if (!confirmation || confirm(confirmation)) {
this._hass.callService('homeassistant', 'toggle', {entity_id: entityId});
this.forwardHaptic('light');
switch (config.action) {
case 'call-service': {
if (!config.service) {
this.forwardHaptic('failure');
return;
}
const [domain, service] = config.service.split('.');
this._hass.callService(domain, service, config.service_data);
this.forwardHaptic('light');
break;
}
}
if (config.action === 'url') {
return () => {
if (!confirmation || confirm(confirmation)) {
const win = window.open(config.url_path, '_blank');
if (win) win.focus();
case 'toggle': {
this.toggleEntity(entityId);
this.forwardHaptic('light');
break;
}
case 'url': {
if (config.url_path) {
window.open(config.url_path);
}
break;
}
case 'navigate': {
if (config.navigation_path) {
history.pushState(null, '', config.navigation_path);
this.fireEvent(window, 'location-changed', {replace: false});
}
break;
}
}
}
return this.moreInfoAction(config, entityId);
}
moreInfoAction(config, entityId) {
return () => this.fireEvent('hass-more-info', (config && config.entity) || entityId);
toggleEntity(entityId) {
const turnOn = ["closed", "locked", "off"].includes(this._hass.states[entityId].state);
const stateDomain = entityId.split('.')[0];
const serviceDomain = stateDomain === "group" ? "homeassistant" : stateDomain;
let service;
switch (stateDomain) {
case "lock":
service = turnOn ? "unlock" : "lock";
break;
case "cover":
service = turnOn ? "open_cover" : "close_cover";
break;
default:
service = turnOn ? "turn_on" : "turn_off";
}
this._hass.callService(serviceDomain, service, {entity_id: entityId});
}
fireEvent(type, entity, options = {}) {
fireEvent(node, type, detail = {}, options = {}) {
const event = new Event(type, {
bubbles: options.bubbles || true,
cancelable: options.cancelable || true,
composed: options.composed || true,
});
event.detail = {entityId: entity};
this.dispatchEvent(event);
event.detail = detail;
node.dispatchEvent(event);
}
forwardHaptic(type) {
const event = new Event("haptic", {bubbles: true, cancelable: false, composed: true});
const event = new Event('haptic', {bubbles: true, cancelable: false, composed: true});
event.detail = type;
this.dispatchEvent(event);
}
secondsToDuration(sec) {
const h = Math.floor(sec / 3600);
const m = Math.floor((sec % 3600) / 60);
const s = Math.floor((sec % 3600) % 60);
const leftPad = (num) => (num < 10 ? `0${num}` : num);
if (h > 0) return `${h}:${leftPad(m)}:${leftPad(s)}`;
if (m > 0) return `${m}:${leftPad(s)}`;
if (s > 0) return `${s}`;
return null;
}
}
customElements.define('multiple-entity-row', MultipleEntityRow);
})(window.LitElement || Object.getPrototypeOf(customElements.get('hui-view')));
})(window.LitElement || Object.getPrototypeOf(customElements.get('hui-masonry-view') || customElements.get('hui-view')));