mirror of
				https://github.com/home-assistant/frontend.git
				synced 2025-11-04 08:29:52 +00:00 
			
		
		
		
	Compare commits
	
		
			1515 Commits
		
	
	
		
			remove-dup
			...
			Better-row
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					d3765987c4 | ||
| 
						 | 
					259cb6a2d2 | ||
| 
						 | 
					0e362b851b | ||
| 
						 | 
					8d7ba19a08 | ||
| 
						 | 
					08f4aa9d10 | ||
| 
						 | 
					98175d5c72 | ||
| 
						 | 
					7d4cad90bc | ||
| 
						 | 
					335354d962 | ||
| 
						 | 
					fe31d15d27 | ||
| 
						 | 
					7ceb6eb50d | ||
| 
						 | 
					4c4db46aa8 | ||
| 
						 | 
					b5724ed343 | ||
| 
						 | 
					cae94175fe | ||
| 
						 | 
					0494a9d410 | ||
| 
						 | 
					c261b5c1ce | ||
| 
						 | 
					c89e17ac00 | ||
| 
						 | 
					c5b0ebf76d | ||
| 
						 | 
					1d08978d6c | ||
| 
						 | 
					fc78b6c933 | ||
| 
						 | 
					480a5718fc | ||
| 
						 | 
					f093bd115c | ||
| 
						 | 
					8a86beff14 | ||
| 
						 | 
					6020890384 | ||
| 
						 | 
					124aa947e2 | ||
| 
						 | 
					e1add14453 | ||
| 
						 | 
					e3293837a8 | ||
| 
						 | 
					5cb2743780 | ||
| 
						 | 
					6f0c79ec25 | ||
| 
						 | 
					7de7d1d926 | ||
| 
						 | 
					89175f8e85 | ||
| 
						 | 
					fc48c59eb0 | ||
| 
						 | 
					51332bc7e7 | ||
| 
						 | 
					7403405d12 | ||
| 
						 | 
					1d13947e71 | ||
| 
						 | 
					f6cb1ffe20 | ||
| 
						 | 
					6d92b5651a | ||
| 
						 | 
					3ea5bb2a6c | ||
| 
						 | 
					1d367eca69 | ||
| 
						 | 
					d4bf3a2ec3 | ||
| 
						 | 
					0ef8881660 | ||
| 
						 | 
					d7d1121f7d | ||
| 
						 | 
					7f089c309f | ||
| 
						 | 
					4dcc0bb66c | ||
| 
						 | 
					0049be7feb | ||
| 
						 | 
					39ff641be9 | ||
| 
						 | 
					e2fed24995 | ||
| 
						 | 
					c0aa353f83 | ||
| 
						 | 
					d8521be63d | ||
| 
						 | 
					6d4569c89d | ||
| 
						 | 
					cd07553b59 | ||
| 
						 | 
					641bfcc9f7 | ||
| 
						 | 
					6c01371958 | ||
| 
						 | 
					7b00260b1a | ||
| 
						 | 
					875142373e | ||
| 
						 | 
					ba505b15ef | ||
| 
						 | 
					17d227b142 | ||
| 
						 | 
					e7e192ffe3 | ||
| 
						 | 
					c53ec6e12d | ||
| 
						 | 
					aad6492a6a | ||
| 
						 | 
					fd5b125c2d | ||
| 
						 | 
					68c3825c7b | ||
| 
						 | 
					2e3c3ded96 | ||
| 
						 | 
					5acee76c70 | ||
| 
						 | 
					10916fa82a | ||
| 
						 | 
					f69951a523 | ||
| 
						 | 
					38ba85e89d | ||
| 
						 | 
					97023921b8 | ||
| 
						 | 
					f835810f0a | ||
| 
						 | 
					b6a93b439e | ||
| 
						 | 
					ea4a5e4f1d | ||
| 
						 | 
					de71c348a5 | ||
| 
						 | 
					46f5589530 | ||
| 
						 | 
					ff9840c8ef | ||
| 
						 | 
					0c197558a1 | ||
| 
						 | 
					c409ba149d | ||
| 
						 | 
					0b896ddfb1 | ||
| 
						 | 
					45721eb4fe | ||
| 
						 | 
					1289bd03b2 | ||
| 
						 | 
					b27fe7e703 | ||
| 
						 | 
					06db9c4bee | ||
| 
						 | 
					c1ba8ba6b8 | ||
| 
						 | 
					ae5018b501 | ||
| 
						 | 
					9ef3d02636 | ||
| 
						 | 
					9f2723deb8 | ||
| 
						 | 
					e9845e1009 | ||
| 
						 | 
					4973d8f629 | ||
| 
						 | 
					3aff4c96c4 | ||
| 
						 | 
					4005bc8985 | ||
| 
						 | 
					62e9792c39 | ||
| 
						 | 
					40d8a76b4d | ||
| 
						 | 
					7a282ede59 | ||
| 
						 | 
					33183cc595 | ||
| 
						 | 
					48455c767f | ||
| 
						 | 
					4385dd5c44 | ||
| 
						 | 
					7733a5f831 | ||
| 
						 | 
					b6c9676930 | ||
| 
						 | 
					3692e36f12 | ||
| 
						 | 
					394d552856 | ||
| 
						 | 
					aa4f0929e0 | ||
| 
						 | 
					f99b9215e3 | ||
| 
						 | 
					c51d621fee | ||
| 
						 | 
					7499892bc2 | ||
| 
						 | 
					30e5fdb6e5 | ||
| 
						 | 
					cbddebeaa8 | ||
| 
						 | 
					bbe4c95109 | ||
| 
						 | 
					4c6f9f0dd8 | ||
| 
						 | 
					90f7dba793 | ||
| 
						 | 
					7c492338a2 | ||
| 
						 | 
					530f494df8 | ||
| 
						 | 
					8fd1f35c59 | ||
| 
						 | 
					af1518e924 | ||
| 
						 | 
					473e381d75 | ||
| 
						 | 
					7d3acc747d | ||
| 
						 | 
					bf7424a67c | ||
| 
						 | 
					3fb35871c7 | ||
| 
						 | 
					d6d20cd704 | ||
| 
						 | 
					9cc6a6b885 | ||
| 
						 | 
					ee0be7b6d0 | ||
| 
						 | 
					a856337eae | ||
| 
						 | 
					6cf47ba4eb | ||
| 
						 | 
					3b7a189708 | ||
| 
						 | 
					79c542b76a | ||
| 
						 | 
					e37b7bd73f | ||
| 
						 | 
					d6f3c34b33 | ||
| 
						 | 
					99f4afec8d | ||
| 
						 | 
					5ae6c05fe6 | ||
| 
						 | 
					effd5e4982 | ||
| 
						 | 
					bc5cb46e7d | ||
| 
						 | 
					c7b747c4fa | ||
| 
						 | 
					5592ea80a9 | ||
| 
						 | 
					d3c51d7acd | ||
| 
						 | 
					b6881d797c | ||
| 
						 | 
					b9f802939c | ||
| 
						 | 
					6558c2c065 | ||
| 
						 | 
					37a089c868 | ||
| 
						 | 
					f68eff6bb3 | ||
| 
						 | 
					88a525f1a7 | ||
| 
						 | 
					7e6153ba7d | ||
| 
						 | 
					34fddd5940 | ||
| 
						 | 
					0e5d6fe8d8 | ||
| 
						 | 
					e1342a0d9d | ||
| 
						 | 
					0cc2d3aaa7 | ||
| 
						 | 
					67814505b3 | ||
| 
						 | 
					bae29c6d62 | ||
| 
						 | 
					a0e67d4c03 | ||
| 
						 | 
					131bc5fbf7 | ||
| 
						 | 
					051218e29b | ||
| 
						 | 
					6ace8307d8 | ||
| 
						 | 
					e84bef44b7 | ||
| 
						 | 
					3186d762f2 | ||
| 
						 | 
					c97a3b0a56 | ||
| 
						 | 
					78f1bb3b91 | ||
| 
						 | 
					67707fbc90 | ||
| 
						 | 
					2a57ffa615 | ||
| 
						 | 
					216fce74f8 | ||
| 
						 | 
					6cd3e6652a | ||
| 
						 | 
					fe7d79cee6 | ||
| 
						 | 
					2f4e7b388b | ||
| 
						 | 
					2e289cd152 | ||
| 
						 | 
					21a3dcf06c | ||
| 
						 | 
					7f56add914 | ||
| 
						 | 
					88701c6167 | ||
| 
						 | 
					e4ce6117a1 | ||
| 
						 | 
					cec2a61bdf | ||
| 
						 | 
					8275ac5853 | ||
| 
						 | 
					b7bcf97365 | ||
| 
						 | 
					fa28b480f1 | ||
| 
						 | 
					4bb95b7396 | ||
| 
						 | 
					5a9bd73e8b | ||
| 
						 | 
					4fe0276914 | ||
| 
						 | 
					5e8bda55b4 | ||
| 
						 | 
					d09c4898c1 | ||
| 
						 | 
					6ae67ed299 | ||
| 
						 | 
					32ff166a74 | ||
| 
						 | 
					8feae04281 | ||
| 
						 | 
					129f9c147b | ||
| 
						 | 
					6e336dd207 | ||
| 
						 | 
					161561c48a | ||
| 
						 | 
					c162e84383 | ||
| 
						 | 
					dc8d80a6e5 | ||
| 
						 | 
					293f67968c | ||
| 
						 | 
					4dcf26236e | ||
| 
						 | 
					a0e8d69243 | ||
| 
						 | 
					33cd9bf516 | ||
| 
						 | 
					0132797f2f | ||
| 
						 | 
					7e2db0aa4e | ||
| 
						 | 
					cc1d50491b | ||
| 
						 | 
					461b86a04b | ||
| 
						 | 
					9a3a7c28f4 | ||
| 
						 | 
					1c9d0200ca | ||
| 
						 | 
					0037cd2e69 | ||
| 
						 | 
					028ae061da | ||
| 
						 | 
					2e47763ecc | ||
| 
						 | 
					924e4a45d0 | ||
| 
						 | 
					8361b9553b | ||
| 
						 | 
					e52be20fba | ||
| 
						 | 
					da12233ade | ||
| 
						 | 
					57500f6c97 | ||
| 
						 | 
					199e17d0b1 | ||
| 
						 | 
					3b91343082 | ||
| 
						 | 
					1753c9163c | ||
| 
						 | 
					89e5953e89 | ||
| 
						 | 
					5bfd25c8c6 | ||
| 
						 | 
					e555b24f50 | ||
| 
						 | 
					14db37459f | ||
| 
						 | 
					1d9779d47c | ||
| 
						 | 
					3dedbc5457 | ||
| 
						 | 
					facb3266c6 | ||
| 
						 | 
					01fe5dd2f7 | ||
| 
						 | 
					9b22b1e499 | ||
| 
						 | 
					4bc8818145 | ||
| 
						 | 
					48ef8c86c2 | ||
| 
						 | 
					89f359a52f | ||
| 
						 | 
					13b8160d74 | ||
| 
						 | 
					f1c16d6674 | ||
| 
						 | 
					76a088e177 | ||
| 
						 | 
					630d8c3bb6 | ||
| 
						 | 
					744efa30f2 | ||
| 
						 | 
					bf4a94dc48 | ||
| 
						 | 
					ce4ba2f6f1 | ||
| 
						 | 
					5b232b5d35 | ||
| 
						 | 
					35151bbac7 | ||
| 
						 | 
					f0e959319e | ||
| 
						 | 
					d0c4475724 | ||
| 
						 | 
					99935f1e59 | ||
| 
						 | 
					fbb43821ba | ||
| 
						 | 
					c7f5c6c1d1 | ||
| 
						 | 
					d26f1fa371 | ||
| 
						 | 
					c3718ff7dd | ||
| 
						 | 
					d63493a859 | ||
| 
						 | 
					a72183851a | ||
| 
						 | 
					40b2387667 | ||
| 
						 | 
					d814aa36a7 | ||
| 
						 | 
					e37eebe4ad | ||
| 
						 | 
					0baaaefdf8 | ||
| 
						 | 
					58a58906e7 | ||
| 
						 | 
					bec0d9b00e | ||
| 
						 | 
					e6a4ab789b | ||
| 
						 | 
					36c1d3230c | ||
| 
						 | 
					30466ec3fe | ||
| 
						 | 
					ce414a5ca9 | ||
| 
						 | 
					e4e6edd573 | ||
| 
						 | 
					79927f4dc9 | ||
| 
						 | 
					603b833757 | ||
| 
						 | 
					ba99d1a10d | ||
| 
						 | 
					efe97e8f51 | ||
| 
						 | 
					5ec23bb7ab | ||
| 
						 | 
					9b4d01ab75 | ||
| 
						 | 
					40191a88d4 | ||
| 
						 | 
					a19477d179 | ||
| 
						 | 
					bf98a78f3d | ||
| 
						 | 
					ba4c2fc1bd | ||
| 
						 | 
					b56e9ef028 | ||
| 
						 | 
					dbbd34c520 | ||
| 
						 | 
					ccb69dbdfa | ||
| 
						 | 
					11e555ef6f | ||
| 
						 | 
					61e17395c9 | ||
| 
						 | 
					733ce3b6b8 | ||
| 
						 | 
					375f143199 | ||
| 
						 | 
					2419f35eb9 | ||
| 
						 | 
					21867c3576 | ||
| 
						 | 
					28853b28bc | ||
| 
						 | 
					e2f27568a5 | ||
| 
						 | 
					98b2b796b0 | ||
| 
						 | 
					b8f3fcf00b | ||
| 
						 | 
					d3fda9a821 | ||
| 
						 | 
					19e69dc13e | ||
| 
						 | 
					48543a2dad | ||
| 
						 | 
					b22f5ae5c2 | ||
| 
						 | 
					2acb6a28fe | ||
| 
						 | 
					1064cdb79d | ||
| 
						 | 
					bd7cb1c877 | ||
| 
						 | 
					6c314982dc | ||
| 
						 | 
					d54710f113 | ||
| 
						 | 
					1346156ecd | ||
| 
						 | 
					a2d9f9b417 | ||
| 
						 | 
					3de78cca2d | ||
| 
						 | 
					5fa7cd9fa9 | ||
| 
						 | 
					a78c00fb41 | ||
| 
						 | 
					edc2a03d1c | ||
| 
						 | 
					174f8f5823 | ||
| 
						 | 
					9fbc94e8d8 | ||
| 
						 | 
					6aff35196d | ||
| 
						 | 
					eceed4ed74 | ||
| 
						 | 
					7428731eac | ||
| 
						 | 
					89b07ea0ae | ||
| 
						 | 
					d16daf0fd9 | ||
| 
						 | 
					211ab4eea8 | ||
| 
						 | 
					dbd53f8d14 | ||
| 
						 | 
					a27680b8c0 | ||
| 
						 | 
					07fc9b98cc | ||
| 
						 | 
					33582c0448 | ||
| 
						 | 
					73be0fef75 | ||
| 
						 | 
					611202c905 | ||
| 
						 | 
					e553f35a68 | ||
| 
						 | 
					673649a603 | ||
| 
						 | 
					c4ed743370 | ||
| 
						 | 
					682fa0d3eb | ||
| 
						 | 
					30f34eee22 | ||
| 
						 | 
					eab76bf85b | ||
| 
						 | 
					bcf405bf9d | ||
| 
						 | 
					3c4b0d4a74 | ||
| 
						 | 
					fb9bd0eb7d | ||
| 
						 | 
					7e2dc04123 | ||
| 
						 | 
					54ec37994c | ||
| 
						 | 
					4a5935ee36 | ||
| 
						 | 
					01b9a07320 | ||
| 
						 | 
					0fcf0dcd18 | ||
| 
						 | 
					80481f142a | ||
| 
						 | 
					2be08ce7ab | ||
| 
						 | 
					37eb5af3d4 | ||
| 
						 | 
					8c8151be92 | ||
| 
						 | 
					baf31d1c1e | ||
| 
						 | 
					af2250835a | ||
| 
						 | 
					6f2a759ba3 | ||
| 
						 | 
					5065901196 | ||
| 
						 | 
					41b59e6e11 | ||
| 
						 | 
					43afdaadc6 | ||
| 
						 | 
					83c5151792 | ||
| 
						 | 
					0880ab67c6 | ||
| 
						 | 
					c0b2143c7c | ||
| 
						 | 
					c1de162c99 | ||
| 
						 | 
					a7ef8aba68 | ||
| 
						 | 
					3ee4c11a99 | ||
| 
						 | 
					990ae10dc2 | ||
| 
						 | 
					52b2fd046b | ||
| 
						 | 
					9f41f80a91 | ||
| 
						 | 
					eec4a91ad8 | ||
| 
						 | 
					7c51001c3c | ||
| 
						 | 
					a4ea4b1f5f | ||
| 
						 | 
					19fc37539e | ||
| 
						 | 
					ce7acb0feb | ||
| 
						 | 
					105b7678b8 | ||
| 
						 | 
					b67575586e | ||
| 
						 | 
					3dc6898673 | ||
| 
						 | 
					a73754c1b5 | ||
| 
						 | 
					1ebf1c00d6 | ||
| 
						 | 
					7dac7d757e | ||
| 
						 | 
					b1f3192b95 | ||
| 
						 | 
					16984d18bb | ||
| 
						 | 
					e603893d77 | ||
| 
						 | 
					a7998b30c6 | ||
| 
						 | 
					3277a4e8c3 | ||
| 
						 | 
					7e769d0e14 | ||
| 
						 | 
					713e0579f8 | ||
| 
						 | 
					6e130cc020 | ||
| 
						 | 
					eb036a12d9 | ||
| 
						 | 
					534d1f5055 | ||
| 
						 | 
					cbef909657 | ||
| 
						 | 
					874f3b32b3 | ||
| 
						 | 
					2fd017cf73 | ||
| 
						 | 
					5740b018a7 | ||
| 
						 | 
					288bf6805a | ||
| 
						 | 
					02d37a369a | ||
| 
						 | 
					1d316c3258 | ||
| 
						 | 
					a56ce62f1a | ||
| 
						 | 
					c268f42851 | ||
| 
						 | 
					7251e802ab | ||
| 
						 | 
					5b1a2d10c2 | ||
| 
						 | 
					2dd7f292b1 | ||
| 
						 | 
					213c53e307 | ||
| 
						 | 
					ce07dfd8ac | ||
| 
						 | 
					c1dba462e8 | ||
| 
						 | 
					47f0d74812 | ||
| 
						 | 
					ce80285f8d | ||
| 
						 | 
					d2dd1a43dd | ||
| 
						 | 
					12d73fe90d | ||
| 
						 | 
					c2741638b2 | ||
| 
						 | 
					4a7fb3d509 | ||
| 
						 | 
					f6ff652ca4 | ||
| 
						 | 
					6165cb0f83 | ||
| 
						 | 
					1f361b7b10 | ||
| 
						 | 
					5269ff978b | ||
| 
						 | 
					55595493a9 | ||
| 
						 | 
					ad3ff0aba7 | ||
| 
						 | 
					ce48546cef | ||
| 
						 | 
					35b3bc995e | ||
| 
						 | 
					63f60019d1 | ||
| 
						 | 
					0d741b6275 | ||
| 
						 | 
					0df9080bbb | ||
| 
						 | 
					ddcf89e6a2 | ||
| 
						 | 
					5de225d5d4 | ||
| 
						 | 
					5cddb482f1 | ||
| 
						 | 
					c000d724de | ||
| 
						 | 
					504055f331 | ||
| 
						 | 
					7f6880f40e | ||
| 
						 | 
					02e4e3c892 | ||
| 
						 | 
					993d73c359 | ||
| 
						 | 
					97ca0b818e | ||
| 
						 | 
					44166f76d4 | ||
| 
						 | 
					557d6d37a1 | ||
| 
						 | 
					d3ad56a307 | ||
| 
						 | 
					0641022ec5 | ||
| 
						 | 
					80c7a8473a | ||
| 
						 | 
					d9a954ca91 | ||
| 
						 | 
					c219f64322 | ||
| 
						 | 
					f7a9ecff21 | ||
| 
						 | 
					2b3126ae04 | ||
| 
						 | 
					934c227545 | ||
| 
						 | 
					cc0515c217 | ||
| 
						 | 
					55ba75f2bc | ||
| 
						 | 
					c220228566 | ||
| 
						 | 
					26b476ab3c | ||
| 
						 | 
					b8a67d530f | ||
| 
						 | 
					b08c96d2db | ||
| 
						 | 
					4773c39a57 | ||
| 
						 | 
					892843b290 | ||
| 
						 | 
					733244531e | ||
| 
						 | 
					66633273e2 | ||
| 
						 | 
					0405adcd16 | ||
| 
						 | 
					426a7ac8dd | ||
| 
						 | 
					3bf6205ff7 | ||
| 
						 | 
					c7f4986e61 | ||
| 
						 | 
					0f0a3fdaf7 | ||
| 
						 | 
					7d6911b140 | ||
| 
						 | 
					b8777539d7 | ||
| 
						 | 
					b5b1849ab3 | ||
| 
						 | 
					0e10c81025 | ||
| 
						 | 
					5fc0eaef1a | ||
| 
						 | 
					113718c3c1 | ||
| 
						 | 
					701bea6cae | ||
| 
						 | 
					8d516ed12a | ||
| 
						 | 
					667c5744f2 | ||
| 
						 | 
					80b7c840e2 | ||
| 
						 | 
					919c86796f | ||
| 
						 | 
					c90c88ecbf | ||
| 
						 | 
					d9ba0e2c46 | ||
| 
						 | 
					45b2fc590b | ||
| 
						 | 
					17ffdb0247 | ||
| 
						 | 
					c2fba15fc6 | ||
| 
						 | 
					5937be695f | ||
| 
						 | 
					a076fcde84 | ||
| 
						 | 
					ede9931903 | ||
| 
						 | 
					722e01608c | ||
| 
						 | 
					af926370d6 | ||
| 
						 | 
					5971aee02e | ||
| 
						 | 
					cce7ad449a | ||
| 
						 | 
					d437dd5919 | ||
| 
						 | 
					f1980730d2 | ||
| 
						 | 
					47773e9cae | ||
| 
						 | 
					60969b0916 | ||
| 
						 | 
					ecc7925d03 | ||
| 
						 | 
					6d3010dcc7 | ||
| 
						 | 
					0164bafbf1 | ||
| 
						 | 
					3940606167 | ||
| 
						 | 
					da9faccada | ||
| 
						 | 
					7e708b3bf7 | ||
| 
						 | 
					05630c9896 | ||
| 
						 | 
					369c56db73 | ||
| 
						 | 
					9873459169 | ||
| 
						 | 
					7776b3766b | ||
| 
						 | 
					29c9004654 | ||
| 
						 | 
					601c909004 | ||
| 
						 | 
					72aa9a3b62 | ||
| 
						 | 
					2ecf7bca97 | ||
| 
						 | 
					cbdfaccdb2 | ||
| 
						 | 
					93d1b9a2d5 | ||
| 
						 | 
					bfb5ee794e | ||
| 
						 | 
					9ae8bd238b | ||
| 
						 | 
					98a64e3114 | ||
| 
						 | 
					0171f3aec7 | ||
| 
						 | 
					2c827bab9a | ||
| 
						 | 
					ec920093d4 | ||
| 
						 | 
					4289ff6652 | ||
| 
						 | 
					cd32ef60da | ||
| 
						 | 
					6ef3d091e1 | ||
| 
						 | 
					0f59496778 | ||
| 
						 | 
					795b670b3c | ||
| 
						 | 
					4ad65e3d69 | ||
| 
						 | 
					f48b1150cf | ||
| 
						 | 
					198db8bc68 | ||
| 
						 | 
					3ae447ca44 | ||
| 
						 | 
					a2ec878ef0 | ||
| 
						 | 
					d43b5d3337 | ||
| 
						 | 
					11e3503dc2 | ||
| 
						 | 
					accf44b769 | ||
| 
						 | 
					b612c0e0d6 | ||
| 
						 | 
					771c7518e6 | ||
| 
						 | 
					4f2bad034a | ||
| 
						 | 
					0456669aeb | ||
| 
						 | 
					2eb71321e7 | ||
| 
						 | 
					d2e9e22e4e | ||
| 
						 | 
					e2427c8dce | ||
| 
						 | 
					26162815c8 | ||
| 
						 | 
					d0c86ea2f7 | ||
| 
						 | 
					4f5b4d4472 | ||
| 
						 | 
					10d71587e7 | ||
| 
						 | 
					9ac777d687 | ||
| 
						 | 
					7d1f9f3981 | ||
| 
						 | 
					a214ab463e | ||
| 
						 | 
					2f21f6ef8a | ||
| 
						 | 
					590cd8500d | ||
| 
						 | 
					f48a28264f | ||
| 
						 | 
					51953bce09 | ||
| 
						 | 
					c445d4b839 | ||
| 
						 | 
					9dabce1dd7 | ||
| 
						 | 
					6b77f08d86 | ||
| 
						 | 
					50e03d41ab | ||
| 
						 | 
					4759c89628 | ||
| 
						 | 
					458ab9b1e0 | ||
| 
						 | 
					dfb2a7153b | ||
| 
						 | 
					e9141d82f3 | ||
| 
						 | 
					d9f42712e4 | ||
| 
						 | 
					da0658f3d9 | ||
| 
						 | 
					412a5a6d8e | ||
| 
						 | 
					9cf9e6edd8 | ||
| 
						 | 
					28050fc9fb | ||
| 
						 | 
					ea9f227fa8 | ||
| 
						 | 
					05164e90fb | ||
| 
						 | 
					97156ccf8a | ||
| 
						 | 
					003d55968e | ||
| 
						 | 
					98dd21b75c | ||
| 
						 | 
					a349e34bc2 | ||
| 
						 | 
					245c825cbf | ||
| 
						 | 
					4ba6698c4b | ||
| 
						 | 
					dac6edea90 | ||
| 
						 | 
					b2e2dbe0c2 | ||
| 
						 | 
					f822fa0d57 | ||
| 
						 | 
					bbee94edba | ||
| 
						 | 
					c39c408332 | ||
| 
						 | 
					dde4a40e69 | ||
| 
						 | 
					1afa4d2868 | ||
| 
						 | 
					d25f371d6c | ||
| 
						 | 
					948261d1d1 | ||
| 
						 | 
					04b7749f85 | ||
| 
						 | 
					8668f0ff5b | ||
| 
						 | 
					b7d8ff6c99 | ||
| 
						 | 
					0894a30f13 | ||
| 
						 | 
					bd511887a7 | ||
| 
						 | 
					0304c0eca0 | ||
| 
						 | 
					6d5c6e2fbc | ||
| 
						 | 
					e7e7912519 | ||
| 
						 | 
					b9c41d8f99 | ||
| 
						 | 
					25a2264ac3 | ||
| 
						 | 
					ad64657c74 | ||
| 
						 | 
					106f18a73a | ||
| 
						 | 
					0fb38140a6 | ||
| 
						 | 
					60133941ae | ||
| 
						 | 
					76db64c073 | ||
| 
						 | 
					24b390ba03 | ||
| 
						 | 
					b4d34d9085 | ||
| 
						 | 
					f80bea27a9 | ||
| 
						 | 
					4b846964be | ||
| 
						 | 
					e6357e2eef | ||
| 
						 | 
					d538b6145f | ||
| 
						 | 
					229ba3a75c | ||
| 
						 | 
					672b867847 | ||
| 
						 | 
					ca1dacd621 | ||
| 
						 | 
					26abb4301d | ||
| 
						 | 
					045dac59af | ||
| 
						 | 
					1ffa87ea23 | ||
| 
						 | 
					357df2bf68 | ||
| 
						 | 
					24f3db3e3f | ||
| 
						 | 
					4bb51b0120 | ||
| 
						 | 
					32b9c1eba1 | ||
| 
						 | 
					40bffc1d25 | ||
| 
						 | 
					ed2c4e2642 | ||
| 
						 | 
					b3353e220a | ||
| 
						 | 
					7dc917babf | ||
| 
						 | 
					00dbba04a2 | ||
| 
						 | 
					3efd1a0451 | ||
| 
						 | 
					b7d7ca4014 | ||
| 
						 | 
					854a54e9c6 | ||
| 
						 | 
					4f4edb109f | ||
| 
						 | 
					265bfeb889 | ||
| 
						 | 
					96110637d9 | ||
| 
						 | 
					ad34f98e6d | ||
| 
						 | 
					a8a1563586 | ||
| 
						 | 
					9b25a54a47 | ||
| 
						 | 
					4b8c96c769 | ||
| 
						 | 
					c62ff85e73 | ||
| 
						 | 
					7d5a27ec0f | ||
| 
						 | 
					d6aba040dd | ||
| 
						 | 
					ca4757db5b | ||
| 
						 | 
					c917b67cbd | ||
| 
						 | 
					9659c97978 | ||
| 
						 | 
					7d862d6f2a | ||
| 
						 | 
					9c80776d8c | ||
| 
						 | 
					d5cd288fe8 | ||
| 
						 | 
					239e817779 | ||
| 
						 | 
					1986215919 | ||
| 
						 | 
					239f5f1a2f | ||
| 
						 | 
					3bca32c6d5 | ||
| 
						 | 
					183eff745d | ||
| 
						 | 
					4392d78ff6 | ||
| 
						 | 
					858196ab53 | ||
| 
						 | 
					fb75d8c1f2 | ||
| 
						 | 
					7628569579 | ||
| 
						 | 
					8a9d5f7753 | ||
| 
						 | 
					cdcccf5089 | ||
| 
						 | 
					de95c92e2d | ||
| 
						 | 
					3030b8d476 | ||
| 
						 | 
					92ed14c0e4 | ||
| 
						 | 
					5b94a4de9a | ||
| 
						 | 
					709112c498 | ||
| 
						 | 
					e465ec8835 | ||
| 
						 | 
					f6eb31bf9d | ||
| 
						 | 
					426f939982 | ||
| 
						 | 
					fab6cebf0d | ||
| 
						 | 
					ff081dd0f1 | ||
| 
						 | 
					868399ed6f | ||
| 
						 | 
					1bc9b95289 | ||
| 
						 | 
					9af805ab5e | ||
| 
						 | 
					6b88081360 | ||
| 
						 | 
					667c828359 | ||
| 
						 | 
					50d37ce4f6 | ||
| 
						 | 
					af0246cd27 | ||
| 
						 | 
					857e4e49d8 | ||
| 
						 | 
					c1afed7f98 | ||
| 
						 | 
					5480e54185 | ||
| 
						 | 
					99d0a0a6fd | ||
| 
						 | 
					8a998369d6 | ||
| 
						 | 
					8b490c5047 | ||
| 
						 | 
					7e70ba6ab2 | ||
| 
						 | 
					90e09fc384 | ||
| 
						 | 
					266f2e763d | ||
| 
						 | 
					c979cfb912 | ||
| 
						 | 
					8ee29b1e43 | ||
| 
						 | 
					26fbc07cac | ||
| 
						 | 
					f01fe65be4 | ||
| 
						 | 
					3fdd6a80f9 | ||
| 
						 | 
					da1de8db1d | ||
| 
						 | 
					dd1bf7b49d | ||
| 
						 | 
					f18913b5a0 | ||
| 
						 | 
					a2cd227f1a | ||
| 
						 | 
					78e64e1f60 | ||
| 
						 | 
					23a9b79320 | ||
| 
						 | 
					76394ce341 | ||
| 
						 | 
					1935df1faa | ||
| 
						 | 
					5af4ce28ab | ||
| 
						 | 
					ce8ee569c4 | ||
| 
						 | 
					b0508f430e | ||
| 
						 | 
					2139a80a7a | ||
| 
						 | 
					aa4bc2ce03 | ||
| 
						 | 
					fa65f84e09 | ||
| 
						 | 
					c06357a351 | ||
| 
						 | 
					092a02a624 | ||
| 
						 | 
					b9699f745f | ||
| 
						 | 
					7fa9f10c30 | ||
| 
						 | 
					7bf0655dae | ||
| 
						 | 
					96c5fdcbeb | ||
| 
						 | 
					c2e6d40382 | ||
| 
						 | 
					810d2a1ceb | ||
| 
						 | 
					af74f21af9 | ||
| 
						 | 
					cdf7558a8e | ||
| 
						 | 
					41b86e6c10 | ||
| 
						 | 
					085c6f8bdd | ||
| 
						 | 
					3039c678a5 | ||
| 
						 | 
					498882d014 | ||
| 
						 | 
					6c2b8c2abb | ||
| 
						 | 
					e955cc4378 | ||
| 
						 | 
					eb96dd4803 | ||
| 
						 | 
					e0bdef98a6 | ||
| 
						 | 
					1130007d14 | ||
| 
						 | 
					d99d092784 | ||
| 
						 | 
					e3b18a33ca | ||
| 
						 | 
					1890aab1e6 | ||
| 
						 | 
					42bf350034 | ||
| 
						 | 
					5ff52ea113 | ||
| 
						 | 
					432e3ba636 | ||
| 
						 | 
					f7ab52fe9a | ||
| 
						 | 
					ad8430049d | ||
| 
						 | 
					2dffe7ba9e | ||
| 
						 | 
					5b8f97e0f6 | ||
| 
						 | 
					b3a763a48d | ||
| 
						 | 
					07569f10b5 | ||
| 
						 | 
					7c5a78a1cf | ||
| 
						 | 
					5cca5bfe86 | ||
| 
						 | 
					0e021e7d7d | ||
| 
						 | 
					b30ee884a7 | ||
| 
						 | 
					869b7c85ca | ||
| 
						 | 
					4d0d1ed2a1 | ||
| 
						 | 
					291983e4c3 | ||
| 
						 | 
					909cff2158 | ||
| 
						 | 
					4e676b1dba | ||
| 
						 | 
					9149bb9333 | ||
| 
						 | 
					4631994f20 | ||
| 
						 | 
					82e9178320 | ||
| 
						 | 
					67b4688168 | ||
| 
						 | 
					6e0e169b6e | ||
| 
						 | 
					100ba8edfa | ||
| 
						 | 
					d7448ecb95 | ||
| 
						 | 
					8b1801f378 | ||
| 
						 | 
					01a4d57566 | ||
| 
						 | 
					7edc9064d9 | ||
| 
						 | 
					30c47a65f4 | ||
| 
						 | 
					0889f42a00 | ||
| 
						 | 
					4999f1ad51 | ||
| 
						 | 
					f15fbe53cf | ||
| 
						 | 
					046f7b5153 | ||
| 
						 | 
					5339fe6e06 | ||
| 
						 | 
					de7ffb10cb | ||
| 
						 | 
					80224e6974 | ||
| 
						 | 
					0c7c536f73 | ||
| 
						 | 
					e5c386c39a | ||
| 
						 | 
					bb2462483e | ||
| 
						 | 
					d5bc498373 | ||
| 
						 | 
					979b7ae651 | ||
| 
						 | 
					c73330a466 | ||
| 
						 | 
					efe8eca4e3 | ||
| 
						 | 
					a37aad18b7 | ||
| 
						 | 
					cfa0c45213 | ||
| 
						 | 
					509481ef06 | ||
| 
						 | 
					9aa8175e23 | ||
| 
						 | 
					76f59d99a2 | ||
| 
						 | 
					bd66bd6cf0 | ||
| 
						 | 
					d69333dea4 | ||
| 
						 | 
					3fd7899b93 | ||
| 
						 | 
					8f8a2cea56 | ||
| 
						 | 
					879011c8e9 | ||
| 
						 | 
					d5794c3e2e | ||
| 
						 | 
					61dbae8b8b | ||
| 
						 | 
					fcc22ba560 | ||
| 
						 | 
					2adeb88fe6 | ||
| 
						 | 
					e63a78bcdb | ||
| 
						 | 
					b065f002a4 | ||
| 
						 | 
					349a5f52b1 | ||
| 
						 | 
					aa5e20df05 | ||
| 
						 | 
					793b9f238c | ||
| 
						 | 
					9c4fdaa4f3 | ||
| 
						 | 
					d1a9cb488a | ||
| 
						 | 
					faee2c3e1b | ||
| 
						 | 
					b7845c318e | ||
| 
						 | 
					426a0727c3 | ||
| 
						 | 
					584e509a9c | ||
| 
						 | 
					f3639c2663 | ||
| 
						 | 
					1431e75f8b | ||
| 
						 | 
					be8812e0af | ||
| 
						 | 
					fd6436d490 | ||
| 
						 | 
					fd1342f9d1 | ||
| 
						 | 
					5fa0012195 | ||
| 
						 | 
					9dbb67ef01 | ||
| 
						 | 
					d16e2f37d4 | ||
| 
						 | 
					d9e8b53ffe | ||
| 
						 | 
					1997e63b7c | ||
| 
						 | 
					6f673359ff | ||
| 
						 | 
					45dfbff10a | ||
| 
						 | 
					348ee96274 | ||
| 
						 | 
					8edee32e77 | ||
| 
						 | 
					6d8d263ca6 | ||
| 
						 | 
					35923709e2 | ||
| 
						 | 
					fdd4d53448 | ||
| 
						 | 
					06419f662e | ||
| 
						 | 
					57763ef032 | ||
| 
						 | 
					8e506f7749 | ||
| 
						 | 
					c7f8fe1468 | ||
| 
						 | 
					4156a4e36d | ||
| 
						 | 
					ba3cc7df0f | ||
| 
						 | 
					0c212d39eb | ||
| 
						 | 
					3bd2e8dbf5 | ||
| 
						 | 
					5292119e6e | ||
| 
						 | 
					994a397231 | ||
| 
						 | 
					353b71f803 | ||
| 
						 | 
					eb12afe8cc | ||
| 
						 | 
					4a176f1b43 | ||
| 
						 | 
					8e228baa82 | ||
| 
						 | 
					154b53b0d8 | ||
| 
						 | 
					a3f680d80c | ||
| 
						 | 
					0d75fe6b81 | ||
| 
						 | 
					4070380ded | ||
| 
						 | 
					41195dcef0 | ||
| 
						 | 
					78a1e45be2 | ||
| 
						 | 
					d8e88bc58d | ||
| 
						 | 
					448e9b71b8 | ||
| 
						 | 
					2e178164cc | ||
| 
						 | 
					9f2e3f05a1 | ||
| 
						 | 
					405bd29ebd | ||
| 
						 | 
					b39b54e0ac | ||
| 
						 | 
					119c5c9071 | ||
| 
						 | 
					7a4c9b128c | ||
| 
						 | 
					dc5b92030f | ||
| 
						 | 
					db0a010d7c | ||
| 
						 | 
					a117a19bdf | ||
| 
						 | 
					5f46fdb406 | ||
| 
						 | 
					f0201de4cc | ||
| 
						 | 
					6cd51a318b | ||
| 
						 | 
					c1a4b27bc7 | ||
| 
						 | 
					5113222050 | ||
| 
						 | 
					90f12eea5e | ||
| 
						 | 
					2403743701 | ||
| 
						 | 
					3e6a759309 | ||
| 
						 | 
					35a430e9f4 | ||
| 
						 | 
					b644f7d23d | ||
| 
						 | 
					7702a05464 | ||
| 
						 | 
					493af5fe82 | ||
| 
						 | 
					ac66a59cec | ||
| 
						 | 
					e10c8faa47 | ||
| 
						 | 
					9b7d17433c | ||
| 
						 | 
					a40eb1ff43 | ||
| 
						 | 
					04df6c3e9e | ||
| 
						 | 
					1b970e5a66 | ||
| 
						 | 
					75406c2d01 | ||
| 
						 | 
					64d3511fbc | ||
| 
						 | 
					c610f54977 | ||
| 
						 | 
					090ad34f78 | ||
| 
						 | 
					358c5205d2 | ||
| 
						 | 
					5503cd0589 | ||
| 
						 | 
					dae42b1bd9 | ||
| 
						 | 
					06a25284e8 | ||
| 
						 | 
					5989560f15 | ||
| 
						 | 
					63c995e5da | ||
| 
						 | 
					dc5607f554 | ||
| 
						 | 
					d49302c032 | ||
| 
						 | 
					63fef9bd4b | ||
| 
						 | 
					6599351d45 | ||
| 
						 | 
					47e9531972 | ||
| 
						 | 
					3ba31483f4 | ||
| 
						 | 
					f4ca94f2e1 | ||
| 
						 | 
					67f9be2b77 | ||
| 
						 | 
					e2fd155e1b | ||
| 
						 | 
					931068dede | ||
| 
						 | 
					bc4c9cc40d | ||
| 
						 | 
					294665fbe8 | ||
| 
						 | 
					e8f6a79c8f | ||
| 
						 | 
					5fd8b5c5b9 | ||
| 
						 | 
					226b2a73af | ||
| 
						 | 
					42d421a6fc | ||
| 
						 | 
					a90203f256 | ||
| 
						 | 
					c3ef79caa9 | ||
| 
						 | 
					1439afcd9c | ||
| 
						 | 
					d263b19910 | ||
| 
						 | 
					1e477226ea | ||
| 
						 | 
					026fc1d2e3 | ||
| 
						 | 
					2d4bd9857a | ||
| 
						 | 
					8f48f5b45c | ||
| 
						 | 
					22210b7400 | ||
| 
						 | 
					7d05855ee0 | ||
| 
						 | 
					b2460cbc3d | ||
| 
						 | 
					4561957e56 | ||
| 
						 | 
					3367fadc3a | ||
| 
						 | 
					d7e409b042 | ||
| 
						 | 
					a0b28e8ad1 | ||
| 
						 | 
					f928a8e58e | ||
| 
						 | 
					0bc4b3d0fa | ||
| 
						 | 
					e352768388 | ||
| 
						 | 
					6835b73e49 | ||
| 
						 | 
					f1503f871b | ||
| 
						 | 
					c4d8aba5c8 | ||
| 
						 | 
					39f24c41ad | ||
| 
						 | 
					21644ec889 | ||
| 
						 | 
					613470b44d | ||
| 
						 | 
					6c918e346b | ||
| 
						 | 
					bce8539572 | ||
| 
						 | 
					aab86e00ec | ||
| 
						 | 
					2a58726caf | ||
| 
						 | 
					4163b35b32 | ||
| 
						 | 
					9c6dac8180 | ||
| 
						 | 
					80fc37724b | ||
| 
						 | 
					77b25f5132 | ||
| 
						 | 
					684f098450 | ||
| 
						 | 
					d09f74d30f | ||
| 
						 | 
					3d973b112e | ||
| 
						 | 
					96986164a4 | ||
| 
						 | 
					78152c20a9 | ||
| 
						 | 
					2bb64e9e2f | ||
| 
						 | 
					746844dfc8 | ||
| 
						 | 
					41b613a2d7 | ||
| 
						 | 
					3b3aeea224 | ||
| 
						 | 
					71c592a0ce | ||
| 
						 | 
					15193fcf5f | ||
| 
						 | 
					a31f53395f | ||
| 
						 | 
					283b134d84 | ||
| 
						 | 
					271eb614cd | ||
| 
						 | 
					16167bef07 | ||
| 
						 | 
					1eac9fa1cd | ||
| 
						 | 
					7f819f0020 | ||
| 
						 | 
					dec1f99a5f | ||
| 
						 | 
					c705e74fc8 | ||
| 
						 | 
					01df10f93e | ||
| 
						 | 
					9877f08cf4 | ||
| 
						 | 
					3dc4b1d775 | ||
| 
						 | 
					02791c51ae | ||
| 
						 | 
					49683326e6 | ||
| 
						 | 
					947773a82e | ||
| 
						 | 
					2a229df624 | ||
| 
						 | 
					e605ad5e46 | ||
| 
						 | 
					0d4f43472b | ||
| 
						 | 
					b30e467685 | ||
| 
						 | 
					a56c0b52d5 | ||
| 
						 | 
					c17ebfd279 | ||
| 
						 | 
					5400b1da96 | ||
| 
						 | 
					69f4a618b2 | ||
| 
						 | 
					16b8b6698c | ||
| 
						 | 
					b29a700d40 | ||
| 
						 | 
					bbb1468439 | ||
| 
						 | 
					72f9d6a8d3 | ||
| 
						 | 
					3ec8da1f17 | ||
| 
						 | 
					dbea3848df | ||
| 
						 | 
					33871435e1 | ||
| 
						 | 
					f1f22b43dc | ||
| 
						 | 
					2fb9a56e0b | ||
| 
						 | 
					14e8f66ed7 | ||
| 
						 | 
					e6f5072462 | ||
| 
						 | 
					a64f50fa72 | ||
| 
						 | 
					bb5f6e88d0 | ||
| 
						 | 
					6991403203 | ||
| 
						 | 
					410bd22f8a | ||
| 
						 | 
					b81d823602 | ||
| 
						 | 
					bd5115f9aa | ||
| 
						 | 
					7bcbed80d7 | ||
| 
						 | 
					8fb62ebf5f | ||
| 
						 | 
					209dd9923f | ||
| 
						 | 
					c75207e391 | ||
| 
						 | 
					d957f36927 | ||
| 
						 | 
					9ac459b6d9 | ||
| 
						 | 
					e08b2817ba | ||
| 
						 | 
					4ca13c409b | ||
| 
						 | 
					0d515e2303 | ||
| 
						 | 
					a2153bc6aa | ||
| 
						 | 
					ca171afe6f | ||
| 
						 | 
					bf4e97bd48 | ||
| 
						 | 
					8c59a12a03 | ||
| 
						 | 
					89569355be | ||
| 
						 | 
					3a41b3bdcf | ||
| 
						 | 
					12bd7037b3 | ||
| 
						 | 
					ca4f573be0 | ||
| 
						 | 
					07fceeab5a | ||
| 
						 | 
					3aa376e912 | ||
| 
						 | 
					92d30a8896 | ||
| 
						 | 
					83876fb9da | ||
| 
						 | 
					29bdf7877c | ||
| 
						 | 
					29199e2782 | ||
| 
						 | 
					68e1378615 | ||
| 
						 | 
					cf7efb5bfc | ||
| 
						 | 
					8634ee536d | ||
| 
						 | 
					632d3cda24 | ||
| 
						 | 
					29b6a907d4 | ||
| 
						 | 
					7474d09e5d | ||
| 
						 | 
					fc7bcd7e00 | ||
| 
						 | 
					f6fb2e4b1d | ||
| 
						 | 
					8c8673a272 | ||
| 
						 | 
					4404a1173b | ||
| 
						 | 
					e08c10315e | ||
| 
						 | 
					16473c9177 | ||
| 
						 | 
					235fd5603f | ||
| 
						 | 
					d07d5832f5 | ||
| 
						 | 
					ef8be5d559 | ||
| 
						 | 
					ccafdc6e1f | ||
| 
						 | 
					11827aa4c0 | ||
| 
						 | 
					6b0589d343 | ||
| 
						 | 
					cec1eed99e | ||
| 
						 | 
					d7e1e9e284 | ||
| 
						 | 
					cae46453a7 | ||
| 
						 | 
					a6e948c808 | ||
| 
						 | 
					7638020bfc | ||
| 
						 | 
					10a62ca17c | ||
| 
						 | 
					0afc7c184f | ||
| 
						 | 
					168e26aeb4 | ||
| 
						 | 
					e6b9389b33 | ||
| 
						 | 
					377c37425e | ||
| 
						 | 
					4af26602bb | ||
| 
						 | 
					c6624e5cb6 | ||
| 
						 | 
					f7ae5b91bf | ||
| 
						 | 
					07e68496c0 | ||
| 
						 | 
					d5a947e2cc | ||
| 
						 | 
					3f920767f1 | ||
| 
						 | 
					3e14d27a1e | ||
| 
						 | 
					cfa4c14108 | ||
| 
						 | 
					209056dbe1 | ||
| 
						 | 
					10356a7496 | ||
| 
						 | 
					d4ae74de44 | ||
| 
						 | 
					88d5e7dd5e | ||
| 
						 | 
					06c7b0b82e | ||
| 
						 | 
					689febda60 | ||
| 
						 | 
					80bc6fda8b | ||
| 
						 | 
					346eb78c4e | ||
| 
						 | 
					2df02f1b09 | ||
| 
						 | 
					92915eddc2 | ||
| 
						 | 
					cddbf460f8 | ||
| 
						 | 
					3c63c23e5a | ||
| 
						 | 
					ba67b1291f | ||
| 
						 | 
					7bced28327 | ||
| 
						 | 
					db2b60700c | ||
| 
						 | 
					9034822c44 | ||
| 
						 | 
					e8254f9aae | ||
| 
						 | 
					a14179b81a | ||
| 
						 | 
					427c5db7f4 | ||
| 
						 | 
					fcb5865468 | ||
| 
						 | 
					41370be2b8 | ||
| 
						 | 
					d7d8dd8986 | ||
| 
						 | 
					a0f596e419 | ||
| 
						 | 
					0a8894feb7 | ||
| 
						 | 
					1db9eea0f8 | ||
| 
						 | 
					489783c398 | ||
| 
						 | 
					be62f327ee | ||
| 
						 | 
					32359adb6d | ||
| 
						 | 
					2e198af8c3 | ||
| 
						 | 
					d154fcbd71 | ||
| 
						 | 
					21e277b8a2 | ||
| 
						 | 
					f98cdd0749 | ||
| 
						 | 
					e60e306426 | ||
| 
						 | 
					ec36d396d9 | ||
| 
						 | 
					135232d880 | ||
| 
						 | 
					9c42ca0315 | ||
| 
						 | 
					9ad9c569a6 | ||
| 
						 | 
					a9071d7920 | ||
| 
						 | 
					1b4a10fac1 | ||
| 
						 | 
					d340f3b383 | ||
| 
						 | 
					f8c5eeab5d | ||
| 
						 | 
					9cd2d0df93 | ||
| 
						 | 
					78914091b1 | ||
| 
						 | 
					e12c324613 | ||
| 
						 | 
					7cf396b518 | ||
| 
						 | 
					8b3b40e627 | ||
| 
						 | 
					90e14762e3 | ||
| 
						 | 
					d1dd8231cd | ||
| 
						 | 
					e70a3e09bf | ||
| 
						 | 
					98656b0044 | ||
| 
						 | 
					a48aa3c778 | ||
| 
						 | 
					05d7b98ba0 | ||
| 
						 | 
					f291ea6647 | ||
| 
						 | 
					5d6e332044 | ||
| 
						 | 
					acb471fbe5 | ||
| 
						 | 
					894f4379e6 | ||
| 
						 | 
					1c73007ae6 | ||
| 
						 | 
					2f7d744228 | ||
| 
						 | 
					e2cba90f8d | ||
| 
						 | 
					352214ba0a | ||
| 
						 | 
					bd9b72fb22 | ||
| 
						 | 
					50c9a667b3 | ||
| 
						 | 
					3d32e6310d | ||
| 
						 | 
					3bc54aa9e0 | ||
| 
						 | 
					def1ec3518 | ||
| 
						 | 
					077802f972 | ||
| 
						 | 
					914b47f340 | ||
| 
						 | 
					b2a78fd063 | ||
| 
						 | 
					7d1835e59c | ||
| 
						 | 
					833ccf3637 | ||
| 
						 | 
					51be916f39 | ||
| 
						 | 
					e375408777 | ||
| 
						 | 
					5078dc1cbf | ||
| 
						 | 
					875148366e | ||
| 
						 | 
					c9ec4b4e24 | ||
| 
						 | 
					efa2b2db27 | ||
| 
						 | 
					8ce120b74d | ||
| 
						 | 
					26e678a97d | ||
| 
						 | 
					e71dd7409e | ||
| 
						 | 
					58ffc2c6ca | ||
| 
						 | 
					d3f29362b9 | ||
| 
						 | 
					b429fe8254 | ||
| 
						 | 
					e1cb549b28 | ||
| 
						 | 
					65a22257cc | ||
| 
						 | 
					e2f753eaa7 | ||
| 
						 | 
					c7127b65bf | ||
| 
						 | 
					0c58c3572a | ||
| 
						 | 
					26ae5fd728 | ||
| 
						 | 
					370d92213b | ||
| 
						 | 
					6e8321a22a | ||
| 
						 | 
					a8e8c1ce5d | ||
| 
						 | 
					a8a8cafd2b | ||
| 
						 | 
					b609890f28 | ||
| 
						 | 
					aac09ae092 | ||
| 
						 | 
					f1ff872944 | ||
| 
						 | 
					b195d2980a | ||
| 
						 | 
					d11736181f | ||
| 
						 | 
					3e84486dd5 | ||
| 
						 | 
					a674ce36e4 | ||
| 
						 | 
					f6569a2625 | ||
| 
						 | 
					da10da79b3 | ||
| 
						 | 
					f236b76d5c | ||
| 
						 | 
					a71c22bedd | ||
| 
						 | 
					cc528e41cf | ||
| 
						 | 
					351962475f | ||
| 
						 | 
					6c73392a57 | ||
| 
						 | 
					072ad87831 | ||
| 
						 | 
					370a1f0574 | ||
| 
						 | 
					9ca7aca4b7 | ||
| 
						 | 
					0f2e9f66b1 | ||
| 
						 | 
					d03c3ab713 | ||
| 
						 | 
					57c0b34ae9 | ||
| 
						 | 
					06a94f0f28 | ||
| 
						 | 
					750e7b1262 | ||
| 
						 | 
					19e32752bb | ||
| 
						 | 
					89c0729964 | ||
| 
						 | 
					fd07152aea | ||
| 
						 | 
					b656f189b6 | ||
| 
						 | 
					9ac8d70152 | ||
| 
						 | 
					8cc0b46335 | ||
| 
						 | 
					1f15094da7 | ||
| 
						 | 
					b881adb853 | ||
| 
						 | 
					4bfc3a5629 | ||
| 
						 | 
					ae6c0bfe40 | ||
| 
						 | 
					4ce9c71521 | ||
| 
						 | 
					ec48323a7d | ||
| 
						 | 
					7d9bae16cd | ||
| 
						 | 
					163ff3d4e4 | ||
| 
						 | 
					43fbf97e10 | ||
| 
						 | 
					71faaf2ab1 | ||
| 
						 | 
					7b0e743eca | ||
| 
						 | 
					31a0c53855 | ||
| 
						 | 
					e8996063dd | ||
| 
						 | 
					00842a3354 | ||
| 
						 | 
					d33f18ecb7 | ||
| 
						 | 
					fb7f620316 | ||
| 
						 | 
					712e0d3e3b | ||
| 
						 | 
					1870dc29c0 | ||
| 
						 | 
					da6fdc74d8 | ||
| 
						 | 
					515e39154a | ||
| 
						 | 
					ff7731d063 | ||
| 
						 | 
					e9a3666dd5 | ||
| 
						 | 
					55c56d53f4 | ||
| 
						 | 
					e4d55e6842 | ||
| 
						 | 
					d8661cf2db | ||
| 
						 | 
					8815b126b5 | ||
| 
						 | 
					2cd367f29f | ||
| 
						 | 
					7395d19489 | ||
| 
						 | 
					d55cb95479 | ||
| 
						 | 
					68ece7d363 | ||
| 
						 | 
					6e4a8ac6df | ||
| 
						 | 
					790629849f | ||
| 
						 | 
					f0443a43b2 | ||
| 
						 | 
					3041eb5ce0 | ||
| 
						 | 
					c69247f190 | ||
| 
						 | 
					27d6a62e67 | ||
| 
						 | 
					6e7fc914aa | ||
| 
						 | 
					65d587843b | ||
| 
						 | 
					c54792af22 | ||
| 
						 | 
					7b7e023103 | ||
| 
						 | 
					7637d36146 | ||
| 
						 | 
					6c62afb123 | ||
| 
						 | 
					44210ce6f2 | ||
| 
						 | 
					e21efc0a5c | ||
| 
						 | 
					09a965022f | ||
| 
						 | 
					7534ecd2f2 | ||
| 
						 | 
					46bf5cf830 | ||
| 
						 | 
					7ba7761a57 | ||
| 
						 | 
					5268afabdb | ||
| 
						 | 
					3ea7506003 | ||
| 
						 | 
					ee14d206c8 | ||
| 
						 | 
					b65f4b9af6 | ||
| 
						 | 
					6d000a3f9a | ||
| 
						 | 
					9ba0de67f5 | ||
| 
						 | 
					d22eaa1318 | ||
| 
						 | 
					3f4bfab7fe | ||
| 
						 | 
					9292f217c5 | ||
| 
						 | 
					3b779bf423 | ||
| 
						 | 
					ea410d3af1 | ||
| 
						 | 
					4e71c2c500 | ||
| 
						 | 
					454ddf366a | ||
| 
						 | 
					d0ba5696d1 | ||
| 
						 | 
					c53fd0d1e1 | ||
| 
						 | 
					7bbecfde2b | ||
| 
						 | 
					a06f378582 | ||
| 
						 | 
					b3b42b741d | ||
| 
						 | 
					020f115d7c | ||
| 
						 | 
					2cc9d70915 | ||
| 
						 | 
					b242c6651a | ||
| 
						 | 
					14a51799a6 | ||
| 
						 | 
					79a6dacd2f | ||
| 
						 | 
					6891f1df1c | ||
| 
						 | 
					497494620d | ||
| 
						 | 
					7a13242077 | ||
| 
						 | 
					b9d6973a79 | ||
| 
						 | 
					ed0e8c5e8d | ||
| 
						 | 
					d8f530f8ac | ||
| 
						 | 
					a46874b7ff | ||
| 
						 | 
					cf68f25a03 | ||
| 
						 | 
					a496563b5c | ||
| 
						 | 
					a763ad5bf1 | ||
| 
						 | 
					f0b0200932 | ||
| 
						 | 
					342f22e6a1 | ||
| 
						 | 
					372ecc6557 | ||
| 
						 | 
					16c604937e | ||
| 
						 | 
					5cbffb23fd | ||
| 
						 | 
					6de38d3b85 | ||
| 
						 | 
					b34ce577d9 | ||
| 
						 | 
					4b9fcd7de7 | ||
| 
						 | 
					cc71ccaafa | ||
| 
						 | 
					9ff2eece3a | ||
| 
						 | 
					2bc97cc9c8 | ||
| 
						 | 
					a87570cf5a | ||
| 
						 | 
					9ffd25e3a0 | ||
| 
						 | 
					61fdab294a | ||
| 
						 | 
					d4e137bb58 | ||
| 
						 | 
					c251e4f241 | ||
| 
						 | 
					a55d0f347b | ||
| 
						 | 
					f15cc0b424 | ||
| 
						 | 
					4e17875011 | ||
| 
						 | 
					256b64b6b3 | ||
| 
						 | 
					8c0c0592e2 | ||
| 
						 | 
					f53f81dbc4 | ||
| 
						 | 
					d6c85719c9 | ||
| 
						 | 
					c51c80bf47 | ||
| 
						 | 
					544832756d | ||
| 
						 | 
					ca8586789a | ||
| 
						 | 
					1afc2b3518 | ||
| 
						 | 
					17352ea5bd | ||
| 
						 | 
					6f5e3c2711 | ||
| 
						 | 
					bee21cd3fe | ||
| 
						 | 
					c4340e05d2 | ||
| 
						 | 
					6d6eef4e97 | ||
| 
						 | 
					71137032df | ||
| 
						 | 
					ffff4dc03d | ||
| 
						 | 
					4033131f2e | ||
| 
						 | 
					65b16c763e | ||
| 
						 | 
					33af3de4a3 | ||
| 
						 | 
					a822c1eb2f | ||
| 
						 | 
					4eb46bc275 | ||
| 
						 | 
					ccc9b73f9b | ||
| 
						 | 
					e9ffdeff19 | ||
| 
						 | 
					a0ab4dffc9 | ||
| 
						 | 
					f5f8ad0e02 | ||
| 
						 | 
					82957ff6ef | ||
| 
						 | 
					0864aeb9c6 | ||
| 
						 | 
					cda6310373 | ||
| 
						 | 
					26a87e9280 | ||
| 
						 | 
					0b16a4880a | ||
| 
						 | 
					db68c5852c | ||
| 
						 | 
					256aec5308 | ||
| 
						 | 
					20dd3ca21c | ||
| 
						 | 
					25cc76e022 | ||
| 
						 | 
					168cc607aa | ||
| 
						 | 
					edc4601f8e | ||
| 
						 | 
					8f86a7ad8c | ||
| 
						 | 
					4d7ad0dc51 | ||
| 
						 | 
					34ac80567e | ||
| 
						 | 
					23bdc03f29 | ||
| 
						 | 
					3099748a6d | ||
| 
						 | 
					e384f76ac1 | ||
| 
						 | 
					7050d19be7 | ||
| 
						 | 
					ca678330d3 | ||
| 
						 | 
					10a5b3f9c3 | ||
| 
						 | 
					0fcedc5046 | ||
| 
						 | 
					f558f7fb8c | ||
| 
						 | 
					06207defe7 | ||
| 
						 | 
					986f9d7633 | ||
| 
						 | 
					81277fd12e | ||
| 
						 | 
					30442b25c0 | ||
| 
						 | 
					67ac3b4ba3 | ||
| 
						 | 
					f819e2cf8d | ||
| 
						 | 
					a376f4525b | ||
| 
						 | 
					5c1553286a | ||
| 
						 | 
					2c5d3f7492 | ||
| 
						 | 
					58f01ba11a | ||
| 
						 | 
					3fdf9a2e28 | ||
| 
						 | 
					4cbd8e7673 | ||
| 
						 | 
					20ca642e51 | ||
| 
						 | 
					05ad7ea011 | ||
| 
						 | 
					faea8c9f4c | ||
| 
						 | 
					0d4c51f26e | ||
| 
						 | 
					2c1b25b00b | ||
| 
						 | 
					407f305d21 | ||
| 
						 | 
					5d5d6b247f | ||
| 
						 | 
					77bd7c37c1 | ||
| 
						 | 
					783ea0f5c8 | ||
| 
						 | 
					33f1b45f30 | ||
| 
						 | 
					e1df50ad3b | ||
| 
						 | 
					6a9a4cf65f | ||
| 
						 | 
					443634ecf0 | ||
| 
						 | 
					2a17870d6d | ||
| 
						 | 
					486ed7dcaa | ||
| 
						 | 
					19c13096dc | ||
| 
						 | 
					49b4271a47 | ||
| 
						 | 
					404d0b8d05 | ||
| 
						 | 
					fe63c12cd9 | ||
| 
						 | 
					44023c3db7 | ||
| 
						 | 
					6242997849 | ||
| 
						 | 
					ec5d7508c9 | ||
| 
						 | 
					7461d8f806 | ||
| 
						 | 
					362236d7df | ||
| 
						 | 
					ba384b9eee | ||
| 
						 | 
					d94df728e5 | ||
| 
						 | 
					d0a53d1760 | ||
| 
						 | 
					2e5ec1f0c1 | ||
| 
						 | 
					6c8aedfb8b | ||
| 
						 | 
					f354e1eb0f | ||
| 
						 | 
					49b1e5897e | ||
| 
						 | 
					1a58c17180 | ||
| 
						 | 
					7fb852893c | ||
| 
						 | 
					aa9a354746 | ||
| 
						 | 
					78f5429c92 | ||
| 
						 | 
					79de8e0f32 | ||
| 
						 | 
					70f59eeec6 | ||
| 
						 | 
					b75792a3bf | ||
| 
						 | 
					5cb7117656 | ||
| 
						 | 
					3a5bd7474b | ||
| 
						 | 
					304fad3f49 | ||
| 
						 | 
					fb929a089c | ||
| 
						 | 
					6076a0cdc4 | ||
| 
						 | 
					a3736683eb | ||
| 
						 | 
					413f1c31bb | ||
| 
						 | 
					20baff380b | ||
| 
						 | 
					582d159884 | ||
| 
						 | 
					9c43c5806d | ||
| 
						 | 
					8ad2bf5401 | ||
| 
						 | 
					66409f0fa5 | ||
| 
						 | 
					68172e006f | ||
| 
						 | 
					cf5e808a96 | ||
| 
						 | 
					3faebaeb4b | ||
| 
						 | 
					6b8cfe661c | ||
| 
						 | 
					2fd64af737 | ||
| 
						 | 
					050cdf3783 | ||
| 
						 | 
					d73b3d77ea | ||
| 
						 | 
					acc024bcf9 | ||
| 
						 | 
					deb179ad38 | ||
| 
						 | 
					bfb11790a2 | ||
| 
						 | 
					af23110074 | ||
| 
						 | 
					b8e71609db | ||
| 
						 | 
					1876b3827f | ||
| 
						 | 
					38d3b8d087 | ||
| 
						 | 
					c5ef33cc78 | ||
| 
						 | 
					7427b209a7 | ||
| 
						 | 
					71397e5199 | ||
| 
						 | 
					1bc3b3befc | ||
| 
						 | 
					872e46a076 | ||
| 
						 | 
					ad386c0e22 | ||
| 
						 | 
					7e281f66c2 | ||
| 
						 | 
					7daafcbe1b | ||
| 
						 | 
					c5b223988a | ||
| 
						 | 
					6cc9ce573b | ||
| 
						 | 
					23192226dd | ||
| 
						 | 
					736444201b | ||
| 
						 | 
					785f49b005 | ||
| 
						 | 
					55dd1f4aa1 | ||
| 
						 | 
					6d0490d7d9 | ||
| 
						 | 
					06667455ae | ||
| 
						 | 
					3640960486 | ||
| 
						 | 
					4ad3dbf3e2 | ||
| 
						 | 
					10957deb1f | ||
| 
						 | 
					0a128db269 | ||
| 
						 | 
					6bb3b84377 | ||
| 
						 | 
					b8d2c551e0 | ||
| 
						 | 
					34e06351fb | ||
| 
						 | 
					e179404a9e | ||
| 
						 | 
					9c574995ac | ||
| 
						 | 
					3f35c603d2 | ||
| 
						 | 
					8e0688140e | ||
| 
						 | 
					5f81a204f2 | ||
| 
						 | 
					df3b70a533 | ||
| 
						 | 
					0c57c05a22 | ||
| 
						 | 
					c6be3be45a | ||
| 
						 | 
					9689db9605 | ||
| 
						 | 
					e4607735ff | ||
| 
						 | 
					389b7def0b | ||
| 
						 | 
					e35bd30ed3 | ||
| 
						 | 
					4b8f7e1fe9 | ||
| 
						 | 
					5cc4e2bb16 | ||
| 
						 | 
					e165a96689 | ||
| 
						 | 
					91a655a81e | ||
| 
						 | 
					612811e2c2 | ||
| 
						 | 
					11bd72915c | ||
| 
						 | 
					339221e793 | ||
| 
						 | 
					9be864b45e | ||
| 
						 | 
					3a453f5843 | ||
| 
						 | 
					28e0384b55 | ||
| 
						 | 
					dcd6c6f06f | ||
| 
						 | 
					28d26065e4 | ||
| 
						 | 
					300c8d06c4 | ||
| 
						 | 
					d2a1d11d16 | ||
| 
						 | 
					6ae717bbfe | ||
| 
						 | 
					21296b4224 | ||
| 
						 | 
					fafad302ba | ||
| 
						 | 
					0c94ad46b2 | ||
| 
						 | 
					d9bb40f934 | ||
| 
						 | 
					bbc16b6bc8 | ||
| 
						 | 
					16154e9d8b | ||
| 
						 | 
					61bd536d7b | ||
| 
						 | 
					02c798a8bc | ||
| 
						 | 
					c37a691b9b | ||
| 
						 | 
					23c68d17e8 | ||
| 
						 | 
					0a7f610ad3 | ||
| 
						 | 
					c9e8bd2e5d | ||
| 
						 | 
					a66d2ca1b9 | ||
| 
						 | 
					d38a0f0366 | ||
| 
						 | 
					29759de021 | ||
| 
						 | 
					264759ddf0 | ||
| 
						 | 
					91b0bd5b5e | ||
| 
						 | 
					a0e2cc7a3a | ||
| 
						 | 
					9e1eb41cbe | ||
| 
						 | 
					c37eb023b0 | ||
| 
						 | 
					840948ba4a | ||
| 
						 | 
					8fbdd88b24 | ||
| 
						 | 
					512d35d2e0 | ||
| 
						 | 
					0321e55a42 | ||
| 
						 | 
					a1ee9ad48b | ||
| 
						 | 
					1ad1fd28f1 | ||
| 
						 | 
					007f8b50b9 | ||
| 
						 | 
					6fe8a87cca | ||
| 
						 | 
					5f46679d94 | ||
| 
						 | 
					18a3f212f3 | ||
| 
						 | 
					67a3f5d87b | ||
| 
						 | 
					c88439ba2f | ||
| 
						 | 
					67e17d4016 | ||
| 
						 | 
					b61cf60faf | ||
| 
						 | 
					5503853445 | ||
| 
						 | 
					259726f5be | ||
| 
						 | 
					bec42d941b | ||
| 
						 | 
					dcbbaf08f9 | ||
| 
						 | 
					349355584a | ||
| 
						 | 
					7ce0b34774 | ||
| 
						 | 
					dd894758a4 | ||
| 
						 | 
					2aa1eb97fd | ||
| 
						 | 
					4c43ae7b2f | ||
| 
						 | 
					34e516e0be | ||
| 
						 | 
					7bd3427e76 | ||
| 
						 | 
					6853db693a | ||
| 
						 | 
					252ce1e467 | ||
| 
						 | 
					221c12bd61 | ||
| 
						 | 
					12edd68874 | ||
| 
						 | 
					f469753fb1 | ||
| 
						 | 
					c894ecd0e6 | ||
| 
						 | 
					2153bc536c | ||
| 
						 | 
					86bbac430c | ||
| 
						 | 
					16ad8a3c01 | ||
| 
						 | 
					b2af91c83e | ||
| 
						 | 
					4c0810f530 | ||
| 
						 | 
					f70130e21f | ||
| 
						 | 
					6bb7b01d00 | ||
| 
						 | 
					51e7aaa805 | ||
| 
						 | 
					54704e53b3 | ||
| 
						 | 
					cc46797576 | ||
| 
						 | 
					7f1fb6f75f | ||
| 
						 | 
					2c2a1d204b | ||
| 
						 | 
					581fafdcc9 | ||
| 
						 | 
					10358abbec | ||
| 
						 | 
					de1ffe67b1 | ||
| 
						 | 
					eb2b24d57c | ||
| 
						 | 
					825db8a56a | ||
| 
						 | 
					577a21fc5c | ||
| 
						 | 
					1b2841eef9 | ||
| 
						 | 
					845511e322 | ||
| 
						 | 
					96ab057853 | ||
| 
						 | 
					f85cf0a238 | ||
| 
						 | 
					84a2676a9c | ||
| 
						 | 
					466a1af902 | ||
| 
						 | 
					ebbe7e805f | ||
| 
						 | 
					c861ee025e | ||
| 
						 | 
					6d0823328d | ||
| 
						 | 
					60be14dc77 | ||
| 
						 | 
					2d627819d9 | ||
| 
						 | 
					cf575f83f5 | ||
| 
						 | 
					79935b2d4c | ||
| 
						 | 
					d1cceb2013 | ||
| 
						 | 
					f5da130d51 | ||
| 
						 | 
					8768304ec5 | ||
| 
						 | 
					f10a5dcdbe | ||
| 
						 | 
					a27428ebcd | ||
| 
						 | 
					d19acf17c2 | ||
| 
						 | 
					1a0bf861ee | ||
| 
						 | 
					db906ad4d0 | ||
| 
						 | 
					75ed0f2f99 | ||
| 
						 | 
					29ed1144d5 | ||
| 
						 | 
					fa445d4066 | ||
| 
						 | 
					d10be4ef2d | ||
| 
						 | 
					7f66d5b8e9 | ||
| 
						 | 
					0c8cd680c2 | ||
| 
						 | 
					a7ba1977b4 | ||
| 
						 | 
					a960b39235 | ||
| 
						 | 
					3febf059ec | ||
| 
						 | 
					20203f7bdb | ||
| 
						 | 
					a399d76d06 | ||
| 
						 | 
					1ca097c5a0 | ||
| 
						 | 
					e83ede245d | ||
| 
						 | 
					05ac275780 | ||
| 
						 | 
					966c0bc06c | ||
| 
						 | 
					abf136dd63 | ||
| 
						 | 
					b6309cfd16 | ||
| 
						 | 
					b69d5e0fa3 | ||
| 
						 | 
					5084cde6b9 | ||
| 
						 | 
					ca1cc7ed0d | ||
| 
						 | 
					808a31db2b | ||
| 
						 | 
					44ad75aead | ||
| 
						 | 
					0961c9d05e | ||
| 
						 | 
					56754b4d43 | ||
| 
						 | 
					661779ad4e | ||
| 
						 | 
					cf37ebb652 | ||
| 
						 | 
					82741e490b | ||
| 
						 | 
					5fed28808e | ||
| 
						 | 
					321c0cfc84 | ||
| 
						 | 
					eba7cedaa6 | ||
| 
						 | 
					71492d0467 | ||
| 
						 | 
					9630a58ea7 | ||
| 
						 | 
					89f6f16ba2 | ||
| 
						 | 
					2d646da97f | ||
| 
						 | 
					39b5460598 | ||
| 
						 | 
					636429ccfa | ||
| 
						 | 
					e5abb95f5c | ||
| 
						 | 
					c631554eb0 | ||
| 
						 | 
					db07eeb916 | ||
| 
						 | 
					3216a46e76 | ||
| 
						 | 
					ae6243b7bf | ||
| 
						 | 
					df002d7a67 | ||
| 
						 | 
					e8a0632108 | ||
| 
						 | 
					0a92c28bac | ||
| 
						 | 
					d419547463 | ||
| 
						 | 
					da392912b3 | ||
| 
						 | 
					9ebee02727 | ||
| 
						 | 
					0bdcfcc42f | ||
| 
						 | 
					43623a30bc | ||
| 
						 | 
					99e73054a9 | ||
| 
						 | 
					108233f3b8 | ||
| 
						 | 
					8f2a7c95b3 | ||
| 
						 | 
					7fdd525dac | ||
| 
						 | 
					7ed24137eb | ||
| 
						 | 
					07cd30eaca | ||
| 
						 | 
					df8cf66e02 | ||
| 
						 | 
					f067bcd877 | ||
| 
						 | 
					e11ef55dd8 | ||
| 
						 | 
					fa8bd30e83 | ||
| 
						 | 
					04a2ff7506 | ||
| 
						 | 
					bc68e20041 | ||
| 
						 | 
					786da25b9f | ||
| 
						 | 
					c3832d56c3 | ||
| 
						 | 
					79d1a2f458 | ||
| 
						 | 
					f16a674a39 | ||
| 
						 | 
					6e38a80efc | ||
| 
						 | 
					61fdee14c6 | ||
| 
						 | 
					117e4e468f | ||
| 
						 | 
					869ec113f4 | ||
| 
						 | 
					00e7b93011 | ||
| 
						 | 
					03e581870a | ||
| 
						 | 
					58869677bd | ||
| 
						 | 
					eb4ba4fc78 | ||
| 
						 | 
					b2f424a6f8 | ||
| 
						 | 
					05495af74f | 
							
								
								
									
										13
									
								
								.devcontainer/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								.devcontainer/Dockerfile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.148.1/containers/python-3/.devcontainer/base.Dockerfile
 | 
			
		||||
FROM mcr.microsoft.com/vscode/devcontainers/python:0-3.9
 | 
			
		||||
 | 
			
		||||
ENV \
 | 
			
		||||
  DEBIAN_FRONTEND=noninteractive \
 | 
			
		||||
  DEVCONTAINER=true \
 | 
			
		||||
  PATH=$PATH:./node_modules/.bin
 | 
			
		||||
 | 
			
		||||
# Install nvm
 | 
			
		||||
COPY .nvmrc /tmp/.nvmrc
 | 
			
		||||
RUN \
 | 
			
		||||
  su vscode -c \
 | 
			
		||||
    "source /usr/local/share/nvm/nvm.sh && nvm install $(cat /tmp/.nvmrc) 2>&1"
 | 
			
		||||
							
								
								
									
										31
									
								
								.devcontainer/devcontainer.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								.devcontainer/devcontainer.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Home Assistant Frontend",
 | 
			
		||||
  "build": {
 | 
			
		||||
    "dockerfile": "Dockerfile",
 | 
			
		||||
    "context": ".."
 | 
			
		||||
  },
 | 
			
		||||
  "appPort": 8123,
 | 
			
		||||
  "context": "..",
 | 
			
		||||
  "postCreateCommand": "script/bootstrap",
 | 
			
		||||
  "extensions": [
 | 
			
		||||
    "github.vscode-pull-request-github",
 | 
			
		||||
    "dbaeumer.vscode-eslint",
 | 
			
		||||
    "ms-vscode.vscode-typescript-tslint-plugin",
 | 
			
		||||
    "esbenp.prettier-vscode",
 | 
			
		||||
    "bierner.lit-html",
 | 
			
		||||
    "runem.lit-plugin",
 | 
			
		||||
    "ms-python.vscode-pylance"
 | 
			
		||||
  ],
 | 
			
		||||
  "settings": {
 | 
			
		||||
    "terminal.integrated.shell.linux": "/bin/bash",
 | 
			
		||||
    "files.eol": "\n",
 | 
			
		||||
    "editor.tabSize": 2,
 | 
			
		||||
    "editor.formatOnPaste": false,
 | 
			
		||||
    "editor.formatOnSave": true,
 | 
			
		||||
    "editor.formatOnType": true,
 | 
			
		||||
    "[typescript]": {
 | 
			
		||||
      "editor.defaultFormatter": "esbenp.prettier-vscode"
 | 
			
		||||
    },
 | 
			
		||||
    "files.trimTrailingWhitespace": true
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,4 +0,0 @@
 | 
			
		||||
node_modules
 | 
			
		||||
hass_frontend
 | 
			
		||||
hass_frontend_es5
 | 
			
		||||
.git
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
{
 | 
			
		||||
  "extends": [
 | 
			
		||||
    "plugin:@typescript-eslint/recommended",
 | 
			
		||||
    "airbnb-typescript/base",
 | 
			
		||||
    "plugin:@typescript-eslint/recommended",
 | 
			
		||||
    "plugin:wc/recommended",
 | 
			
		||||
    "plugin:lit/recommended",
 | 
			
		||||
    "prettier",
 | 
			
		||||
@@ -11,17 +11,12 @@
 | 
			
		||||
  "parserOptions": {
 | 
			
		||||
    "ecmaVersion": 2020,
 | 
			
		||||
    "ecmaFeatures": {
 | 
			
		||||
      "jsx": true,
 | 
			
		||||
      "modules": true
 | 
			
		||||
    },
 | 
			
		||||
    "sourceType": "module",
 | 
			
		||||
    "project": "./tsconfig.json"
 | 
			
		||||
  },
 | 
			
		||||
  "settings": {
 | 
			
		||||
    "react": {
 | 
			
		||||
      "pragma": "h",
 | 
			
		||||
      "version": "15.0"
 | 
			
		||||
    },
 | 
			
		||||
    "import/resolver": {
 | 
			
		||||
      "webpack": {
 | 
			
		||||
        "config": "./webpack.config.js"
 | 
			
		||||
@@ -50,16 +45,16 @@
 | 
			
		||||
    "func-names": 0,
 | 
			
		||||
    "prefer-arrow-callback": 0,
 | 
			
		||||
    "no-underscore-dangle": 0,
 | 
			
		||||
    "no-var": 0,
 | 
			
		||||
    "strict": 0,
 | 
			
		||||
    "prefer-spread": 0,
 | 
			
		||||
    "no-plusplus": 0,
 | 
			
		||||
    "no-bitwise": 0,
 | 
			
		||||
    "no-bitwise": 2,
 | 
			
		||||
    "comma-dangle": 0,
 | 
			
		||||
    "vars-on-top": 0,
 | 
			
		||||
    "no-continue": 0,
 | 
			
		||||
    "no-param-reassign": 0,
 | 
			
		||||
    "no-multi-assign": 0,
 | 
			
		||||
    "no-console": 2,
 | 
			
		||||
    "radix": 0,
 | 
			
		||||
    "no-alert": 0,
 | 
			
		||||
    "no-return-await": 0,
 | 
			
		||||
@@ -80,21 +75,17 @@
 | 
			
		||||
    "object-curly-newline": 0,
 | 
			
		||||
    "default-case": 0,
 | 
			
		||||
    "wc/no-self-class": 0,
 | 
			
		||||
    "no-shadow": 0,
 | 
			
		||||
    "@typescript-eslint/camelcase": 0,
 | 
			
		||||
    "@typescript-eslint/ban-ts-ignore": 0,
 | 
			
		||||
    "@typescript-eslint/ban-ts-comment": 0,
 | 
			
		||||
    "@typescript-eslint/no-use-before-define": 0,
 | 
			
		||||
    "@typescript-eslint/no-non-null-assertion": 0,
 | 
			
		||||
    "@typescript-eslint/no-explicit-any": 0,
 | 
			
		||||
    "@typescript-eslint/no-unused-vars": 0,
 | 
			
		||||
    "@typescript-eslint/explicit-function-return-type": 0
 | 
			
		||||
    "@typescript-eslint/explicit-function-return-type": 0,
 | 
			
		||||
    "@typescript-eslint/explicit-module-boundary-types": 0,
 | 
			
		||||
    "@typescript-eslint/no-shadow": ["error"]
 | 
			
		||||
  },
 | 
			
		||||
  "plugins": [
 | 
			
		||||
    "disable",
 | 
			
		||||
    "import",
 | 
			
		||||
    "react",
 | 
			
		||||
    "lit",
 | 
			
		||||
    "prettier",
 | 
			
		||||
    "@typescript-eslint"
 | 
			
		||||
  ],
 | 
			
		||||
  "plugins": ["disable", "import", "lit", "prettier", "@typescript-eslint"],
 | 
			
		||||
  "processor": "disable/disable"
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/ISSUE_TEMPLATE/BUG_REPORT.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ISSUE_TEMPLATE/BUG_REPORT.md
									
									
									
									
										vendored
									
									
								
							@@ -51,7 +51,7 @@ DO NOT DELETE ANY TEXT from this template! Otherwise, your issue may be closed w
 | 
			
		||||
<!--
 | 
			
		||||
  Provide details about the versions you are using, which helps us reproducing
 | 
			
		||||
  and finding the issue quicker. Version information is found in the
 | 
			
		||||
  Home Assistant frontend: Developer tools -> Info.
 | 
			
		||||
  Home Assistant frontend: Configuration -> Info.
 | 
			
		||||
 | 
			
		||||
  Browser version and operating system is important! Please try to replicate
 | 
			
		||||
  your issue in a different browser and be sure to include your findings.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										26
									
								
								.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md
									
									
									
									
										vendored
									
									
								
							@@ -1,26 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
name: Request a feature for the UI, Frontend or Lovelace
 | 
			
		||||
about: Request an new feature for the Home Assistant frontend.
 | 
			
		||||
labels: feature request
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
<!--
 | 
			
		||||
  DO NOT DELETE ANY TEXT from this template!
 | 
			
		||||
  Otherwise, your request may be closed without comment.
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
## The request
 | 
			
		||||
 | 
			
		||||
<!--
 | 
			
		||||
  Describe to our maintainers, the feature you would like to be added.
 | 
			
		||||
  Please be clear and concise and, if possible, provide a screenshot or mockup.
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
## The alternatives
 | 
			
		||||
 | 
			
		||||
<!--
 | 
			
		||||
  Are you currently using, or have you considered alternatives?
 | 
			
		||||
  If so, could you please describe those?
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
## Additional information
 | 
			
		||||
							
								
								
									
										3
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,5 +1,8 @@
 | 
			
		||||
blank_issues_enabled: false
 | 
			
		||||
contact_links:
 | 
			
		||||
  - name: Request a feature for the UI, Frontend or Lovelace
 | 
			
		||||
    url: https://github.com/home-assistant/frontend/discussions/category_choices
 | 
			
		||||
    about: Request an new feature for the Home Assistant frontend.
 | 
			
		||||
  - name: Report a bug that is NOT related to the UI, Frontend or Lovelace
 | 
			
		||||
    url: https://github.com/home-assistant/core/issues
 | 
			
		||||
    about: This is the issue tracker for our frontend. Please report other issues with the backend repository.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								.github/PULL_REQUEST_TEMPLATE.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/PULL_REQUEST_TEMPLATE.md
									
									
									
									
										vendored
									
									
								
							@@ -18,8 +18,8 @@
 | 
			
		||||
<!--
 | 
			
		||||
  Describe the big picture of your changes here to communicate to the
 | 
			
		||||
  maintainers why we should accept this pull request. If it fixes a bug
 | 
			
		||||
  or resolves a feature request, be sure to link to that issue in the
 | 
			
		||||
  additional information section.
 | 
			
		||||
  or resolves a feature request, be sure to link to that issue or discussion
 | 
			
		||||
  in the additional information section.
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
## Type of change
 | 
			
		||||
@@ -56,7 +56,7 @@
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
- This PR fixes or closes issue: fixes #
 | 
			
		||||
- This PR is related to issue:
 | 
			
		||||
- This PR is related to issue or discussion:
 | 
			
		||||
- Link to documentation pull request:
 | 
			
		||||
 | 
			
		||||
## Checklist
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										27
									
								
								.github/lock.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								.github/lock.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,27 +0,0 @@
 | 
			
		||||
# Configuration for Lock Threads - https://github.com/dessant/lock-threads
 | 
			
		||||
 | 
			
		||||
# Number of days of inactivity before a closed issue or pull request is locked
 | 
			
		||||
daysUntilLock: 1
 | 
			
		||||
 | 
			
		||||
# Skip issues and pull requests created before a given timestamp. Timestamp must
 | 
			
		||||
# follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable
 | 
			
		||||
skipCreatedBefore: 2020-01-01
 | 
			
		||||
 | 
			
		||||
# Issues and pull requests with these labels will be ignored. Set to `[]` to disable
 | 
			
		||||
exemptLabels: []
 | 
			
		||||
 | 
			
		||||
# Label to add before locking, such as `outdated`. Set to `false` to disable
 | 
			
		||||
lockLabel: false
 | 
			
		||||
 | 
			
		||||
# Comment to post before locking. Set to `false` to disable
 | 
			
		||||
lockComment: false
 | 
			
		||||
 | 
			
		||||
# Assign `resolved` as the reason for locking. Set to `false` to disable
 | 
			
		||||
setLockReason: false
 | 
			
		||||
 | 
			
		||||
# Limit to only `issues` or `pulls`
 | 
			
		||||
only: pulls
 | 
			
		||||
 | 
			
		||||
# Optionally, specify configuration settings just for `issues` or `pulls`
 | 
			
		||||
issues:
 | 
			
		||||
  daysUntilLock: 30
 | 
			
		||||
							
								
								
									
										56
									
								
								.github/stale.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										56
									
								
								.github/stale.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,56 +0,0 @@
 | 
			
		||||
# Configuration for probot-stale - https://github.com/probot/stale
 | 
			
		||||
 | 
			
		||||
# Number of days of inactivity before an Issue or Pull Request becomes stale
 | 
			
		||||
daysUntilStale: 90
 | 
			
		||||
 | 
			
		||||
# Number of days of inactivity before an Issue or Pull Request with the stale label is closed.
 | 
			
		||||
# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
 | 
			
		||||
daysUntilClose: 7
 | 
			
		||||
 | 
			
		||||
# Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled)
 | 
			
		||||
onlyLabels: []
 | 
			
		||||
 | 
			
		||||
# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
 | 
			
		||||
exemptLabels:
 | 
			
		||||
  - feature request
 | 
			
		||||
  - Help wanted
 | 
			
		||||
  - to do
 | 
			
		||||
 | 
			
		||||
# Set to true to ignore issues in a project (defaults to false)
 | 
			
		||||
exemptProjects: true
 | 
			
		||||
 | 
			
		||||
# Set to true to ignore issues in a milestone (defaults to false)
 | 
			
		||||
exemptMilestones: true
 | 
			
		||||
 | 
			
		||||
# Set to true to ignore issues with an assignee (defaults to false)
 | 
			
		||||
exemptAssignees: false
 | 
			
		||||
 | 
			
		||||
# Label to use when marking as stale
 | 
			
		||||
staleLabel: stale
 | 
			
		||||
 | 
			
		||||
# Comment to post when marking as stale. Set to `false` to disable
 | 
			
		||||
markComment: >
 | 
			
		||||
  There hasn't been any activity on this issue recently. Due to the high number
 | 
			
		||||
  of incoming GitHub notifications, we have to clean some of the old issues,
 | 
			
		||||
  as many of them have already been resolved with the latest updates.
 | 
			
		||||
 | 
			
		||||
  Please make sure to update to the latest Home Assistant version and check
 | 
			
		||||
  if that solves the issue. Let us know if that works for you by adding a
 | 
			
		||||
  comment 👍
 | 
			
		||||
 | 
			
		||||
  This issue now has been marked as stale and will be closed if no further
 | 
			
		||||
  activity occurs. Thank you for your contributions.
 | 
			
		||||
 | 
			
		||||
# Comment to post when removing the stale label.
 | 
			
		||||
# unmarkComment: >
 | 
			
		||||
#   Your comment here.
 | 
			
		||||
 | 
			
		||||
# Comment to post when closing a stale Issue or Pull Request.
 | 
			
		||||
# closeComment: >
 | 
			
		||||
#   Your comment here.
 | 
			
		||||
 | 
			
		||||
# Limit the number of actions per hour, from 1-30. Default is 30
 | 
			
		||||
limitPerRun: 30
 | 
			
		||||
 | 
			
		||||
# Limit to only `issues` or `pulls`
 | 
			
		||||
only: issues
 | 
			
		||||
							
								
								
									
										10
									
								
								.github/workflows/ci.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								.github/workflows/ci.yaml
									
									
									
									
										vendored
									
									
								
							@@ -34,10 +34,8 @@ jobs:
 | 
			
		||||
        run: yarn install
 | 
			
		||||
        env:
 | 
			
		||||
          CI: true
 | 
			
		||||
      - name: Build icons
 | 
			
		||||
        run: ./node_modules/.bin/gulp gen-icons-hassio gen-icons-mdi gen-icons-app
 | 
			
		||||
      - name: Build translations
 | 
			
		||||
        run: ./node_modules/.bin/gulp build-translations
 | 
			
		||||
      - name: Build resources
 | 
			
		||||
        run: ./node_modules/.bin/gulp gen-icons-json build-translations gather-gallery-demos
 | 
			
		||||
      - name: Run eslint
 | 
			
		||||
        run: ./node_modules/.bin/eslint '{**/src,src}/**/*.{js,ts,html}' --ignore-path .gitignore
 | 
			
		||||
      - name: Run tsc
 | 
			
		||||
@@ -94,7 +92,7 @@ jobs:
 | 
			
		||||
      - name: Build Application
 | 
			
		||||
        run: ./node_modules/.bin/gulp build-app
 | 
			
		||||
        env:
 | 
			
		||||
          TRAVIS: "true"
 | 
			
		||||
          IS_TEST: "true"
 | 
			
		||||
  supervisor:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    needs: [lint, test]
 | 
			
		||||
@@ -122,4 +120,4 @@ jobs:
 | 
			
		||||
      - name: Build Application
 | 
			
		||||
        run: ./node_modules/.bin/gulp build-hassio
 | 
			
		||||
        env:
 | 
			
		||||
          TRAVIS: "true"
 | 
			
		||||
          IS_TEST: "true"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										60
									
								
								.github/workflows/codeql-analysis.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								.github/workflows/codeql-analysis.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
name: "CodeQL"
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches: [dev, master]
 | 
			
		||||
  pull_request:
 | 
			
		||||
    # The branches below must be a subset of the branches above
 | 
			
		||||
    branches: [dev]
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  analyze:
 | 
			
		||||
    name: Analyze
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    strategy:
 | 
			
		||||
      fail-fast: false
 | 
			
		||||
      matrix:
 | 
			
		||||
        # Override automatic language detection by changing the below list
 | 
			
		||||
        # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python']
 | 
			
		||||
        language: ['javascript']
 | 
			
		||||
        # Learn more...
 | 
			
		||||
        # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
    - name: Checkout repository
 | 
			
		||||
      uses: actions/checkout@v2
 | 
			
		||||
      with:
 | 
			
		||||
        # We must fetch at least the immediate parents so that if this is
 | 
			
		||||
        # a pull request then we can checkout the head.
 | 
			
		||||
        fetch-depth: 2
 | 
			
		||||
 | 
			
		||||
    # If this run was triggered by a pull request event, then checkout
 | 
			
		||||
    # the head of the pull request instead of the merge commit.
 | 
			
		||||
    - run: git checkout HEAD^2
 | 
			
		||||
      if: ${{ github.event_name == 'pull_request' }}
 | 
			
		||||
 | 
			
		||||
    # Initializes the CodeQL tools for scanning.
 | 
			
		||||
    - name: Initialize CodeQL
 | 
			
		||||
      uses: github/codeql-action/init@v1
 | 
			
		||||
      with:
 | 
			
		||||
        languages: ${{ matrix.language }}
 | 
			
		||||
 | 
			
		||||
    # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).
 | 
			
		||||
    # If this step fails, then you should remove it and run the build manually (see below)
 | 
			
		||||
    - name: Autobuild
 | 
			
		||||
      uses: github/codeql-action/autobuild@v1
 | 
			
		||||
 | 
			
		||||
    # ℹ️ Command-line programs to run using the OS shell.
 | 
			
		||||
    # 📚 https://git.io/JvXDl
 | 
			
		||||
 | 
			
		||||
    # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
 | 
			
		||||
    #    and modify them (or add more) to build your code if your project
 | 
			
		||||
    #    uses a compiled language
 | 
			
		||||
 | 
			
		||||
    #- run: |
 | 
			
		||||
    #   make bootstrap
 | 
			
		||||
    #   make release
 | 
			
		||||
 | 
			
		||||
    - name: Perform CodeQL Analysis
 | 
			
		||||
      uses: github/codeql-action/analyze@v1
 | 
			
		||||
							
								
								
									
										20
									
								
								.github/workflows/lock.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								.github/workflows/lock.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
name: Lock
 | 
			
		||||
 | 
			
		||||
# yamllint disable-line rule:truthy
 | 
			
		||||
on:
 | 
			
		||||
  schedule:
 | 
			
		||||
    - cron: "0 * * * *"
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  lock:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: dessant/lock-threads@v2.0.1
 | 
			
		||||
        with:
 | 
			
		||||
          github-token: ${{ github.token }}
 | 
			
		||||
          issue-lock-inactive-days: "30"
 | 
			
		||||
          issue-exclude-created-before: "2020-10-01T00:00:00Z"
 | 
			
		||||
          issue-lock-reason: ""
 | 
			
		||||
          pr-lock-inactive-days: "1"
 | 
			
		||||
          pr-exclude-created-before: "2020-11-01T00:00:00Z"
 | 
			
		||||
          pr-lock-reason: ""
 | 
			
		||||
							
								
								
									
										14
									
								
								.github/workflows/release-drafter.yaml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								.github/workflows/release-drafter.yaml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
name: Release Drafter
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - dev
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  update_release_draft:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: release-drafter/release-drafter@v5
 | 
			
		||||
        env:
 | 
			
		||||
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
							
								
								
									
										42
									
								
								.github/workflows/stale.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								.github/workflows/stale.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
name: Stale
 | 
			
		||||
 | 
			
		||||
# yamllint disable-line rule:truthy
 | 
			
		||||
on:
 | 
			
		||||
  schedule:
 | 
			
		||||
    - cron: "0 * * * *"
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  stale:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: 90 days stale policy
 | 
			
		||||
        uses: actions/stale@v3.0.13
 | 
			
		||||
        with:
 | 
			
		||||
          repo-token: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
          days-before-stale: 90
 | 
			
		||||
          days-before-close: 7
 | 
			
		||||
          operations-per-run: 25
 | 
			
		||||
          remove-stale-when-updated: true
 | 
			
		||||
          stale-issue-label: "stale"
 | 
			
		||||
          exempt-issue-labels: "no-stale,Help%20wanted,help-wanted,feature-request,feature%20request"
 | 
			
		||||
          stale-issue-message: >
 | 
			
		||||
            There hasn't been any activity on this issue recently. Due to the
 | 
			
		||||
            high number of incoming GitHub notifications, we have to clean some
 | 
			
		||||
            of the old issues, as many of them have already been resolved with
 | 
			
		||||
            the latest updates.
 | 
			
		||||
 | 
			
		||||
            Please make sure to update to the latest Home Assistant version and
 | 
			
		||||
            check if that solves the issue. Let us know if that works for you by
 | 
			
		||||
            adding a comment 👍
 | 
			
		||||
 | 
			
		||||
            This issue has now been marked as stale and will be closed if no
 | 
			
		||||
            further activity occurs. Thank you for your contributions.
 | 
			
		||||
 | 
			
		||||
          stale-pr-label: "stale"
 | 
			
		||||
          exempt-pr-labels: "no-stale"
 | 
			
		||||
          stale-pr-message: >
 | 
			
		||||
            There hasn't been any activity on this pull request recently. This
 | 
			
		||||
            pull request has been automatically marked as stale because of that
 | 
			
		||||
            and will be closed if no further activity occurs within 7 days.
 | 
			
		||||
 | 
			
		||||
            Thank you for your contributions.
 | 
			
		||||
							
								
								
									
										6
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -5,7 +5,6 @@ npm-debug.log
 | 
			
		||||
.DS_Store
 | 
			
		||||
hass_frontend/*
 | 
			
		||||
.reify-cache
 | 
			
		||||
demo/hademo-icons.html
 | 
			
		||||
 | 
			
		||||
# Python stuff
 | 
			
		||||
*.py[cod]
 | 
			
		||||
@@ -24,6 +23,8 @@ dist
 | 
			
		||||
# vscode
 | 
			
		||||
.vscode/*
 | 
			
		||||
!.vscode/extensions.json
 | 
			
		||||
!.vscode/launch.json
 | 
			
		||||
!.vscode/tasks.json
 | 
			
		||||
 | 
			
		||||
# Cast dev settings
 | 
			
		||||
src/cast/dev_const.ts
 | 
			
		||||
@@ -34,3 +35,6 @@ yarn-error.log
 | 
			
		||||
 | 
			
		||||
#asdf
 | 
			
		||||
.tool-versions
 | 
			
		||||
 | 
			
		||||
# Home Assistant config
 | 
			
		||||
/config
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
jshint:
 | 
			
		||||
  enabled: false
 | 
			
		||||
 | 
			
		||||
eslint:
 | 
			
		||||
  enabled: true
 | 
			
		||||
  config_file: .eslintrc-hound.json
 | 
			
		||||
@@ -3,7 +3,6 @@ build-translations/*
 | 
			
		||||
translations/*
 | 
			
		||||
node_modules/*
 | 
			
		||||
hass_frontend/*
 | 
			
		||||
demo/hademo-icons.html
 | 
			
		||||
pip-selfcheck.json
 | 
			
		||||
 | 
			
		||||
# vscode
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										44
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
{
 | 
			
		||||
  // https://github.com/microsoft/vscode-js-debug/blob/master/OPTIONS.md
 | 
			
		||||
  "configurations": [
 | 
			
		||||
    {
 | 
			
		||||
      "name": "Debug Frontend",
 | 
			
		||||
      "request": "launch",
 | 
			
		||||
      "type": "pwa-chrome",
 | 
			
		||||
      "url": "http://localhost:8123/",
 | 
			
		||||
      "webRoot": "${workspaceFolder}/hass_frontend",
 | 
			
		||||
      "disableNetworkCache": true,
 | 
			
		||||
      "preLaunchTask": "Develop Frontend",
 | 
			
		||||
      "outFiles": [
 | 
			
		||||
        "${workspaceFolder}/hass_frontend/frontend_latest/*.js"
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "name": "Debug Gallery",
 | 
			
		||||
      "request": "launch",
 | 
			
		||||
      "type": "pwa-chrome",
 | 
			
		||||
      "url": "http://localhost:8100/",
 | 
			
		||||
      "webRoot": "${workspaceFolder}/gallery/dist",
 | 
			
		||||
      "disableNetworkCache": true,
 | 
			
		||||
      "preLaunchTask": "Develop Gallery"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "name": "Debug Demo",
 | 
			
		||||
      "request": "launch",
 | 
			
		||||
      "type": "pwa-chrome",
 | 
			
		||||
      "url": "http://localhost:8090/",
 | 
			
		||||
      "webRoot": "${workspaceFolder}/demo/dist",
 | 
			
		||||
      "disableNetworkCache": true,
 | 
			
		||||
      "preLaunchTask": "Develop Demo"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "name": "Debug Cast",
 | 
			
		||||
      "request": "launch",
 | 
			
		||||
      "type": "pwa-chrome",
 | 
			
		||||
      "url": "http://localhost:8080/",
 | 
			
		||||
      "webRoot": "${workspaceFolder}/cast/dist",
 | 
			
		||||
      "disableNetworkCache": true,
 | 
			
		||||
      "preLaunchTask": "Develop Cast"
 | 
			
		||||
    },
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										208
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										208
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,208 @@
 | 
			
		||||
{
 | 
			
		||||
  "version": "2.0.0",
 | 
			
		||||
  "tasks": [
 | 
			
		||||
    {
 | 
			
		||||
      "label": "Develop Frontend",
 | 
			
		||||
      "type": "gulp",
 | 
			
		||||
      "task": "develop-app",
 | 
			
		||||
      // Sync changes here to other tasks until issue resolved
 | 
			
		||||
      // https://github.com/Microsoft/vscode/issues/61497
 | 
			
		||||
      "problemMatcher": {
 | 
			
		||||
        "owner": "ha-build",
 | 
			
		||||
        "source": "ha-build",
 | 
			
		||||
        "fileLocation": "absolute",
 | 
			
		||||
        "severity": "error",
 | 
			
		||||
        "pattern": [
 | 
			
		||||
          {
 | 
			
		||||
            "regexp": "(SyntaxError): (.+): (.+) \\((\\d+):(\\d+)\\)",
 | 
			
		||||
            "severity": 1,
 | 
			
		||||
            "file": 2,
 | 
			
		||||
            "message": 3,
 | 
			
		||||
            "line": 4,
 | 
			
		||||
            "column": 5
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "background": {
 | 
			
		||||
          "activeOnStart": true,
 | 
			
		||||
          "beginsPattern": "Changes detected. Starting compilation",
 | 
			
		||||
          "endsPattern": "Build done @"
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "isBackground": true,
 | 
			
		||||
      "group": {
 | 
			
		||||
        "kind": "build",
 | 
			
		||||
        "isDefault": true
 | 
			
		||||
      },
 | 
			
		||||
      "runOptions": {
 | 
			
		||||
        "instanceLimit": 1
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "label": "Develop Supervisor panel",
 | 
			
		||||
      "type": "gulp",
 | 
			
		||||
      "task": "develop-hassio",
 | 
			
		||||
      "problemMatcher": {
 | 
			
		||||
        "owner": "ha-build",
 | 
			
		||||
        "source": "ha-build",
 | 
			
		||||
        "fileLocation": "absolute",
 | 
			
		||||
        "severity": "error",
 | 
			
		||||
        "pattern": [
 | 
			
		||||
          {
 | 
			
		||||
            "regexp": "(SyntaxError): (.+): (.+) \\((\\d+):(\\d+)\\)",
 | 
			
		||||
            "severity": 1,
 | 
			
		||||
            "file": 2,
 | 
			
		||||
            "message": 3,
 | 
			
		||||
            "line": 4,
 | 
			
		||||
            "column": 5
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "background": {
 | 
			
		||||
          "activeOnStart": true,
 | 
			
		||||
          "beginsPattern": "Changes detected. Starting compilation",
 | 
			
		||||
          "endsPattern": "Build done @"
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "isBackground": true,
 | 
			
		||||
      "group": "build",
 | 
			
		||||
      "runOptions": {
 | 
			
		||||
        "instanceLimit": 1
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "label": "Develop Gallery",
 | 
			
		||||
      "type": "gulp",
 | 
			
		||||
      "task": "develop-gallery",
 | 
			
		||||
      "problemMatcher": {
 | 
			
		||||
        "owner": "ha-build",
 | 
			
		||||
        "source": "ha-build",
 | 
			
		||||
        "fileLocation": "absolute",
 | 
			
		||||
        "severity": "error",
 | 
			
		||||
        "pattern": [
 | 
			
		||||
          {
 | 
			
		||||
            "regexp": "(SyntaxError): (.+): (.+) \\((\\d+):(\\d+)\\)",
 | 
			
		||||
            "severity": 1,
 | 
			
		||||
            "file": 2,
 | 
			
		||||
            "message": 3,
 | 
			
		||||
            "line": 4,
 | 
			
		||||
            "column": 5
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "background": {
 | 
			
		||||
          "activeOnStart": true,
 | 
			
		||||
          "beginsPattern": "Changes detected. Starting compilation",
 | 
			
		||||
          "endsPattern": "Build done @"
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      "isBackground": true,
 | 
			
		||||
      "group": "build",
 | 
			
		||||
      "runOptions": {
 | 
			
		||||
        "instanceLimit": 1
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "label": "Develop Demo",
 | 
			
		||||
      "type": "gulp",
 | 
			
		||||
      "task": "develop-demo",
 | 
			
		||||
      "problemMatcher": {
 | 
			
		||||
        "owner": "ha-build",
 | 
			
		||||
        "source": "ha-build",
 | 
			
		||||
        "fileLocation": "absolute",
 | 
			
		||||
        "severity": "error",
 | 
			
		||||
        "pattern": [
 | 
			
		||||
          {
 | 
			
		||||
            "regexp": "(SyntaxError): (.+): (.+) \\((\\d+):(\\d+)\\)",
 | 
			
		||||
            "severity": 1,
 | 
			
		||||
            "file": 2,
 | 
			
		||||
            "message": 3,
 | 
			
		||||
            "line": 4,
 | 
			
		||||
            "column": 5
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "background": {
 | 
			
		||||
          "activeOnStart": true,
 | 
			
		||||
          "beginsPattern": "Changes detected. Starting compilation",
 | 
			
		||||
          "endsPattern": "Build done @"
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      "isBackground": true,
 | 
			
		||||
      "group": "build",
 | 
			
		||||
      "runOptions": {
 | 
			
		||||
        "instanceLimit": 1
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "label": "Develop Cast",
 | 
			
		||||
      "type": "gulp",
 | 
			
		||||
      "task": "develop-cast",
 | 
			
		||||
      "problemMatcher": {
 | 
			
		||||
        "owner": "ha-build",
 | 
			
		||||
        "source": "ha-build",
 | 
			
		||||
        "fileLocation": "absolute",
 | 
			
		||||
        "severity": "error",
 | 
			
		||||
        "pattern": [
 | 
			
		||||
          {
 | 
			
		||||
            "regexp": "(SyntaxError): (.+): (.+) \\((\\d+):(\\d+)\\)",
 | 
			
		||||
            "severity": 1,
 | 
			
		||||
            "file": 2,
 | 
			
		||||
            "message": 3,
 | 
			
		||||
            "line": 4,
 | 
			
		||||
            "column": 5
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "background": {
 | 
			
		||||
          "activeOnStart": true,
 | 
			
		||||
          "beginsPattern": "Changes detected. Starting compilation",
 | 
			
		||||
          "endsPattern": "Build done @"
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      "isBackground": true,
 | 
			
		||||
      "group": "build",
 | 
			
		||||
      "runOptions": {
 | 
			
		||||
        "instanceLimit": 1
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "label": "Run HA Core in devcontainer",
 | 
			
		||||
      "type": "shell",
 | 
			
		||||
      "command": "script/core",
 | 
			
		||||
      "isBackground": true,
 | 
			
		||||
      "group": {
 | 
			
		||||
        "kind": "build",
 | 
			
		||||
        "isDefault": true
 | 
			
		||||
      },
 | 
			
		||||
      "problemMatcher": [],
 | 
			
		||||
      "runOptions": {
 | 
			
		||||
        "instanceLimit": 1
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "label": "Run HA Core for Supervisor in devcontainer",
 | 
			
		||||
      "type": "shell",
 | 
			
		||||
      "command": "HASSIO=${input:supervisorHost} HASSIO_TOKEN=${input:supervisorToken} script/core",
 | 
			
		||||
      "isBackground": true,
 | 
			
		||||
      "group": {
 | 
			
		||||
        "kind": "build",
 | 
			
		||||
        "isDefault": true
 | 
			
		||||
      },
 | 
			
		||||
      "problemMatcher": [],
 | 
			
		||||
      "runOptions": {
 | 
			
		||||
        "instanceLimit": 1
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "inputs": [
 | 
			
		||||
    {
 | 
			
		||||
      "id": "supervisorHost",
 | 
			
		||||
      "type": "promptString",
 | 
			
		||||
      "description": "The IP of the Supervisor host running the Remote API proxy add-on"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": "supervisorToken",
 | 
			
		||||
      "type": "promptString",
 | 
			
		||||
      "description": "The token for the Remote API proxy add-on"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -2,79 +2,139 @@
 | 
			
		||||
 | 
			
		||||
## Our Pledge
 | 
			
		||||
 | 
			
		||||
In the interest of fostering an open and welcoming environment, we as
 | 
			
		||||
contributors and maintainers pledge to making participation in our project and
 | 
			
		||||
our community a harassment-free experience for everyone, regardless of age, body
 | 
			
		||||
size, disability, ethnicity, gender identity and expression, level of experience,
 | 
			
		||||
nationality, personal appearance, race, religion, or sexual identity and
 | 
			
		||||
orientation.
 | 
			
		||||
We as members, contributors, and leaders pledge to make participation in our
 | 
			
		||||
community a harassment-free experience for everyone, regardless of age, body
 | 
			
		||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
 | 
			
		||||
identity and expression, level of experience, education, socio-economic status,
 | 
			
		||||
nationality, personal appearance, race, religion, or sexual identity
 | 
			
		||||
and orientation.
 | 
			
		||||
 | 
			
		||||
We pledge to act and interact in ways that contribute to an open, welcoming,
 | 
			
		||||
diverse, inclusive, and healthy community.
 | 
			
		||||
 | 
			
		||||
## Our Standards
 | 
			
		||||
 | 
			
		||||
Examples of behavior that contributes to creating a positive environment
 | 
			
		||||
include:
 | 
			
		||||
Examples of behavior that contributes to a positive environment for our
 | 
			
		||||
community include:
 | 
			
		||||
 | 
			
		||||
* Using welcoming and inclusive language
 | 
			
		||||
* Being respectful of differing viewpoints and experiences
 | 
			
		||||
* Gracefully accepting constructive criticism
 | 
			
		||||
* Focusing on what is best for the community
 | 
			
		||||
* Showing empathy towards other community members
 | 
			
		||||
* Demonstrating empathy and kindness toward other people
 | 
			
		||||
* Being respectful of differing opinions, viewpoints, and experiences
 | 
			
		||||
* Giving and gracefully accepting constructive feedback
 | 
			
		||||
* Accepting responsibility and apologizing to those affected by our mistakes,
 | 
			
		||||
  and learning from the experience
 | 
			
		||||
* Focusing on what is best not just for us as individuals, but for the
 | 
			
		||||
  overall community
 | 
			
		||||
 | 
			
		||||
Examples of unacceptable behavior by participants include:
 | 
			
		||||
Examples of unacceptable behavior include:
 | 
			
		||||
 | 
			
		||||
* The use of sexualized language or imagery and unwelcome sexual attention or
 | 
			
		||||
advances
 | 
			
		||||
* Trolling, insulting/derogatory comments, and personal or political attacks
 | 
			
		||||
* The use of sexualized language or imagery, and sexual attention or
 | 
			
		||||
  advances of any kind
 | 
			
		||||
* Trolling, insulting or derogatory comments, and personal or political attacks
 | 
			
		||||
* Public or private harassment
 | 
			
		||||
* Publishing others' private information, such as a physical or electronic
 | 
			
		||||
  address, without explicit permission
 | 
			
		||||
* Publishing others' private information, such as a physical or email
 | 
			
		||||
  address, without their explicit permission
 | 
			
		||||
* Other conduct which could reasonably be considered inappropriate in a
 | 
			
		||||
  professional setting
 | 
			
		||||
 | 
			
		||||
## Our Responsibilities
 | 
			
		||||
## Enforcement Responsibilities
 | 
			
		||||
 | 
			
		||||
Project maintainers are responsible for clarifying the standards of acceptable
 | 
			
		||||
behavior and are expected to take appropriate and fair corrective action in
 | 
			
		||||
response to any instances of unacceptable behavior.
 | 
			
		||||
Community leaders are responsible for clarifying and enforcing our standards of
 | 
			
		||||
acceptable behavior and will take appropriate and fair corrective action in
 | 
			
		||||
response to any behavior that they deem inappropriate, threatening, offensive,
 | 
			
		||||
or harmful.
 | 
			
		||||
 | 
			
		||||
Project maintainers have the right and responsibility to remove, edit, or
 | 
			
		||||
reject comments, commits, code, wiki edits, issues, and other contributions
 | 
			
		||||
that are not aligned to this Code of Conduct, or to ban temporarily or
 | 
			
		||||
permanently any contributor for other behaviors that they deem inappropriate,
 | 
			
		||||
threatening, offensive, or harmful.
 | 
			
		||||
Community leaders have the right and responsibility to remove, edit, or reject
 | 
			
		||||
comments, commits, code, wiki edits, issues, and other contributions that are
 | 
			
		||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
 | 
			
		||||
decisions when appropriate.
 | 
			
		||||
 | 
			
		||||
## Scope
 | 
			
		||||
 | 
			
		||||
This Code of Conduct applies both within project spaces and in public spaces
 | 
			
		||||
when an individual is representing the project or its community. Examples of
 | 
			
		||||
representing a project or community include using an official project e-mail
 | 
			
		||||
address, posting via an official social media account, or acting as an appointed
 | 
			
		||||
representative at an online or offline event. Representation of a project may be
 | 
			
		||||
further defined and clarified by project maintainers.
 | 
			
		||||
This Code of Conduct applies within all community spaces, and also applies when
 | 
			
		||||
an individual is officially representing the community in public spaces.
 | 
			
		||||
Examples of representing our community include using an official e-mail address,
 | 
			
		||||
posting via an official social media account, or acting as an appointed
 | 
			
		||||
representative at an online or offline event.
 | 
			
		||||
 | 
			
		||||
## Enforcement
 | 
			
		||||
 | 
			
		||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
 | 
			
		||||
reported by contacting the project team at [safety@home-assistant.io][email]. All
 | 
			
		||||
complaints will be reviewed and investigated and will result in a response that
 | 
			
		||||
is deemed necessary and appropriate to the circumstances. The project team is
 | 
			
		||||
obligated to maintain confidentiality with regard to the reporter of an incident.
 | 
			
		||||
Further details of specific enforcement policies may be posted separately.
 | 
			
		||||
reported to the community leaders responsible for enforcement at
 | 
			
		||||
[safety@home-assistant.io][email] or by using the report/flag feature of
 | 
			
		||||
the medium used. All complaints will be reviewed and investigated promptly and
 | 
			
		||||
fairly.
 | 
			
		||||
 | 
			
		||||
Project maintainers who do not follow or enforce the Code of Conduct in good
 | 
			
		||||
faith may face temporary or permanent repercussions as determined by other
 | 
			
		||||
members of the project's leadership.
 | 
			
		||||
All community leaders are obligated to respect the privacy and security of the
 | 
			
		||||
reporter of any incident.
 | 
			
		||||
 | 
			
		||||
## Enforcement Guidelines
 | 
			
		||||
 | 
			
		||||
Community leaders will follow these Community Impact Guidelines in determining
 | 
			
		||||
the consequences for any action they deem in violation of this Code of Conduct:
 | 
			
		||||
 | 
			
		||||
### 1. Correction
 | 
			
		||||
 | 
			
		||||
**Community Impact**: Use of inappropriate language or other behavior deemed
 | 
			
		||||
unprofessional or unwelcome in the community.
 | 
			
		||||
 | 
			
		||||
**Consequence**: A private, written warning from community leaders, providing
 | 
			
		||||
clarity around the nature of the violation and an explanation of why the
 | 
			
		||||
behavior was inappropriate. A public apology may be requested.
 | 
			
		||||
 | 
			
		||||
### 2. Warning
 | 
			
		||||
 | 
			
		||||
**Community Impact**: A violation through a single incident or series
 | 
			
		||||
of actions.
 | 
			
		||||
 | 
			
		||||
**Consequence**: A warning with consequences for continued behavior. No
 | 
			
		||||
interaction with the people involved, including unsolicited interaction with
 | 
			
		||||
those enforcing the Code of Conduct, for a specified period of time. This
 | 
			
		||||
includes avoiding interactions in community spaces as well as external channels
 | 
			
		||||
like social media. Violating these terms may lead to a temporary or
 | 
			
		||||
permanent ban.
 | 
			
		||||
 | 
			
		||||
### 3. Temporary Ban
 | 
			
		||||
 | 
			
		||||
**Community Impact**: A serious violation of community standards, including
 | 
			
		||||
sustained inappropriate behavior.
 | 
			
		||||
 | 
			
		||||
**Consequence**: A temporary ban from any sort of interaction or public
 | 
			
		||||
communication with the community for a specified period of time. No public or
 | 
			
		||||
private interaction with the people involved, including unsolicited interaction
 | 
			
		||||
with those enforcing the Code of Conduct, is allowed during this period.
 | 
			
		||||
Violating these terms may lead to a permanent ban.
 | 
			
		||||
 | 
			
		||||
### 4. Permanent Ban
 | 
			
		||||
 | 
			
		||||
**Community Impact**: Demonstrating a pattern of violation of community
 | 
			
		||||
standards, including sustained inappropriate behavior,  harassment of an
 | 
			
		||||
individual, or aggression toward or disparagement of classes of individuals.
 | 
			
		||||
 | 
			
		||||
**Consequence**: A permanent ban from any sort of public interaction within
 | 
			
		||||
the community.
 | 
			
		||||
 | 
			
		||||
## Attribution
 | 
			
		||||
 | 
			
		||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
 | 
			
		||||
available [here][version].
 | 
			
		||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
 | 
			
		||||
version 2.0, available [here][version].
 | 
			
		||||
 | 
			
		||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct
 | 
			
		||||
enforcement ladder][mozilla].
 | 
			
		||||
 | 
			
		||||
## Adoption
 | 
			
		||||
 | 
			
		||||
This Code of Conduct was first adopted January 21st, 2017 and announced in [this][coc-blog] blog post.
 | 
			
		||||
This Code of Conduct was first adopted January 21st, 2017 and announced in
 | 
			
		||||
[this][coc-blog] blog post and has been updated on May 25th, 2020 to version
 | 
			
		||||
2.0 of the [Contributor Covenant][homepage] as announced in [this][coc2-blog]
 | 
			
		||||
blog post.
 | 
			
		||||
 | 
			
		||||
[homepage]: http://contributor-covenant.org
 | 
			
		||||
[version]: http://contributor-covenant.org/version/1/4/
 | 
			
		||||
For answers to common questions about this code of conduct, see the FAQ at
 | 
			
		||||
<https://www.contributor-covenant.org/faq>. Translations are available at
 | 
			
		||||
<https://www.contributor-covenant.org/translations>.
 | 
			
		||||
 | 
			
		||||
[coc-blog]: /blog/2017/01/21/home-assistant-governance/
 | 
			
		||||
[coc2-blog]: /blog/2020/05/25/code-of-conduct-updated/
 | 
			
		||||
[email]: mailto:safety@home-assistant.io
 | 
			
		||||
[coc-blog]: https://home-assistant.io/blog/2017/01/21/home-assistant-governance/
 | 
			
		||||
[homepage]: http://contributor-covenant.org
 | 
			
		||||
[mozilla]: https://github.com/mozilla/diversity
 | 
			
		||||
[version]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										31
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								Dockerfile
									
									
									
									
									
								
							@@ -1,31 +0,0 @@
 | 
			
		||||
FROM node:8.11.1-alpine
 | 
			
		||||
 | 
			
		||||
# install yarn
 | 
			
		||||
ENV PATH /root/.yarn/bin:$PATH
 | 
			
		||||
 | 
			
		||||
## Install/force base tools
 | 
			
		||||
RUN apk update \
 | 
			
		||||
  && apk add make g++ curl bash binutils tar git python2 python3 \
 | 
			
		||||
  && rm -rf /var/cache/apk/* \
 | 
			
		||||
  && /bin/bash \
 | 
			
		||||
  && touch ~/.bashrc
 | 
			
		||||
 | 
			
		||||
## Install yarn
 | 
			
		||||
RUN curl -o- -L https://yarnpkg.com/install.sh | bash
 | 
			
		||||
 | 
			
		||||
## Setup the project
 | 
			
		||||
RUN mkdir -p /frontend
 | 
			
		||||
 | 
			
		||||
WORKDIR /frontend
 | 
			
		||||
 | 
			
		||||
COPY package.json yarn.lock ./
 | 
			
		||||
 | 
			
		||||
RUN yarn install --frozen-lockfile
 | 
			
		||||
 | 
			
		||||
COPY . .
 | 
			
		||||
 | 
			
		||||
COPY script/docker_entrypoint.sh /usr/bin/docker_entrypoint.sh
 | 
			
		||||
 | 
			
		||||
RUN chmod +x /usr/bin/docker_entrypoint.sh
 | 
			
		||||
 | 
			
		||||
CMD [ "docker_entrypoint.sh" ]
 | 
			
		||||
							
								
								
									
										15
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								README.md
									
									
									
									
									
								
							@@ -6,12 +6,12 @@ This is the repository for the official [Home Assistant](https://home-assistant.
 | 
			
		||||
 | 
			
		||||
- [View demo of Home Assistant](https://demo.home-assistant.io/)
 | 
			
		||||
- [More information about Home Assistant](https://home-assistant.io)
 | 
			
		||||
- [Frontend development instructions](https://developers.home-assistant.io/docs/en/frontend_index.html)
 | 
			
		||||
- [Frontend development instructions](https://developers.home-assistant.io/docs/frontend/development/)
 | 
			
		||||
 | 
			
		||||
## Development
 | 
			
		||||
 | 
			
		||||
- Initial setup: `script/setup`
 | 
			
		||||
- Development: [Instructions](https://developers.home-assistant.io/docs/en/frontend_development.html)
 | 
			
		||||
- Development: [Instructions](https://developers.home-assistant.io/docs/frontend/development/)
 | 
			
		||||
- Production build: `script/build_frontend`
 | 
			
		||||
- Gallery: `cd gallery && script/develop_gallery`
 | 
			
		||||
- Hass.io: [Instructions](https://developers.home-assistant.io/docs/en/hassio_hass.html)
 | 
			
		||||
@@ -22,17 +22,8 @@ This is the repository for the official [Home Assistant](https://home-assistant.
 | 
			
		||||
 | 
			
		||||
A complete guide can be found at the following [link](https://www.home-assistant.io/developers/frontend/). It describes a short guide for the build of project.
 | 
			
		||||
 | 
			
		||||
### Docker environment
 | 
			
		||||
 | 
			
		||||
It is possible to compile the project and/or run commands in the development environment having only the [Docker](https://www.docker.com) pre-installed in the system. On the root of project you can do:
 | 
			
		||||
 | 
			
		||||
- `sh ./script/docker_run.sh build` Build all the project with one command
 | 
			
		||||
- `sh ./script/docker_run.sh bash` Open an interactive shell (the same environment generated by the _classic environment_) where you can run commands. This bash work on your project directory and any change on your file is automatically present within your build bash.
 | 
			
		||||
 | 
			
		||||
**Note**: if you have installed `npm` in addition to the `docker`, you can use the commands `npm run docker_build` and `npm run bash` to get a full build or bash as explained above
 | 
			
		||||
 | 
			
		||||
## License
 | 
			
		||||
 | 
			
		||||
Home Assistant is open-source and Apache 2 licensed. Feel free to browse the repository, learn and reuse parts in your own projects.
 | 
			
		||||
 | 
			
		||||
We use [BrowserStack](https://www.browserstack.com) to test Home Assistant on a large variation of devices.
 | 
			
		||||
We use [BrowserStack](https://www.browserstack.com) to test Home Assistant on a large variety of devices.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										39
									
								
								build-scripts/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								build-scripts/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
# Bundling Home Assistant Frontend
 | 
			
		||||
 | 
			
		||||
The Home Assistant build pipeline contains various steps to prepare a build.
 | 
			
		||||
 | 
			
		||||
- Generating icon files to be included
 | 
			
		||||
- Generating translation files to be included
 | 
			
		||||
- Converting TypeScript, CSS and JSON files to JavaScript
 | 
			
		||||
- Bundling
 | 
			
		||||
- Minifying the files
 | 
			
		||||
- Generating the HTML entrypoint files
 | 
			
		||||
- Generating the service worker
 | 
			
		||||
- Compressing the files
 | 
			
		||||
 | 
			
		||||
## Converting files
 | 
			
		||||
 | 
			
		||||
Currently in Home Assistant we use a bundler to convert TypeScript, CSS and JSON files to JavaScript files that the browser understands.
 | 
			
		||||
 | 
			
		||||
We currently rely on Webpack but also have experimental Rollup support. Both of these programs bundle the converted files in both production and development.
 | 
			
		||||
 | 
			
		||||
For development, bundling is optional. We just want to get the right files in the browser.
 | 
			
		||||
 | 
			
		||||
Responsibilities of the converter during development:
 | 
			
		||||
 | 
			
		||||
- Convert TypeScript to JavaScript
 | 
			
		||||
- Convert CSS to JavaScript that sets the content as the default export
 | 
			
		||||
- Convert JSON to JavaScript that sets the content as the default export
 | 
			
		||||
- Make sure import, dynamic import and web worker references work
 | 
			
		||||
  - Add extensions where missing
 | 
			
		||||
  - Resolve absolute package imports
 | 
			
		||||
- Filter out specific imports/packages
 | 
			
		||||
- Replace constants with values
 | 
			
		||||
 | 
			
		||||
In production, the following responsibilities are added:
 | 
			
		||||
 | 
			
		||||
- Minify HTML
 | 
			
		||||
- Bundle multiple imports so that the browser can fetch less files
 | 
			
		||||
- Generate a second version that is ES5 compatible
 | 
			
		||||
 | 
			
		||||
Configuration for all these steps are specified in [bundle.js](bundle.js).
 | 
			
		||||
@@ -1,50 +0,0 @@
 | 
			
		||||
module.exports.babelLoaderConfig = ({ latestBuild }) => {
 | 
			
		||||
  if (latestBuild === undefined) {
 | 
			
		||||
    throw Error("latestBuild not defined for babel loader config");
 | 
			
		||||
  }
 | 
			
		||||
  return {
 | 
			
		||||
    test: /\.m?js$|\.tsx?$/,
 | 
			
		||||
    use: {
 | 
			
		||||
      loader: "babel-loader",
 | 
			
		||||
      options: {
 | 
			
		||||
        presets: [
 | 
			
		||||
          !latestBuild && [
 | 
			
		||||
            require("@babel/preset-env").default,
 | 
			
		||||
            { modules: false },
 | 
			
		||||
          ],
 | 
			
		||||
          [
 | 
			
		||||
            require("@babel/preset-typescript").default,
 | 
			
		||||
            {
 | 
			
		||||
              jsxPragma: "h",
 | 
			
		||||
            },
 | 
			
		||||
          ],
 | 
			
		||||
        ].filter(Boolean),
 | 
			
		||||
        plugins: [
 | 
			
		||||
          // Part of ES2018. Converts {...a, b: 2} to Object.assign({}, a, {b: 2})
 | 
			
		||||
          [
 | 
			
		||||
            "@babel/plugin-proposal-object-rest-spread",
 | 
			
		||||
            { loose: true, useBuiltIns: true },
 | 
			
		||||
          ],
 | 
			
		||||
          // Only support the syntax, Webpack will handle it.
 | 
			
		||||
          "@babel/syntax-dynamic-import",
 | 
			
		||||
          [
 | 
			
		||||
            "@babel/transform-react-jsx",
 | 
			
		||||
            {
 | 
			
		||||
              pragma: "h",
 | 
			
		||||
            },
 | 
			
		||||
          ],
 | 
			
		||||
          "@babel/plugin-proposal-optional-chaining",
 | 
			
		||||
          "@babel/plugin-proposal-nullish-coalescing-operator",
 | 
			
		||||
          [
 | 
			
		||||
            require("@babel/plugin-proposal-decorators").default,
 | 
			
		||||
            { decoratorsBeforeExport: true },
 | 
			
		||||
          ],
 | 
			
		||||
          [
 | 
			
		||||
            require("@babel/plugin-proposal-class-properties").default,
 | 
			
		||||
            { loose: true },
 | 
			
		||||
          ],
 | 
			
		||||
        ],
 | 
			
		||||
      },
 | 
			
		||||
    },
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										203
									
								
								build-scripts/bundle.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										203
									
								
								build-scripts/bundle.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,203 @@
 | 
			
		||||
const path = require("path");
 | 
			
		||||
const env = require("./env.js");
 | 
			
		||||
const paths = require("./paths.js");
 | 
			
		||||
 | 
			
		||||
// Files from NPM Packages that should not be imported
 | 
			
		||||
module.exports.ignorePackages = ({ latestBuild }) => [
 | 
			
		||||
  // Bloats bundle and it's not used.
 | 
			
		||||
  path.resolve(require.resolve("moment"), "../locale"),
 | 
			
		||||
  // Part of yaml.js and only used for !!js functions that we don't use
 | 
			
		||||
  require.resolve("esprima"),
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
// Files from NPM packages that we should replace with empty file
 | 
			
		||||
module.exports.emptyPackages = ({ latestBuild }) =>
 | 
			
		||||
  [
 | 
			
		||||
    // Contains all color definitions for all material color sets.
 | 
			
		||||
    // We don't use it
 | 
			
		||||
    require.resolve("@polymer/paper-styles/color.js"),
 | 
			
		||||
    require.resolve("@polymer/paper-styles/default-theme.js"),
 | 
			
		||||
    // Loads stuff from a CDN
 | 
			
		||||
    require.resolve("@polymer/font-roboto/roboto.js"),
 | 
			
		||||
    require.resolve("@vaadin/vaadin-material-styles/font-roboto.js"),
 | 
			
		||||
    // Compatibility not needed for latest builds
 | 
			
		||||
    latestBuild &&
 | 
			
		||||
      // wrapped in require.resolve so it blows up if file no longer exists
 | 
			
		||||
      require.resolve(
 | 
			
		||||
        path.resolve(paths.polymer_dir, "src/resources/compatibility.ts")
 | 
			
		||||
      ),
 | 
			
		||||
    // This polyfill is loaded in workers to support ES5, filter it out.
 | 
			
		||||
    latestBuild && require.resolve("proxy-polyfill/src/index.js"),
 | 
			
		||||
  ].filter(Boolean);
 | 
			
		||||
 | 
			
		||||
module.exports.definedVars = ({ isProdBuild, latestBuild, defineOverlay }) => ({
 | 
			
		||||
  __DEV__: !isProdBuild,
 | 
			
		||||
  __BUILD__: JSON.stringify(latestBuild ? "latest" : "es5"),
 | 
			
		||||
  __VERSION__: JSON.stringify(env.version()),
 | 
			
		||||
  __DEMO__: false,
 | 
			
		||||
  __BACKWARDS_COMPAT__: false,
 | 
			
		||||
  __STATIC_PATH__: "/static/",
 | 
			
		||||
  "process.env.NODE_ENV": JSON.stringify(
 | 
			
		||||
    isProdBuild ? "production" : "development"
 | 
			
		||||
  ),
 | 
			
		||||
  ...defineOverlay,
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
module.exports.terserOptions = (latestBuild) => ({
 | 
			
		||||
  safari10: !latestBuild,
 | 
			
		||||
  ecma: latestBuild ? undefined : 5,
 | 
			
		||||
  output: { comments: false },
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
module.exports.babelOptions = ({ latestBuild }) => ({
 | 
			
		||||
  babelrc: false,
 | 
			
		||||
  presets: [
 | 
			
		||||
    !latestBuild && [
 | 
			
		||||
      require("@babel/preset-env").default,
 | 
			
		||||
      {
 | 
			
		||||
        useBuiltIns: "entry",
 | 
			
		||||
        corejs: "3.6",
 | 
			
		||||
      },
 | 
			
		||||
    ],
 | 
			
		||||
    require("@babel/preset-typescript").default,
 | 
			
		||||
  ].filter(Boolean),
 | 
			
		||||
  plugins: [
 | 
			
		||||
    // Part of ES2018. Converts {...a, b: 2} to Object.assign({}, a, {b: 2})
 | 
			
		||||
    !latestBuild && [
 | 
			
		||||
      "@babel/plugin-proposal-object-rest-spread",
 | 
			
		||||
      { loose: true, useBuiltIns: true },
 | 
			
		||||
    ],
 | 
			
		||||
    // Only support the syntax, Webpack will handle it.
 | 
			
		||||
    "@babel/plugin-syntax-import-meta",
 | 
			
		||||
    "@babel/plugin-syntax-dynamic-import",
 | 
			
		||||
    "@babel/plugin-proposal-optional-chaining",
 | 
			
		||||
    "@babel/plugin-proposal-nullish-coalescing-operator",
 | 
			
		||||
    [
 | 
			
		||||
      require("@babel/plugin-proposal-decorators").default,
 | 
			
		||||
      { decoratorsBeforeExport: true },
 | 
			
		||||
    ],
 | 
			
		||||
    [
 | 
			
		||||
      require("@babel/plugin-proposal-class-properties").default,
 | 
			
		||||
      { loose: true },
 | 
			
		||||
    ],
 | 
			
		||||
  ].filter(Boolean),
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// Are already ES5, cause warnings when babelified.
 | 
			
		||||
module.exports.babelExclude = () => [
 | 
			
		||||
  require.resolve("@mdi/js/mdi.js"),
 | 
			
		||||
  require.resolve("hls.js"),
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
const outputPath = (outputRoot, latestBuild) =>
 | 
			
		||||
  path.resolve(outputRoot, latestBuild ? "frontend_latest" : "frontend_es5");
 | 
			
		||||
 | 
			
		||||
const publicPath = (latestBuild, root = "") =>
 | 
			
		||||
  latestBuild ? `${root}/frontend_latest/` : `${root}/frontend_es5/`;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
BundleConfig {
 | 
			
		||||
  // Object with entrypoints that need to be bundled
 | 
			
		||||
  entry: { [name: string]: pathToFile },
 | 
			
		||||
  // Folder where bundled files need to be written
 | 
			
		||||
  outputPath: string,
 | 
			
		||||
  // absolute url-path where bundled files can be found
 | 
			
		||||
  publicPath: string,
 | 
			
		||||
  // extra definitions that we need to replace in source
 | 
			
		||||
  defineOverlay: {[name: string]: value },
 | 
			
		||||
  // if this is a production build
 | 
			
		||||
  isProdBuild: boolean,
 | 
			
		||||
  // If we're targeting latest browsers
 | 
			
		||||
  latestBuild: boolean,
 | 
			
		||||
  // If we're doing a stats build (create nice chunk names)
 | 
			
		||||
  isStatsBuild: boolean,
 | 
			
		||||
  // Names of entrypoints that should not be hashed
 | 
			
		||||
  dontHash: Set<string>
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
module.exports.config = {
 | 
			
		||||
  app({ isProdBuild, latestBuild, isStatsBuild, isWDS }) {
 | 
			
		||||
    return {
 | 
			
		||||
      entry: {
 | 
			
		||||
        service_worker: "./src/entrypoints/service_worker.ts",
 | 
			
		||||
        app: "./src/entrypoints/app.ts",
 | 
			
		||||
        authorize: "./src/entrypoints/authorize.ts",
 | 
			
		||||
        onboarding: "./src/entrypoints/onboarding.ts",
 | 
			
		||||
        core: "./src/entrypoints/core.ts",
 | 
			
		||||
        "custom-panel": "./src/entrypoints/custom-panel.ts",
 | 
			
		||||
      },
 | 
			
		||||
      outputPath: outputPath(paths.app_output_root, latestBuild),
 | 
			
		||||
      publicPath: publicPath(latestBuild),
 | 
			
		||||
      isProdBuild,
 | 
			
		||||
      latestBuild,
 | 
			
		||||
      isStatsBuild,
 | 
			
		||||
      isWDS,
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  demo({ isProdBuild, latestBuild, isStatsBuild }) {
 | 
			
		||||
    return {
 | 
			
		||||
      entry: {
 | 
			
		||||
        main: path.resolve(paths.demo_dir, "src/entrypoint.ts"),
 | 
			
		||||
      },
 | 
			
		||||
      outputPath: outputPath(paths.demo_output_root, latestBuild),
 | 
			
		||||
      publicPath: publicPath(latestBuild),
 | 
			
		||||
      defineOverlay: {
 | 
			
		||||
        __VERSION__: JSON.stringify(`DEMO-${env.version()}`),
 | 
			
		||||
        __DEMO__: true,
 | 
			
		||||
      },
 | 
			
		||||
      isProdBuild,
 | 
			
		||||
      latestBuild,
 | 
			
		||||
      isStatsBuild,
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  cast({ isProdBuild, latestBuild }) {
 | 
			
		||||
    const entry = {
 | 
			
		||||
      launcher: path.resolve(paths.cast_dir, "src/launcher/entrypoint.ts"),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    if (latestBuild) {
 | 
			
		||||
      entry.receiver = path.resolve(
 | 
			
		||||
        paths.cast_dir,
 | 
			
		||||
        "src/receiver/entrypoint.ts"
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return {
 | 
			
		||||
      entry,
 | 
			
		||||
      outputPath: outputPath(paths.cast_output_root, latestBuild),
 | 
			
		||||
      publicPath: publicPath(latestBuild),
 | 
			
		||||
      isProdBuild,
 | 
			
		||||
      latestBuild,
 | 
			
		||||
      defineOverlay: {
 | 
			
		||||
        __BACKWARDS_COMPAT__: true,
 | 
			
		||||
      },
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  hassio({ isProdBuild, latestBuild }) {
 | 
			
		||||
    return {
 | 
			
		||||
      entry: {
 | 
			
		||||
        entrypoint: path.resolve(paths.hassio_dir, "src/entrypoint.ts"),
 | 
			
		||||
      },
 | 
			
		||||
      outputPath: outputPath(paths.hassio_output_root, latestBuild),
 | 
			
		||||
      publicPath: publicPath(latestBuild, paths.hassio_publicPath),
 | 
			
		||||
      isProdBuild,
 | 
			
		||||
      latestBuild,
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  gallery({ isProdBuild, latestBuild }) {
 | 
			
		||||
    return {
 | 
			
		||||
      entry: {
 | 
			
		||||
        entrypoint: path.resolve(paths.gallery_dir, "src/entrypoint.js"),
 | 
			
		||||
      },
 | 
			
		||||
      outputPath: outputPath(paths.gallery_output_root, latestBuild),
 | 
			
		||||
      publicPath: publicPath(latestBuild),
 | 
			
		||||
      isProdBuild,
 | 
			
		||||
      latestBuild,
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
@@ -1,14 +1,35 @@
 | 
			
		||||
const fs = require("fs");
 | 
			
		||||
const path = require("path");
 | 
			
		||||
const paths = require("./paths.js");
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
  useRollup() {
 | 
			
		||||
    return process.env.ROLLUP === "1";
 | 
			
		||||
  },
 | 
			
		||||
  useWDS() {
 | 
			
		||||
    return process.env.WDS === "1";
 | 
			
		||||
  },
 | 
			
		||||
  isProdBuild() {
 | 
			
		||||
    return process.env.NODE_ENV === "production";
 | 
			
		||||
    return (
 | 
			
		||||
      process.env.NODE_ENV === "production" || module.exports.isStatsBuild()
 | 
			
		||||
    );
 | 
			
		||||
  },
 | 
			
		||||
  isStatsBuild() {
 | 
			
		||||
    return process.env.STATS === "1";
 | 
			
		||||
  },
 | 
			
		||||
  isTravis() {
 | 
			
		||||
    return process.env.TRAVIS === "true";
 | 
			
		||||
  isTest() {
 | 
			
		||||
    return process.env.IS_TEST === "true";
 | 
			
		||||
  },
 | 
			
		||||
  isNetlify() {
 | 
			
		||||
    return process.env.NETLIFY === "true";
 | 
			
		||||
  },
 | 
			
		||||
  version() {
 | 
			
		||||
    const version = fs
 | 
			
		||||
      .readFileSync(path.resolve(paths.polymer_dir, "setup.py"), "utf8")
 | 
			
		||||
      .match(/\d{8}\.\d+/);
 | 
			
		||||
    if (!version) {
 | 
			
		||||
      throw Error("Version not found");
 | 
			
		||||
    }
 | 
			
		||||
    return version[0];
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -1,16 +1,18 @@
 | 
			
		||||
// Run HA develop mode
 | 
			
		||||
const gulp = require("gulp");
 | 
			
		||||
 | 
			
		||||
const envVars = require("../env");
 | 
			
		||||
const env = require("../env");
 | 
			
		||||
 | 
			
		||||
require("./clean.js");
 | 
			
		||||
require("./translations.js");
 | 
			
		||||
require("./gen-icons.js");
 | 
			
		||||
require("./gen-icons-json.js");
 | 
			
		||||
require("./gather-static.js");
 | 
			
		||||
require("./compress.js");
 | 
			
		||||
require("./webpack.js");
 | 
			
		||||
require("./service-worker.js");
 | 
			
		||||
require("./entry-html.js");
 | 
			
		||||
require("./rollup.js");
 | 
			
		||||
require("./wds.js");
 | 
			
		||||
 | 
			
		||||
gulp.task(
 | 
			
		||||
  "develop-app",
 | 
			
		||||
@@ -20,14 +22,18 @@ gulp.task(
 | 
			
		||||
    },
 | 
			
		||||
    "clean",
 | 
			
		||||
    gulp.parallel(
 | 
			
		||||
      "gen-service-worker-dev",
 | 
			
		||||
      gulp.parallel("gen-icons-app", "gen-icons-mdi"),
 | 
			
		||||
      "gen-service-worker-app-dev",
 | 
			
		||||
      "gen-icons-json",
 | 
			
		||||
      "gen-pages-dev",
 | 
			
		||||
      "gen-index-app-dev",
 | 
			
		||||
      "build-translations"
 | 
			
		||||
    ),
 | 
			
		||||
    "copy-static",
 | 
			
		||||
    "webpack-watch-app"
 | 
			
		||||
    "copy-static-app",
 | 
			
		||||
    env.useWDS()
 | 
			
		||||
      ? "wds-watch-app"
 | 
			
		||||
      : env.useRollup()
 | 
			
		||||
      ? "rollup-watch-app"
 | 
			
		||||
      : "webpack-watch-app"
 | 
			
		||||
  )
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
@@ -38,15 +44,15 @@ gulp.task(
 | 
			
		||||
      process.env.NODE_ENV = "production";
 | 
			
		||||
    },
 | 
			
		||||
    "clean",
 | 
			
		||||
    gulp.parallel("gen-icons-app", "gen-icons-mdi", "build-translations"),
 | 
			
		||||
    "copy-static",
 | 
			
		||||
    "webpack-prod-app",
 | 
			
		||||
    gulp.parallel("gen-icons-json", "build-translations"),
 | 
			
		||||
    "copy-static-app",
 | 
			
		||||
    env.useRollup() ? "rollup-prod-app" : "webpack-prod-app",
 | 
			
		||||
    ...// Don't compress running tests
 | 
			
		||||
    (envVars.isTravis() ? [] : ["compress-app"]),
 | 
			
		||||
    (env.isTest() ? [] : ["compress-app"]),
 | 
			
		||||
    gulp.parallel(
 | 
			
		||||
      "gen-pages-prod",
 | 
			
		||||
      "gen-index-app-prod",
 | 
			
		||||
      "gen-service-worker-prod"
 | 
			
		||||
      "gen-service-worker-app-prod"
 | 
			
		||||
    )
 | 
			
		||||
  )
 | 
			
		||||
);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,30 +1,27 @@
 | 
			
		||||
const gulp = require("gulp");
 | 
			
		||||
 | 
			
		||||
const env = require("../env");
 | 
			
		||||
 | 
			
		||||
require("./clean.js");
 | 
			
		||||
require("./translations.js");
 | 
			
		||||
require("./gen-icons.js");
 | 
			
		||||
require("./gather-static.js");
 | 
			
		||||
require("./webpack.js");
 | 
			
		||||
require("./service-worker.js");
 | 
			
		||||
require("./entry-html.js");
 | 
			
		||||
require("./rollup.js");
 | 
			
		||||
 | 
			
		||||
gulp.task(
 | 
			
		||||
  "develop-cast",
 | 
			
		||||
  gulp.series(
 | 
			
		||||
    async function setEnv() {
 | 
			
		||||
      process.env.NODE_ENV = "development";
 | 
			
		||||
      process.env.IS_CAST = "true";
 | 
			
		||||
    },
 | 
			
		||||
    "clean-cast",
 | 
			
		||||
    "translations-enable-merge-backend",
 | 
			
		||||
    gulp.parallel(
 | 
			
		||||
      "gen-icons-app",
 | 
			
		||||
      "gen-icons-mdi",
 | 
			
		||||
      "gen-index-cast-dev",
 | 
			
		||||
      "build-translations"
 | 
			
		||||
    ),
 | 
			
		||||
    gulp.parallel("gen-icons-json", "build-translations"),
 | 
			
		||||
    "copy-static-cast",
 | 
			
		||||
    "webpack-dev-server-cast"
 | 
			
		||||
    "gen-index-cast-dev",
 | 
			
		||||
    env.useRollup() ? "rollup-dev-server-cast" : "webpack-dev-server-cast"
 | 
			
		||||
  )
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
@@ -36,9 +33,9 @@ gulp.task(
 | 
			
		||||
    },
 | 
			
		||||
    "clean-cast",
 | 
			
		||||
    "translations-enable-merge-backend",
 | 
			
		||||
    gulp.parallel("gen-icons-app", "gen-icons-mdi", "build-translations"),
 | 
			
		||||
    gulp.parallel("gen-icons-json", "build-translations"),
 | 
			
		||||
    "copy-static-cast",
 | 
			
		||||
    "webpack-prod-cast",
 | 
			
		||||
    env.useRollup() ? "rollup-prod-cast" : "webpack-prod-cast",
 | 
			
		||||
    "gen-index-cast-prod"
 | 
			
		||||
  )
 | 
			
		||||
);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,39 +1,36 @@
 | 
			
		||||
const del = require("del");
 | 
			
		||||
const gulp = require("gulp");
 | 
			
		||||
const config = require("../paths");
 | 
			
		||||
const paths = require("../paths");
 | 
			
		||||
require("./translations");
 | 
			
		||||
 | 
			
		||||
gulp.task(
 | 
			
		||||
  "clean",
 | 
			
		||||
  gulp.parallel("clean-translations", function cleanOutputAndBuildDir() {
 | 
			
		||||
    return del([config.root, config.build_dir]);
 | 
			
		||||
    return del([paths.app_output_root, paths.build_dir]);
 | 
			
		||||
  })
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
gulp.task(
 | 
			
		||||
  "clean-demo",
 | 
			
		||||
  gulp.parallel("clean-translations", function cleanOutputAndBuildDir() {
 | 
			
		||||
    return del([config.demo_root, config.build_dir]);
 | 
			
		||||
    return del([paths.demo_output_root, paths.build_dir]);
 | 
			
		||||
  })
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
gulp.task(
 | 
			
		||||
  "clean-cast",
 | 
			
		||||
  gulp.parallel("clean-translations", function cleanOutputAndBuildDir() {
 | 
			
		||||
    return del([config.cast_root, config.build_dir]);
 | 
			
		||||
    return del([paths.cast_output_root, paths.build_dir]);
 | 
			
		||||
  })
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
gulp.task(
 | 
			
		||||
  "clean-hassio",
 | 
			
		||||
  gulp.parallel("clean-translations", function cleanOutputAndBuildDir() {
 | 
			
		||||
    return del([config.hassio_root, config.build_dir]);
 | 
			
		||||
  })
 | 
			
		||||
);
 | 
			
		||||
gulp.task("clean-hassio", function cleanOutputAndBuildDir() {
 | 
			
		||||
  return del([paths.hassio_output_root, paths.build_dir]);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task(
 | 
			
		||||
  "clean-gallery",
 | 
			
		||||
  gulp.parallel("clean-translations", function cleanOutputAndBuildDir() {
 | 
			
		||||
    return del([config.gallery_root, config.build_dir]);
 | 
			
		||||
    return del([paths.gallery_output_root, paths.build_dir]);
 | 
			
		||||
  })
 | 
			
		||||
);
 | 
			
		||||
 
 | 
			
		||||
@@ -6,33 +6,40 @@ const merge = require("merge-stream");
 | 
			
		||||
const path = require("path");
 | 
			
		||||
const paths = require("../paths");
 | 
			
		||||
 | 
			
		||||
const zopfliOptions = { threshold: 150 };
 | 
			
		||||
 | 
			
		||||
gulp.task("compress-app", function compressApp() {
 | 
			
		||||
  const jsLatest = gulp
 | 
			
		||||
    .src(path.resolve(paths.output, "**/*.js"))
 | 
			
		||||
    .pipe(zopfli())
 | 
			
		||||
    .pipe(gulp.dest(paths.output));
 | 
			
		||||
    .src(path.resolve(paths.app_output_latest, "**/*.js"))
 | 
			
		||||
    .pipe(zopfli(zopfliOptions))
 | 
			
		||||
    .pipe(gulp.dest(paths.app_output_latest));
 | 
			
		||||
 | 
			
		||||
  const jsEs5 = gulp
 | 
			
		||||
    .src(path.resolve(paths.output_es5, "**/*.js"))
 | 
			
		||||
    .pipe(zopfli())
 | 
			
		||||
    .pipe(gulp.dest(paths.output_es5));
 | 
			
		||||
    .src(path.resolve(paths.app_output_es5, "**/*.js"))
 | 
			
		||||
    .pipe(zopfli(zopfliOptions))
 | 
			
		||||
    .pipe(gulp.dest(paths.app_output_es5));
 | 
			
		||||
 | 
			
		||||
  const polyfills = gulp
 | 
			
		||||
    .src(path.resolve(paths.static, "polyfills/*.js"))
 | 
			
		||||
    .pipe(zopfli())
 | 
			
		||||
    .pipe(gulp.dest(path.resolve(paths.static, "polyfills")));
 | 
			
		||||
    .src(path.resolve(paths.app_output_static, "polyfills/*.js"))
 | 
			
		||||
    .pipe(zopfli(zopfliOptions))
 | 
			
		||||
    .pipe(gulp.dest(path.resolve(paths.app_output_static, "polyfills")));
 | 
			
		||||
 | 
			
		||||
  const translations = gulp
 | 
			
		||||
    .src(path.resolve(paths.static, "translations/*.json"))
 | 
			
		||||
    .pipe(zopfli())
 | 
			
		||||
    .pipe(gulp.dest(path.resolve(paths.static, "translations")));
 | 
			
		||||
    .src(path.resolve(paths.app_output_static, "translations/**/*.json"))
 | 
			
		||||
    .pipe(zopfli(zopfliOptions))
 | 
			
		||||
    .pipe(gulp.dest(path.resolve(paths.app_output_static, "translations")));
 | 
			
		||||
 | 
			
		||||
  return merge(jsLatest, jsEs5, polyfills, translations);
 | 
			
		||||
  const icons = gulp
 | 
			
		||||
    .src(path.resolve(paths.app_output_static, "mdi/*.json"))
 | 
			
		||||
    .pipe(zopfli(zopfliOptions))
 | 
			
		||||
    .pipe(gulp.dest(path.resolve(paths.app_output_static, "mdi")));
 | 
			
		||||
 | 
			
		||||
  return merge(jsLatest, jsEs5, polyfills, translations, icons);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("compress-hassio", function compressApp() {
 | 
			
		||||
  return gulp
 | 
			
		||||
    .src(path.resolve(paths.hassio_root, "**/*.js"))
 | 
			
		||||
    .pipe(zopfli())
 | 
			
		||||
    .pipe(gulp.dest(paths.hassio_root));
 | 
			
		||||
    .src(path.resolve(paths.hassio_output_root, "**/*.js"))
 | 
			
		||||
    .pipe(zopfli(zopfliOptions))
 | 
			
		||||
    .pipe(gulp.dest(paths.hassio_output_root));
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,16 @@
 | 
			
		||||
// Run demo develop mode
 | 
			
		||||
const gulp = require("gulp");
 | 
			
		||||
 | 
			
		||||
const env = require("../env");
 | 
			
		||||
 | 
			
		||||
require("./clean.js");
 | 
			
		||||
require("./translations.js");
 | 
			
		||||
require("./gen-icons.js");
 | 
			
		||||
require("./gen-icons-json.js");
 | 
			
		||||
require("./gather-static.js");
 | 
			
		||||
require("./webpack.js");
 | 
			
		||||
require("./service-worker.js");
 | 
			
		||||
require("./entry-html.js");
 | 
			
		||||
require("./rollup.js");
 | 
			
		||||
 | 
			
		||||
gulp.task(
 | 
			
		||||
  "develop-demo",
 | 
			
		||||
@@ -17,15 +20,9 @@ gulp.task(
 | 
			
		||||
    },
 | 
			
		||||
    "clean-demo",
 | 
			
		||||
    "translations-enable-merge-backend",
 | 
			
		||||
    gulp.parallel(
 | 
			
		||||
      "gen-icons-app",
 | 
			
		||||
      "gen-icons-mdi",
 | 
			
		||||
      "gen-icons-demo",
 | 
			
		||||
      "gen-index-demo-dev",
 | 
			
		||||
      "build-translations"
 | 
			
		||||
    ),
 | 
			
		||||
    gulp.parallel("gen-icons-json", "gen-index-demo-dev", "build-translations"),
 | 
			
		||||
    "copy-static-demo",
 | 
			
		||||
    "webpack-dev-server-demo"
 | 
			
		||||
    env.useRollup() ? "rollup-dev-server-demo" : "webpack-dev-server-demo"
 | 
			
		||||
  )
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
@@ -38,14 +35,9 @@ gulp.task(
 | 
			
		||||
    "clean-demo",
 | 
			
		||||
    // Cast needs to be backwards compatible and older HA has no translations
 | 
			
		||||
    "translations-enable-merge-backend",
 | 
			
		||||
    gulp.parallel(
 | 
			
		||||
      "gen-icons-app",
 | 
			
		||||
      "gen-icons-mdi",
 | 
			
		||||
      "gen-icons-demo",
 | 
			
		||||
      "build-translations"
 | 
			
		||||
    ),
 | 
			
		||||
    gulp.parallel("gen-icons-json", "build-translations"),
 | 
			
		||||
    "copy-static-demo",
 | 
			
		||||
    "webpack-prod-demo",
 | 
			
		||||
    env.useRollup() ? "rollup-prod-demo" : "webpack-prod-demo",
 | 
			
		||||
    "gen-index-demo-prod"
 | 
			
		||||
  )
 | 
			
		||||
);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,14 @@
 | 
			
		||||
const del = require("del");
 | 
			
		||||
const gulp = require("gulp");
 | 
			
		||||
const fs = require("fs");
 | 
			
		||||
const mapStream = require("map-stream");
 | 
			
		||||
 | 
			
		||||
const inDir = "translations/frontend";
 | 
			
		||||
const downloadDir = inDir + "/downloads";
 | 
			
		||||
const inDirFrontend = "translations/frontend";
 | 
			
		||||
const inDirBackend = "translations/backend";
 | 
			
		||||
const downloadDir = "translations/downloads";
 | 
			
		||||
const srcMeta = "src/translations/translationMetadata.json";
 | 
			
		||||
 | 
			
		||||
const encoding = "utf8";
 | 
			
		||||
 | 
			
		||||
const tasks = [];
 | 
			
		||||
 | 
			
		||||
@@ -53,9 +58,25 @@ gulp.task(taskName, function () {
 | 
			
		||||
});
 | 
			
		||||
tasks.push(taskName);
 | 
			
		||||
 | 
			
		||||
taskName = "check-all-files-exist";
 | 
			
		||||
gulp.task(taskName, function () {
 | 
			
		||||
  const file = fs.readFileSync(srcMeta, { encoding });
 | 
			
		||||
  const meta = JSON.parse(file);
 | 
			
		||||
  Object.keys(meta).forEach((lang) => {
 | 
			
		||||
    if (!fs.existsSync(`${inDirFrontend}/${lang}.json`)) {
 | 
			
		||||
      fs.writeFileSync(`${inDirFrontend}/${lang}.json`, JSON.stringify({}));
 | 
			
		||||
    }
 | 
			
		||||
    if (!fs.existsSync(`${inDirBackend}/${lang}.json`)) {
 | 
			
		||||
      fs.writeFileSync(`${inDirBackend}/${lang}.json`, JSON.stringify({}));
 | 
			
		||||
    }
 | 
			
		||||
  });
 | 
			
		||||
  return Promise.resolve();
 | 
			
		||||
});
 | 
			
		||||
tasks.push(taskName);
 | 
			
		||||
 | 
			
		||||
taskName = "move-downloaded-translations";
 | 
			
		||||
gulp.task(taskName, function () {
 | 
			
		||||
  return gulp.src(`${downloadDir}/*.json`).pipe(gulp.dest(inDir));
 | 
			
		||||
  return gulp.src(`${downloadDir}/*.json`).pipe(gulp.dest(inDirFrontend));
 | 
			
		||||
});
 | 
			
		||||
tasks.push(taskName);
 | 
			
		||||
 | 
			
		||||
@@ -65,6 +86,7 @@ gulp.task(
 | 
			
		||||
  gulp.series(
 | 
			
		||||
    "check-translations-html",
 | 
			
		||||
    "move-downloaded-translations",
 | 
			
		||||
    "check-all-files-exist",
 | 
			
		||||
    "clean-downloaded-translations"
 | 
			
		||||
  )
 | 
			
		||||
);
 | 
			
		||||
 
 | 
			
		||||
@@ -6,31 +6,37 @@ const fs = require("fs-extra");
 | 
			
		||||
const path = require("path");
 | 
			
		||||
const template = require("lodash.template");
 | 
			
		||||
const minify = require("html-minifier").minify;
 | 
			
		||||
const config = require("../paths.js");
 | 
			
		||||
const paths = require("../paths.js");
 | 
			
		||||
const env = require("../env.js");
 | 
			
		||||
 | 
			
		||||
const templatePath = (tpl) =>
 | 
			
		||||
  path.resolve(config.polymer_dir, "src/html/", `${tpl}.html.template`);
 | 
			
		||||
  path.resolve(paths.polymer_dir, "src/html/", `${tpl}.html.template`);
 | 
			
		||||
 | 
			
		||||
const readFile = (pth) => fs.readFileSync(pth).toString();
 | 
			
		||||
 | 
			
		||||
const renderTemplate = (pth, data = {}, pathFunc = templatePath) => {
 | 
			
		||||
  const compiled = template(readFile(pathFunc(pth)));
 | 
			
		||||
  return compiled({ ...data, renderTemplate });
 | 
			
		||||
  return compiled({
 | 
			
		||||
    ...data,
 | 
			
		||||
    useRollup: env.useRollup(),
 | 
			
		||||
    useWDS: env.useWDS(),
 | 
			
		||||
    renderTemplate,
 | 
			
		||||
  });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const renderDemoTemplate = (pth, data = {}) =>
 | 
			
		||||
  renderTemplate(pth, data, (tpl) =>
 | 
			
		||||
    path.resolve(config.demo_dir, "src/html/", `${tpl}.html.template`)
 | 
			
		||||
    path.resolve(paths.demo_dir, "src/html/", `${tpl}.html.template`)
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
const renderCastTemplate = (pth, data = {}) =>
 | 
			
		||||
  renderTemplate(pth, data, (tpl) =>
 | 
			
		||||
    path.resolve(config.cast_dir, "src/html/", `${tpl}.html.template`)
 | 
			
		||||
    path.resolve(paths.cast_dir, "src/html/", `${tpl}.html.template`)
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
const renderGalleryTemplate = (pth, data = {}) =>
 | 
			
		||||
  renderTemplate(pth, data, (tpl) =>
 | 
			
		||||
    path.resolve(config.gallery_dir, "src/html/", `${tpl}.html.template`)
 | 
			
		||||
    path.resolve(paths.gallery_dir, "src/html/", `${tpl}.html.template`)
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
const minifyHtml = (content) =>
 | 
			
		||||
@@ -47,34 +53,37 @@ gulp.task("gen-pages-dev", (done) => {
 | 
			
		||||
  for (const page of PAGES) {
 | 
			
		||||
    const content = renderTemplate(page, {
 | 
			
		||||
      latestPageJS: `/frontend_latest/${page}.js`,
 | 
			
		||||
      latestHassIconsJS: "/frontend_latest/hass-icons.js",
 | 
			
		||||
 | 
			
		||||
      es5Compatibility: "/frontend_es5/compatibility.js",
 | 
			
		||||
      es5PageJS: `/frontend_es5/${page}.js`,
 | 
			
		||||
      es5HassIconsJS: "/frontend_es5/hass-icons.js",
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    fs.outputFileSync(path.resolve(config.root, `${page}.html`), content);
 | 
			
		||||
    fs.outputFileSync(
 | 
			
		||||
      path.resolve(paths.app_output_root, `${page}.html`),
 | 
			
		||||
      content
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
  done();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("gen-pages-prod", (done) => {
 | 
			
		||||
  const latestManifest = require(path.resolve(config.output, "manifest.json"));
 | 
			
		||||
  const es5Manifest = require(path.resolve(config.output_es5, "manifest.json"));
 | 
			
		||||
  const latestManifest = require(path.resolve(
 | 
			
		||||
    paths.app_output_latest,
 | 
			
		||||
    "manifest.json"
 | 
			
		||||
  ));
 | 
			
		||||
  const es5Manifest = require(path.resolve(
 | 
			
		||||
    paths.app_output_es5,
 | 
			
		||||
    "manifest.json"
 | 
			
		||||
  ));
 | 
			
		||||
 | 
			
		||||
  for (const page of PAGES) {
 | 
			
		||||
    const content = renderTemplate(page, {
 | 
			
		||||
      latestPageJS: latestManifest[`${page}.js`],
 | 
			
		||||
      latestHassIconsJS: latestManifest["hass-icons.js"],
 | 
			
		||||
 | 
			
		||||
      es5Compatibility: es5Manifest["compatibility.js"],
 | 
			
		||||
      es5PageJS: es5Manifest[`${page}.js`],
 | 
			
		||||
      es5HassIconsJS: es5Manifest["hass-icons.js"],
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    fs.outputFileSync(
 | 
			
		||||
      path.resolve(config.root, `${page}.html`),
 | 
			
		||||
      path.resolve(paths.app_output_root, `${page}.html`),
 | 
			
		||||
      minifyHtml(content)
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
@@ -82,43 +91,57 @@ gulp.task("gen-pages-prod", (done) => {
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("gen-index-app-dev", (done) => {
 | 
			
		||||
  // In dev mode we don't mangle names, so we hardcode urls. That way we can
 | 
			
		||||
  // run webpack as last in watch mode, which blocks output.
 | 
			
		||||
  const content = renderTemplate("index", {
 | 
			
		||||
    latestAppJS: "/frontend_latest/app.js",
 | 
			
		||||
    latestCoreJS: "/frontend_latest/core.js",
 | 
			
		||||
    latestCustomPanelJS: "/frontend_latest/custom-panel.js",
 | 
			
		||||
    latestHassIconsJS: "/frontend_latest/hass-icons.js",
 | 
			
		||||
  let latestAppJS, latestCoreJS, latestCustomPanelJS;
 | 
			
		||||
 | 
			
		||||
  if (env.useWDS()) {
 | 
			
		||||
    latestAppJS = "http://localhost:8000/src/entrypoints/app.ts";
 | 
			
		||||
    latestCoreJS = "http://localhost:8000/src/entrypoints/core.ts";
 | 
			
		||||
    latestCustomPanelJS =
 | 
			
		||||
      "http://localhost:8000/src/entrypoints/custom-panel.ts";
 | 
			
		||||
  } else {
 | 
			
		||||
    latestAppJS = "/frontend_latest/app.js";
 | 
			
		||||
    latestCoreJS = "/frontend_latest/core.js";
 | 
			
		||||
    latestCustomPanelJS = "/frontend_latest/custom-panel.js";
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const content = renderTemplate("index", {
 | 
			
		||||
    latestAppJS,
 | 
			
		||||
    latestCoreJS,
 | 
			
		||||
    latestCustomPanelJS,
 | 
			
		||||
 | 
			
		||||
    es5Compatibility: "/frontend_es5/compatibility.js",
 | 
			
		||||
    es5AppJS: "/frontend_es5/app.js",
 | 
			
		||||
    es5CoreJS: "/frontend_es5/core.js",
 | 
			
		||||
    es5CustomPanelJS: "/frontend_es5/custom-panel.js",
 | 
			
		||||
    es5HassIconsJS: "/frontend_es5/hass-icons.js",
 | 
			
		||||
  }).replace(/#THEMEC/g, "{{ theme_color }}");
 | 
			
		||||
 | 
			
		||||
  fs.outputFileSync(path.resolve(config.root, "index.html"), content);
 | 
			
		||||
  fs.outputFileSync(path.resolve(paths.app_output_root, "index.html"), content);
 | 
			
		||||
  done();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("gen-index-app-prod", (done) => {
 | 
			
		||||
  const latestManifest = require(path.resolve(config.output, "manifest.json"));
 | 
			
		||||
  const es5Manifest = require(path.resolve(config.output_es5, "manifest.json"));
 | 
			
		||||
  const latestManifest = require(path.resolve(
 | 
			
		||||
    paths.app_output_latest,
 | 
			
		||||
    "manifest.json"
 | 
			
		||||
  ));
 | 
			
		||||
  const es5Manifest = require(path.resolve(
 | 
			
		||||
    paths.app_output_es5,
 | 
			
		||||
    "manifest.json"
 | 
			
		||||
  ));
 | 
			
		||||
  const content = renderTemplate("index", {
 | 
			
		||||
    latestAppJS: latestManifest["app.js"],
 | 
			
		||||
    latestCoreJS: latestManifest["core.js"],
 | 
			
		||||
    latestCustomPanelJS: latestManifest["custom-panel.js"],
 | 
			
		||||
    latestHassIconsJS: latestManifest["hass-icons.js"],
 | 
			
		||||
 | 
			
		||||
    es5Compatibility: es5Manifest["compatibility.js"],
 | 
			
		||||
    es5AppJS: es5Manifest["app.js"],
 | 
			
		||||
    es5CoreJS: es5Manifest["core.js"],
 | 
			
		||||
    es5CustomPanelJS: es5Manifest["custom-panel.js"],
 | 
			
		||||
    es5HassIconsJS: es5Manifest["hass-icons.js"],
 | 
			
		||||
  });
 | 
			
		||||
  const minified = minifyHtml(content).replace(/#THEMEC/g, "{{ theme_color }}");
 | 
			
		||||
 | 
			
		||||
  fs.outputFileSync(path.resolve(config.root, "index.html"), minified);
 | 
			
		||||
  fs.outputFileSync(
 | 
			
		||||
    path.resolve(paths.app_output_root, "index.html"),
 | 
			
		||||
    minified
 | 
			
		||||
  );
 | 
			
		||||
  done();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
@@ -127,7 +150,7 @@ gulp.task("gen-index-cast-dev", (done) => {
 | 
			
		||||
    latestReceiverJS: "/frontend_latest/receiver.js",
 | 
			
		||||
  });
 | 
			
		||||
  fs.outputFileSync(
 | 
			
		||||
    path.resolve(config.cast_root, "receiver.html"),
 | 
			
		||||
    path.resolve(paths.cast_output_root, "receiver.html"),
 | 
			
		||||
    contentReceiver
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
@@ -135,14 +158,17 @@ gulp.task("gen-index-cast-dev", (done) => {
 | 
			
		||||
    latestLauncherJS: "/frontend_latest/launcher.js",
 | 
			
		||||
    es5LauncherJS: "/frontend_es5/launcher.js",
 | 
			
		||||
  });
 | 
			
		||||
  fs.outputFileSync(path.resolve(config.cast_root, "faq.html"), contentFAQ);
 | 
			
		||||
  fs.outputFileSync(
 | 
			
		||||
    path.resolve(paths.cast_output_root, "faq.html"),
 | 
			
		||||
    contentFAQ
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  const contentLauncher = renderCastTemplate("launcher", {
 | 
			
		||||
    latestLauncherJS: "/frontend_latest/launcher.js",
 | 
			
		||||
    es5LauncherJS: "/frontend_es5/launcher.js",
 | 
			
		||||
  });
 | 
			
		||||
  fs.outputFileSync(
 | 
			
		||||
    path.resolve(config.cast_root, "index.html"),
 | 
			
		||||
    path.resolve(paths.cast_output_root, "index.html"),
 | 
			
		||||
    contentLauncher
 | 
			
		||||
  );
 | 
			
		||||
  done();
 | 
			
		||||
@@ -150,11 +176,11 @@ gulp.task("gen-index-cast-dev", (done) => {
 | 
			
		||||
 | 
			
		||||
gulp.task("gen-index-cast-prod", (done) => {
 | 
			
		||||
  const latestManifest = require(path.resolve(
 | 
			
		||||
    config.cast_output,
 | 
			
		||||
    paths.cast_output_latest,
 | 
			
		||||
    "manifest.json"
 | 
			
		||||
  ));
 | 
			
		||||
  const es5Manifest = require(path.resolve(
 | 
			
		||||
    config.cast_output_es5,
 | 
			
		||||
    paths.cast_output_es5,
 | 
			
		||||
    "manifest.json"
 | 
			
		||||
  ));
 | 
			
		||||
 | 
			
		||||
@@ -162,7 +188,7 @@ gulp.task("gen-index-cast-prod", (done) => {
 | 
			
		||||
    latestReceiverJS: latestManifest["receiver.js"],
 | 
			
		||||
  });
 | 
			
		||||
  fs.outputFileSync(
 | 
			
		||||
    path.resolve(config.cast_root, "receiver.html"),
 | 
			
		||||
    path.resolve(paths.cast_output_root, "receiver.html"),
 | 
			
		||||
    contentReceiver
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
@@ -170,68 +196,74 @@ gulp.task("gen-index-cast-prod", (done) => {
 | 
			
		||||
    latestLauncherJS: latestManifest["launcher.js"],
 | 
			
		||||
    es5LauncherJS: es5Manifest["launcher.js"],
 | 
			
		||||
  });
 | 
			
		||||
  fs.outputFileSync(path.resolve(config.cast_root, "faq.html"), contentFAQ);
 | 
			
		||||
  fs.outputFileSync(
 | 
			
		||||
    path.resolve(paths.cast_output_root, "faq.html"),
 | 
			
		||||
    contentFAQ
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  const contentLauncher = renderCastTemplate("launcher", {
 | 
			
		||||
    latestLauncherJS: latestManifest["launcher.js"],
 | 
			
		||||
    es5LauncherJS: es5Manifest["launcher.js"],
 | 
			
		||||
  });
 | 
			
		||||
  fs.outputFileSync(
 | 
			
		||||
    path.resolve(config.cast_root, "index.html"),
 | 
			
		||||
    path.resolve(paths.cast_output_root, "index.html"),
 | 
			
		||||
    contentLauncher
 | 
			
		||||
  );
 | 
			
		||||
  done();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("gen-index-demo-dev", (done) => {
 | 
			
		||||
  // In dev mode we don't mangle names, so we hardcode urls. That way we can
 | 
			
		||||
  // run webpack as last in watch mode, which blocks output.
 | 
			
		||||
  const content = renderDemoTemplate("index", {
 | 
			
		||||
    latestDemoJS: "/frontend_latest/main.js",
 | 
			
		||||
 | 
			
		||||
    es5Compatibility: "/frontend_es5/compatibility.js",
 | 
			
		||||
    es5DemoJS: "/frontend_es5/main.js",
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  fs.outputFileSync(path.resolve(config.demo_root, "index.html"), content);
 | 
			
		||||
  fs.outputFileSync(
 | 
			
		||||
    path.resolve(paths.demo_output_root, "index.html"),
 | 
			
		||||
    content
 | 
			
		||||
  );
 | 
			
		||||
  done();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("gen-index-demo-prod", (done) => {
 | 
			
		||||
  const latestManifest = require(path.resolve(
 | 
			
		||||
    config.demo_output,
 | 
			
		||||
    paths.demo_output_latest,
 | 
			
		||||
    "manifest.json"
 | 
			
		||||
  ));
 | 
			
		||||
  const es5Manifest = require(path.resolve(
 | 
			
		||||
    config.demo_output_es5,
 | 
			
		||||
    paths.demo_output_es5,
 | 
			
		||||
    "manifest.json"
 | 
			
		||||
  ));
 | 
			
		||||
  const content = renderDemoTemplate("index", {
 | 
			
		||||
    latestDemoJS: latestManifest["main.js"],
 | 
			
		||||
 | 
			
		||||
    es5Compatibility: es5Manifest["compatibility.js"],
 | 
			
		||||
    es5DemoJS: es5Manifest["main.js"],
 | 
			
		||||
  });
 | 
			
		||||
  const minified = minifyHtml(content);
 | 
			
		||||
 | 
			
		||||
  fs.outputFileSync(path.resolve(config.demo_root, "index.html"), minified);
 | 
			
		||||
  fs.outputFileSync(
 | 
			
		||||
    path.resolve(paths.demo_output_root, "index.html"),
 | 
			
		||||
    minified
 | 
			
		||||
  );
 | 
			
		||||
  done();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("gen-index-gallery-dev", (done) => {
 | 
			
		||||
  // In dev mode we don't mangle names, so we hardcode urls. That way we can
 | 
			
		||||
  // run webpack as last in watch mode, which blocks output.
 | 
			
		||||
  const content = renderGalleryTemplate("index", {
 | 
			
		||||
    latestGalleryJS: "./frontend_latest/entrypoint.js",
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  fs.outputFileSync(path.resolve(config.gallery_root, "index.html"), content);
 | 
			
		||||
  fs.outputFileSync(
 | 
			
		||||
    path.resolve(paths.gallery_output_root, "index.html"),
 | 
			
		||||
    content
 | 
			
		||||
  );
 | 
			
		||||
  done();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("gen-index-gallery-prod", (done) => {
 | 
			
		||||
  const latestManifest = require(path.resolve(
 | 
			
		||||
    config.gallery_output,
 | 
			
		||||
    paths.gallery_output_latest,
 | 
			
		||||
    "manifest.json"
 | 
			
		||||
  ));
 | 
			
		||||
  const content = renderGalleryTemplate("index", {
 | 
			
		||||
@@ -239,6 +271,48 @@ gulp.task("gen-index-gallery-prod", (done) => {
 | 
			
		||||
  });
 | 
			
		||||
  const minified = minifyHtml(content);
 | 
			
		||||
 | 
			
		||||
  fs.outputFileSync(path.resolve(config.gallery_root, "index.html"), minified);
 | 
			
		||||
  fs.outputFileSync(
 | 
			
		||||
    path.resolve(paths.gallery_output_root, "index.html"),
 | 
			
		||||
    minified
 | 
			
		||||
  );
 | 
			
		||||
  done();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("gen-index-hassio-dev", async () => {
 | 
			
		||||
  writeHassioEntrypoint(
 | 
			
		||||
    `${paths.hassio_publicPath}/frontend_latest/entrypoint.js`,
 | 
			
		||||
    `${paths.hassio_publicPath}/frontend_es5/entrypoint.js`
 | 
			
		||||
  );
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("gen-index-hassio-prod", async () => {
 | 
			
		||||
  const latestManifest = require(path.resolve(
 | 
			
		||||
    paths.hassio_output_latest,
 | 
			
		||||
    "manifest.json"
 | 
			
		||||
  ));
 | 
			
		||||
  const es5Manifest = require(path.resolve(
 | 
			
		||||
    paths.hassio_output_es5,
 | 
			
		||||
    "manifest.json"
 | 
			
		||||
  ));
 | 
			
		||||
  writeHassioEntrypoint(
 | 
			
		||||
    latestManifest["entrypoint.js"],
 | 
			
		||||
    es5Manifest["entrypoint.js"]
 | 
			
		||||
  );
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
function writeHassioEntrypoint(latestEntrypoint, es5Entrypoint) {
 | 
			
		||||
  fs.mkdirSync(paths.hassio_output_root, { recursive: true });
 | 
			
		||||
  fs.writeFileSync(
 | 
			
		||||
    path.resolve(paths.hassio_output_root, "entrypoint.js"),
 | 
			
		||||
    `
 | 
			
		||||
try {
 | 
			
		||||
  new Function("import('${latestEntrypoint}')")();
 | 
			
		||||
} catch (err) {
 | 
			
		||||
  var el = document.createElement('script');
 | 
			
		||||
  el.src = '${es5Entrypoint}';
 | 
			
		||||
  document.body.appendChild(el);
 | 
			
		||||
}
 | 
			
		||||
  `,
 | 
			
		||||
    { encoding: "utf-8" }
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,44 @@
 | 
			
		||||
// Run demo develop mode
 | 
			
		||||
const gulp = require("gulp");
 | 
			
		||||
const fs = require("fs");
 | 
			
		||||
const path = require("path");
 | 
			
		||||
 | 
			
		||||
const env = require("../env");
 | 
			
		||||
const paths = require("../paths");
 | 
			
		||||
 | 
			
		||||
require("./clean.js");
 | 
			
		||||
require("./translations.js");
 | 
			
		||||
require("./gen-icons.js");
 | 
			
		||||
require("./gen-icons-json.js");
 | 
			
		||||
require("./gather-static.js");
 | 
			
		||||
require("./webpack.js");
 | 
			
		||||
require("./service-worker.js");
 | 
			
		||||
require("./entry-html.js");
 | 
			
		||||
require("./rollup.js");
 | 
			
		||||
 | 
			
		||||
gulp.task("gather-gallery-demos", async function gatherDemos() {
 | 
			
		||||
  const files = await fs.promises.readdir(
 | 
			
		||||
    path.resolve(paths.gallery_dir, "src/demos")
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  let content = "export const DEMOS = {\n";
 | 
			
		||||
 | 
			
		||||
  for (const file of files) {
 | 
			
		||||
    const demoId = path.basename(file, ".ts");
 | 
			
		||||
    const demoPath = "../src/demos/" + demoId;
 | 
			
		||||
    content += `  "${demoId}": () => import("${demoPath}"),\n`;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  content += "};";
 | 
			
		||||
 | 
			
		||||
  const galleryBuild = path.resolve(paths.gallery_dir, "build");
 | 
			
		||||
 | 
			
		||||
  fs.mkdirSync(galleryBuild, { recursive: true });
 | 
			
		||||
  fs.writeFileSync(
 | 
			
		||||
    path.resolve(galleryBuild, "import-demos.ts"),
 | 
			
		||||
    content,
 | 
			
		||||
    "utf-8"
 | 
			
		||||
  );
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task(
 | 
			
		||||
  "develop-gallery",
 | 
			
		||||
@@ -17,10 +48,14 @@ gulp.task(
 | 
			
		||||
    },
 | 
			
		||||
    "clean-gallery",
 | 
			
		||||
    "translations-enable-merge-backend",
 | 
			
		||||
    gulp.parallel("gen-icons-app", "gen-icons-mdi", "build-translations"),
 | 
			
		||||
    gulp.parallel(
 | 
			
		||||
      "gen-icons-json",
 | 
			
		||||
      "build-translations",
 | 
			
		||||
      "gather-gallery-demos"
 | 
			
		||||
    ),
 | 
			
		||||
    "copy-static-gallery",
 | 
			
		||||
    "gen-index-gallery-dev",
 | 
			
		||||
    "webpack-dev-server-gallery"
 | 
			
		||||
    env.useRollup() ? "rollup-dev-server-gallery" : "webpack-dev-server-gallery"
 | 
			
		||||
  )
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
@@ -32,9 +67,13 @@ gulp.task(
 | 
			
		||||
    },
 | 
			
		||||
    "clean-gallery",
 | 
			
		||||
    "translations-enable-merge-backend",
 | 
			
		||||
    gulp.parallel("gen-icons-app", "gen-icons-mdi", "build-translations"),
 | 
			
		||||
    gulp.parallel(
 | 
			
		||||
      "gen-icons-json",
 | 
			
		||||
      "build-translations",
 | 
			
		||||
      "gather-gallery-demos"
 | 
			
		||||
    ),
 | 
			
		||||
    "copy-static-gallery",
 | 
			
		||||
    "webpack-prod-gallery",
 | 
			
		||||
    env.useRollup() ? "rollup-prod-gallery" : "webpack-prod-gallery",
 | 
			
		||||
    "gen-index-gallery-prod"
 | 
			
		||||
  )
 | 
			
		||||
);
 | 
			
		||||
 
 | 
			
		||||
@@ -26,14 +26,23 @@ function copyTranslations(staticDir) {
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function copyMdiIcons(staticDir) {
 | 
			
		||||
  const staticPath = genStaticPath(staticDir);
 | 
			
		||||
 | 
			
		||||
  // MDI icons output
 | 
			
		||||
  fs.copySync(polyPath("build/mdi"), staticPath("mdi"));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function copyPolyfills(staticDir) {
 | 
			
		||||
  const staticPath = genStaticPath(staticDir);
 | 
			
		||||
 | 
			
		||||
  // Web Component polyfills and adapters
 | 
			
		||||
  // For custom panels using ES5 builds that don't use Babel 7+
 | 
			
		||||
  copyFileDir(
 | 
			
		||||
    npmPath("@webcomponents/webcomponentsjs/custom-elements-es5-adapter.js"),
 | 
			
		||||
    staticPath("polyfills/")
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  // Web Component polyfills and adapters
 | 
			
		||||
  copyFileDir(
 | 
			
		||||
    npmPath("@webcomponents/webcomponentsjs/webcomponents-bundle.js"),
 | 
			
		||||
    staticPath("polyfills/")
 | 
			
		||||
@@ -44,6 +53,12 @@ function copyPolyfills(staticDir) {
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function copyLoaderJS(staticDir) {
 | 
			
		||||
  const staticPath = genStaticPath(staticDir);
 | 
			
		||||
  copyFileDir(npmPath("systemjs/dist/s.min.js"), staticPath("js"));
 | 
			
		||||
  copyFileDir(npmPath("systemjs/dist/s.min.js.map"), staticPath("js"));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function copyFonts(staticDir) {
 | 
			
		||||
  const staticPath = genStaticPath(staticDir);
 | 
			
		||||
  // Local fonts
 | 
			
		||||
@@ -65,67 +80,68 @@ function copyMapPanel(staticDir) {
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gulp.task("copy-translations", (done) => {
 | 
			
		||||
  const staticDir = paths.static;
 | 
			
		||||
gulp.task("copy-translations-app", async () => {
 | 
			
		||||
  const staticDir = paths.app_output_static;
 | 
			
		||||
  copyTranslations(staticDir);
 | 
			
		||||
  done();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("copy-static", (done) => {
 | 
			
		||||
  const staticDir = paths.static;
 | 
			
		||||
  const staticPath = genStaticPath(paths.static);
 | 
			
		||||
gulp.task("copy-static-app", async () => {
 | 
			
		||||
  const staticDir = paths.app_output_static;
 | 
			
		||||
  // Basic static files
 | 
			
		||||
  fs.copySync(polyPath("public"), paths.root);
 | 
			
		||||
  fs.copySync(polyPath("public"), paths.app_output_root);
 | 
			
		||||
 | 
			
		||||
  copyLoaderJS(staticDir);
 | 
			
		||||
  copyPolyfills(staticDir);
 | 
			
		||||
  copyFonts(staticDir);
 | 
			
		||||
  copyTranslations(staticDir);
 | 
			
		||||
  copyMdiIcons(staticDir);
 | 
			
		||||
 | 
			
		||||
  // Panel assets
 | 
			
		||||
  copyFileDir(
 | 
			
		||||
    npmPath("react-big-calendar/lib/css/react-big-calendar.css"),
 | 
			
		||||
    staticPath("panels/calendar/")
 | 
			
		||||
  );
 | 
			
		||||
  copyMapPanel(staticDir);
 | 
			
		||||
  done();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("copy-static-demo", (done) => {
 | 
			
		||||
gulp.task("copy-static-demo", async () => {
 | 
			
		||||
  // Copy app static files
 | 
			
		||||
  fs.copySync(
 | 
			
		||||
    polyPath("public/static"),
 | 
			
		||||
    path.resolve(paths.demo_root, "static")
 | 
			
		||||
    path.resolve(paths.demo_output_root, "static")
 | 
			
		||||
  );
 | 
			
		||||
  // Copy demo static files
 | 
			
		||||
  fs.copySync(path.resolve(paths.demo_dir, "public"), paths.demo_root);
 | 
			
		||||
  fs.copySync(path.resolve(paths.demo_dir, "public"), paths.demo_output_root);
 | 
			
		||||
 | 
			
		||||
  copyPolyfills(paths.demo_static);
 | 
			
		||||
  copyMapPanel(paths.demo_static);
 | 
			
		||||
  copyFonts(paths.demo_static);
 | 
			
		||||
  copyTranslations(paths.demo_static);
 | 
			
		||||
  done();
 | 
			
		||||
  copyLoaderJS(paths.demo_output_static);
 | 
			
		||||
  copyPolyfills(paths.demo_output_static);
 | 
			
		||||
  copyMapPanel(paths.demo_output_static);
 | 
			
		||||
  copyFonts(paths.demo_output_static);
 | 
			
		||||
  copyTranslations(paths.demo_output_static);
 | 
			
		||||
  copyMdiIcons(paths.demo_output_static);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("copy-static-cast", (done) => {
 | 
			
		||||
gulp.task("copy-static-cast", async () => {
 | 
			
		||||
  // Copy app static files
 | 
			
		||||
  fs.copySync(polyPath("public/static"), paths.cast_static);
 | 
			
		||||
  fs.copySync(polyPath("public/static"), paths.cast_output_static);
 | 
			
		||||
  // Copy cast static files
 | 
			
		||||
  fs.copySync(path.resolve(paths.cast_dir, "public"), paths.cast_root);
 | 
			
		||||
  fs.copySync(path.resolve(paths.cast_dir, "public"), paths.cast_output_root);
 | 
			
		||||
 | 
			
		||||
  copyMapPanel(paths.cast_static);
 | 
			
		||||
  copyFonts(paths.cast_static);
 | 
			
		||||
  copyTranslations(paths.cast_static);
 | 
			
		||||
  done();
 | 
			
		||||
  copyLoaderJS(paths.cast_output_static);
 | 
			
		||||
  copyPolyfills(paths.cast_output_static);
 | 
			
		||||
  copyMapPanel(paths.cast_output_static);
 | 
			
		||||
  copyFonts(paths.cast_output_static);
 | 
			
		||||
  copyTranslations(paths.cast_output_static);
 | 
			
		||||
  copyMdiIcons(paths.cast_output_static);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("copy-static-gallery", (done) => {
 | 
			
		||||
gulp.task("copy-static-gallery", async () => {
 | 
			
		||||
  // Copy app static files
 | 
			
		||||
  fs.copySync(polyPath("public/static"), paths.gallery_static);
 | 
			
		||||
  fs.copySync(polyPath("public/static"), paths.gallery_output_static);
 | 
			
		||||
  // Copy gallery static files
 | 
			
		||||
  fs.copySync(path.resolve(paths.gallery_dir, "public"), paths.gallery_root);
 | 
			
		||||
  fs.copySync(
 | 
			
		||||
    path.resolve(paths.gallery_dir, "public"),
 | 
			
		||||
    paths.gallery_output_root
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  copyMapPanel(paths.gallery_static);
 | 
			
		||||
  copyFonts(paths.gallery_static);
 | 
			
		||||
  copyTranslations(paths.gallery_static);
 | 
			
		||||
  done();
 | 
			
		||||
  copyMapPanel(paths.gallery_output_static);
 | 
			
		||||
  copyFonts(paths.gallery_output_static);
 | 
			
		||||
  copyTranslations(paths.gallery_output_static);
 | 
			
		||||
  copyMdiIcons(paths.gallery_output_static);
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										120
									
								
								build-scripts/gulp/gen-icons-json.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								build-scripts/gulp/gen-icons-json.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,120 @@
 | 
			
		||||
const gulp = require("gulp");
 | 
			
		||||
const path = require("path");
 | 
			
		||||
const fs = require("fs");
 | 
			
		||||
const hash = require("object-hash");
 | 
			
		||||
 | 
			
		||||
const ICON_PACKAGE_PATH = path.resolve(
 | 
			
		||||
  __dirname,
 | 
			
		||||
  "../../node_modules/@mdi/svg/"
 | 
			
		||||
);
 | 
			
		||||
const META_PATH = path.resolve(ICON_PACKAGE_PATH, "meta.json");
 | 
			
		||||
const PACKAGE_PATH = path.resolve(ICON_PACKAGE_PATH, "package.json");
 | 
			
		||||
const ICON_PATH = path.resolve(ICON_PACKAGE_PATH, "svg");
 | 
			
		||||
const OUTPUT_DIR = path.resolve(__dirname, "../../build/mdi");
 | 
			
		||||
const REMOVED_ICONS_PATH = path.resolve(__dirname, "../removedIcons.json");
 | 
			
		||||
 | 
			
		||||
const encoding = "utf8";
 | 
			
		||||
 | 
			
		||||
const getMeta = () => {
 | 
			
		||||
  const file = fs.readFileSync(META_PATH, { encoding });
 | 
			
		||||
  const meta = JSON.parse(file);
 | 
			
		||||
  return meta.map((icon) => {
 | 
			
		||||
    const svg = fs.readFileSync(`${ICON_PATH}/${icon.name}.svg`, {
 | 
			
		||||
      encoding,
 | 
			
		||||
    });
 | 
			
		||||
    return { path: svg.match(/ d="([^"]+)"/)[1], name: icon.name };
 | 
			
		||||
  });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const addRemovedMeta = (meta) => {
 | 
			
		||||
  const file = fs.readFileSync(REMOVED_ICONS_PATH, { encoding });
 | 
			
		||||
  const removed = JSON.parse(file);
 | 
			
		||||
  const combinedMeta = [...meta, ...removed];
 | 
			
		||||
  return combinedMeta.sort((a, b) => a.name.localeCompare(b.name));
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const splitBySize = (meta) => {
 | 
			
		||||
  const chunks = [];
 | 
			
		||||
  const CHUNK_SIZE = 50000;
 | 
			
		||||
 | 
			
		||||
  let curSize = 0;
 | 
			
		||||
  let startKey;
 | 
			
		||||
  let icons = [];
 | 
			
		||||
 | 
			
		||||
  Object.values(meta).forEach((icon) => {
 | 
			
		||||
    if (startKey === undefined) {
 | 
			
		||||
      startKey = icon.name;
 | 
			
		||||
    }
 | 
			
		||||
    curSize += icon.path.length;
 | 
			
		||||
    icons.push(icon);
 | 
			
		||||
    if (curSize > CHUNK_SIZE) {
 | 
			
		||||
      chunks.push({
 | 
			
		||||
        startKey,
 | 
			
		||||
        endKey: icon.name,
 | 
			
		||||
        icons,
 | 
			
		||||
      });
 | 
			
		||||
      curSize = 0;
 | 
			
		||||
      startKey = undefined;
 | 
			
		||||
      icons = [];
 | 
			
		||||
    }
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  chunks.push({
 | 
			
		||||
    startKey,
 | 
			
		||||
    icons,
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  return chunks;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const findDifferentiator = (curString, prevString) => {
 | 
			
		||||
  for (let i = 0; i < curString.length; i++) {
 | 
			
		||||
    if (curString[i] !== prevString[i]) {
 | 
			
		||||
      return curString.substring(0, i + 1);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  throw new Error("Cannot find differentiator", curString, prevString);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
gulp.task("gen-icons-json", (done) => {
 | 
			
		||||
  const meta = addRemovedMeta(getMeta());
 | 
			
		||||
  const split = splitBySize(meta);
 | 
			
		||||
 | 
			
		||||
  if (!fs.existsSync(OUTPUT_DIR)) {
 | 
			
		||||
    fs.mkdirSync(OUTPUT_DIR, { recursive: true });
 | 
			
		||||
  }
 | 
			
		||||
  const parts = [];
 | 
			
		||||
 | 
			
		||||
  let lastEnd;
 | 
			
		||||
  split.forEach((chunk) => {
 | 
			
		||||
    let startKey;
 | 
			
		||||
    if (lastEnd === undefined) {
 | 
			
		||||
      chunk.startKey = undefined;
 | 
			
		||||
      startKey = undefined;
 | 
			
		||||
    } else {
 | 
			
		||||
      startKey = findDifferentiator(chunk.startKey, lastEnd);
 | 
			
		||||
    }
 | 
			
		||||
    lastEnd = chunk.endKey;
 | 
			
		||||
 | 
			
		||||
    const output = {};
 | 
			
		||||
    chunk.icons.forEach((icon) => {
 | 
			
		||||
      output[icon.name] = icon.path;
 | 
			
		||||
    });
 | 
			
		||||
    const filename = hash(output);
 | 
			
		||||
    parts.push({ start: startKey, file: filename });
 | 
			
		||||
    fs.writeFileSync(
 | 
			
		||||
      path.resolve(OUTPUT_DIR, `${filename}.json`),
 | 
			
		||||
      JSON.stringify(output)
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  const file = fs.readFileSync(PACKAGE_PATH, { encoding });
 | 
			
		||||
  const package = JSON.parse(file);
 | 
			
		||||
 | 
			
		||||
  fs.writeFileSync(
 | 
			
		||||
    path.resolve(OUTPUT_DIR, "iconMetadata.json"),
 | 
			
		||||
    JSON.stringify({ version: package.version, parts })
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  done();
 | 
			
		||||
});
 | 
			
		||||
@@ -1,127 +0,0 @@
 | 
			
		||||
const gulp = require("gulp");
 | 
			
		||||
const path = require("path");
 | 
			
		||||
const fs = require("fs");
 | 
			
		||||
const paths = require("../paths");
 | 
			
		||||
const { mapFiles } = require("../util");
 | 
			
		||||
 | 
			
		||||
const ICON_PACKAGE_PATH = path.resolve(
 | 
			
		||||
  __dirname,
 | 
			
		||||
  "../../node_modules/@mdi/svg/"
 | 
			
		||||
);
 | 
			
		||||
const META_PATH = path.resolve(ICON_PACKAGE_PATH, "meta.json");
 | 
			
		||||
const ICON_PATH = path.resolve(ICON_PACKAGE_PATH, "svg");
 | 
			
		||||
const OUTPUT_DIR = path.resolve(__dirname, "../../build");
 | 
			
		||||
const MDI_OUTPUT_PATH = path.resolve(OUTPUT_DIR, "mdi.html");
 | 
			
		||||
const HASS_OUTPUT_PATH = path.resolve(OUTPUT_DIR, "hass-icons.html");
 | 
			
		||||
 | 
			
		||||
const BUILT_IN_PANEL_ICONS = [
 | 
			
		||||
  "calendar", // Calendar
 | 
			
		||||
  "settings", // Config
 | 
			
		||||
  "home-assistant", // Hass.io
 | 
			
		||||
  "poll-box", // History panel
 | 
			
		||||
  "format-list-bulleted-type", // Logbook
 | 
			
		||||
  "mailbox", // Mailbox
 | 
			
		||||
  "tooltip-account", // Map
 | 
			
		||||
  "cart", // Shopping List
 | 
			
		||||
  "hammer", // developer-tools
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
// Given an icon name, load the SVG file
 | 
			
		||||
function loadIcon(name) {
 | 
			
		||||
  const iconPath = path.resolve(ICON_PATH, `${name}.svg`);
 | 
			
		||||
  try {
 | 
			
		||||
    return fs.readFileSync(iconPath, "utf-8");
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    return null;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Given an SVG file, convert it to an iron-iconset-svg definition
 | 
			
		||||
function transformXMLtoPolymer(name, xml) {
 | 
			
		||||
  const start = xml.indexOf("><path") + 1;
 | 
			
		||||
  const end = xml.length - start - 6;
 | 
			
		||||
  const pth = xml.substr(start, end);
 | 
			
		||||
  return `<g id="${name}">${pth}</g>`;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Given an iconset name and icon names, generate a polymer iconset
 | 
			
		||||
function generateIconset(iconsetName, iconNames) {
 | 
			
		||||
  const iconDefs = Array.from(iconNames)
 | 
			
		||||
    .map((name) => {
 | 
			
		||||
      const iconDef = loadIcon(name);
 | 
			
		||||
      if (!iconDef) {
 | 
			
		||||
        throw new Error(`Unknown icon referenced: ${name}`);
 | 
			
		||||
      }
 | 
			
		||||
      return transformXMLtoPolymer(name, iconDef);
 | 
			
		||||
    })
 | 
			
		||||
    .join("");
 | 
			
		||||
  return `<ha-iconset-svg name="${iconsetName}" size="24"><svg><defs>${iconDefs}</defs></svg></ha-iconset-svg>`;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Find all icons used by the project.
 | 
			
		||||
function findIcons(searchPath, iconsetName) {
 | 
			
		||||
  const iconRegex = new RegExp(`${iconsetName}:[\\w-]+`, "g");
 | 
			
		||||
  const icons = new Set();
 | 
			
		||||
  function processFile(filename) {
 | 
			
		||||
    const content = fs.readFileSync(filename);
 | 
			
		||||
    let match;
 | 
			
		||||
    // eslint-disable-next-line
 | 
			
		||||
    while ((match = iconRegex.exec(content))) {
 | 
			
		||||
      // strip off "hass:" and add to set
 | 
			
		||||
      icons.add(match[0].substr(iconsetName.length + 1));
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  mapFiles(searchPath, ".js", processFile);
 | 
			
		||||
  mapFiles(searchPath, ".ts", processFile);
 | 
			
		||||
  return icons;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gulp.task("gen-icons-mdi", (done) => {
 | 
			
		||||
  const meta = JSON.parse(
 | 
			
		||||
    fs.readFileSync(path.resolve(ICON_PACKAGE_PATH, META_PATH), "UTF-8")
 | 
			
		||||
  );
 | 
			
		||||
  const iconNames = meta.map((iconInfo) => iconInfo.name);
 | 
			
		||||
  if (!fs.existsSync(OUTPUT_DIR)) {
 | 
			
		||||
    fs.mkdirSync(OUTPUT_DIR);
 | 
			
		||||
  }
 | 
			
		||||
  fs.writeFileSync(MDI_OUTPUT_PATH, generateIconset("mdi", iconNames));
 | 
			
		||||
  done();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("gen-icons-app", (done) => {
 | 
			
		||||
  const iconNames = findIcons("./src", "hass");
 | 
			
		||||
  BUILT_IN_PANEL_ICONS.forEach((name) => iconNames.add(name));
 | 
			
		||||
  if (!fs.existsSync(OUTPUT_DIR)) {
 | 
			
		||||
    fs.mkdirSync(OUTPUT_DIR);
 | 
			
		||||
  }
 | 
			
		||||
  fs.writeFileSync(HASS_OUTPUT_PATH, generateIconset("hass", iconNames));
 | 
			
		||||
  done();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("gen-icons-demo", (done) => {
 | 
			
		||||
  const iconNames = findIcons(path.resolve(paths.demo_dir, "./src"), "hademo");
 | 
			
		||||
  fs.writeFileSync(
 | 
			
		||||
    path.resolve(paths.demo_dir, "hademo-icons.html"),
 | 
			
		||||
    generateIconset("hademo", iconNames)
 | 
			
		||||
  );
 | 
			
		||||
  done();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("gen-icons-hassio", (done) => {
 | 
			
		||||
  const iconNames = findIcons(
 | 
			
		||||
    path.resolve(paths.hassio_dir, "./src"),
 | 
			
		||||
    "hassio"
 | 
			
		||||
  );
 | 
			
		||||
  // Find hassio icons inside HA main repo.
 | 
			
		||||
  for (const item of findIcons(
 | 
			
		||||
    path.resolve(paths.polymer_dir, "./src"),
 | 
			
		||||
    "hassio"
 | 
			
		||||
  )) {
 | 
			
		||||
    iconNames.add(item);
 | 
			
		||||
  }
 | 
			
		||||
  fs.writeFileSync(
 | 
			
		||||
    path.resolve(paths.hassio_dir, "hassio-icons.html"),
 | 
			
		||||
    generateIconset("hassio", iconNames)
 | 
			
		||||
  );
 | 
			
		||||
  done();
 | 
			
		||||
});
 | 
			
		||||
@@ -1,11 +1,15 @@
 | 
			
		||||
const gulp = require("gulp");
 | 
			
		||||
const fs = require("fs");
 | 
			
		||||
const path = require("path");
 | 
			
		||||
 | 
			
		||||
const envVars = require("../env");
 | 
			
		||||
const env = require("../env");
 | 
			
		||||
const paths = require("../paths");
 | 
			
		||||
 | 
			
		||||
require("./clean.js");
 | 
			
		||||
require("./gen-icons.js");
 | 
			
		||||
require("./gen-icons-json.js");
 | 
			
		||||
require("./webpack.js");
 | 
			
		||||
require("./compress.js");
 | 
			
		||||
require("./rollup.js");
 | 
			
		||||
 | 
			
		||||
gulp.task(
 | 
			
		||||
  "develop-hassio",
 | 
			
		||||
@@ -14,8 +18,9 @@ gulp.task(
 | 
			
		||||
      process.env.NODE_ENV = "development";
 | 
			
		||||
    },
 | 
			
		||||
    "clean-hassio",
 | 
			
		||||
    gulp.parallel("gen-icons-hassio", "gen-icons-mdi"),
 | 
			
		||||
    "webpack-watch-hassio"
 | 
			
		||||
    "gen-icons-json",
 | 
			
		||||
    "gen-index-hassio-dev",
 | 
			
		||||
    env.useRollup() ? "rollup-watch-hassio" : "webpack-watch-hassio"
 | 
			
		||||
  )
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
@@ -26,9 +31,10 @@ gulp.task(
 | 
			
		||||
      process.env.NODE_ENV = "production";
 | 
			
		||||
    },
 | 
			
		||||
    "clean-hassio",
 | 
			
		||||
    gulp.parallel("gen-icons-hassio", "gen-icons-mdi"),
 | 
			
		||||
    "webpack-prod-hassio",
 | 
			
		||||
    "gen-icons-json",
 | 
			
		||||
    env.useRollup() ? "rollup-prod-hassio" : "webpack-prod-hassio",
 | 
			
		||||
    "gen-index-hassio-prod",
 | 
			
		||||
    ...// Don't compress running tests
 | 
			
		||||
    (envVars.isTravis() ? [] : ["compress-hassio"])
 | 
			
		||||
    (env.isTest() ? [] : ["compress-hassio"])
 | 
			
		||||
  )
 | 
			
		||||
);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										146
									
								
								build-scripts/gulp/rollup.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								build-scripts/gulp/rollup.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,146 @@
 | 
			
		||||
// Tasks to run Rollup
 | 
			
		||||
const path = require("path");
 | 
			
		||||
const gulp = require("gulp");
 | 
			
		||||
const rollup = require("rollup");
 | 
			
		||||
const handler = require("serve-handler");
 | 
			
		||||
const http = require("http");
 | 
			
		||||
const log = require("fancy-log");
 | 
			
		||||
const rollupConfig = require("../rollup");
 | 
			
		||||
const paths = require("../paths");
 | 
			
		||||
const open = require("open");
 | 
			
		||||
 | 
			
		||||
const bothBuilds = (createConfigFunc, params) =>
 | 
			
		||||
  gulp.series(
 | 
			
		||||
    async function buildLatest() {
 | 
			
		||||
      await buildRollup(
 | 
			
		||||
        createConfigFunc({
 | 
			
		||||
          ...params,
 | 
			
		||||
          latestBuild: true,
 | 
			
		||||
        })
 | 
			
		||||
      );
 | 
			
		||||
    },
 | 
			
		||||
    async function buildES5() {
 | 
			
		||||
      await buildRollup(
 | 
			
		||||
        createConfigFunc({
 | 
			
		||||
          ...params,
 | 
			
		||||
          latestBuild: false,
 | 
			
		||||
        })
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
function createServer(serveOptions) {
 | 
			
		||||
  const server = http.createServer((request, response) => {
 | 
			
		||||
    return handler(request, response, {
 | 
			
		||||
      public: serveOptions.root,
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  server.listen(
 | 
			
		||||
    serveOptions.port,
 | 
			
		||||
    serveOptions.networkAccess ? "0.0.0.0" : undefined,
 | 
			
		||||
    () => {
 | 
			
		||||
      log.info(`Available at http://localhost:${serveOptions.port}`);
 | 
			
		||||
      open(`http://localhost:${serveOptions.port}`);
 | 
			
		||||
    }
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function watchRollup(createConfig, extraWatchSrc = [], serveOptions) {
 | 
			
		||||
  const { inputOptions, outputOptions } = createConfig({
 | 
			
		||||
    isProdBuild: false,
 | 
			
		||||
    latestBuild: true,
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  const watcher = rollup.watch({
 | 
			
		||||
    ...inputOptions,
 | 
			
		||||
    output: [outputOptions],
 | 
			
		||||
    watch: {
 | 
			
		||||
      include: ["src/**"] + extraWatchSrc,
 | 
			
		||||
    },
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  let startedHttp = false;
 | 
			
		||||
 | 
			
		||||
  watcher.on("event", (event) => {
 | 
			
		||||
    if (event.code === "BUNDLE_END") {
 | 
			
		||||
      log(`Build done @ ${new Date().toLocaleTimeString()}`);
 | 
			
		||||
    } else if (event.code === "ERROR") {
 | 
			
		||||
      log.error(event.error);
 | 
			
		||||
    } else if (event.code === "END") {
 | 
			
		||||
      if (startedHttp || !serveOptions) {
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
      startedHttp = true;
 | 
			
		||||
      createServer(serveOptions);
 | 
			
		||||
    }
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  gulp.watch(
 | 
			
		||||
    path.join(paths.translations_src, "en.json"),
 | 
			
		||||
    gulp.series("build-translations", "copy-translations-app")
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async function buildRollup(config) {
 | 
			
		||||
  const bundle = await rollup.rollup(config.inputOptions);
 | 
			
		||||
  await bundle.write(config.outputOptions);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gulp.task("rollup-watch-app", () => {
 | 
			
		||||
  watchRollup(rollupConfig.createAppConfig);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("rollup-watch-hassio", () => {
 | 
			
		||||
  watchRollup(rollupConfig.createHassioConfig, ["hassio/src/**"]);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("rollup-dev-server-demo", () => {
 | 
			
		||||
  watchRollup(rollupConfig.createDemoConfig, ["demo/src/**"], {
 | 
			
		||||
    root: paths.demo_output_root,
 | 
			
		||||
    port: 8090,
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("rollup-dev-server-cast", () => {
 | 
			
		||||
  watchRollup(rollupConfig.createCastConfig, ["cast/src/**"], {
 | 
			
		||||
    root: paths.cast_output_root,
 | 
			
		||||
    port: 8080,
 | 
			
		||||
    networkAccess: true,
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("rollup-dev-server-gallery", () => {
 | 
			
		||||
  watchRollup(rollupConfig.createGalleryConfig, ["gallery/src/**"], {
 | 
			
		||||
    root: paths.gallery_output_root,
 | 
			
		||||
    port: 8100,
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task(
 | 
			
		||||
  "rollup-prod-app",
 | 
			
		||||
  bothBuilds(rollupConfig.createAppConfig, { isProdBuild: true })
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
gulp.task(
 | 
			
		||||
  "rollup-prod-demo",
 | 
			
		||||
  bothBuilds(rollupConfig.createDemoConfig, { isProdBuild: true })
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
gulp.task(
 | 
			
		||||
  "rollup-prod-cast",
 | 
			
		||||
  bothBuilds(rollupConfig.createCastConfig, { isProdBuild: true })
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
gulp.task("rollup-prod-hassio", () =>
 | 
			
		||||
  bothBuilds(rollupConfig.createHassioConfig, { isProdBuild: true })
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
gulp.task("rollup-prod-gallery", () =>
 | 
			
		||||
  buildRollup(
 | 
			
		||||
    rollupConfig.createGalleryConfig({
 | 
			
		||||
      isProdBuild: true,
 | 
			
		||||
      latestBuild: true,
 | 
			
		||||
    })
 | 
			
		||||
  )
 | 
			
		||||
);
 | 
			
		||||
@@ -5,18 +5,22 @@
 | 
			
		||||
const gulp = require("gulp");
 | 
			
		||||
const path = require("path");
 | 
			
		||||
const fs = require("fs-extra");
 | 
			
		||||
const config = require("../paths.js");
 | 
			
		||||
const workboxBuild = require("workbox-build");
 | 
			
		||||
const sourceMapUrl = require("source-map-url");
 | 
			
		||||
const paths = require("../paths.js");
 | 
			
		||||
 | 
			
		||||
const swPath = path.resolve(config.root, "service_worker.js");
 | 
			
		||||
const swDest = path.resolve(paths.app_output_root, "service_worker.js");
 | 
			
		||||
 | 
			
		||||
const writeSW = (content) => fs.outputFileSync(swPath, content.trim() + "\n");
 | 
			
		||||
const writeSW = (content) => fs.outputFileSync(swDest, content.trim() + "\n");
 | 
			
		||||
 | 
			
		||||
gulp.task("gen-service-worker-dev", (done) => {
 | 
			
		||||
gulp.task("gen-service-worker-app-dev", (done) => {
 | 
			
		||||
  writeSW(
 | 
			
		||||
    `
 | 
			
		||||
console.debug('Service worker disabled in development');
 | 
			
		||||
 | 
			
		||||
self.addEventListener('install', (event) => {
 | 
			
		||||
  // This will activate the dev service worker,
 | 
			
		||||
  // removing any prod service worker the dev might have running
 | 
			
		||||
  self.skipWaiting();
 | 
			
		||||
});
 | 
			
		||||
  `
 | 
			
		||||
@@ -24,10 +28,69 @@ self.addEventListener('install', (event) => {
 | 
			
		||||
  done();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("gen-service-worker-prod", (done) => {
 | 
			
		||||
  fs.copySync(
 | 
			
		||||
    path.resolve(config.output, "service_worker.js"),
 | 
			
		||||
    path.resolve(config.root, "service_worker.js")
 | 
			
		||||
gulp.task("gen-service-worker-app-prod", async () => {
 | 
			
		||||
  // Read bundled source file
 | 
			
		||||
  const bundleManifestLatest = require(path.resolve(
 | 
			
		||||
    paths.app_output_latest,
 | 
			
		||||
    "manifest.json"
 | 
			
		||||
  ));
 | 
			
		||||
  let serviceWorkerContent = fs.readFileSync(
 | 
			
		||||
    paths.app_output_root + bundleManifestLatest["service_worker.js"],
 | 
			
		||||
    "utf-8"
 | 
			
		||||
  );
 | 
			
		||||
  done();
 | 
			
		||||
 | 
			
		||||
  // Delete old file from frontend_latest so manifest won't pick it up
 | 
			
		||||
  fs.removeSync(
 | 
			
		||||
    paths.app_output_root + bundleManifestLatest["service_worker.js"]
 | 
			
		||||
  );
 | 
			
		||||
  fs.removeSync(
 | 
			
		||||
    paths.app_output_root + bundleManifestLatest["service_worker.js.map"]
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  // Remove ES5
 | 
			
		||||
  const bundleManifestES5 = require(path.resolve(
 | 
			
		||||
    paths.app_output_es5,
 | 
			
		||||
    "manifest.json"
 | 
			
		||||
  ));
 | 
			
		||||
  fs.removeSync(paths.app_output_root + bundleManifestES5["service_worker.js"]);
 | 
			
		||||
  fs.removeSync(
 | 
			
		||||
    paths.app_output_root + bundleManifestES5["service_worker.js.map"]
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  const workboxManifest = await workboxBuild.getManifest({
 | 
			
		||||
    // Files that mach this pattern will be considered unique and skip revision check
 | 
			
		||||
    // ignore JS files + translation files
 | 
			
		||||
    dontCacheBustURLsMatching: /(frontend_latest\/.+|static\/translations\/.+)/,
 | 
			
		||||
 | 
			
		||||
    globDirectory: paths.app_output_root,
 | 
			
		||||
    globPatterns: [
 | 
			
		||||
      "frontend_latest/*.js",
 | 
			
		||||
      // Cache all English translations because we catch them as fallback
 | 
			
		||||
      // Using pattern to match hash instead of * to avoid caching en-GB
 | 
			
		||||
      // 'v' added as valid hash letter because in dev we hash with 'dev'
 | 
			
		||||
      "static/translations/**/en-+([a-fv0-9]).json",
 | 
			
		||||
      // Icon shown on splash screen
 | 
			
		||||
      "static/icons/favicon-192x192.png",
 | 
			
		||||
      "static/icons/favicon.ico",
 | 
			
		||||
      // Common fonts
 | 
			
		||||
      "static/fonts/roboto/Roboto-Light.woff2",
 | 
			
		||||
      "static/fonts/roboto/Roboto-Medium.woff2",
 | 
			
		||||
      "static/fonts/roboto/Roboto-Regular.woff2",
 | 
			
		||||
      "static/fonts/roboto/Roboto-Bold.woff2",
 | 
			
		||||
    ],
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  for (const warning of workboxManifest.warnings) {
 | 
			
		||||
    console.warn(warning);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // remove source map and add WB manifest
 | 
			
		||||
  serviceWorkerContent = sourceMapUrl.removeFrom(serviceWorkerContent);
 | 
			
		||||
  serviceWorkerContent = serviceWorkerContent.replace(
 | 
			
		||||
    "WB_MANIFEST",
 | 
			
		||||
    JSON.stringify(workboxManifest.manifestEntries)
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  // Write new file to root
 | 
			
		||||
  fs.writeFileSync(swDest, serviceWorkerContent);
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,6 @@ const gulp = require("gulp");
 | 
			
		||||
const fs = require("fs");
 | 
			
		||||
const foreach = require("gulp-foreach");
 | 
			
		||||
const merge = require("gulp-merge-json");
 | 
			
		||||
const minify = require("gulp-jsonminify");
 | 
			
		||||
const rename = require("gulp-rename");
 | 
			
		||||
const transform = require("gulp-json-transform");
 | 
			
		||||
const { mapFiles } = require("../util");
 | 
			
		||||
@@ -34,21 +33,10 @@ String.prototype.rsplit = function (sep, maxsplit) {
 | 
			
		||||
    : split;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Panel translations which should be split from the core translations. These
 | 
			
		||||
// should mirror the fragment definitions in polymer.json, so that we load
 | 
			
		||||
// additional resources at equivalent points.
 | 
			
		||||
const TRANSLATION_FRAGMENTS = [
 | 
			
		||||
  "config",
 | 
			
		||||
  "history",
 | 
			
		||||
  "logbook",
 | 
			
		||||
  "mailbox",
 | 
			
		||||
  "profile",
 | 
			
		||||
  "shopping-list",
 | 
			
		||||
  "page-authorize",
 | 
			
		||||
  "page-demo",
 | 
			
		||||
  "page-onboarding",
 | 
			
		||||
  "developer-tools",
 | 
			
		||||
];
 | 
			
		||||
// Panel translations which should be split from the core translations.
 | 
			
		||||
const TRANSLATION_FRAGMENTS = Object.keys(
 | 
			
		||||
  require("../../src/translations/en.json").ui.panel
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
function recursiveFlatten(prefix, data) {
 | 
			
		||||
  let output = {};
 | 
			
		||||
@@ -275,25 +263,6 @@ gulp.task(taskName, function () {
 | 
			
		||||
    .src(fullDir + "/*.json")
 | 
			
		||||
    .pipe(
 | 
			
		||||
      transform((data, file) => {
 | 
			
		||||
        // HACK to pull in old state translations for cast
 | 
			
		||||
        if (process.env.IS_CAST) {
 | 
			
		||||
          const legacyTranslationsPath = path.join(
 | 
			
		||||
            "cast/src/translations",
 | 
			
		||||
            file.relative
 | 
			
		||||
          );
 | 
			
		||||
          if (fs.existsSync(legacyTranslationsPath)) {
 | 
			
		||||
            const legacyStrings = JSON.parse(
 | 
			
		||||
              fs.readFileSync(legacyTranslationsPath, "utf-8")
 | 
			
		||||
            );
 | 
			
		||||
            // These 2 translations still exist today.
 | 
			
		||||
            if (legacyStrings.state && "default" in legacyStrings.state) {
 | 
			
		||||
              legacyStrings.default.unknown = data.state.default.unknown;
 | 
			
		||||
              legacyStrings.default.unavailable =
 | 
			
		||||
                data.state.default.unavailable;
 | 
			
		||||
            }
 | 
			
		||||
            data.state = legacyStrings.state;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        TRANSLATION_FRAGMENTS.forEach((fragment) => {
 | 
			
		||||
          delete data.ui.panel[fragment];
 | 
			
		||||
        });
 | 
			
		||||
@@ -320,7 +289,6 @@ gulp.task("build-flattened-translations", function () {
 | 
			
		||||
        return flatten(data);
 | 
			
		||||
      })
 | 
			
		||||
    )
 | 
			
		||||
    .pipe(minify())
 | 
			
		||||
    .pipe(
 | 
			
		||||
      rename((filePath) => {
 | 
			
		||||
        if (filePath.dirname === "core") {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								build-scripts/gulp/wds.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								build-scripts/gulp/wds.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
// Tasks to run Rollup
 | 
			
		||||
const gulp = require("gulp");
 | 
			
		||||
const { startDevServer } = require("@web/dev-server");
 | 
			
		||||
 | 
			
		||||
gulp.task("wds-watch-app", () => {
 | 
			
		||||
  startDevServer({
 | 
			
		||||
    config: {
 | 
			
		||||
      watch: true,
 | 
			
		||||
    },
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
@@ -18,6 +18,14 @@ const bothBuilds = (createConfigFunc, params) => [
 | 
			
		||||
  createConfigFunc({ ...params, latestBuild: false }),
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {{
 | 
			
		||||
 *   compiler: import("webpack").Compiler,
 | 
			
		||||
 *   contentBase: string,
 | 
			
		||||
 *   port: number,
 | 
			
		||||
 *   listenHost?: string
 | 
			
		||||
 * }}
 | 
			
		||||
 */
 | 
			
		||||
const runDevServer = ({
 | 
			
		||||
  compiler,
 | 
			
		||||
  contentBase,
 | 
			
		||||
@@ -33,118 +41,110 @@ const runDevServer = ({
 | 
			
		||||
      throw err;
 | 
			
		||||
    }
 | 
			
		||||
    // Server listening
 | 
			
		||||
    log("[webpack-dev-server]", `http://localhost:${port}`);
 | 
			
		||||
    log(
 | 
			
		||||
      "[webpack-dev-server]",
 | 
			
		||||
      `Project is running at http://localhost:${port}`
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
const handler = (done) => (err, stats) => {
 | 
			
		||||
const doneHandler = (done) => (err, stats) => {
 | 
			
		||||
  if (err) {
 | 
			
		||||
    console.log(err.stack || err);
 | 
			
		||||
    log.error(err.stack || err);
 | 
			
		||||
    if (err.details) {
 | 
			
		||||
      console.log(err.details);
 | 
			
		||||
      log.error(err.details);
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  log(`Build done @ ${new Date().toLocaleTimeString()}`);
 | 
			
		||||
 | 
			
		||||
  if (stats.hasErrors() || stats.hasWarnings()) {
 | 
			
		||||
    console.log(stats.toString("minimal"));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  log(`Build done @ ${new Date().toLocaleTimeString()}`);
 | 
			
		||||
 | 
			
		||||
  if (done) {
 | 
			
		||||
    done();
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
gulp.task("webpack-watch-app", () => {
 | 
			
		||||
  // we are not calling done, so this command will run forever
 | 
			
		||||
  webpack(createAppConfig({ isProdBuild: false, latestBuild: true })).watch(
 | 
			
		||||
    { ignored: /build-translations/ },
 | 
			
		||||
    handler()
 | 
			
		||||
  );
 | 
			
		||||
  gulp.watch(
 | 
			
		||||
    path.join(paths.translations_src, "en.json"),
 | 
			
		||||
    gulp.series("build-translations", "copy-translations")
 | 
			
		||||
const prodBuild = (conf) =>
 | 
			
		||||
  new Promise((resolve) => {
 | 
			
		||||
    webpack(
 | 
			
		||||
      conf,
 | 
			
		||||
      // Resolve promise when done. Because we pass a callback, webpack closes itself
 | 
			
		||||
      doneHandler(resolve)
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
gulp.task(
 | 
			
		||||
  "webpack-prod-app",
 | 
			
		||||
  () =>
 | 
			
		||||
    new Promise((resolve) =>
 | 
			
		||||
      webpack(
 | 
			
		||||
        bothBuilds(createAppConfig, { isProdBuild: true }),
 | 
			
		||||
        handler(resolve)
 | 
			
		||||
      )
 | 
			
		||||
gulp.task("webpack-watch-app", () => {
 | 
			
		||||
  // This command will run forever because we don't close compiler
 | 
			
		||||
  webpack(createAppConfig({ isProdBuild: false, latestBuild: true })).watch(
 | 
			
		||||
    { ignored: /build-translations/ },
 | 
			
		||||
    doneHandler()
 | 
			
		||||
  );
 | 
			
		||||
  gulp.watch(
 | 
			
		||||
    path.join(paths.translations_src, "en.json"),
 | 
			
		||||
    gulp.series("build-translations", "copy-translations-app")
 | 
			
		||||
  );
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task("webpack-prod-app", () =>
 | 
			
		||||
  prodBuild(
 | 
			
		||||
    bothBuilds(createAppConfig, {
 | 
			
		||||
      isProdBuild: true,
 | 
			
		||||
    })
 | 
			
		||||
  )
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
gulp.task("webpack-dev-server-demo", () => {
 | 
			
		||||
  runDevServer({
 | 
			
		||||
    compiler: webpack(bothBuilds(createDemoConfig, { isProdBuild: false })),
 | 
			
		||||
    contentBase: paths.demo_root,
 | 
			
		||||
    contentBase: paths.demo_output_root,
 | 
			
		||||
    port: 8090,
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task(
 | 
			
		||||
  "webpack-prod-demo",
 | 
			
		||||
  () =>
 | 
			
		||||
    new Promise((resolve) =>
 | 
			
		||||
      webpack(
 | 
			
		||||
gulp.task("webpack-prod-demo", () =>
 | 
			
		||||
  prodBuild(
 | 
			
		||||
    bothBuilds(createDemoConfig, {
 | 
			
		||||
      isProdBuild: true,
 | 
			
		||||
        }),
 | 
			
		||||
        handler(resolve)
 | 
			
		||||
      )
 | 
			
		||||
    })
 | 
			
		||||
  )
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
gulp.task("webpack-dev-server-cast", () => {
 | 
			
		||||
  runDevServer({
 | 
			
		||||
    compiler: webpack(bothBuilds(createCastConfig, { isProdBuild: false })),
 | 
			
		||||
    contentBase: paths.cast_root,
 | 
			
		||||
    contentBase: paths.cast_output_root,
 | 
			
		||||
    port: 8080,
 | 
			
		||||
    // Accessible from the network, because that's how Cast hits it.
 | 
			
		||||
    listenHost: "0.0.0.0",
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task(
 | 
			
		||||
  "webpack-prod-cast",
 | 
			
		||||
  () =>
 | 
			
		||||
    new Promise((resolve) =>
 | 
			
		||||
      webpack(
 | 
			
		||||
gulp.task("webpack-prod-cast", () =>
 | 
			
		||||
  prodBuild(
 | 
			
		||||
    bothBuilds(createCastConfig, {
 | 
			
		||||
      isProdBuild: true,
 | 
			
		||||
        }),
 | 
			
		||||
 | 
			
		||||
        handler(resolve)
 | 
			
		||||
      )
 | 
			
		||||
    })
 | 
			
		||||
  )
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
gulp.task("webpack-watch-hassio", () => {
 | 
			
		||||
  // we are not calling done, so this command will run forever
 | 
			
		||||
  // This command will run forever because we don't close compiler
 | 
			
		||||
  webpack(
 | 
			
		||||
    createHassioConfig({
 | 
			
		||||
      isProdBuild: false,
 | 
			
		||||
      latestBuild: false,
 | 
			
		||||
      latestBuild: true,
 | 
			
		||||
    })
 | 
			
		||||
  ).watch({}, handler());
 | 
			
		||||
  ).watch({}, doneHandler());
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task(
 | 
			
		||||
  "webpack-prod-hassio",
 | 
			
		||||
  () =>
 | 
			
		||||
    new Promise((resolve) =>
 | 
			
		||||
      webpack(
 | 
			
		||||
        createHassioConfig({
 | 
			
		||||
gulp.task("webpack-prod-hassio", () =>
 | 
			
		||||
  prodBuild(
 | 
			
		||||
    bothBuilds(createHassioConfig, {
 | 
			
		||||
      isProdBuild: true,
 | 
			
		||||
          latestBuild: false,
 | 
			
		||||
        }),
 | 
			
		||||
        handler(resolve)
 | 
			
		||||
      )
 | 
			
		||||
    })
 | 
			
		||||
  )
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
@@ -152,22 +152,16 @@ gulp.task("webpack-dev-server-gallery", () => {
 | 
			
		||||
  runDevServer({
 | 
			
		||||
    // We don't use the es5 build, but the dev server will fuck up the publicPath if we don't
 | 
			
		||||
    compiler: webpack(bothBuilds(createGalleryConfig, { isProdBuild: false })),
 | 
			
		||||
    contentBase: paths.gallery_root,
 | 
			
		||||
    contentBase: paths.gallery_output_root,
 | 
			
		||||
    port: 8100,
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task(
 | 
			
		||||
  "webpack-prod-gallery",
 | 
			
		||||
  () =>
 | 
			
		||||
    new Promise((resolve) =>
 | 
			
		||||
      webpack(
 | 
			
		||||
gulp.task("webpack-prod-gallery", () =>
 | 
			
		||||
  prodBuild(
 | 
			
		||||
    createGalleryConfig({
 | 
			
		||||
      isProdBuild: true,
 | 
			
		||||
      latestBuild: true,
 | 
			
		||||
        }),
 | 
			
		||||
 | 
			
		||||
        handler(resolve)
 | 
			
		||||
      )
 | 
			
		||||
    })
 | 
			
		||||
  )
 | 
			
		||||
);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,34 +1,45 @@
 | 
			
		||||
var path = require("path");
 | 
			
		||||
const path = require("path");
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
  polymer_dir: path.resolve(__dirname, ".."),
 | 
			
		||||
 | 
			
		||||
  build_dir: path.resolve(__dirname, "../build"),
 | 
			
		||||
  root: path.resolve(__dirname, "../hass_frontend"),
 | 
			
		||||
  static: path.resolve(__dirname, "../hass_frontend/static"),
 | 
			
		||||
  output: path.resolve(__dirname, "../hass_frontend/frontend_latest"),
 | 
			
		||||
  output_es5: path.resolve(__dirname, "../hass_frontend/frontend_es5"),
 | 
			
		||||
  app_output_root: path.resolve(__dirname, "../hass_frontend"),
 | 
			
		||||
  app_output_static: path.resolve(__dirname, "../hass_frontend/static"),
 | 
			
		||||
  app_output_latest: path.resolve(
 | 
			
		||||
    __dirname,
 | 
			
		||||
    "../hass_frontend/frontend_latest"
 | 
			
		||||
  ),
 | 
			
		||||
  app_output_es5: path.resolve(__dirname, "../hass_frontend/frontend_es5"),
 | 
			
		||||
 | 
			
		||||
  demo_dir: path.resolve(__dirname, "../demo"),
 | 
			
		||||
  demo_root: path.resolve(__dirname, "../demo/dist"),
 | 
			
		||||
  demo_static: path.resolve(__dirname, "../demo/dist/static"),
 | 
			
		||||
  demo_output: path.resolve(__dirname, "../demo/dist/frontend_latest"),
 | 
			
		||||
  demo_output_root: path.resolve(__dirname, "../demo/dist"),
 | 
			
		||||
  demo_output_static: path.resolve(__dirname, "../demo/dist/static"),
 | 
			
		||||
  demo_output_latest: path.resolve(__dirname, "../demo/dist/frontend_latest"),
 | 
			
		||||
  demo_output_es5: path.resolve(__dirname, "../demo/dist/frontend_es5"),
 | 
			
		||||
 | 
			
		||||
  cast_dir: path.resolve(__dirname, "../cast"),
 | 
			
		||||
  cast_root: path.resolve(__dirname, "../cast/dist"),
 | 
			
		||||
  cast_static: path.resolve(__dirname, "../cast/dist/static"),
 | 
			
		||||
  cast_output: path.resolve(__dirname, "../cast/dist/frontend_latest"),
 | 
			
		||||
  cast_output_root: path.resolve(__dirname, "../cast/dist"),
 | 
			
		||||
  cast_output_static: path.resolve(__dirname, "../cast/dist/static"),
 | 
			
		||||
  cast_output_latest: path.resolve(__dirname, "../cast/dist/frontend_latest"),
 | 
			
		||||
  cast_output_es5: path.resolve(__dirname, "../cast/dist/frontend_es5"),
 | 
			
		||||
 | 
			
		||||
  gallery_dir: path.resolve(__dirname, "../gallery"),
 | 
			
		||||
  gallery_root: path.resolve(__dirname, "../gallery/dist"),
 | 
			
		||||
  gallery_output: path.resolve(__dirname, "../gallery/dist/frontend_latest"),
 | 
			
		||||
  gallery_static: path.resolve(__dirname, "../gallery/dist/static"),
 | 
			
		||||
  gallery_output_root: path.resolve(__dirname, "../gallery/dist"),
 | 
			
		||||
  gallery_output_latest: path.resolve(
 | 
			
		||||
    __dirname,
 | 
			
		||||
    "../gallery/dist/frontend_latest"
 | 
			
		||||
  ),
 | 
			
		||||
  gallery_output_static: path.resolve(__dirname, "../gallery/dist/static"),
 | 
			
		||||
 | 
			
		||||
  hassio_dir: path.resolve(__dirname, "../hassio"),
 | 
			
		||||
  hassio_root: path.resolve(__dirname, "../hassio/build"),
 | 
			
		||||
  hassio_publicPath: "/api/hassio/app/",
 | 
			
		||||
  hassio_output_root: path.resolve(__dirname, "../hassio/build"),
 | 
			
		||||
  hassio_output_latest: path.resolve(
 | 
			
		||||
    __dirname,
 | 
			
		||||
    "../hassio/build/frontend_latest"
 | 
			
		||||
  ),
 | 
			
		||||
  hassio_output_es5: path.resolve(__dirname, "../hassio/build/frontend_es5"),
 | 
			
		||||
  hassio_publicPath: "/api/hassio/app",
 | 
			
		||||
 | 
			
		||||
  translations_src: path.resolve(__dirname, "../src/translations"),
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								build-scripts/removedIcons.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								build-scripts/removedIcons.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
[]
 | 
			
		||||
							
								
								
									
										14
									
								
								build-scripts/rollup-plugins/dont-hash-plugin.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								build-scripts/rollup-plugins/dont-hash-plugin.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
module.exports = function (opts = {}) {
 | 
			
		||||
  const dontHash = opts.dontHash || new Set();
 | 
			
		||||
 | 
			
		||||
  return {
 | 
			
		||||
    name: "dont-hash",
 | 
			
		||||
    renderChunk(_code, chunk, _options) {
 | 
			
		||||
      if (!chunk.isEntry || !dontHash.has(chunk.name)) {
 | 
			
		||||
        return null;
 | 
			
		||||
      }
 | 
			
		||||
      chunk.fileName = `${chunk.name}.js`;
 | 
			
		||||
      return null;
 | 
			
		||||
    },
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										24
									
								
								build-scripts/rollup-plugins/ignore-plugin.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								build-scripts/rollup-plugins/ignore-plugin.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
module.exports = function (userOptions = {}) {
 | 
			
		||||
  // Files need to be absolute paths.
 | 
			
		||||
  // This only works if the file has no exports
 | 
			
		||||
  // and only is imported for its side effects
 | 
			
		||||
  const files = userOptions.files || [];
 | 
			
		||||
 | 
			
		||||
  if (files.length === 0) {
 | 
			
		||||
    return {
 | 
			
		||||
      name: "ignore",
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return {
 | 
			
		||||
    name: "ignore",
 | 
			
		||||
 | 
			
		||||
    load(id) {
 | 
			
		||||
      return files.some((toIgnorePath) => id.startsWith(toIgnorePath))
 | 
			
		||||
        ? {
 | 
			
		||||
            code: "",
 | 
			
		||||
          }
 | 
			
		||||
        : null;
 | 
			
		||||
    },
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										34
									
								
								build-scripts/rollup-plugins/manifest-plugin.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								build-scripts/rollup-plugins/manifest-plugin.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
const url = require("url");
 | 
			
		||||
 | 
			
		||||
const defaultOptions = {
 | 
			
		||||
  publicPath: "",
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
module.exports = function (userOptions = {}) {
 | 
			
		||||
  const options = { ...defaultOptions, ...userOptions };
 | 
			
		||||
 | 
			
		||||
  return {
 | 
			
		||||
    name: "manifest",
 | 
			
		||||
    generateBundle(outputOptions, bundle) {
 | 
			
		||||
      const manifest = {};
 | 
			
		||||
 | 
			
		||||
      for (const chunk of Object.values(bundle)) {
 | 
			
		||||
        if (!chunk.isEntry) {
 | 
			
		||||
          continue;
 | 
			
		||||
        }
 | 
			
		||||
        // Add js extension to mimic Webpack manifest.
 | 
			
		||||
        manifest[`${chunk.name}.js`] = url.resolve(
 | 
			
		||||
          options.publicPath,
 | 
			
		||||
          chunk.fileName
 | 
			
		||||
        );
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      this.emitFile({
 | 
			
		||||
        type: "asset",
 | 
			
		||||
        source: JSON.stringify(manifest, undefined, 2),
 | 
			
		||||
        name: "manifest.json",
 | 
			
		||||
        fileName: "manifest.json",
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										149
									
								
								build-scripts/rollup-plugins/worker-plugin.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								build-scripts/rollup-plugins/worker-plugin.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,149 @@
 | 
			
		||||
// Worker plugin
 | 
			
		||||
// Each worker will include all of its dependencies
 | 
			
		||||
// instead of relying on an importer.
 | 
			
		||||
 | 
			
		||||
// Forked from v.1.4.1
 | 
			
		||||
// https://github.com/surma/rollup-plugin-off-main-thread
 | 
			
		||||
/**
 | 
			
		||||
 * Copyright 2018 Google Inc. All Rights Reserved.
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
const rollup = require("rollup");
 | 
			
		||||
const path = require("path");
 | 
			
		||||
const MagicString = require("magic-string");
 | 
			
		||||
 | 
			
		||||
const defaultOpts = {
 | 
			
		||||
  // A RegExp to find `new Workers()` calls. The second capture group _must_
 | 
			
		||||
  // capture the provided file name without the quotes.
 | 
			
		||||
  workerRegexp: /new Worker\((["'])(.+?)\1(,[^)]+)?\)/g,
 | 
			
		||||
  plugins: ["node-resolve", "commonjs", "babel", "terser", "ignore"],
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
async function getBundledWorker(workerPath, rollupOptions) {
 | 
			
		||||
  const bundle = await rollup.rollup({
 | 
			
		||||
    ...rollupOptions,
 | 
			
		||||
    input: {
 | 
			
		||||
      worker: workerPath,
 | 
			
		||||
    },
 | 
			
		||||
  });
 | 
			
		||||
  const { output } = await bundle.generate({
 | 
			
		||||
    // Generates cleanest output, we shouldn't have any imports/exports
 | 
			
		||||
    // that would be incompatible with ES5.
 | 
			
		||||
    format: "es",
 | 
			
		||||
    // We should not export anything. This will fail build if we are.
 | 
			
		||||
    exports: "none",
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  let code;
 | 
			
		||||
 | 
			
		||||
  for (const chunkOrAsset of output) {
 | 
			
		||||
    if (chunkOrAsset.name === "worker") {
 | 
			
		||||
      code = chunkOrAsset.code;
 | 
			
		||||
    } else if (chunkOrAsset.type !== "asset") {
 | 
			
		||||
      throw new Error("Unexpected extra output");
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return code;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = function (opts = {}) {
 | 
			
		||||
  opts = { ...defaultOpts, ...opts };
 | 
			
		||||
 | 
			
		||||
  let rollupOptions;
 | 
			
		||||
  let refIds;
 | 
			
		||||
 | 
			
		||||
  return {
 | 
			
		||||
    name: "hass-worker",
 | 
			
		||||
 | 
			
		||||
    async buildStart(options) {
 | 
			
		||||
      refIds = {};
 | 
			
		||||
      rollupOptions = {
 | 
			
		||||
        plugins: options.plugins.filter((plugin) =>
 | 
			
		||||
          opts.plugins.includes(plugin.name)
 | 
			
		||||
        ),
 | 
			
		||||
      };
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    async transform(code, id) {
 | 
			
		||||
      // Copy the regexp as they are stateful and this hook is async.
 | 
			
		||||
      const workerRegexp = new RegExp(
 | 
			
		||||
        opts.workerRegexp.source,
 | 
			
		||||
        opts.workerRegexp.flags
 | 
			
		||||
      );
 | 
			
		||||
      if (!workerRegexp.test(code)) {
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      const ms = new MagicString(code);
 | 
			
		||||
      // Reset the regexp
 | 
			
		||||
      workerRegexp.lastIndex = 0;
 | 
			
		||||
      while (true) {
 | 
			
		||||
        const match = workerRegexp.exec(code);
 | 
			
		||||
        if (!match) {
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const workerFile = match[2];
 | 
			
		||||
        let optionsObject = {};
 | 
			
		||||
        // Parse the optional options object
 | 
			
		||||
        if (match[3] && match[3].length > 0) {
 | 
			
		||||
          // FIXME: ooooof!
 | 
			
		||||
          optionsObject = new Function(`return ${match[3].slice(1)};`)();
 | 
			
		||||
        }
 | 
			
		||||
        delete optionsObject.type;
 | 
			
		||||
 | 
			
		||||
        if (!new RegExp("^.*/").test(workerFile)) {
 | 
			
		||||
          this.warn(
 | 
			
		||||
            `Paths passed to the Worker constructor must be relative or absolute, i.e. start with /, ./ or ../ (just like dynamic import!). Ignoring "${workerFile}".`
 | 
			
		||||
          );
 | 
			
		||||
          continue;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Find worker file and store it as a chunk with ID prefixed for our loader
 | 
			
		||||
        const resolvedWorkerFile = (await this.resolve(workerFile, id)).id;
 | 
			
		||||
        let chunkRefId;
 | 
			
		||||
        if (resolvedWorkerFile in refIds) {
 | 
			
		||||
          chunkRefId = refIds[resolvedWorkerFile];
 | 
			
		||||
        } else {
 | 
			
		||||
          this.addWatchFile(resolvedWorkerFile);
 | 
			
		||||
          const source = await getBundledWorker(
 | 
			
		||||
            resolvedWorkerFile,
 | 
			
		||||
            rollupOptions
 | 
			
		||||
          );
 | 
			
		||||
          chunkRefId = refIds[resolvedWorkerFile] = this.emitFile({
 | 
			
		||||
            name: path.basename(resolvedWorkerFile),
 | 
			
		||||
            source,
 | 
			
		||||
            type: "asset",
 | 
			
		||||
          });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const workerParametersStartIndex = match.index + "new Worker(".length;
 | 
			
		||||
        const workerParametersEndIndex =
 | 
			
		||||
          match.index + match[0].length - ")".length;
 | 
			
		||||
 | 
			
		||||
        ms.overwrite(
 | 
			
		||||
          workerParametersStartIndex,
 | 
			
		||||
          workerParametersEndIndex,
 | 
			
		||||
          `import.meta.ROLLUP_FILE_URL_${chunkRefId}, ${JSON.stringify(
 | 
			
		||||
            optionsObject
 | 
			
		||||
          )}`
 | 
			
		||||
        );
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      return {
 | 
			
		||||
        code: ms.toString(),
 | 
			
		||||
        map: ms.generateMap({ hires: true }),
 | 
			
		||||
      };
 | 
			
		||||
    },
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										156
									
								
								build-scripts/rollup.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										156
									
								
								build-scripts/rollup.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,156 @@
 | 
			
		||||
const path = require("path");
 | 
			
		||||
 | 
			
		||||
const commonjs = require("@rollup/plugin-commonjs");
 | 
			
		||||
const resolve = require("@rollup/plugin-node-resolve");
 | 
			
		||||
const json = require("@rollup/plugin-json");
 | 
			
		||||
const babel = require("@rollup/plugin-babel").babel;
 | 
			
		||||
const replace = require("@rollup/plugin-replace");
 | 
			
		||||
const visualizer = require("rollup-plugin-visualizer");
 | 
			
		||||
const { string } = require("rollup-plugin-string");
 | 
			
		||||
const { terser } = require("rollup-plugin-terser");
 | 
			
		||||
const manifest = require("./rollup-plugins/manifest-plugin");
 | 
			
		||||
const worker = require("./rollup-plugins/worker-plugin");
 | 
			
		||||
const dontHashPlugin = require("./rollup-plugins/dont-hash-plugin");
 | 
			
		||||
const ignore = require("./rollup-plugins/ignore-plugin");
 | 
			
		||||
 | 
			
		||||
const bundle = require("./bundle");
 | 
			
		||||
const paths = require("./paths");
 | 
			
		||||
 | 
			
		||||
const extensions = [".js", ".ts"];
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @param {Object} arg
 | 
			
		||||
 * @param { import("rollup").InputOption } arg.input
 | 
			
		||||
 */
 | 
			
		||||
const createRollupConfig = ({
 | 
			
		||||
  entry,
 | 
			
		||||
  outputPath,
 | 
			
		||||
  defineOverlay,
 | 
			
		||||
  isProdBuild,
 | 
			
		||||
  latestBuild,
 | 
			
		||||
  isStatsBuild,
 | 
			
		||||
  publicPath,
 | 
			
		||||
  dontHash,
 | 
			
		||||
  isWDS,
 | 
			
		||||
}) => {
 | 
			
		||||
  return {
 | 
			
		||||
    /**
 | 
			
		||||
     * @type { import("rollup").InputOptions }
 | 
			
		||||
     */
 | 
			
		||||
    inputOptions: {
 | 
			
		||||
      input: entry,
 | 
			
		||||
      // Some entry points contain no JavaScript. This setting silences a warning about that.
 | 
			
		||||
      // https://rollupjs.org/guide/en/#preserveentrysignatures
 | 
			
		||||
      preserveEntrySignatures: false,
 | 
			
		||||
      plugins: [
 | 
			
		||||
        ignore({
 | 
			
		||||
          files: bundle.emptyPackages({ latestBuild }),
 | 
			
		||||
        }),
 | 
			
		||||
        resolve({
 | 
			
		||||
          extensions,
 | 
			
		||||
          preferBuiltins: false,
 | 
			
		||||
          browser: true,
 | 
			
		||||
          rootDir: paths.polymer_dir,
 | 
			
		||||
        }),
 | 
			
		||||
        commonjs({
 | 
			
		||||
          namedExports: {
 | 
			
		||||
            "js-yaml": ["safeDump", "safeLoad"],
 | 
			
		||||
          },
 | 
			
		||||
        }),
 | 
			
		||||
        json(),
 | 
			
		||||
        babel({
 | 
			
		||||
          ...bundle.babelOptions({ latestBuild }),
 | 
			
		||||
          extensions,
 | 
			
		||||
          exclude: bundle.babelExclude(),
 | 
			
		||||
          babelHelpers: isWDS ? "inline" : "bundled",
 | 
			
		||||
        }),
 | 
			
		||||
        string({
 | 
			
		||||
          // Import certain extensions as strings
 | 
			
		||||
          include: [path.join(paths.polymer_dir, "node_modules/**/*.css")],
 | 
			
		||||
        }),
 | 
			
		||||
        replace(
 | 
			
		||||
          bundle.definedVars({ isProdBuild, latestBuild, defineOverlay })
 | 
			
		||||
        ),
 | 
			
		||||
        !isWDS &&
 | 
			
		||||
          manifest({
 | 
			
		||||
            publicPath,
 | 
			
		||||
          }),
 | 
			
		||||
        !isWDS && worker(),
 | 
			
		||||
        !isWDS && dontHashPlugin({ dontHash }),
 | 
			
		||||
        !isWDS && isProdBuild && terser(bundle.terserOptions(latestBuild)),
 | 
			
		||||
        !isWDS &&
 | 
			
		||||
          isStatsBuild &&
 | 
			
		||||
          visualizer({
 | 
			
		||||
            // https://github.com/btd/rollup-plugin-visualizer#options
 | 
			
		||||
            open: true,
 | 
			
		||||
            sourcemap: true,
 | 
			
		||||
          }),
 | 
			
		||||
      ].filter(Boolean),
 | 
			
		||||
    },
 | 
			
		||||
    /**
 | 
			
		||||
     * @type { import("rollup").OutputOptions }
 | 
			
		||||
     */
 | 
			
		||||
    outputOptions: {
 | 
			
		||||
      // https://rollupjs.org/guide/en/#outputdir
 | 
			
		||||
      dir: outputPath,
 | 
			
		||||
      // https://rollupjs.org/guide/en/#outputformat
 | 
			
		||||
      format: latestBuild ? "es" : "systemjs",
 | 
			
		||||
      // https://rollupjs.org/guide/en/#outputexternallivebindings
 | 
			
		||||
      externalLiveBindings: false,
 | 
			
		||||
      // https://rollupjs.org/guide/en/#outputentryfilenames
 | 
			
		||||
      // https://rollupjs.org/guide/en/#outputchunkfilenames
 | 
			
		||||
      // https://rollupjs.org/guide/en/#outputassetfilenames
 | 
			
		||||
      entryFileNames:
 | 
			
		||||
        isProdBuild && !isStatsBuild ? "[name]-[hash].js" : "[name].js",
 | 
			
		||||
      chunkFileNames:
 | 
			
		||||
        isProdBuild && !isStatsBuild ? "c.[hash].js" : "[name].js",
 | 
			
		||||
      assetFileNames:
 | 
			
		||||
        isProdBuild && !isStatsBuild ? "a.[hash].js" : "[name].js",
 | 
			
		||||
      // https://rollupjs.org/guide/en/#outputsourcemap
 | 
			
		||||
      sourcemap: isProdBuild ? true : "inline",
 | 
			
		||||
    },
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const createAppConfig = ({ isProdBuild, latestBuild, isStatsBuild, isWDS }) => {
 | 
			
		||||
  return createRollupConfig(
 | 
			
		||||
    bundle.config.app({
 | 
			
		||||
      isProdBuild,
 | 
			
		||||
      latestBuild,
 | 
			
		||||
      isStatsBuild,
 | 
			
		||||
      isWDS,
 | 
			
		||||
    })
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const createDemoConfig = ({ isProdBuild, latestBuild, isStatsBuild }) => {
 | 
			
		||||
  return createRollupConfig(
 | 
			
		||||
    bundle.config.demo({
 | 
			
		||||
      isProdBuild,
 | 
			
		||||
      latestBuild,
 | 
			
		||||
      isStatsBuild,
 | 
			
		||||
    })
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const createCastConfig = ({ isProdBuild, latestBuild }) => {
 | 
			
		||||
  return createRollupConfig(bundle.config.cast({ isProdBuild, latestBuild }));
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const createHassioConfig = ({ isProdBuild, latestBuild }) => {
 | 
			
		||||
  return createRollupConfig(bundle.config.hassio({ isProdBuild, latestBuild }));
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const createGalleryConfig = ({ isProdBuild, latestBuild }) => {
 | 
			
		||||
  return createRollupConfig(
 | 
			
		||||
    bundle.config.gallery({ isProdBuild, latestBuild })
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
  createAppConfig,
 | 
			
		||||
  createDemoConfig,
 | 
			
		||||
  createCastConfig,
 | 
			
		||||
  createHassioConfig,
 | 
			
		||||
  createGalleryConfig,
 | 
			
		||||
};
 | 
			
		||||
@@ -1,23 +1,29 @@
 | 
			
		||||
const webpack = require("webpack");
 | 
			
		||||
const fs = require("fs");
 | 
			
		||||
const path = require("path");
 | 
			
		||||
const TerserPlugin = require("terser-webpack-plugin");
 | 
			
		||||
const WorkboxPlugin = require("workbox-webpack-plugin");
 | 
			
		||||
const ManifestPlugin = require("webpack-manifest-plugin");
 | 
			
		||||
const paths = require("./paths.js");
 | 
			
		||||
const { babelLoaderConfig } = require("./babel.js");
 | 
			
		||||
const bundle = require("./bundle");
 | 
			
		||||
const log = require("fancy-log");
 | 
			
		||||
 | 
			
		||||
let version = fs
 | 
			
		||||
  .readFileSync(path.resolve(paths.polymer_dir, "setup.py"), "utf8")
 | 
			
		||||
  .match(/\d{8}\.\d+/);
 | 
			
		||||
if (!version) {
 | 
			
		||||
  throw Error("Version not found");
 | 
			
		||||
class LogStartCompilePlugin {
 | 
			
		||||
  ignoredFirst = false;
 | 
			
		||||
 | 
			
		||||
  apply(compiler) {
 | 
			
		||||
    compiler.hooks.beforeCompile.tap("LogStartCompilePlugin", () => {
 | 
			
		||||
      if (!this.ignoredFirst) {
 | 
			
		||||
        this.ignoredFirst = true;
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
      log("Changes detected. Starting compilation");
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
version = version[0];
 | 
			
		||||
 | 
			
		||||
const createWebpackConfig = ({
 | 
			
		||||
  entry,
 | 
			
		||||
  outputRoot,
 | 
			
		||||
  outputPath,
 | 
			
		||||
  publicPath,
 | 
			
		||||
  defineOverlay,
 | 
			
		||||
  isProdBuild,
 | 
			
		||||
  latestBuild,
 | 
			
		||||
@@ -27,87 +33,96 @@ const createWebpackConfig = ({
 | 
			
		||||
  if (!dontHash) {
 | 
			
		||||
    dontHash = new Set();
 | 
			
		||||
  }
 | 
			
		||||
  const ignorePackages = bundle.ignorePackages({ latestBuild });
 | 
			
		||||
  return {
 | 
			
		||||
    mode: isProdBuild ? "production" : "development",
 | 
			
		||||
    devtool: isProdBuild ? "source-map" : "inline-cheap-module-source-map",
 | 
			
		||||
    devtool: isProdBuild
 | 
			
		||||
      ? "cheap-module-source-map"
 | 
			
		||||
      : "eval-cheap-module-source-map",
 | 
			
		||||
    entry,
 | 
			
		||||
    node: false,
 | 
			
		||||
    module: {
 | 
			
		||||
      rules: [
 | 
			
		||||
        babelLoaderConfig({ latestBuild }),
 | 
			
		||||
        {
 | 
			
		||||
          test: /\.m?js$|\.ts$/,
 | 
			
		||||
          exclude: bundle.babelExclude(),
 | 
			
		||||
          use: {
 | 
			
		||||
            loader: "babel-loader",
 | 
			
		||||
            options: bundle.babelOptions({ latestBuild }),
 | 
			
		||||
          },
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          test: /\.css$/,
 | 
			
		||||
          use: "raw-loader",
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          test: /\.(html)$/,
 | 
			
		||||
          use: {
 | 
			
		||||
            loader: "html-loader",
 | 
			
		||||
            options: {
 | 
			
		||||
              exportAsEs6Default: true,
 | 
			
		||||
            },
 | 
			
		||||
          },
 | 
			
		||||
        },
 | 
			
		||||
      ],
 | 
			
		||||
    },
 | 
			
		||||
    externals: {
 | 
			
		||||
      esprima: "esprima",
 | 
			
		||||
    },
 | 
			
		||||
    optimization: {
 | 
			
		||||
      minimizer: [
 | 
			
		||||
        new TerserPlugin({
 | 
			
		||||
          cache: true,
 | 
			
		||||
          parallel: true,
 | 
			
		||||
          extractComments: true,
 | 
			
		||||
          sourceMap: true,
 | 
			
		||||
          terserOptions: {
 | 
			
		||||
            safari10: true,
 | 
			
		||||
            ecma: latestBuild ? undefined : 5,
 | 
			
		||||
          },
 | 
			
		||||
          terserOptions: bundle.terserOptions(latestBuild),
 | 
			
		||||
        }),
 | 
			
		||||
      ],
 | 
			
		||||
    },
 | 
			
		||||
    plugins: [
 | 
			
		||||
      new ManifestPlugin(),
 | 
			
		||||
      new webpack.DefinePlugin({
 | 
			
		||||
        __DEV__: !isProdBuild,
 | 
			
		||||
        __BUILD__: JSON.stringify(latestBuild ? "latest" : "es5"),
 | 
			
		||||
        __VERSION__: JSON.stringify(version),
 | 
			
		||||
        __DEMO__: false,
 | 
			
		||||
        __BACKWARDS_COMPAT__: false,
 | 
			
		||||
        __STATIC_PATH__: "/static/",
 | 
			
		||||
        "process.env.NODE_ENV": JSON.stringify(
 | 
			
		||||
          isProdBuild ? "production" : "development"
 | 
			
		||||
        ),
 | 
			
		||||
        ...defineOverlay,
 | 
			
		||||
      new ManifestPlugin({
 | 
			
		||||
        // Only include the JS of entrypoints
 | 
			
		||||
        filter: (file) => file.isInitial && !file.name.endsWith(".map"),
 | 
			
		||||
      }),
 | 
			
		||||
      new webpack.DefinePlugin(
 | 
			
		||||
        bundle.definedVars({ isProdBuild, latestBuild, defineOverlay })
 | 
			
		||||
      ),
 | 
			
		||||
      new webpack.IgnorePlugin({
 | 
			
		||||
        checkResource(resource, context) {
 | 
			
		||||
          // Only use ignore to intercept imports that we don't control
 | 
			
		||||
          // inside node_module dependencies.
 | 
			
		||||
          if (
 | 
			
		||||
            !context.includes("/node_modules/") ||
 | 
			
		||||
            // calling define.amd will call require("!!webpack amd options")
 | 
			
		||||
            resource.startsWith("!!webpack") ||
 | 
			
		||||
            // loaded by webpack dev server but doesn't exist.
 | 
			
		||||
            resource === "webpack/hot"
 | 
			
		||||
          ) {
 | 
			
		||||
            return false;
 | 
			
		||||
          }
 | 
			
		||||
          let fullPath;
 | 
			
		||||
          try {
 | 
			
		||||
            fullPath = resource.startsWith(".")
 | 
			
		||||
              ? path.resolve(context, resource)
 | 
			
		||||
              : require.resolve(resource);
 | 
			
		||||
          } catch (err) {
 | 
			
		||||
            console.error(
 | 
			
		||||
              "Error in Home Assistant ignore plugin",
 | 
			
		||||
              resource,
 | 
			
		||||
              context
 | 
			
		||||
            );
 | 
			
		||||
            throw err;
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          return ignorePackages.some((toIgnorePath) =>
 | 
			
		||||
            fullPath.startsWith(toIgnorePath)
 | 
			
		||||
          );
 | 
			
		||||
        },
 | 
			
		||||
      }),
 | 
			
		||||
      // Ignore moment.js locales
 | 
			
		||||
      new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
 | 
			
		||||
      // Color.js is bloated, it contains all color definitions for all material color sets.
 | 
			
		||||
      new webpack.NormalModuleReplacementPlugin(
 | 
			
		||||
        /@polymer\/paper-styles\/color\.js$/,
 | 
			
		||||
        new RegExp(bundle.emptyPackages({ latestBuild }).join("|")),
 | 
			
		||||
        path.resolve(paths.polymer_dir, "src/util/empty.js")
 | 
			
		||||
      ),
 | 
			
		||||
      // Ignore roboto pointing at CDN. We use local font-roboto-local.
 | 
			
		||||
      // We need to change the import of the polyfill for EventTarget, so we replace the polyfill file with our customized one
 | 
			
		||||
      new webpack.NormalModuleReplacementPlugin(
 | 
			
		||||
        /@polymer\/font-roboto\/roboto\.js$/,
 | 
			
		||||
        path.resolve(paths.polymer_dir, "src/util/empty.js")
 | 
			
		||||
        new RegExp(
 | 
			
		||||
          require.resolve(
 | 
			
		||||
            "lit-virtualizer/lib/uni-virtualizer/lib/polyfillLoaders/EventTarget.js"
 | 
			
		||||
          )
 | 
			
		||||
        ),
 | 
			
		||||
      // Ignore mwc icons pointing at CDN.
 | 
			
		||||
      new webpack.NormalModuleReplacementPlugin(
 | 
			
		||||
        /@material\/mwc-icon\/mwc-icon-font\.js$/,
 | 
			
		||||
        path.resolve(paths.polymer_dir, "src/util/empty.js")
 | 
			
		||||
        path.resolve(paths.polymer_dir, "src/resources/EventTarget-ponyfill.js")
 | 
			
		||||
      ),
 | 
			
		||||
      !isProdBuild && new LogStartCompilePlugin(),
 | 
			
		||||
    ].filter(Boolean),
 | 
			
		||||
    resolve: {
 | 
			
		||||
      extensions: [".ts", ".js", ".json"],
 | 
			
		||||
      alias: {
 | 
			
		||||
        react: "preact-compat",
 | 
			
		||||
        "react-dom": "preact-compat",
 | 
			
		||||
        // Not necessary unless you consume a module using `createClass`
 | 
			
		||||
        "create-react-class": "preact-compat/lib/create-react-class",
 | 
			
		||||
        // Not necessary unless you consume a module requiring `react-dom-factories`
 | 
			
		||||
        "react-dom-factories": "preact-compat/lib/react-dom-factories",
 | 
			
		||||
      },
 | 
			
		||||
    },
 | 
			
		||||
    output: {
 | 
			
		||||
      filename: ({ chunk }) => {
 | 
			
		||||
@@ -116,152 +131,60 @@ const createWebpackConfig = ({
 | 
			
		||||
        }
 | 
			
		||||
        return `${chunk.name}.${chunk.hash.substr(0, 8)}.js`;
 | 
			
		||||
      },
 | 
			
		||||
      environment: {
 | 
			
		||||
        // The environment supports arrow functions ('() => { ... }').
 | 
			
		||||
        arrowFunction: latestBuild,
 | 
			
		||||
        // The environment supports BigInt as literal (123n).
 | 
			
		||||
        bigIntLiteral: false,
 | 
			
		||||
        // The environment supports const and let for variable declarations.
 | 
			
		||||
        const: latestBuild,
 | 
			
		||||
        // The environment supports destructuring ('{ a, b } = obj').
 | 
			
		||||
        destructuring: latestBuild,
 | 
			
		||||
        // The environment supports an async import() function to import EcmaScript modules.
 | 
			
		||||
        dynamicImport: latestBuild,
 | 
			
		||||
        // The environment supports 'for of' iteration ('for (const x of array) { ... }').
 | 
			
		||||
        forOf: latestBuild,
 | 
			
		||||
        // The environment supports ECMAScript Module syntax to import ECMAScript modules (import ... from '...').
 | 
			
		||||
        module: latestBuild,
 | 
			
		||||
      },
 | 
			
		||||
      chunkFilename:
 | 
			
		||||
        isProdBuild && !isStatsBuild
 | 
			
		||||
          ? "chunk.[chunkhash].js"
 | 
			
		||||
          : "[name].chunk.js",
 | 
			
		||||
      path: path.resolve(
 | 
			
		||||
        outputRoot,
 | 
			
		||||
        latestBuild ? "frontend_latest" : "frontend_es5"
 | 
			
		||||
      ),
 | 
			
		||||
      publicPath: latestBuild ? "/frontend_latest/" : "/frontend_es5/",
 | 
			
		||||
      // For workerize loader
 | 
			
		||||
      path: outputPath,
 | 
			
		||||
      publicPath,
 | 
			
		||||
      // To silence warning in worker plugin
 | 
			
		||||
      globalObject: "self",
 | 
			
		||||
    },
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const createAppConfig = ({ isProdBuild, latestBuild, isStatsBuild }) => {
 | 
			
		||||
  const config = createWebpackConfig({
 | 
			
		||||
    entry: {
 | 
			
		||||
      app: "./src/entrypoints/app.ts",
 | 
			
		||||
      authorize: "./src/entrypoints/authorize.ts",
 | 
			
		||||
      onboarding: "./src/entrypoints/onboarding.ts",
 | 
			
		||||
      core: "./src/entrypoints/core.ts",
 | 
			
		||||
      compatibility: "./src/entrypoints/compatibility.ts",
 | 
			
		||||
      "custom-panel": "./src/entrypoints/custom-panel.ts",
 | 
			
		||||
      "hass-icons": "./src/entrypoints/hass-icons.ts",
 | 
			
		||||
    },
 | 
			
		||||
    outputRoot: paths.root,
 | 
			
		||||
    isProdBuild,
 | 
			
		||||
    latestBuild,
 | 
			
		||||
    isStatsBuild,
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  if (latestBuild) {
 | 
			
		||||
    // Create an object mapping browser urls to their paths during build
 | 
			
		||||
    const translationMetadata = require("../build-translations/translationMetadata.json");
 | 
			
		||||
    const workBoxTranslationsTemplatedURLs = {};
 | 
			
		||||
    const englishFilename = `en-${translationMetadata.translations.en.hash}.json`;
 | 
			
		||||
 | 
			
		||||
    // core
 | 
			
		||||
    workBoxTranslationsTemplatedURLs[
 | 
			
		||||
      `/static/translations/${englishFilename}`
 | 
			
		||||
    ] = `build-translations/output/${englishFilename}`;
 | 
			
		||||
 | 
			
		||||
    translationMetadata.fragments.forEach((fragment) => {
 | 
			
		||||
      workBoxTranslationsTemplatedURLs[
 | 
			
		||||
        `/static/translations/${fragment}/${englishFilename}`
 | 
			
		||||
      ] = `build-translations/output/${fragment}/${englishFilename}`;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    config.plugins.push(
 | 
			
		||||
      new WorkboxPlugin.InjectManifest({
 | 
			
		||||
        swSrc: "./src/entrypoints/service-worker-hass.js",
 | 
			
		||||
        swDest: "service_worker.js",
 | 
			
		||||
        importWorkboxFrom: "local",
 | 
			
		||||
        include: [/\.js$/],
 | 
			
		||||
        templatedURLs: {
 | 
			
		||||
          ...workBoxTranslationsTemplatedURLs,
 | 
			
		||||
          "/static/icons/favicon-192x192.png":
 | 
			
		||||
            "public/icons/favicon-192x192.png",
 | 
			
		||||
          "/static/fonts/roboto/Roboto-Light.woff2":
 | 
			
		||||
            "node_modules/roboto-fontface/fonts/roboto/Roboto-Light.woff2",
 | 
			
		||||
          "/static/fonts/roboto/Roboto-Medium.woff2":
 | 
			
		||||
            "node_modules/roboto-fontface/fonts/roboto/Roboto-Medium.woff2",
 | 
			
		||||
          "/static/fonts/roboto/Roboto-Regular.woff2":
 | 
			
		||||
            "node_modules/roboto-fontface/fonts/roboto/Roboto-Regular.woff2",
 | 
			
		||||
          "/static/fonts/roboto/Roboto-Bold.woff2":
 | 
			
		||||
            "node_modules/roboto-fontface/fonts/roboto/Roboto-Bold.woff2",
 | 
			
		||||
        },
 | 
			
		||||
      })
 | 
			
		||||
  return createWebpackConfig(
 | 
			
		||||
    bundle.config.app({ isProdBuild, latestBuild, isStatsBuild })
 | 
			
		||||
  );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return config;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const createDemoConfig = ({ isProdBuild, latestBuild, isStatsBuild }) => {
 | 
			
		||||
  return createWebpackConfig({
 | 
			
		||||
    entry: {
 | 
			
		||||
      main: path.resolve(paths.demo_dir, "src/entrypoint.ts"),
 | 
			
		||||
      compatibility: path.resolve(
 | 
			
		||||
        paths.polymer_dir,
 | 
			
		||||
        "src/entrypoints/compatibility.ts"
 | 
			
		||||
      ),
 | 
			
		||||
    },
 | 
			
		||||
    outputRoot: paths.demo_root,
 | 
			
		||||
    defineOverlay: {
 | 
			
		||||
      __VERSION__: JSON.stringify(`DEMO-${version}`),
 | 
			
		||||
      __DEMO__: true,
 | 
			
		||||
    },
 | 
			
		||||
    isProdBuild,
 | 
			
		||||
    latestBuild,
 | 
			
		||||
    isStatsBuild,
 | 
			
		||||
  });
 | 
			
		||||
  return createWebpackConfig(
 | 
			
		||||
    bundle.config.demo({ isProdBuild, latestBuild, isStatsBuild })
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const createCastConfig = ({ isProdBuild, latestBuild }) => {
 | 
			
		||||
  const entry = {
 | 
			
		||||
    launcher: path.resolve(paths.cast_dir, "src/launcher/entrypoint.ts"),
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  if (latestBuild) {
 | 
			
		||||
    entry.receiver = path.resolve(paths.cast_dir, "src/receiver/entrypoint.ts");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return createWebpackConfig({
 | 
			
		||||
    entry,
 | 
			
		||||
    outputRoot: paths.cast_root,
 | 
			
		||||
    isProdBuild,
 | 
			
		||||
    latestBuild,
 | 
			
		||||
    defineOverlay: {
 | 
			
		||||
      __BACKWARDS_COMPAT__: true,
 | 
			
		||||
    },
 | 
			
		||||
  });
 | 
			
		||||
  return createWebpackConfig(bundle.config.cast({ isProdBuild, latestBuild }));
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const createHassioConfig = ({ isProdBuild, latestBuild }) => {
 | 
			
		||||
  if (latestBuild) {
 | 
			
		||||
    throw new Error("Hass.io does not support latest build!");
 | 
			
		||||
  }
 | 
			
		||||
  const config = createWebpackConfig({
 | 
			
		||||
    entry: {
 | 
			
		||||
      entrypoint: path.resolve(paths.hassio_dir, "src/entrypoint.ts"),
 | 
			
		||||
    },
 | 
			
		||||
    outputRoot: "",
 | 
			
		||||
    isProdBuild,
 | 
			
		||||
    latestBuild,
 | 
			
		||||
    dontHash: new Set(["entrypoint"]),
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  config.output.path = paths.hassio_root;
 | 
			
		||||
  config.output.publicPath = paths.hassio_publicPath;
 | 
			
		||||
 | 
			
		||||
  return config;
 | 
			
		||||
  return createWebpackConfig(
 | 
			
		||||
    bundle.config.hassio({ isProdBuild, latestBuild })
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const createGalleryConfig = ({ isProdBuild, latestBuild }) => {
 | 
			
		||||
  const config = createWebpackConfig({
 | 
			
		||||
    entry: {
 | 
			
		||||
      entrypoint: path.resolve(paths.gallery_dir, "src/entrypoint.js"),
 | 
			
		||||
    },
 | 
			
		||||
    outputRoot: paths.gallery_root,
 | 
			
		||||
    isProdBuild,
 | 
			
		||||
    latestBuild,
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  return config;
 | 
			
		||||
  return createWebpackConfig(
 | 
			
		||||
    bundle.config.gallery({ isProdBuild, latestBuild })
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
 
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 16 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 186 KiB After Width: | Height: | Size: 186 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB  | 
							
								
								
									
										10
									
								
								cast/rollup.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								cast/rollup.config.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
const rollup = require("../build-scripts/rollup.js");
 | 
			
		||||
const env = require("../build-scripts/env.js");
 | 
			
		||||
 | 
			
		||||
const config = rollup.createCastConfig({
 | 
			
		||||
  isProdBuild: env.isProdBuild(),
 | 
			
		||||
  latestBuild: true,
 | 
			
		||||
  isStatsBuild: env.isStatsBuild(),
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
module.exports = { ...config.inputOptions, output: config.outputOptions };
 | 
			
		||||
@@ -37,18 +37,21 @@
 | 
			
		||||
  <body>
 | 
			
		||||
    <%= renderTemplate('_js_base') %>
 | 
			
		||||
 | 
			
		||||
    <script type="module" crossorigin="use-credentials">
 | 
			
		||||
      import "<%= latestLauncherJS %>";
 | 
			
		||||
    <script>
 | 
			
		||||
      import("<%= latestLauncherJS %>");
 | 
			
		||||
      window.latestJS = true;
 | 
			
		||||
    </script>
 | 
			
		||||
 | 
			
		||||
    <script nomodule>
 | 
			
		||||
      (function() {
 | 
			
		||||
        // // Safari 10.1 supports type=module but ignores nomodule, so we add this check.
 | 
			
		||||
        if (!isS101) {
 | 
			
		||||
          _ls("/static/polyfills/custom-elements-es5-adapter.js");
 | 
			
		||||
    <script>
 | 
			
		||||
      if (!window.latestJS) {
 | 
			
		||||
        <% if (useRollup) { %>
 | 
			
		||||
          _ls("/static/js/s.min.js").onload = function() {
 | 
			
		||||
            System.import("<%= es5LauncherJS %>");
 | 
			
		||||
          };
 | 
			
		||||
        <% } else { %>
 | 
			
		||||
          _ls("<%= es5LauncherJS %>");
 | 
			
		||||
        <% } %>
 | 
			
		||||
      }
 | 
			
		||||
      })();
 | 
			
		||||
    </script>
 | 
			
		||||
 | 
			
		||||
    <hc-layout subtitle="FAQ">
 | 
			
		||||
@@ -209,13 +212,8 @@
 | 
			
		||||
          Chromecast is a technology developed by Google, and is available on:
 | 
			
		||||
        </p>
 | 
			
		||||
        <ul>
 | 
			
		||||
          <li>Google Chrome (all platforms except on iOS)</li>
 | 
			
		||||
          <li>
 | 
			
		||||
            Microsoft Edge (all platforms,
 | 
			
		||||
            <a href="https://www.microsoftedgeinsider.com" target="_blank"
 | 
			
		||||
              >dev and canary builds only</a
 | 
			
		||||
            >)
 | 
			
		||||
          </li>
 | 
			
		||||
          <li>Google Chrome (all platforms except iOS)</li>
 | 
			
		||||
          <li>Microsoft Edge (all platforms)</li>
 | 
			
		||||
        </ul>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,18 +28,21 @@
 | 
			
		||||
 | 
			
		||||
    <hc-connect></hc-connect>
 | 
			
		||||
 | 
			
		||||
    <script type="module" crossorigin="use-credentials">
 | 
			
		||||
      import "<%= latestLauncherJS %>";
 | 
			
		||||
    <script>
 | 
			
		||||
      import("<%= latestLauncherJS %>");
 | 
			
		||||
      window.latestJS = true;
 | 
			
		||||
    </script>
 | 
			
		||||
 | 
			
		||||
    <script nomodule>
 | 
			
		||||
      (function() {
 | 
			
		||||
        // // Safari 10.1 supports type=module but ignores nomodule, so we add this check.
 | 
			
		||||
        if (!isS101) {
 | 
			
		||||
          _ls("/static/polyfills/custom-elements-es5-adapter.js");
 | 
			
		||||
    <script>
 | 
			
		||||
      if (!window.latestJS) {
 | 
			
		||||
        <% if (useRollup) { %>
 | 
			
		||||
          _ls("/static/js/s.min.js").onload = function() {
 | 
			
		||||
            System.import("<%= es5LauncherJS %>");
 | 
			
		||||
          };
 | 
			
		||||
        <% } else { %>
 | 
			
		||||
          _ls("<%= es5LauncherJS %>");
 | 
			
		||||
        <% } %>
 | 
			
		||||
      }
 | 
			
		||||
      })();
 | 
			
		||||
    </script>
 | 
			
		||||
    <script>
 | 
			
		||||
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
import "../../../src/components/ha-iconset-svg";
 | 
			
		||||
import "../../../src/resources/safari-14-attachshadow-patch";
 | 
			
		||||
import "../../../src/resources/ha-style";
 | 
			
		||||
import "../../../src/resources/hass-icons";
 | 
			
		||||
import "../../../src/resources/roboto";
 | 
			
		||||
import "./layout/hc-connect";
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
import "@polymer/iron-icon";
 | 
			
		||||
import "@polymer/paper-item/paper-icon-item";
 | 
			
		||||
import "@polymer/paper-listbox/paper-listbox";
 | 
			
		||||
import { Auth, Connection } from "home-assistant-js-websocket";
 | 
			
		||||
@@ -9,6 +8,7 @@ import {
 | 
			
		||||
  html,
 | 
			
		||||
  LitElement,
 | 
			
		||||
  property,
 | 
			
		||||
  internalProperty,
 | 
			
		||||
  TemplateResult,
 | 
			
		||||
} from "lit-element";
 | 
			
		||||
import { CastManager } from "../../../../src/cast/cast_manager";
 | 
			
		||||
@@ -29,7 +29,7 @@ import {
 | 
			
		||||
  getLovelaceCollection,
 | 
			
		||||
  LovelaceConfig,
 | 
			
		||||
} from "../../../../src/data/lovelace";
 | 
			
		||||
import "../../../../src/layouts/loading-screen";
 | 
			
		||||
import "../../../../src/layouts/hass-loading-screen";
 | 
			
		||||
import { generateDefaultViewConfig } from "../../../../src/panels/lovelace/common/generate-lovelace-config";
 | 
			
		||||
import "./hc-layout";
 | 
			
		||||
import "@material/mwc-button/mwc-button";
 | 
			
		||||
@@ -42,13 +42,13 @@ class HcCast extends LitElement {
 | 
			
		||||
 | 
			
		||||
  @property() public castManager!: CastManager;
 | 
			
		||||
 | 
			
		||||
  @property() private askWrite = false;
 | 
			
		||||
  @internalProperty() private askWrite = false;
 | 
			
		||||
 | 
			
		||||
  @property() private lovelaceConfig?: LovelaceConfig | null;
 | 
			
		||||
  @internalProperty() private lovelaceConfig?: LovelaceConfig | null;
 | 
			
		||||
 | 
			
		||||
  protected render(): TemplateResult {
 | 
			
		||||
    if (this.lovelaceConfig === undefined) {
 | 
			
		||||
      return html` <loading-screen></loading-screen>> `;
 | 
			
		||||
      return html` <hass-loading-screen no-toolbar></hass-loading-screen>> `;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const error =
 | 
			
		||||
@@ -83,7 +83,7 @@ class HcCast extends LitElement {
 | 
			
		||||
          ? html`
 | 
			
		||||
              <p class="center-item">
 | 
			
		||||
                <mwc-button raised @click=${this._handleLaunch}>
 | 
			
		||||
                  <iron-icon icon="hass:cast"></iron-icon>
 | 
			
		||||
                  <ha-icon icon="hass:cast"></ha-icon>
 | 
			
		||||
                  Start Casting
 | 
			
		||||
                </mwc-button>
 | 
			
		||||
              </p>
 | 
			
		||||
@@ -121,7 +121,7 @@ class HcCast extends LitElement {
 | 
			
		||||
          ${this.castManager.status
 | 
			
		||||
            ? html`
 | 
			
		||||
                <mwc-button @click=${this._handleLaunch}>
 | 
			
		||||
                  <iron-icon icon="hass:cast-connected"></iron-icon>
 | 
			
		||||
                  <ha-icon icon="hass:cast-connected"></ha-icon>
 | 
			
		||||
                  Manage
 | 
			
		||||
                </mwc-button>
 | 
			
		||||
              `
 | 
			
		||||
@@ -243,7 +243,7 @@ class HcCast extends LitElement {
 | 
			
		||||
        color: var(--secondary-text-color);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      mwc-button iron-icon {
 | 
			
		||||
      mwc-button ha-icon {
 | 
			
		||||
        margin-right: 8px;
 | 
			
		||||
        height: 18px;
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
import "@material/mwc-button";
 | 
			
		||||
import "@polymer/iron-icon";
 | 
			
		||||
import "@polymer/paper-input/paper-input";
 | 
			
		||||
import {
 | 
			
		||||
  Auth,
 | 
			
		||||
@@ -18,8 +17,8 @@ import {
 | 
			
		||||
  customElement,
 | 
			
		||||
  html,
 | 
			
		||||
  LitElement,
 | 
			
		||||
  property,
 | 
			
		||||
  TemplateResult,
 | 
			
		||||
  internalProperty,
 | 
			
		||||
} from "lit-element";
 | 
			
		||||
import { CastManager, getCastManager } from "../../../../src/cast/cast_manager";
 | 
			
		||||
import { castSendShowDemo } from "../../../../src/cast/receiver_messages";
 | 
			
		||||
@@ -27,7 +26,8 @@ import {
 | 
			
		||||
  loadTokens,
 | 
			
		||||
  saveTokens,
 | 
			
		||||
} from "../../../../src/common/auth/token_storage";
 | 
			
		||||
import "../../../../src/layouts/loading-screen";
 | 
			
		||||
import "../../../../src/components/ha-icon";
 | 
			
		||||
import "../../../../src/layouts/hass-loading-screen";
 | 
			
		||||
import { registerServiceWorker } from "../../../../src/util/register-service-worker";
 | 
			
		||||
import "./hc-layout";
 | 
			
		||||
 | 
			
		||||
@@ -60,19 +60,19 @@ const INTRO = html`
 | 
			
		||||
 | 
			
		||||
@customElement("hc-connect")
 | 
			
		||||
export class HcConnect extends LitElement {
 | 
			
		||||
  @property() private loading = false;
 | 
			
		||||
  @internalProperty() private loading = false;
 | 
			
		||||
 | 
			
		||||
  // If we had stored credentials but we cannot connect,
 | 
			
		||||
  // show a screen asking retry or logout.
 | 
			
		||||
  @property() private cannotConnect = false;
 | 
			
		||||
  @internalProperty() private cannotConnect = false;
 | 
			
		||||
 | 
			
		||||
  @property() private error?: string | TemplateResult;
 | 
			
		||||
  @internalProperty() private error?: string | TemplateResult;
 | 
			
		||||
 | 
			
		||||
  @property() private auth?: Auth;
 | 
			
		||||
  @internalProperty() private auth?: Auth;
 | 
			
		||||
 | 
			
		||||
  @property() private connection?: Connection;
 | 
			
		||||
  @internalProperty() private connection?: Connection;
 | 
			
		||||
 | 
			
		||||
  @property() private castManager?: CastManager | null;
 | 
			
		||||
  @internalProperty() private castManager?: CastManager | null;
 | 
			
		||||
 | 
			
		||||
  private openDemo = false;
 | 
			
		||||
 | 
			
		||||
@@ -98,7 +98,7 @@ export class HcConnect extends LitElement {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (this.castManager === undefined || this.loading) {
 | 
			
		||||
      return html` <loading-screen></loading-screen> `;
 | 
			
		||||
      return html` <hass-loading-screen no-toolbar></hass-loading-screen> `;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (this.castManager === null) {
 | 
			
		||||
@@ -136,11 +136,11 @@ export class HcConnect extends LitElement {
 | 
			
		||||
          <div class="card-actions">
 | 
			
		||||
            <mwc-button @click=${this._handleDemo}>
 | 
			
		||||
              Show Demo
 | 
			
		||||
              <iron-icon
 | 
			
		||||
              <ha-icon
 | 
			
		||||
                .icon=${this.castManager.castState === "CONNECTED"
 | 
			
		||||
                  ? "hass:cast-connected"
 | 
			
		||||
                  : "hass:cast"}
 | 
			
		||||
              ></iron-icon>
 | 
			
		||||
              ></ha-icon>
 | 
			
		||||
            </mwc-button>
 | 
			
		||||
            <div class="spacer"></div>
 | 
			
		||||
            <mwc-button @click=${this._handleConnect}>Authorize</mwc-button>
 | 
			
		||||
@@ -184,7 +184,7 @@ export class HcConnect extends LitElement {
 | 
			
		||||
        this.castManager = null;
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
    registerServiceWorker(false);
 | 
			
		||||
    registerServiceWorker(this, false);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private async _handleDemo() {
 | 
			
		||||
@@ -316,7 +316,7 @@ export class HcConnect extends LitElement {
 | 
			
		||||
        color: darkred;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      mwc-button iron-icon {
 | 
			
		||||
      mwc-button ha-icon {
 | 
			
		||||
        margin-left: 8px;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -30,7 +30,7 @@ class HcLayout extends LitElement {
 | 
			
		||||
      <ha-card>
 | 
			
		||||
        <div class="layout">
 | 
			
		||||
          <img class="hero" src="/images/google-nest-hub.png" />
 | 
			
		||||
          <div class="card-header">
 | 
			
		||||
          <h1 class="card-header">
 | 
			
		||||
            Home Assistant Cast${this.subtitle ? ` – ${this.subtitle}` : ""}
 | 
			
		||||
            ${this.auth
 | 
			
		||||
              ? html`
 | 
			
		||||
@@ -44,7 +44,7 @@ class HcLayout extends LitElement {
 | 
			
		||||
                  </div>
 | 
			
		||||
                `
 | 
			
		||||
              : ""}
 | 
			
		||||
          </div>
 | 
			
		||||
          </h1>
 | 
			
		||||
          <slot></slot>
 | 
			
		||||
        </div>
 | 
			
		||||
      </ha-card>
 | 
			
		||||
 
 | 
			
		||||
@@ -6,13 +6,60 @@ import { castContext } from "./cast_context";
 | 
			
		||||
import { HcMain } from "./layout/hc-main";
 | 
			
		||||
import { ReceivedMessage } from "./types";
 | 
			
		||||
 | 
			
		||||
const controller = new HcMain();
 | 
			
		||||
document.body.append(controller);
 | 
			
		||||
const lovelaceController = new HcMain();
 | 
			
		||||
document.body.append(lovelaceController);
 | 
			
		||||
 | 
			
		||||
const mediaPlayer = document.createElement("cast-media-player");
 | 
			
		||||
mediaPlayer.style.display = "none";
 | 
			
		||||
document.body.append(mediaPlayer);
 | 
			
		||||
const playerStylesAdded = false;
 | 
			
		||||
 | 
			
		||||
let controls: HTMLElement | null;
 | 
			
		||||
 | 
			
		||||
const setTouchControlsVisibility = (visible: boolean) => {
 | 
			
		||||
  if (!castContext.getDeviceCapabilities().touch_input_supported) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  controls =
 | 
			
		||||
    controls ||
 | 
			
		||||
    (document.body.querySelector("touch-controls") as HTMLElement | null);
 | 
			
		||||
  if (controls) {
 | 
			
		||||
    controls.style.display = visible ? "initial" : "none";
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const showLovelaceController = () => {
 | 
			
		||||
  mediaPlayer.style.display = "none";
 | 
			
		||||
  lovelaceController.style.display = "initial";
 | 
			
		||||
  document.body.setAttribute("style", "overflow-y: auto !important");
 | 
			
		||||
  setTouchControlsVisibility(false);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const showMediaPlayer = () => {
 | 
			
		||||
  lovelaceController.style.display = "none";
 | 
			
		||||
  mediaPlayer.style.display = "initial";
 | 
			
		||||
  document.body.removeAttribute("style");
 | 
			
		||||
  setTouchControlsVisibility(true);
 | 
			
		||||
  if (!playerStylesAdded) {
 | 
			
		||||
    const style = document.createElement("style");
 | 
			
		||||
    style.innerHTML = `
 | 
			
		||||
    body {
 | 
			
		||||
      --logo-image: url('https://www.home-assistant.io/images/home-assistant-logo.svg');
 | 
			
		||||
      --logo-repeat: no-repeat;
 | 
			
		||||
      --playback-logo-image: url('https://www.home-assistant.io/images/home-assistant-logo.svg');
 | 
			
		||||
      --theme-hue: 200;
 | 
			
		||||
      --progress-color: #03a9f4;
 | 
			
		||||
      --splash-image: url('https://home-assistant.io/images/cast/splash.png');
 | 
			
		||||
      --splash-size: cover;
 | 
			
		||||
    }
 | 
			
		||||
    `;
 | 
			
		||||
    document.head.appendChild(style);
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const options = new cast.framework.CastReceiverOptions();
 | 
			
		||||
options.disableIdleTimeout = true;
 | 
			
		||||
options.customNamespaces = {
 | 
			
		||||
  // @ts-ignore
 | 
			
		||||
  [CAST_NS]: cast.framework.system.MessageType.JSON,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -30,13 +77,61 @@ options.uiConfig = new cast.framework.ui.UiConfig();
 | 
			
		||||
// @ts-ignore
 | 
			
		||||
options.uiConfig.touchScreenOptimizedApp = true;
 | 
			
		||||
 | 
			
		||||
castContext.setInactivityTimeout(86400); // 1 day
 | 
			
		||||
 | 
			
		||||
castContext.addCustomMessageListener(
 | 
			
		||||
  CAST_NS,
 | 
			
		||||
  // @ts-ignore
 | 
			
		||||
  (ev: ReceivedMessage<HassMessage>) => {
 | 
			
		||||
    // We received a show Lovelace command, stop media from playing, hide media player and show Lovelace controller
 | 
			
		||||
    if (
 | 
			
		||||
      playerManager.getPlayerState() !==
 | 
			
		||||
      cast.framework.messages.PlayerState.IDLE
 | 
			
		||||
    ) {
 | 
			
		||||
      playerManager.stop();
 | 
			
		||||
    } else {
 | 
			
		||||
      showLovelaceController();
 | 
			
		||||
    }
 | 
			
		||||
    const msg = ev.data;
 | 
			
		||||
    msg.senderId = ev.senderId;
 | 
			
		||||
    controller.processIncomingMessage(msg);
 | 
			
		||||
    lovelaceController.processIncomingMessage(msg);
 | 
			
		||||
  }
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
const playerManager = castContext.getPlayerManager();
 | 
			
		||||
 | 
			
		||||
playerManager.setMessageInterceptor(
 | 
			
		||||
  cast.framework.messages.MessageType.LOAD,
 | 
			
		||||
  (loadRequestData) => {
 | 
			
		||||
    // We received a play media command, hide Lovelace and show media player
 | 
			
		||||
    showMediaPlayer();
 | 
			
		||||
    const media = loadRequestData.media;
 | 
			
		||||
    // Special handling if it came from Google Assistant
 | 
			
		||||
    if (media.entity) {
 | 
			
		||||
      media.contentId = media.entity;
 | 
			
		||||
      media.streamType = cast.framework.messages.StreamType.LIVE;
 | 
			
		||||
      media.contentType = "application/vnd.apple.mpegurl";
 | 
			
		||||
      // @ts-ignore
 | 
			
		||||
      media.hlsVideoSegmentFormat =
 | 
			
		||||
        cast.framework.messages.HlsVideoSegmentFormat.FMP4;
 | 
			
		||||
    }
 | 
			
		||||
    return loadRequestData;
 | 
			
		||||
  }
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
playerManager.addEventListener(
 | 
			
		||||
  cast.framework.events.EventType.MEDIA_STATUS,
 | 
			
		||||
  (event) => {
 | 
			
		||||
    if (
 | 
			
		||||
      event.mediaStatus?.playerState ===
 | 
			
		||||
        cast.framework.messages.PlayerState.IDLE &&
 | 
			
		||||
      event.mediaStatus?.idleReason &&
 | 
			
		||||
      event.mediaStatus?.idleReason !==
 | 
			
		||||
        cast.framework.messages.IdleReason.INTERRUPTED
 | 
			
		||||
    ) {
 | 
			
		||||
      // media finished or stopped, return to default Lovelace
 | 
			
		||||
      showLovelaceController();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,10 @@
 | 
			
		||||
import { customElement, html, property, TemplateResult } from "lit-element";
 | 
			
		||||
import {
 | 
			
		||||
  customElement,
 | 
			
		||||
  html,
 | 
			
		||||
  property,
 | 
			
		||||
  internalProperty,
 | 
			
		||||
  TemplateResult,
 | 
			
		||||
} from "lit-element";
 | 
			
		||||
import { mockHistory } from "../../../../demo/src/stubs/history";
 | 
			
		||||
import { LovelaceConfig } from "../../../../src/data/lovelace";
 | 
			
		||||
import {
 | 
			
		||||
@@ -13,9 +19,9 @@ import "./hc-lovelace";
 | 
			
		||||
 | 
			
		||||
@customElement("hc-demo")
 | 
			
		||||
class HcDemo extends HassElement {
 | 
			
		||||
  @property() public lovelacePath!: string;
 | 
			
		||||
  @property({ attribute: false }) public lovelacePath!: string;
 | 
			
		||||
 | 
			
		||||
  @property() private _lovelaceConfig?: LovelaceConfig;
 | 
			
		||||
  @internalProperty() private _lovelaceConfig?: LovelaceConfig;
 | 
			
		||||
 | 
			
		||||
  protected render(): TemplateResult {
 | 
			
		||||
    if (!this._lovelaceConfig) {
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ import { HomeAssistant } from "../../../../src/types";
 | 
			
		||||
 | 
			
		||||
@customElement("hc-launch-screen")
 | 
			
		||||
class HcLaunchScreen extends LitElement {
 | 
			
		||||
  @property() public hass?: HomeAssistant;
 | 
			
		||||
  @property({ attribute: false }) public hass?: HomeAssistant;
 | 
			
		||||
 | 
			
		||||
  @property() public error?: string;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,19 +9,20 @@ import {
 | 
			
		||||
} from "lit-element";
 | 
			
		||||
import { LovelaceConfig } from "../../../../src/data/lovelace";
 | 
			
		||||
import { Lovelace } from "../../../../src/panels/lovelace/types";
 | 
			
		||||
import "../../../../src/panels/lovelace/views/hui-panel-view";
 | 
			
		||||
import "../../../../src/panels/lovelace/views/hui-view";
 | 
			
		||||
import { HomeAssistant } from "../../../../src/types";
 | 
			
		||||
import "./hc-launch-screen";
 | 
			
		||||
 | 
			
		||||
@customElement("hc-lovelace")
 | 
			
		||||
class HcLovelace extends LitElement {
 | 
			
		||||
  @property() public hass!: HomeAssistant;
 | 
			
		||||
  @property({ attribute: false }) public hass!: HomeAssistant;
 | 
			
		||||
 | 
			
		||||
  @property() public lovelaceConfig!: LovelaceConfig;
 | 
			
		||||
  @property({ attribute: false }) public lovelaceConfig!: LovelaceConfig;
 | 
			
		||||
 | 
			
		||||
  @property() public viewPath?: string | number;
 | 
			
		||||
 | 
			
		||||
  public urlPath?: string | null;
 | 
			
		||||
 | 
			
		||||
  protected render(): TemplateResult {
 | 
			
		||||
    const index = this._viewIndex;
 | 
			
		||||
    if (index === undefined) {
 | 
			
		||||
@@ -35,6 +36,7 @@ class HcLovelace extends LitElement {
 | 
			
		||||
    const lovelace: Lovelace = {
 | 
			
		||||
      config: this.lovelaceConfig,
 | 
			
		||||
      editMode: false,
 | 
			
		||||
      urlPath: this.urlPath!,
 | 
			
		||||
      enableFullEditMode: () => undefined,
 | 
			
		||||
      mode: "storage",
 | 
			
		||||
      language: "en",
 | 
			
		||||
@@ -42,20 +44,11 @@ class HcLovelace extends LitElement {
 | 
			
		||||
      deleteConfig: async () => undefined,
 | 
			
		||||
      setEditMode: () => undefined,
 | 
			
		||||
    };
 | 
			
		||||
    return this.lovelaceConfig.views[index].panel
 | 
			
		||||
      ? html`
 | 
			
		||||
          <hui-panel-view
 | 
			
		||||
            .hass=${this.hass}
 | 
			
		||||
            .lovelace=${lovelace}
 | 
			
		||||
            .config=${this.lovelaceConfig.views[index]}
 | 
			
		||||
          ></hui-panel-view>
 | 
			
		||||
        `
 | 
			
		||||
      : html`
 | 
			
		||||
    return html`
 | 
			
		||||
      <hui-view
 | 
			
		||||
        .hass=${this.hass}
 | 
			
		||||
        .lovelace=${lovelace}
 | 
			
		||||
        .index=${index}
 | 
			
		||||
            columns="2"
 | 
			
		||||
      ></hui-view>
 | 
			
		||||
    `;
 | 
			
		||||
  }
 | 
			
		||||
@@ -73,7 +66,7 @@ class HcLovelace extends LitElement {
 | 
			
		||||
 | 
			
		||||
        if (configBackground) {
 | 
			
		||||
          (this.shadowRoot!.querySelector(
 | 
			
		||||
            "hui-view, hui-panel-view"
 | 
			
		||||
            "hui-view"
 | 
			
		||||
          ) as HTMLElement)!.style.setProperty(
 | 
			
		||||
            "--lovelace-background",
 | 
			
		||||
            configBackground
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,12 @@ import {
 | 
			
		||||
  getAuth,
 | 
			
		||||
  UnsubscribeFunc,
 | 
			
		||||
} from "home-assistant-js-websocket";
 | 
			
		||||
import { customElement, html, property, TemplateResult } from "lit-element";
 | 
			
		||||
import {
 | 
			
		||||
  customElement,
 | 
			
		||||
  html,
 | 
			
		||||
  internalProperty,
 | 
			
		||||
  TemplateResult,
 | 
			
		||||
} from "lit-element";
 | 
			
		||||
import { CAST_NS } from "../../../../src/cast/const";
 | 
			
		||||
import {
 | 
			
		||||
  ConnectMessage,
 | 
			
		||||
@@ -31,13 +36,13 @@ let resourcesLoaded = false;
 | 
			
		||||
 | 
			
		||||
@customElement("hc-main")
 | 
			
		||||
export class HcMain extends HassElement {
 | 
			
		||||
  @property() private _showDemo = false;
 | 
			
		||||
  @internalProperty() private _showDemo = false;
 | 
			
		||||
 | 
			
		||||
  @property() private _lovelaceConfig?: LovelaceConfig;
 | 
			
		||||
  @internalProperty() private _lovelaceConfig?: LovelaceConfig;
 | 
			
		||||
 | 
			
		||||
  @property() private _lovelacePath: string | number | null = null;
 | 
			
		||||
  @internalProperty() private _lovelacePath: string | number | null = null;
 | 
			
		||||
 | 
			
		||||
  @property() private _error?: string;
 | 
			
		||||
  @internalProperty() private _error?: string;
 | 
			
		||||
 | 
			
		||||
  private _unsubLovelace?: UnsubscribeFunc;
 | 
			
		||||
 | 
			
		||||
@@ -82,6 +87,8 @@ export class HcMain extends HassElement {
 | 
			
		||||
        .hass=${this.hass}
 | 
			
		||||
        .lovelaceConfig=${this._lovelaceConfig}
 | 
			
		||||
        .viewPath=${this._lovelacePath}
 | 
			
		||||
        .urlPath=${this._urlPath}
 | 
			
		||||
        @config-refresh=${this._generateLovelaceConfig}
 | 
			
		||||
      ></hc-lovelace>
 | 
			
		||||
    `;
 | 
			
		||||
  }
 | 
			
		||||
@@ -90,15 +97,17 @@ export class HcMain extends HassElement {
 | 
			
		||||
    super.firstUpdated(changedProps);
 | 
			
		||||
    import("../second-load");
 | 
			
		||||
    window.addEventListener("location-changed", () => {
 | 
			
		||||
      if (location.pathname.startsWith("/lovelace/")) {
 | 
			
		||||
        this._lovelacePath = location.pathname.substr(10);
 | 
			
		||||
      const panelPath = `/${this._urlPath || "lovelace"}/`;
 | 
			
		||||
      if (location.pathname.startsWith(panelPath)) {
 | 
			
		||||
        this._lovelacePath = location.pathname.substr(panelPath.length);
 | 
			
		||||
        this._sendStatus();
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
    document.body.addEventListener("click", (ev) => {
 | 
			
		||||
      const panelPath = `/${this._urlPath || "lovelace"}/`;
 | 
			
		||||
      const href = isNavigationClick(ev);
 | 
			
		||||
      if (href && href.startsWith("/lovelace/")) {
 | 
			
		||||
        this._lovelacePath = href.substr(10);
 | 
			
		||||
      if (href && href.startsWith(panelPath)) {
 | 
			
		||||
        this._lovelacePath = href.substr(panelPath.length);
 | 
			
		||||
        this._sendStatus();
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
@@ -170,10 +179,10 @@ export class HcMain extends HassElement {
 | 
			
		||||
      this._error = "Cannot show Lovelace because we're not connected.";
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
    if (!this._unsubLovelace || this._urlPath !== msg.urlPath) {
 | 
			
		||||
    if (msg.urlPath === "lovelace") {
 | 
			
		||||
      msg.urlPath = null;
 | 
			
		||||
    }
 | 
			
		||||
    if (!this._unsubLovelace || this._urlPath !== msg.urlPath) {
 | 
			
		||||
      this._urlPath = msg.urlPath;
 | 
			
		||||
      if (this._unsubLovelace) {
 | 
			
		||||
        this._unsubLovelace();
 | 
			
		||||
@@ -189,14 +198,11 @@ export class HcMain extends HassElement {
 | 
			
		||||
          this._handleNewLovelaceConfig(lovelaceConfig)
 | 
			
		||||
        );
 | 
			
		||||
      } catch (err) {
 | 
			
		||||
        // eslint-disable-next-line
 | 
			
		||||
        console.log("Error fetching Lovelace configuration", err, msg);
 | 
			
		||||
        // Generate a Lovelace config.
 | 
			
		||||
        this._unsubLovelace = () => undefined;
 | 
			
		||||
        const { generateLovelaceConfigFromHass } = await import(
 | 
			
		||||
          "../../../../src/panels/lovelace/common/generate-lovelace-config"
 | 
			
		||||
        );
 | 
			
		||||
        this._handleNewLovelaceConfig(
 | 
			
		||||
          await generateLovelaceConfigFromHass(this.hass!)
 | 
			
		||||
        );
 | 
			
		||||
        await this._generateLovelaceConfig();
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    if (!resourcesLoaded) {
 | 
			
		||||
@@ -210,12 +216,19 @@ export class HcMain extends HassElement {
 | 
			
		||||
    }
 | 
			
		||||
    this._showDemo = false;
 | 
			
		||||
    this._lovelacePath = msg.viewPath;
 | 
			
		||||
    if (castContext.getDeviceCapabilities().touch_input_supported) {
 | 
			
		||||
      this._breakFree();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this._sendStatus();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private async _generateLovelaceConfig() {
 | 
			
		||||
    const { generateLovelaceConfigFromHass } = await import(
 | 
			
		||||
      "../../../../src/panels/lovelace/common/generate-lovelace-config"
 | 
			
		||||
    );
 | 
			
		||||
    this._handleNewLovelaceConfig(
 | 
			
		||||
      await generateLovelaceConfigFromHass(this.hass!)
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private _handleNewLovelaceConfig(lovelaceConfig: LovelaceConfig) {
 | 
			
		||||
    castContext.setApplicationState(lovelaceConfig.title!);
 | 
			
		||||
    this._lovelaceConfig = lovelaceConfig;
 | 
			
		||||
@@ -226,9 +239,6 @@ export class HcMain extends HassElement {
 | 
			
		||||
      this._showDemo = true;
 | 
			
		||||
      this._lovelacePath = "overview";
 | 
			
		||||
      this._sendStatus();
 | 
			
		||||
      if (castContext.getDeviceCapabilities().touch_input_supported) {
 | 
			
		||||
        this._breakFree();
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -249,14 +259,6 @@ export class HcMain extends HassElement {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private _breakFree() {
 | 
			
		||||
    const controls = document.body.querySelector("touch-controls");
 | 
			
		||||
    if (controls) {
 | 
			
		||||
      controls.remove();
 | 
			
		||||
    }
 | 
			
		||||
    document.body.setAttribute("style", "overflow-y: auto !important");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private sendMessage(senderId: string, response: any) {
 | 
			
		||||
    castContext.sendCustomMessage(CAST_NS, senderId, response);
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
import "web-animations-js/web-animations-next-lite.min";
 | 
			
		||||
import "../../../src/components/ha-iconset-svg";
 | 
			
		||||
import "../../../src/resources/hass-icons";
 | 
			
		||||
import "../../../src/resources/roboto";
 | 
			
		||||
import "../../../src/resources/ha-style";
 | 
			
		||||
import "./layout/hc-lovelace";
 | 
			
		||||
 
 | 
			
		||||
@@ -1,254 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "Gewapen",
 | 
			
		||||
      "armed_away": "Gewapend weg",
 | 
			
		||||
      "armed_custom_bypass": "Gewapende pasgemaakte omseil",
 | 
			
		||||
      "armed_home": "Gewapend tuis",
 | 
			
		||||
      "armed_night": "Gewapend nag",
 | 
			
		||||
      "arming": "Bewapen Tans",
 | 
			
		||||
      "disarmed": "Ontwapen",
 | 
			
		||||
      "disarming": "Ontwapen Tans",
 | 
			
		||||
      "pending": "Hangende",
 | 
			
		||||
      "triggered": "Geaktiveer"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "Af",
 | 
			
		||||
      "on": "Aan"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "Normaal",
 | 
			
		||||
        "on": "Laag"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "Normaal",
 | 
			
		||||
        "on": "Koud"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "Ontkoppel",
 | 
			
		||||
        "on": "Gekoppel"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "Af",
 | 
			
		||||
        "on": "Aan"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "Toe",
 | 
			
		||||
        "on": "Oop"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "Toe",
 | 
			
		||||
        "on": "Oop"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "Ongemerk",
 | 
			
		||||
        "on": "Bespeur"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "Normaal",
 | 
			
		||||
        "on": "Warm"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "Gesluit",
 | 
			
		||||
        "on": "Oopgesluit"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "Droog",
 | 
			
		||||
        "on": "Nat"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "Ongemerk",
 | 
			
		||||
        "on": "Bespeur"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "Ongemerk",
 | 
			
		||||
        "on": "Bespeur"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "Toe",
 | 
			
		||||
        "on": "Oop"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "Elders",
 | 
			
		||||
        "on": "Tuis"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "OK",
 | 
			
		||||
        "on": "Probleem"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "Veilige",
 | 
			
		||||
        "on": "Onveilige"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "Ongemerk",
 | 
			
		||||
        "on": "Bespeur"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "Ongemerk",
 | 
			
		||||
        "on": "Bespeur"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "Ongemerk",
 | 
			
		||||
        "on": "Bespeur"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "Toe",
 | 
			
		||||
        "on": "Oop"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "Af",
 | 
			
		||||
      "on": "Aan"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "Onaktief",
 | 
			
		||||
      "recording": "Opname",
 | 
			
		||||
      "streaming": "Stroming"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "Outo",
 | 
			
		||||
      "cool": "Koel",
 | 
			
		||||
      "dry": "Droog",
 | 
			
		||||
      "fan_only": "Slegs waaier",
 | 
			
		||||
      "heat": "Hitte",
 | 
			
		||||
      "heat_cool": "Verhit/Verkoel",
 | 
			
		||||
      "off": "Af"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "Stel op",
 | 
			
		||||
      "configured": "Opgestel"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "Toe",
 | 
			
		||||
      "closing": "Sluiting",
 | 
			
		||||
      "open": "Oop",
 | 
			
		||||
      "opening": "Opening",
 | 
			
		||||
      "stopped": "Gestop"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "Af",
 | 
			
		||||
      "on": "Aan",
 | 
			
		||||
      "unavailable": "Nie beskikbaar nie",
 | 
			
		||||
      "unknown": "Onbekend"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "Tuis",
 | 
			
		||||
      "not_home": "Elders"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "Af",
 | 
			
		||||
      "on": "Aan"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "Toe",
 | 
			
		||||
      "closing": "Sluiting",
 | 
			
		||||
      "home": "Tuis",
 | 
			
		||||
      "locked": "Gesluit",
 | 
			
		||||
      "not_home": "Elders",
 | 
			
		||||
      "off": "Af",
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "on": "Aan",
 | 
			
		||||
      "open": "Oop",
 | 
			
		||||
      "opening": "Opening",
 | 
			
		||||
      "problem": "Probleem",
 | 
			
		||||
      "stopped": "Gestop",
 | 
			
		||||
      "unlocked": "Oopgesluit"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "Af",
 | 
			
		||||
      "on": "Aan"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "Af",
 | 
			
		||||
      "on": "Aan"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "Gesluit",
 | 
			
		||||
      "unlocked": "Oopgesluit"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "Onaktief",
 | 
			
		||||
      "off": "Af",
 | 
			
		||||
      "on": "Aan",
 | 
			
		||||
      "paused": "Onderbreek",
 | 
			
		||||
      "playing": "Speel Tans",
 | 
			
		||||
      "standby": "Gereed"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "Tuis",
 | 
			
		||||
      "not_home": "Elders"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "problem": "Probleem"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "Af",
 | 
			
		||||
      "on": "Aan"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "Toneeling"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "Af",
 | 
			
		||||
      "on": "Aan"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "Af",
 | 
			
		||||
      "on": "Aan"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "Bo horison",
 | 
			
		||||
      "below_horizon": "Onder horison"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "Af",
 | 
			
		||||
      "on": "Aan"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "aktief",
 | 
			
		||||
      "idle": "onaktief",
 | 
			
		||||
      "paused": "Onderbreek"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "Skoonmaak",
 | 
			
		||||
      "docked": "Vasgemeer by hawe",
 | 
			
		||||
      "error": "Fout",
 | 
			
		||||
      "idle": "Onaktief",
 | 
			
		||||
      "off": "Af",
 | 
			
		||||
      "on": "Aan",
 | 
			
		||||
      "paused": "Onderbreek",
 | 
			
		||||
      "returning": "Oppad terug hawe toe"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "Helder, nag",
 | 
			
		||||
      "cloudy": "Bewolk",
 | 
			
		||||
      "fog": "Mis",
 | 
			
		||||
      "hail": "Hael",
 | 
			
		||||
      "lightning": "Weerlig",
 | 
			
		||||
      "lightning-rainy": "Weerlig, Re\u00ebnagtig",
 | 
			
		||||
      "partlycloudy": "Gedeeltelik bewolk",
 | 
			
		||||
      "pouring": "Stort",
 | 
			
		||||
      "rainy": "Re\u00ebnagtig",
 | 
			
		||||
      "snowy": "Sneeuagtig",
 | 
			
		||||
      "snowy-rainy": "Ysre\u00ebn",
 | 
			
		||||
      "sunny": "Sonnig",
 | 
			
		||||
      "windy": "Winderig",
 | 
			
		||||
      "windy-variant": "Winderig"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "Dood",
 | 
			
		||||
        "initializing": "Inisialiseer",
 | 
			
		||||
        "ready": "Gereed",
 | 
			
		||||
        "sleeping": "Aan die slaap"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "Dood ({query_stage})",
 | 
			
		||||
        "initializing": "Inisialiseer ({query_stage})"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,240 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "\u0645\u0633\u0644\u062d",
 | 
			
		||||
      "armed_away": "\u0645\u0641\u0639\u0651\u0644 \u0641\u064a \u0627\u0644\u062e\u0627\u0631\u062c",
 | 
			
		||||
      "armed_custom_bypass": "\u062a\u062c\u0627\u0648\u0632 \u0627\u0644\u062a\u0641\u0639\u064a\u0644",
 | 
			
		||||
      "armed_home": "\u0645\u0641\u0639\u0651\u0644 \u0641\u064a \u0627\u0644\u0645\u0646\u0632\u0644",
 | 
			
		||||
      "armed_night": "\u0645\u0641\u0639\u0651\u0644 \u0644\u064a\u0644",
 | 
			
		||||
      "arming": "\u062c\u0627\u0631\u064a \u0627\u0644\u062a\u0641\u0639\u064a\u0644",
 | 
			
		||||
      "disarmed": "\u063a\u064a\u0631 \u0645\u0641\u0639\u0651\u0644",
 | 
			
		||||
      "disarming": "\u0625\u064a\u0642\u0627\u0641 \u0627\u0644\u0625\u0646\u0630\u0627\u0631",
 | 
			
		||||
      "pending": "\u0642\u064a\u062f \u0627\u0644\u0625\u0646\u062a\u0638\u0627\u0631",
 | 
			
		||||
      "triggered": "\u0645\u0641\u0639\u0651\u0644"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "\u0625\u064a\u0642\u0627\u0641",
 | 
			
		||||
      "on": "\u062a\u0634\u063a\u064a\u0644"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "\u0637\u0628\u064a\u0639\u064a",
 | 
			
		||||
        "on": "\u0645\u0646\u062e\u0641\u0636"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "\u0637\u0628\u064a\u0639\u064a",
 | 
			
		||||
        "on": "\u0628\u0627\u0631\u062f"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "\u0645\u0641\u0635\u0648\u0644",
 | 
			
		||||
        "on": "\u0645\u062a\u0635\u0644"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "\u0625\u064a\u0642\u0627\u0641",
 | 
			
		||||
        "on": "\u062a\u0634\u063a\u064a\u0644"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "\u0645\u063a\u0644\u0642",
 | 
			
		||||
        "on": "\u0645\u0641\u062a\u0648\u062d"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "\u0645\u063a\u0644\u0642",
 | 
			
		||||
        "on": "\u0645\u0641\u062a\u0648\u062d"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0643\u0634\u0641",
 | 
			
		||||
        "on": "\u062a\u0645 \u0627\u0644\u0643\u0634\u0641"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "\u0637\u0628\u064a\u0639\u064a",
 | 
			
		||||
        "on": "\u062d\u0627\u0631"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "\u0645\u0642\u0641\u0644",
 | 
			
		||||
        "on": "\u063a\u064a\u0631 \u0645\u0642\u0641\u0644"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "\u062c\u0627\u0641",
 | 
			
		||||
        "on": "\u0645\u0628\u0644\u0644"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0643\u0634\u0641",
 | 
			
		||||
        "on": "\u062a\u0645 \u0627\u0644\u0643\u0634\u0641"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0643\u0634\u0641",
 | 
			
		||||
        "on": "\u062a\u0645 \u0627\u0644\u0643\u0634\u0641"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "\u0645\u0642\u0641\u0644",
 | 
			
		||||
        "on": "\u0645\u0641\u062a\u0648\u062d"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "\u062e\u0627\u0631\u062c \u0627\u0644\u0645\u0646\u0632\u0644",
 | 
			
		||||
        "on": "\u0641\u064a \u0627\u0644\u0645\u0646\u0632\u0644"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "\u0645\u0648\u0627\u0641\u0642",
 | 
			
		||||
        "on": "\u0639\u0637\u0644"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "\u0623\u0645\u0646",
 | 
			
		||||
        "on": "\u063a\u064a\u0631 \u0623\u0645\u0646"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0643\u0634\u0641",
 | 
			
		||||
        "on": "\u062a\u0645 \u0627\u0644\u0643\u0634\u0641"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0643\u0634\u0641",
 | 
			
		||||
        "on": "\u062a\u0645 \u0627\u0644\u0643\u0634\u0641"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0643\u0634\u0641",
 | 
			
		||||
        "on": "\u062a\u0645 \u0627\u0644\u0643\u0634\u0641"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "\u0645\u063a\u0644\u0642",
 | 
			
		||||
        "on": "\u0645\u0641\u062a\u0648\u062d"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "\u0625\u064a\u0642\u0627\u0641",
 | 
			
		||||
      "on": "\u062a\u0634\u063a\u064a\u0644"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "\u062e\u0627\u0645\u0644",
 | 
			
		||||
      "recording": "\u062c\u0627\u0631\u064a \u0627\u0644\u062a\u0633\u062c\u064a\u0644",
 | 
			
		||||
      "streaming": "\u062c\u0627\u0631\u064a \u0627\u0644\u0628\u062b"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "\u062a\u0644\u0642\u0627\u0626\u064a",
 | 
			
		||||
      "cool": "\u062a\u0628\u0631\u064a\u062f",
 | 
			
		||||
      "dry": "\u062c\u0627\u0641",
 | 
			
		||||
      "fan_only": "\u0627\u0644\u0645\u0631\u0648\u062d\u0629 \u0641\u0642\u0637",
 | 
			
		||||
      "heat": "\u062a\u062f\u0641\u0626\u0629",
 | 
			
		||||
      "off": "\u0625\u064a\u0642\u0627\u0641"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "\u0625\u0639\u062f\u0627\u062f",
 | 
			
		||||
      "configured": "\u062a\u0645 \u0627\u0644\u0625\u0639\u062f\u0627\u062f"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "\u0645\u063a\u0644\u0642",
 | 
			
		||||
      "closing": "\u062c\u0627\u0631\u064a \u0627\u0644\u0627\u063a\u0644\u0627\u0642",
 | 
			
		||||
      "open": "\u0645\u0641\u062a\u0648\u062d",
 | 
			
		||||
      "opening": "\u062c\u0627\u0631\u064a \u0627\u0644\u0641\u062a\u062d",
 | 
			
		||||
      "stopped": "\u0645\u0648\u0642\u0641"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "\u0625\u064a\u0642\u0627\u0641",
 | 
			
		||||
      "on": "\u062a\u0634\u063a\u064a\u0644",
 | 
			
		||||
      "unavailable": "\u063a\u064a\u0631 \u0645\u062a\u0648\u0641\u0631",
 | 
			
		||||
      "unknown": "\u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "\u0641\u064a \u0627\u0644\u0645\u0646\u0632\u0644",
 | 
			
		||||
      "not_home": "\u062e\u0627\u0631\u062c \u0627\u0644\u0645\u0646\u0632\u0644"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "\u0625\u064a\u0642\u0627\u0641",
 | 
			
		||||
      "on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "\u0645\u063a\u0644\u0642 ",
 | 
			
		||||
      "closing": "\u062c\u0627\u0631\u064a \u0627\u0644\u0627\u063a\u0644\u0627\u0642 ",
 | 
			
		||||
      "home": "\u0641\u064a \u0627\u0644\u0645\u0646\u0632\u0644",
 | 
			
		||||
      "locked": "\u0645\u0642\u0641\u0644 ",
 | 
			
		||||
      "not_home": "\u0641\u064a \u0627\u0644\u062e\u0627\u0631\u062c",
 | 
			
		||||
      "off": "\u0625\u064a\u0642\u0627\u0641",
 | 
			
		||||
      "ok": "\u0623\u0648\u0643\u064a",
 | 
			
		||||
      "on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644",
 | 
			
		||||
      "open": "\u0645\u0641\u062a\u0648\u062d ",
 | 
			
		||||
      "opening": "\u062c\u0627\u0631\u064a \u0627\u0644\u0641\u062a\u062d ",
 | 
			
		||||
      "problem": "\u0645\u0634\u0643\u0644\u0629",
 | 
			
		||||
      "stopped": "\u0645\u0648\u0642\u0641 ",
 | 
			
		||||
      "unlocked": "\u063a\u064a\u0631 \u0645\u0642\u0641\u0644 "
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "\u0625\u064a\u0642\u0627\u0641",
 | 
			
		||||
      "on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "\u0625\u064a\u0642\u0627\u0641",
 | 
			
		||||
      "on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "\u0645\u0642\u0641\u0644",
 | 
			
		||||
      "unlocked": "\u0645\u0641\u062a\u0648\u062d"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "\u062e\u0627\u0645\u0644",
 | 
			
		||||
      "off": "\u0625\u064a\u0642\u0627\u0641",
 | 
			
		||||
      "on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644",
 | 
			
		||||
      "paused": "\u0645\u0648\u0642\u0651\u0641 \u0645\u0624\u0642\u062a\u0627",
 | 
			
		||||
      "playing": "\u062c\u0627\u0631\u064a \u0627\u0644\u062a\u0634\u063a\u064a\u0644",
 | 
			
		||||
      "standby": "\u0648\u0636\u0639 \u0627\u0644\u0625\u0646\u062a\u0638\u0627\u0631"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "\u0641\u064a \u0627\u0644\u0645\u0646\u0632\u0644",
 | 
			
		||||
      "not_home": "\u062e\u0627\u0631\u062c \u0627\u0644\u0645\u0646\u0632\u0644"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "\u0623\u0648\u0643\u064a",
 | 
			
		||||
      "problem": "\u0645\u0634\u0643\u0644\u0629"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "\u0625\u064a\u0642\u0627\u0641",
 | 
			
		||||
      "on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "\u0642\u0628\u062f \u0627\u0644\u0628\u062d\u062b"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "\u0625\u064a\u0642\u0627\u0641",
 | 
			
		||||
      "on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "\u0625\u064a\u0642\u0627\u0641",
 | 
			
		||||
      "on": "\u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "\u0641\u0648\u0642 \u0627\u0644\u0623\u0641\u0642",
 | 
			
		||||
      "below_horizon": "\u062a\u062d\u062a \u0627\u0644\u0623\u0641\u0642"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "\u0625\u064a\u0642\u0627\u0641",
 | 
			
		||||
      "on": "\u0645\u064f\u0634\u064e\u063a\u0651\u0644"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "\u0645\u0641\u0639\u0644",
 | 
			
		||||
      "idle": "\u062e\u0627\u0645\u0644",
 | 
			
		||||
      "paused": "\u0645\u0648\u0642\u0651\u0641 \u0645\u0624\u0642\u062a\u0627"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "\u062a\u0646\u0638\u064a\u0641",
 | 
			
		||||
      "error": "\u062e\u0637\u0623",
 | 
			
		||||
      "off": "\u0645\u0637\u0641\u0626",
 | 
			
		||||
      "on": "\u0645\u0634\u063a\u0644",
 | 
			
		||||
      "paused": "\u0645\u0648\u0642\u0651\u0641 \u0645\u0624\u0642\u062a\u0627",
 | 
			
		||||
      "returning": "\u0627\u0644\u0639\u0648\u062f\u0629"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "cloudy": "Bewolkt",
 | 
			
		||||
      "fog": "Mist",
 | 
			
		||||
      "sunny": "\u0645\u0634\u0645\u0633"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "\u0645\u0641\u0635\u0648\u0644",
 | 
			
		||||
        "initializing": "\u0642\u064a\u062f \u0627\u0644\u0625\u0646\u0634\u0627\u0621",
 | 
			
		||||
        "ready": "\u062c\u0627\u0647\u0632",
 | 
			
		||||
        "sleeping": "\u0646\u0627\u0626\u0645"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "\u0645\u0641\u0635\u0648\u0644 ({query_stage})",
 | 
			
		||||
        "initializing": "\u0642\u064a\u062f \u0627\u0644\u0625\u0646\u0634\u0627\u0621 ( {query_stage} )"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,255 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "\u041f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430",
 | 
			
		||||
      "armed_away": "\u041f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430",
 | 
			
		||||
      "armed_custom_bypass": "\u041f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430",
 | 
			
		||||
      "armed_home": "\u041f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430 - \u0432\u043a\u044a\u0449\u0438",
 | 
			
		||||
      "armed_night": "\u041f\u043e\u0434 \u043e\u0445\u0440\u0430\u043d\u0430 - \u043d\u043e\u0449",
 | 
			
		||||
      "arming": "\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0435",
 | 
			
		||||
      "disarmed": "\u0414\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0430",
 | 
			
		||||
      "disarming": "\u0414\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d\u0435",
 | 
			
		||||
      "pending": "\u0412 \u043e\u0447\u0430\u043a\u0432\u0430\u043d\u0435",
 | 
			
		||||
      "triggered": "\u0417\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0430\u043d"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
 | 
			
		||||
      "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "\u041d\u043e\u0440\u043c\u0430\u043b\u043d\u0430",
 | 
			
		||||
        "on": "\u0418\u0437\u0442\u043e\u0449\u0435\u043d\u0430"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "\u041d\u043e\u0440\u043c\u0430\u043b\u043d\u043e",
 | 
			
		||||
        "on": "\u0421\u0442\u0443\u0434\u0435\u043d\u043e"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
 | 
			
		||||
        "on": "\u0421\u0432\u044a\u0440\u0437\u0430\u043d"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
 | 
			
		||||
        "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "\u0417\u0430\u0442\u0432\u043e\u0440\u0435\u043d\u0430",
 | 
			
		||||
        "on": "\u041e\u0442\u0432\u043e\u0440\u0435\u043d\u0430"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "\u0417\u0430\u0442\u0432\u043e\u0440\u0435\u043d\u0430",
 | 
			
		||||
        "on": "\u041e\u0442\u0432\u043e\u0440\u0435\u043d\u0430"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "\u0427\u0438\u0441\u0442\u043e",
 | 
			
		||||
        "on": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "\u041d\u043e\u0440\u043c\u0430\u043b\u043d\u043e",
 | 
			
		||||
        "on": "\u0413\u043e\u0440\u0435\u0449\u043e"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u043e",
 | 
			
		||||
        "on": "\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "\u0421\u0443\u0445",
 | 
			
		||||
        "on": "\u041c\u043e\u043a\u044a\u0440"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "\u0411\u0435\u0437 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435",
 | 
			
		||||
        "on": "\u0414\u0432\u0438\u0436\u0435\u043d\u0438\u0435"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "\u0427\u0438\u0441\u0442\u043e",
 | 
			
		||||
        "on": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "\u0417\u0430\u0442\u0432\u043e\u0440\u0435\u043d",
 | 
			
		||||
        "on": "\u041e\u0442\u0432\u043e\u0440\u0435\u043d"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "\u041e\u0442\u0441\u044a\u0441\u0442\u0432\u0430",
 | 
			
		||||
        "on": "\u0412\u043a\u044a\u0449\u0438"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "\u041e\u041a",
 | 
			
		||||
        "on": "\u041f\u0440\u043e\u0431\u043b\u0435\u043c"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d",
 | 
			
		||||
        "on": "\u041e\u043f\u0430\u0441\u043d\u043e\u0441\u0442"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "\u0427\u0438\u0441\u0442\u043e",
 | 
			
		||||
        "on": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "\u0427\u0438\u0441\u0442\u043e",
 | 
			
		||||
        "on": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "\u0427\u0438\u0441\u0442\u043e",
 | 
			
		||||
        "on": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d\u0430"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "\u0417\u0430\u0442\u0432\u043e\u0440\u0435\u043d",
 | 
			
		||||
        "on": "\u041e\u0442\u0432\u043e\u0440\u0435\u043d"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
 | 
			
		||||
      "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "\u041d\u0435 \u0437\u0430\u043f\u0438\u0441\u0432\u0430",
 | 
			
		||||
      "recording": "\u0417\u0430\u043f\u0438\u0441\u0432\u0430\u043d\u0435",
 | 
			
		||||
      "streaming": "\u041f\u0440\u0435\u0434\u0430\u0432\u0430"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u043d",
 | 
			
		||||
      "cool": "\u041e\u0445\u043b\u0430\u0436\u0434\u0430\u043d\u0435",
 | 
			
		||||
      "dry": "\u0421\u0443\u0445",
 | 
			
		||||
      "fan_only": "\u0421\u0430\u043c\u043e \u0432\u0435\u043d\u0442\u0438\u043b\u0430\u0442\u043e\u0440",
 | 
			
		||||
      "heat": "\u041e\u0442\u043e\u043f\u043b\u0435\u043d\u0438\u0435",
 | 
			
		||||
      "heat_cool": "\u041e\u0442\u043e\u043f\u043b\u0435\u043d\u0438\u0435/\u041e\u0445\u043b\u0430\u0436\u0434\u0430\u043d\u0435",
 | 
			
		||||
      "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0432\u0430\u043d\u0435",
 | 
			
		||||
      "configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0435\u043d"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "\u0417\u0430\u0442\u0432\u043e\u0440\u0435\u043d\u0430",
 | 
			
		||||
      "closing": "\u0417\u0430\u0442\u0432\u0430\u0440\u044f\u043d\u0435",
 | 
			
		||||
      "open": "\u041e\u0442\u0432\u043e\u0440\u0435\u043d\u0430",
 | 
			
		||||
      "opening": "\u041e\u0442\u0432\u0430\u0440\u044f\u043d\u0435",
 | 
			
		||||
      "stopped": "\u0421\u043f\u0440\u044f\u043d\u0430"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
 | 
			
		||||
      "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d",
 | 
			
		||||
      "unavailable": "\u041d\u0435\u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043d",
 | 
			
		||||
      "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "\u0412\u043a\u044a\u0449\u0438",
 | 
			
		||||
      "not_home": "\u041e\u0442\u0441\u044a\u0441\u0442\u0432\u0430"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
 | 
			
		||||
      "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "\u0417\u0430\u0442\u0432\u043e\u0440\u0435\u043d\u0430",
 | 
			
		||||
      "closing": "\u0417\u0430\u0442\u0432\u0430\u0440\u044f\u043d\u0435",
 | 
			
		||||
      "home": "\u0412\u043a\u044a\u0449\u0438",
 | 
			
		||||
      "locked": "\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0430",
 | 
			
		||||
      "not_home": "\u041e\u0442\u0441\u044a\u0441\u0442\u0432\u0430",
 | 
			
		||||
      "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
 | 
			
		||||
      "ok": "\u041e\u041a",
 | 
			
		||||
      "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0430",
 | 
			
		||||
      "open": "\u041e\u0442\u0432\u043e\u0440\u0435\u043d\u0430",
 | 
			
		||||
      "opening": "\u041e\u0442\u0432\u0430\u0440\u044f\u043d\u0435",
 | 
			
		||||
      "problem": "\u041f\u0440\u043e\u0431\u043b\u0435\u043c",
 | 
			
		||||
      "stopped": "\u0421\u043f\u0440\u044f\u043d\u0430",
 | 
			
		||||
      "unlocked": "\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
 | 
			
		||||
      "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d\u043e",
 | 
			
		||||
      "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u043e"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d",
 | 
			
		||||
      "unlocked": "\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "\u041d\u0435\u0440\u0430\u0431\u043e\u0442\u0435\u0449",
 | 
			
		||||
      "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
 | 
			
		||||
      "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d",
 | 
			
		||||
      "paused": "\u0412 \u043f\u0430\u0443\u0437\u0430",
 | 
			
		||||
      "playing": "\u0412\u044a\u0437\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0436\u0434\u0430\u043d\u0435",
 | 
			
		||||
      "standby": "\u0420\u0435\u0436\u0438\u043c \u043d\u0430 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "\u0412\u043a\u044a\u0449\u0438",
 | 
			
		||||
      "not_home": "\u041e\u0442\u0441\u044a\u0441\u0442\u0432\u0430"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "\u041e\u041a",
 | 
			
		||||
      "problem": "\u041f\u0440\u043e\u0431\u043b\u0435\u043c"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
 | 
			
		||||
      "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "\u041f\u0440\u043e\u043c\u044f\u043d\u0430 \u043d\u0430 \u0441\u0446\u0435\u043d\u0430"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
 | 
			
		||||
      "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
 | 
			
		||||
      "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "\u041d\u0430\u0434 \u0445\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430",
 | 
			
		||||
      "below_horizon": "\u041f\u043e\u0434 \u0445\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
 | 
			
		||||
      "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "\u0430\u043a\u0442\u0438\u0432\u0435\u043d",
 | 
			
		||||
      "idle": "\u043d\u0435\u0440\u0430\u0431\u043e\u0442\u0435\u0449",
 | 
			
		||||
      "paused": "\u0432 \u043f\u0430\u0443\u0437\u0430"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "\u041f\u043e\u0447\u0438\u0441\u0442\u0432\u0430\u043d\u0435",
 | 
			
		||||
      "docked": "\u0412 \u0431\u0430\u0437\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f",
 | 
			
		||||
      "error": "\u0413\u0440\u0435\u0448\u043a\u0430",
 | 
			
		||||
      "idle": "\u041d\u0435\u0440\u0430\u0431\u043e\u0442\u0435\u0449",
 | 
			
		||||
      "off": "\u0418\u0437\u043a\u043b\u044e\u0447\u0435\u043d",
 | 
			
		||||
      "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d",
 | 
			
		||||
      "paused": "\u041f\u0430\u0443\u0437\u0430",
 | 
			
		||||
      "returning": "\u0412\u0440\u044a\u0449\u0430\u043d\u0435 \u0432 \u0431\u0430\u0437\u043e\u0432\u0430\u0442\u0430 \u0441\u0442\u0430\u043d\u0446\u0438\u044f"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "\u042f\u0441\u043d\u043e, \u043d\u043e\u0449",
 | 
			
		||||
      "cloudy": "\u041e\u0431\u043b\u0430\u0447\u043d\u043e",
 | 
			
		||||
      "exceptional": "\u0418\u0437\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u043d\u043e",
 | 
			
		||||
      "fog": "\u041c\u044a\u0433\u043b\u0430",
 | 
			
		||||
      "hail": "\u0413\u0440\u0430\u0434\u0443\u0448\u043a\u0430",
 | 
			
		||||
      "lightning": "\u0421\u0432\u0435\u0442\u043a\u0430\u0432\u0438\u0446\u0430",
 | 
			
		||||
      "lightning-rainy": "\u0421\u0432\u0435\u0442\u043a\u0430\u0432\u0438\u0446\u0430, \u0434\u044a\u0436\u0434\u043e\u0432\u043d\u043e",
 | 
			
		||||
      "partlycloudy": "\u0427\u0430\u0441\u0442\u0438\u0447\u043d\u0430 \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0441\u0442",
 | 
			
		||||
      "pouring": "\u041e\u0431\u0438\u043b\u0435\u043d \u0434\u044a\u0436\u0434",
 | 
			
		||||
      "rainy": "\u0414\u044a\u0436\u0434\u043e\u0432\u043d\u043e",
 | 
			
		||||
      "snowy": "\u0421\u043d\u0435\u0436\u043d\u043e",
 | 
			
		||||
      "snowy-rainy": "\u0421\u043d\u0435\u0436\u043d\u043e, \u0434\u044a\u0436\u0434\u043e\u0432\u043d\u043e",
 | 
			
		||||
      "sunny": "\u0421\u043b\u044a\u043d\u0447\u0435\u0432\u043e",
 | 
			
		||||
      "windy": "\u0412\u0435\u0442\u0440\u043e\u0432\u0438\u0442\u043e",
 | 
			
		||||
      "windy-variant": "\u0412\u0435\u0442\u0440\u043e\u0432\u0438\u0442\u043e"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "\u041c\u044a\u0440\u0442\u044a\u0432",
 | 
			
		||||
        "initializing": "\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f",
 | 
			
		||||
        "ready": "\u0413\u043e\u0442\u043e\u0432",
 | 
			
		||||
        "sleeping": "\u0421\u043f\u044f\u0449"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "\u041c\u044a\u0440\u0442\u044a\u0432 ({query_stage})",
 | 
			
		||||
        "initializing": "\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f ( {query_stage} )"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,194 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "Aktiviran",
 | 
			
		||||
      "armed_away": "Aktiviran izvan ku\u0107e",
 | 
			
		||||
      "armed_custom_bypass": "Aktiviran pod specijalnim rezimom",
 | 
			
		||||
      "armed_home": "Aktiviran kod ku\u0107e",
 | 
			
		||||
      "armed_night": "Aktiviran no\u0107u",
 | 
			
		||||
      "arming": "Aktivacija",
 | 
			
		||||
      "disarmed": "Deaktiviran",
 | 
			
		||||
      "disarming": "Deaktivacija",
 | 
			
		||||
      "pending": "U is\u010dekivanju",
 | 
			
		||||
      "triggered": "Pokrenut"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "Isklju\u010den",
 | 
			
		||||
      "on": "Uklju\u010den"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "Normalno",
 | 
			
		||||
        "on": "Nisko"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "Nepovezan",
 | 
			
		||||
        "on": "Povezan"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "Isklju\u010den",
 | 
			
		||||
        "on": "Uklju\u010den"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "\u010cist",
 | 
			
		||||
        "on": "Otkriven"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "Suho",
 | 
			
		||||
        "on": "Mokar"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "\u010cist",
 | 
			
		||||
        "on": "Otkriven"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "\u010cist",
 | 
			
		||||
        "on": "Otkriven"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "Zatvoren",
 | 
			
		||||
        "on": "Otvoren"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "Odsutan",
 | 
			
		||||
        "on": "Kod ku\u0107e"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "OK",
 | 
			
		||||
        "on": "Problem"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "Siguran",
 | 
			
		||||
        "on": "Nesiguran"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "\u010cist",
 | 
			
		||||
        "on": "Otkriven"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "\u010cist",
 | 
			
		||||
        "on": "Otkriven"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "\u010cist",
 | 
			
		||||
        "on": "Otkriven"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "Isklju\u010den",
 | 
			
		||||
      "on": "Uklju\u010den"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "Besposlen",
 | 
			
		||||
      "recording": "Snimanje",
 | 
			
		||||
      "streaming": "Predaja slike"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "Auto",
 | 
			
		||||
      "cool": "Hladno",
 | 
			
		||||
      "dry": "Suh",
 | 
			
		||||
      "fan_only": "Samo ventilator",
 | 
			
		||||
      "heat": "Toplota",
 | 
			
		||||
      "off": "Isklju\u010den"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "Podesite",
 | 
			
		||||
      "configured": "Konfigurirano"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "Zatvoren",
 | 
			
		||||
      "closing": "Zatvoreno",
 | 
			
		||||
      "open": "Otvoren",
 | 
			
		||||
      "opening": "Otvoreno",
 | 
			
		||||
      "stopped": "Zaustavljen"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "Isklju\u010den",
 | 
			
		||||
      "on": "Uklju\u010den",
 | 
			
		||||
      "unavailable": "Nedostupan",
 | 
			
		||||
      "unknown": "Nepoznat"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "Kod ku\u0107e",
 | 
			
		||||
      "not_home": "Odsutan"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "Isklju\u010den",
 | 
			
		||||
      "on": "Uklju\u010den"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "Zatvoren",
 | 
			
		||||
      "closing": "Zatvoreno",
 | 
			
		||||
      "home": "Kod ku\u0107e",
 | 
			
		||||
      "locked": "Zaklju\u010dan",
 | 
			
		||||
      "not_home": "Odsutan",
 | 
			
		||||
      "off": "Isklju\u010den",
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "on": "Uklju\u010den",
 | 
			
		||||
      "open": "Otvoren",
 | 
			
		||||
      "opening": "Otvoreno",
 | 
			
		||||
      "problem": "Problem",
 | 
			
		||||
      "stopped": "Zaustavljen",
 | 
			
		||||
      "unlocked": "Otklju\u010dan"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "Isklju\u010den",
 | 
			
		||||
      "on": "Uklju\u010den"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "Isklju\u010den",
 | 
			
		||||
      "on": "Uklju\u010den"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "Zaklju\u010dan",
 | 
			
		||||
      "unlocked": "Otklju\u010dan"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "Besposlen",
 | 
			
		||||
      "off": "Isklju\u010den",
 | 
			
		||||
      "on": "Uklju\u010den",
 | 
			
		||||
      "paused": "Pauziran",
 | 
			
		||||
      "playing": "Prikazuje",
 | 
			
		||||
      "standby": "U stanju \u010dekanja"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "problem": "Problem"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "Isklju\u010den",
 | 
			
		||||
      "on": "Uklju\u010den"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "Scena"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "Isklju\u010den",
 | 
			
		||||
      "on": "Uklju\u010den"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "Isklju\u010den",
 | 
			
		||||
      "on": "Uklju\u010den"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "Iznad horizonta",
 | 
			
		||||
      "below_horizon": "Ispod horizonta"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "Isklju\u010den",
 | 
			
		||||
      "on": "Uklju\u010den"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "Mrtav",
 | 
			
		||||
        "initializing": "Inicijalizacija",
 | 
			
		||||
        "ready": "Spreman",
 | 
			
		||||
        "sleeping": "Spava"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "Mrtav ({query_stage})",
 | 
			
		||||
        "initializing": "Inicijalizacija ( {query_stage} )"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,255 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "Activada",
 | 
			
		||||
      "armed_away": "Activada, mode fora",
 | 
			
		||||
      "armed_custom_bypass": "Activada, bypass personalitzat",
 | 
			
		||||
      "armed_home": "Activada, mode a casa",
 | 
			
		||||
      "armed_night": "Activada, mode nocturn",
 | 
			
		||||
      "arming": "Activant",
 | 
			
		||||
      "disarmed": "Desactivada",
 | 
			
		||||
      "disarming": "Desactivant",
 | 
			
		||||
      "pending": "Pendent",
 | 
			
		||||
      "triggered": "Disparada"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "Desactivat",
 | 
			
		||||
      "on": "Activat"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Baixa"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Fred"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "Desconnectat",
 | 
			
		||||
        "on": "Connectat"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "Desactivat",
 | 
			
		||||
        "on": "Activat"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "Tancada",
 | 
			
		||||
        "on": "Oberta"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "Tancada",
 | 
			
		||||
        "on": "Oberta"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "Lliure",
 | 
			
		||||
        "on": "Detectat"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Calent"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "Bloquejat",
 | 
			
		||||
        "on": "Desbloquejat"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "Sec",
 | 
			
		||||
        "on": "Humit"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "Lliure",
 | 
			
		||||
        "on": "Detectat"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "Lliure",
 | 
			
		||||
        "on": "Detectat"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "Tancat",
 | 
			
		||||
        "on": "Obert"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "Lliure",
 | 
			
		||||
        "on": "Detectat"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "Correcte",
 | 
			
		||||
        "on": "Problema"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "Segur",
 | 
			
		||||
        "on": "No segur"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "Lliure",
 | 
			
		||||
        "on": "Detectat"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "Lliure",
 | 
			
		||||
        "on": "Detectat"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "Lliure",
 | 
			
		||||
        "on": "Detectat"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "Tancada",
 | 
			
		||||
        "on": "Oberta"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "Desactivat",
 | 
			
		||||
      "on": "Activat"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "Inactiu",
 | 
			
		||||
      "recording": "Enregistrant",
 | 
			
		||||
      "streaming": "Transmetent v\u00eddeo"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "Autom\u00e0tic",
 | 
			
		||||
      "cool": "Refredar",
 | 
			
		||||
      "dry": "Assecar",
 | 
			
		||||
      "fan_only": "Nom\u00e9s ventilador",
 | 
			
		||||
      "heat": "Escalfar",
 | 
			
		||||
      "heat_cool": "Escalfar/Refredar",
 | 
			
		||||
      "off": "Apagat"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "Configurar",
 | 
			
		||||
      "configured": "Configurat"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "Tancada",
 | 
			
		||||
      "closing": "Tancant",
 | 
			
		||||
      "open": "Oberta",
 | 
			
		||||
      "opening": "Obrint",
 | 
			
		||||
      "stopped": "Aturat"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "Desactivat",
 | 
			
		||||
      "on": "Activat",
 | 
			
		||||
      "unavailable": "No disponible",
 | 
			
		||||
      "unknown": "Desconegut"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "A casa",
 | 
			
		||||
      "not_home": "Fora"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "Apagat",
 | 
			
		||||
      "on": "Enc\u00e8s"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "Tancat",
 | 
			
		||||
      "closing": "Tancant",
 | 
			
		||||
      "home": "A casa",
 | 
			
		||||
      "locked": "Bloquejat",
 | 
			
		||||
      "not_home": "Fora",
 | 
			
		||||
      "off": "Desactivat",
 | 
			
		||||
      "ok": "Correcte",
 | 
			
		||||
      "on": "Activat",
 | 
			
		||||
      "open": "Obert",
 | 
			
		||||
      "opening": "Obrint",
 | 
			
		||||
      "problem": "Problema",
 | 
			
		||||
      "stopped": "Aturat",
 | 
			
		||||
      "unlocked": "Desbloquejat"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "Desactivat",
 | 
			
		||||
      "on": "Activat"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "Apagada",
 | 
			
		||||
      "on": "Encesa"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "Bloquejat",
 | 
			
		||||
      "unlocked": "Desbloquejat"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "Inactiu",
 | 
			
		||||
      "off": "Apagat",
 | 
			
		||||
      "on": "Enc\u00e8s",
 | 
			
		||||
      "paused": "Pausat",
 | 
			
		||||
      "playing": "Reproduint",
 | 
			
		||||
      "standby": "En espera"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "A casa",
 | 
			
		||||
      "not_home": "Fora"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "Correcte",
 | 
			
		||||
      "problem": "Problema"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "Apagat",
 | 
			
		||||
      "on": "Enc\u00e8s"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "Escena activa"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "Desactivat",
 | 
			
		||||
      "on": "Activat"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "Desactivat",
 | 
			
		||||
      "on": "Activat"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "Sobre l'horitz\u00f3",
 | 
			
		||||
      "below_horizon": "Sota l'horitz\u00f3"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "Apagat",
 | 
			
		||||
      "on": "Enc\u00e8s"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "actiu",
 | 
			
		||||
      "idle": "inactiu",
 | 
			
		||||
      "paused": "en pausa"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "Netejant",
 | 
			
		||||
      "docked": "Aparcat",
 | 
			
		||||
      "error": "Error",
 | 
			
		||||
      "idle": "Inactiu",
 | 
			
		||||
      "off": "Apagat",
 | 
			
		||||
      "on": "Enc\u00e8s",
 | 
			
		||||
      "paused": "Pausat",
 | 
			
		||||
      "returning": "Retornant a la base"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "Ser\u00e8, nit",
 | 
			
		||||
      "cloudy": "Ennuvolat",
 | 
			
		||||
      "exceptional": "Excepcional",
 | 
			
		||||
      "fog": "Boira",
 | 
			
		||||
      "hail": "Calamarsa",
 | 
			
		||||
      "lightning": "Llamps",
 | 
			
		||||
      "lightning-rainy": "Tempesta",
 | 
			
		||||
      "partlycloudy": "Parcialment ennuvolat",
 | 
			
		||||
      "pouring": "Pluja",
 | 
			
		||||
      "rainy": "Pluj\u00f3s",
 | 
			
		||||
      "snowy": "Neu",
 | 
			
		||||
      "snowy-rainy": "Aiguaneu",
 | 
			
		||||
      "sunny": "Assolellat",
 | 
			
		||||
      "windy": "Vent\u00f3s",
 | 
			
		||||
      "windy-variant": "Vent\u00f3s"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "No disponible",
 | 
			
		||||
        "initializing": "Inicialitzant",
 | 
			
		||||
        "ready": "A punt",
 | 
			
		||||
        "sleeping": "Dormint"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "No disponible ({query_stage})",
 | 
			
		||||
        "initializing": "Inicialitzant ({query_stage})"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,255 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "Aktivn\u00ed",
 | 
			
		||||
      "armed_away": "Aktivn\u00ed re\u017eim mimo domov",
 | 
			
		||||
      "armed_custom_bypass": "Aktivn\u00ed u\u017eivatelsk\u00fdm obejit\u00edm",
 | 
			
		||||
      "armed_home": "Aktivn\u00ed re\u017eim doma",
 | 
			
		||||
      "armed_night": "Aktivn\u00ed no\u010dn\u00ed re\u017eim",
 | 
			
		||||
      "arming": "Aktivov\u00e1n\u00ed",
 | 
			
		||||
      "disarmed": "Neaktivn\u00ed",
 | 
			
		||||
      "disarming": "Deaktivov\u00e1n\u00ed",
 | 
			
		||||
      "pending": "Nadch\u00e1zej\u00edc\u00ed",
 | 
			
		||||
      "triggered": "Spu\u0161t\u011bno"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "Neaktivn\u00ed",
 | 
			
		||||
      "on": "Aktivn\u00ed"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "Norm\u00e1ln\u00ed",
 | 
			
		||||
        "on": "N\u00edzk\u00fd stav"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "Norm\u00e1ln\u00ed",
 | 
			
		||||
        "on": "Chladn\u00e9"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "Odpojeno",
 | 
			
		||||
        "on": "P\u0159ipojeno"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "Neaktivn\u00ed",
 | 
			
		||||
        "on": "Aktivn\u00ed"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "Zav\u0159eno",
 | 
			
		||||
        "on": "Otev\u0159eno"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "Zav\u0159eno",
 | 
			
		||||
        "on": "Otev\u0159eno"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "\u017d\u00e1dn\u00fd plyn",
 | 
			
		||||
        "on": "Zji\u0161t\u011bn plyn"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "Norm\u00e1ln\u00ed",
 | 
			
		||||
        "on": "Hork\u00e9"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "Zam\u010deno",
 | 
			
		||||
        "on": "Odem\u010deno"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "Sucho",
 | 
			
		||||
        "on": "Vlhko"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "Bez pohybu",
 | 
			
		||||
        "on": "Zaznamen\u00e1n pohyb"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "Volno",
 | 
			
		||||
        "on": "Obsazeno"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "Zav\u0159eno",
 | 
			
		||||
        "on": "Otev\u0159eno"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "Pry\u010d",
 | 
			
		||||
        "on": "Doma"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "V po\u0159\u00e1dku",
 | 
			
		||||
        "on": "Probl\u00e9m"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "Zaji\u0161t\u011bno",
 | 
			
		||||
        "on": "Nezaji\u0161t\u011bno"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "\u017d\u00e1dn\u00fd d\u00fdm",
 | 
			
		||||
        "on": "Zji\u0161t\u011bn d\u00fdm"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "Ticho",
 | 
			
		||||
        "on": "Zachycen zvuk"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "Klid",
 | 
			
		||||
        "on": "Zji\u0161t\u011bny vibrace"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "Zav\u0159eno",
 | 
			
		||||
        "on": "Otev\u0159eno"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "Neaktivn\u00ed",
 | 
			
		||||
      "on": "Aktivn\u00ed"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "Ne\u010dinn\u00fd",
 | 
			
		||||
      "recording": "Z\u00e1znam",
 | 
			
		||||
      "streaming": "Streamov\u00e1n\u00ed"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "Automatika",
 | 
			
		||||
      "cool": "Chlazen\u00ed",
 | 
			
		||||
      "dry": "Vysou\u0161en\u00ed",
 | 
			
		||||
      "fan_only": "Pouze ventil\u00e1tor",
 | 
			
		||||
      "heat": "Topen\u00ed",
 | 
			
		||||
      "heat_cool": "Vyt\u00e1p\u011bn\u00ed/Chlazen\u00ed",
 | 
			
		||||
      "off": "Neaktivn\u00ed"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "Nakonfigurovat",
 | 
			
		||||
      "configured": "Nakonfigurov\u00e1no"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "Zav\u0159eno",
 | 
			
		||||
      "closing": "Zav\u00edr\u00e1n\u00ed",
 | 
			
		||||
      "open": "Otev\u0159eno",
 | 
			
		||||
      "opening": "Otev\u00edr\u00e1n\u00ed",
 | 
			
		||||
      "stopped": "Zastaveno"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "Neaktivn\u00ed",
 | 
			
		||||
      "on": "Aktivn\u00ed",
 | 
			
		||||
      "unavailable": "Nen\u00ed k dispozici",
 | 
			
		||||
      "unknown": "Nezji\u0161t\u011bno"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "Doma",
 | 
			
		||||
      "not_home": "Pry\u010d"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "Neaktivn\u00ed",
 | 
			
		||||
      "on": "Aktivn\u00ed"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "Zav\u0159eno",
 | 
			
		||||
      "closing": "Zav\u00edr\u00e1n\u00ed",
 | 
			
		||||
      "home": "Doma",
 | 
			
		||||
      "locked": "Zam\u010deno",
 | 
			
		||||
      "not_home": "Pry\u010d",
 | 
			
		||||
      "off": "Neaktivn\u00ed",
 | 
			
		||||
      "ok": "V po\u0159\u00e1dku",
 | 
			
		||||
      "on": "Aktivn\u00ed",
 | 
			
		||||
      "open": "Otev\u0159eno",
 | 
			
		||||
      "opening": "Otev\u00edr\u00e1n\u00ed",
 | 
			
		||||
      "problem": "Probl\u00e9m",
 | 
			
		||||
      "stopped": "Zastaveno",
 | 
			
		||||
      "unlocked": "Odem\u010deno"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "Neaktivn\u00ed",
 | 
			
		||||
      "on": "Aktivn\u00ed"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "Nesv\u00edt\u00ed",
 | 
			
		||||
      "on": "Sv\u00edt\u00ed"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "Zam\u010deno",
 | 
			
		||||
      "unlocked": "Odem\u010deno"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "Ne\u010dinn\u00fd",
 | 
			
		||||
      "off": "Neaktivn\u00ed",
 | 
			
		||||
      "on": "Aktivn\u00ed",
 | 
			
		||||
      "paused": "Pozastaveno",
 | 
			
		||||
      "playing": "P\u0159ehr\u00e1v\u00e1n\u00ed",
 | 
			
		||||
      "standby": "Pohotovostn\u00ed re\u017eim"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "Doma",
 | 
			
		||||
      "not_home": "Pry\u010d"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "V po\u0159\u00e1dku",
 | 
			
		||||
      "problem": "Probl\u00e9m"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "Neaktivn\u00ed",
 | 
			
		||||
      "on": "Aktivn\u00ed"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "Scen\u00e9rie"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "Neaktivn\u00ed",
 | 
			
		||||
      "on": "Aktivn\u00ed"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "Neaktivn\u00ed",
 | 
			
		||||
      "on": "Aktivn\u00ed"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "Nad horizontem",
 | 
			
		||||
      "below_horizon": "Za horizontem"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "Neaktivn\u00ed",
 | 
			
		||||
      "on": "Aktivn\u00ed"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "aktivn\u00ed",
 | 
			
		||||
      "idle": "ne\u010dinn\u00e9",
 | 
			
		||||
      "paused": "pozastaveno"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "\u010cist\u00ed",
 | 
			
		||||
      "docked": "V stanici",
 | 
			
		||||
      "error": "Chyba",
 | 
			
		||||
      "idle": "Ne\u010dinn\u00fd",
 | 
			
		||||
      "off": "Off",
 | 
			
		||||
      "on": "On",
 | 
			
		||||
      "paused": "Pozastaveno",
 | 
			
		||||
      "returning": "N\u00e1vrat do stanice"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "Jasn\u00e1 noc",
 | 
			
		||||
      "cloudy": "Zata\u017eeno",
 | 
			
		||||
      "exceptional": "Vyj\u00edme\u010dn\u00e9",
 | 
			
		||||
      "fog": "Mlha",
 | 
			
		||||
      "hail": "Krupobit\u00ed",
 | 
			
		||||
      "lightning": "Bou\u0159e",
 | 
			
		||||
      "lightning-rainy": "Bou\u0159e a d\u00e9\u0161\u0165",
 | 
			
		||||
      "partlycloudy": "Polojasno",
 | 
			
		||||
      "pouring": "Lij\u00e1k",
 | 
			
		||||
      "rainy": "D\u00e9\u0161\u0165",
 | 
			
		||||
      "snowy": "Sn\u00edh",
 | 
			
		||||
      "snowy-rainy": "D\u00e9\u0161\u0165 se sn\u011bhem",
 | 
			
		||||
      "sunny": "Slune\u010dno",
 | 
			
		||||
      "windy": "V\u011btrno",
 | 
			
		||||
      "windy-variant": "V\u011btrno"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "Nereaguje",
 | 
			
		||||
        "initializing": "Inicializace",
 | 
			
		||||
        "ready": "P\u0159ipraveno",
 | 
			
		||||
        "sleeping": "\u00dasporn\u00fd re\u017eim"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "Nereaguje ({query_stage})",
 | 
			
		||||
        "initializing": "Inicializace ( {query_stage} )"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,243 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "Arfogi",
 | 
			
		||||
      "armed_away": "Arfog i ffwrdd",
 | 
			
		||||
      "armed_custom_bypass": "Ffordd osgoi larwm personol",
 | 
			
		||||
      "armed_home": "Arfogi gartref",
 | 
			
		||||
      "armed_night": "Arfog nos",
 | 
			
		||||
      "arming": "Arfogi",
 | 
			
		||||
      "disarmed": "Diarfogi",
 | 
			
		||||
      "disarming": "Ddiarfogi",
 | 
			
		||||
      "pending": "Yn yr arfaeth",
 | 
			
		||||
      "triggered": "Sbarduno"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "I ffwrdd",
 | 
			
		||||
      "on": "Ar"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "Arferol",
 | 
			
		||||
        "on": "Isel"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "Arferol",
 | 
			
		||||
        "on": "Oer"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "Wedi datgysylltu",
 | 
			
		||||
        "on": "Cysylltiedig"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "i ffwrdd",
 | 
			
		||||
        "on": "Ar"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "Cau",
 | 
			
		||||
        "on": "Agor"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "Cau",
 | 
			
		||||
        "on": "Agor"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "Clir",
 | 
			
		||||
        "on": "Wedi'i ganfod"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "Arferol",
 | 
			
		||||
        "on": "Poeth"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "Cloi",
 | 
			
		||||
        "on": "Dad-gloi"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "Sych",
 | 
			
		||||
        "on": "Gwlyb"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "Clir",
 | 
			
		||||
        "on": "Wedi'i ganfod"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "Clir",
 | 
			
		||||
        "on": "Wedi'i ganfod"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "Cau",
 | 
			
		||||
        "on": "Agor"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "Allan",
 | 
			
		||||
        "on": "Gartref"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "iawn",
 | 
			
		||||
        "on": "Problem"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "Diogel",
 | 
			
		||||
        "on": "Anniogel"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "Clir",
 | 
			
		||||
        "on": "Wedi'i ganfod"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "Clir",
 | 
			
		||||
        "on": "Wedi'i ganfod"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "Clir",
 | 
			
		||||
        "on": "Wedi'i ganfod"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "Cau",
 | 
			
		||||
        "on": "Agored"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "i ffwrdd",
 | 
			
		||||
      "on": "Ar"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "Segur",
 | 
			
		||||
      "recording": "Recordio",
 | 
			
		||||
      "streaming": "Ffrydio"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "Awto",
 | 
			
		||||
      "cool": "Sefydlog",
 | 
			
		||||
      "dry": "Sych",
 | 
			
		||||
      "fan_only": "Fan yn unig",
 | 
			
		||||
      "heat": "Gwres",
 | 
			
		||||
      "off": "i ffwrdd"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "Ffurfweddu",
 | 
			
		||||
      "configured": "Wedi'i ffurfweddu"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "Ar gau",
 | 
			
		||||
      "closing": "Cau",
 | 
			
		||||
      "open": "Agor",
 | 
			
		||||
      "opening": "Yn agor",
 | 
			
		||||
      "stopped": "Stopio"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "I ffwrdd",
 | 
			
		||||
      "on": "Ar",
 | 
			
		||||
      "unavailable": "Ddim ar gael",
 | 
			
		||||
      "unknown": "Anhysbys"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "Gartref",
 | 
			
		||||
      "not_home": "Diim gartref"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "i ffwrdd",
 | 
			
		||||
      "on": "Ar"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "Wedi cau",
 | 
			
		||||
      "closing": "Yn cau",
 | 
			
		||||
      "home": "Gartref",
 | 
			
		||||
      "locked": " Cloi",
 | 
			
		||||
      "not_home": "Dim gartref",
 | 
			
		||||
      "off": "i ffwrdd",
 | 
			
		||||
      "ok": "Iawn",
 | 
			
		||||
      "on": "Ar",
 | 
			
		||||
      "open": "Agored",
 | 
			
		||||
      "opening": "Agor",
 | 
			
		||||
      "problem": "Problem",
 | 
			
		||||
      "stopped": "Stopio",
 | 
			
		||||
      "unlocked": "Dadgloi"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "i ffwrdd",
 | 
			
		||||
      "on": "Ar"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "i ffwrdd",
 | 
			
		||||
      "on": "Ar"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "Wedi cloi",
 | 
			
		||||
      "unlocked": "Datgloi"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "Segur",
 | 
			
		||||
      "off": "i ffwrdd",
 | 
			
		||||
      "on": "Ar",
 | 
			
		||||
      "paused": "Wedi rhewi",
 | 
			
		||||
      "playing": "Chwarae",
 | 
			
		||||
      "standby": "Gorffwys"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "Gartref",
 | 
			
		||||
      "not_home": "I ffwrdd"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "Iawn",
 | 
			
		||||
      "problem": "Problem"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "i ffwrdd",
 | 
			
		||||
      "on": "Ar"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "Sefyllfa"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "i ffwrdd",
 | 
			
		||||
      "on": "Ar"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "i ffwrdd",
 | 
			
		||||
      "on": "Ar"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "Dros y gorwel",
 | 
			
		||||
      "below_horizon": "Islaw'r gorwel"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "i ffwrdd",
 | 
			
		||||
      "on": "Ar"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "gweithredol",
 | 
			
		||||
      "idle": "segur",
 | 
			
		||||
      "paused": "wedi rhewi"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "Clir, nos",
 | 
			
		||||
      "cloudy": "Cymylog",
 | 
			
		||||
      "fog": "Niwl",
 | 
			
		||||
      "hail": "Cenllysg",
 | 
			
		||||
      "lightning": "Mellt",
 | 
			
		||||
      "lightning-rainy": "Mellt, glawog",
 | 
			
		||||
      "partlycloudy": "Cymharol gymylog",
 | 
			
		||||
      "pouring": "Arllwys",
 | 
			
		||||
      "rainy": "Glawog",
 | 
			
		||||
      "snowy": "Eira",
 | 
			
		||||
      "snowy-rainy": "Eira, gwlyb",
 | 
			
		||||
      "sunny": "Heulog",
 | 
			
		||||
      "windy": "Gwyntog",
 | 
			
		||||
      "windy-variant": "Gwyntog"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "Marw",
 | 
			
		||||
        "initializing": "Ymgychwyn",
 | 
			
		||||
        "ready": "Barod",
 | 
			
		||||
        "sleeping": "Cysgu"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "Marw ({query_stage})",
 | 
			
		||||
        "initializing": "Ymgychwyn ( {query_stage} )"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,255 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "Tilkoblet",
 | 
			
		||||
      "armed_away": "Tilkoblet ude",
 | 
			
		||||
      "armed_custom_bypass": "Tilkoblet brugerdefineret bypass",
 | 
			
		||||
      "armed_home": "Tilkoblet hjemme",
 | 
			
		||||
      "armed_night": "Tilkoblet nat",
 | 
			
		||||
      "arming": "Tilkobler",
 | 
			
		||||
      "disarmed": "Frakoblet",
 | 
			
		||||
      "disarming": "Frakobler",
 | 
			
		||||
      "pending": "Afventer",
 | 
			
		||||
      "triggered": "Udl\u00f8st"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "Fra",
 | 
			
		||||
      "on": "Til"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Lav"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Kold"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "Afbrudt",
 | 
			
		||||
        "on": "Forbundet"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "Fra",
 | 
			
		||||
        "on": "Til"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "Lukket",
 | 
			
		||||
        "on": "\u00c5ben"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "Lukket",
 | 
			
		||||
        "on": "\u00c5ben"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "Ikke registreret",
 | 
			
		||||
        "on": "Registreret"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Varm"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "L\u00e5st",
 | 
			
		||||
        "on": "Ul\u00e5st"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "T\u00f8r",
 | 
			
		||||
        "on": "Fugtig"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "Ikke registreret",
 | 
			
		||||
        "on": "Registreret"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "Ikke registreret",
 | 
			
		||||
        "on": "Registreret"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "Lukket",
 | 
			
		||||
        "on": "\u00c5ben"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "Ude",
 | 
			
		||||
        "on": "Hjemme"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "OK",
 | 
			
		||||
        "on": "Problem"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "Sikret",
 | 
			
		||||
        "on": "Usikret"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "Ikke registreret",
 | 
			
		||||
        "on": "Registreret"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "Ikke registreret",
 | 
			
		||||
        "on": "Registreret"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "Ikke registreret",
 | 
			
		||||
        "on": "Registreret"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "Lukket",
 | 
			
		||||
        "on": "\u00c5ben"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "Fra",
 | 
			
		||||
      "on": "Til"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "Inaktiv",
 | 
			
		||||
      "recording": "Optager",
 | 
			
		||||
      "streaming": "Streamer"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "Auto",
 | 
			
		||||
      "cool": "K\u00f8l",
 | 
			
		||||
      "dry": "T\u00f8r",
 | 
			
		||||
      "fan_only": "Kun bl\u00e6ser",
 | 
			
		||||
      "heat": "Varme",
 | 
			
		||||
      "heat_cool": "Opvarm/k\u00f8l",
 | 
			
		||||
      "off": "Fra"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "Konfigurer",
 | 
			
		||||
      "configured": "Konfigureret"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "Lukket",
 | 
			
		||||
      "closing": "Lukker",
 | 
			
		||||
      "open": "\u00c5ben",
 | 
			
		||||
      "opening": "\u00c5bner",
 | 
			
		||||
      "stopped": "Stoppet"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "Fra",
 | 
			
		||||
      "on": "Til",
 | 
			
		||||
      "unavailable": "Utilg\u00e6ngelig",
 | 
			
		||||
      "unknown": "Ukendt"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "Hjemme",
 | 
			
		||||
      "not_home": "Ude"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "Fra",
 | 
			
		||||
      "on": "Til"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "Lukket",
 | 
			
		||||
      "closing": "Lukker",
 | 
			
		||||
      "home": "Hjemme",
 | 
			
		||||
      "locked": "L\u00e5st",
 | 
			
		||||
      "not_home": "Ude",
 | 
			
		||||
      "off": "Fra",
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "on": "Til",
 | 
			
		||||
      "open": "\u00c5ben",
 | 
			
		||||
      "opening": "\u00c5bner",
 | 
			
		||||
      "problem": "Problem",
 | 
			
		||||
      "stopped": "Stoppet",
 | 
			
		||||
      "unlocked": "Ul\u00e5st"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "Fra",
 | 
			
		||||
      "on": "Til"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "Slukket",
 | 
			
		||||
      "on": "T\u00e6ndt"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "L\u00e5st",
 | 
			
		||||
      "unlocked": "Ul\u00e5st"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "Inaktiv",
 | 
			
		||||
      "off": "Slukket",
 | 
			
		||||
      "on": "T\u00e6ndt",
 | 
			
		||||
      "paused": "Sat p\u00e5 pause",
 | 
			
		||||
      "playing": "Afspiller",
 | 
			
		||||
      "standby": "Standby"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "Hjemme",
 | 
			
		||||
      "not_home": "Ude"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "problem": "Problem"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "Slukket",
 | 
			
		||||
      "on": "T\u00e6ndt"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "Skifter scene"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "Fra",
 | 
			
		||||
      "on": "Til"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "Fra",
 | 
			
		||||
      "on": "Til"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "Over horisonten",
 | 
			
		||||
      "below_horizon": "Under horisonten"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "Fra",
 | 
			
		||||
      "on": "Til"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "aktiv",
 | 
			
		||||
      "idle": "inaktiv",
 | 
			
		||||
      "paused": "pause"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "G\u00f8r rent",
 | 
			
		||||
      "docked": "I dock",
 | 
			
		||||
      "error": "Fejl",
 | 
			
		||||
      "idle": "Inaktiv",
 | 
			
		||||
      "off": "Off",
 | 
			
		||||
      "on": "On",
 | 
			
		||||
      "paused": "Sat p\u00e5 pause",
 | 
			
		||||
      "returning": "Vender tilbage til dock"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "Klart, nat",
 | 
			
		||||
      "cloudy": "Overskyet",
 | 
			
		||||
      "exceptional": "Enest\u00e5ende",
 | 
			
		||||
      "fog": "T\u00e5ge",
 | 
			
		||||
      "hail": "Hagl",
 | 
			
		||||
      "lightning": "Lyn",
 | 
			
		||||
      "lightning-rainy": "Lyn, regnvejr",
 | 
			
		||||
      "partlycloudy": "Delvist overskyet",
 | 
			
		||||
      "pouring": "Regnvejr",
 | 
			
		||||
      "rainy": "Regnfuldt",
 | 
			
		||||
      "snowy": "Sne",
 | 
			
		||||
      "snowy-rainy": "Sne, regn",
 | 
			
		||||
      "sunny": "Solrig",
 | 
			
		||||
      "windy": "Bl\u00e6sende",
 | 
			
		||||
      "windy-variant": "Bl\u00e6sende"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "D\u00f8d",
 | 
			
		||||
        "initializing": "Initialiserer",
 | 
			
		||||
        "ready": "Klar",
 | 
			
		||||
        "sleeping": "Sover"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "D\u00f8d ({query_stage})",
 | 
			
		||||
        "initializing": "Initialiserer ( {query_stage} )"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,255 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "Aktiv",
 | 
			
		||||
      "armed_away": "Aktiv, abwesend",
 | 
			
		||||
      "armed_custom_bypass": "Aktiv, benutzerdefiniert",
 | 
			
		||||
      "armed_home": "Aktiv, zu Hause",
 | 
			
		||||
      "armed_night": "Aktiv, Nacht",
 | 
			
		||||
      "arming": "Aktiviere",
 | 
			
		||||
      "disarmed": "Inaktiv",
 | 
			
		||||
      "disarming": "Deaktiviere",
 | 
			
		||||
      "pending": "Ausstehend",
 | 
			
		||||
      "triggered": "Ausgel\u00f6st"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "An"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Schwach"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Kalt"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "Getrennt",
 | 
			
		||||
        "on": "Verbunden"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "Aus",
 | 
			
		||||
        "on": "An"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "Geschlossen",
 | 
			
		||||
        "on": "Offen"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "Geschlossen",
 | 
			
		||||
        "on": "Offen"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Erkannt"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Hei\u00df"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "Verriegelt",
 | 
			
		||||
        "on": "Entriegelt"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "Trocken",
 | 
			
		||||
        "on": "Nass"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "Ruhig",
 | 
			
		||||
        "on": "Bewegung erkannt"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "Frei",
 | 
			
		||||
        "on": "Belegt"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "Geschlossen",
 | 
			
		||||
        "on": "Offen"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "Abwesend",
 | 
			
		||||
        "on": "Zu Hause"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "OK",
 | 
			
		||||
        "on": "Problem"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "Sicher",
 | 
			
		||||
        "on": "Unsicher"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "OK",
 | 
			
		||||
        "on": "Rauch erkannt"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "Stille",
 | 
			
		||||
        "on": "Ger\u00e4usch erkannt"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Vibration"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "Geschlossen",
 | 
			
		||||
        "on": "Offen"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "An"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "Unt\u00e4tig",
 | 
			
		||||
      "recording": "Aufnehmen",
 | 
			
		||||
      "streaming": "\u00dcbertr\u00e4gt"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "Automatisch",
 | 
			
		||||
      "cool": "K\u00fchlen",
 | 
			
		||||
      "dry": "Entfeuchten",
 | 
			
		||||
      "fan_only": "Nur Ventilator",
 | 
			
		||||
      "heat": "Heizen",
 | 
			
		||||
      "heat_cool": "Heizen/K\u00fchlen",
 | 
			
		||||
      "off": "Aus"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "Konfigurieren",
 | 
			
		||||
      "configured": "Konfiguriert"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "Geschlossen",
 | 
			
		||||
      "closing": "Schlie\u00dft",
 | 
			
		||||
      "open": "Offen",
 | 
			
		||||
      "opening": "\u00d6ffnet",
 | 
			
		||||
      "stopped": "Angehalten"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "An",
 | 
			
		||||
      "unavailable": "Nicht verf\u00fcgbar",
 | 
			
		||||
      "unknown": "Unbekannt"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "Zu Hause",
 | 
			
		||||
      "not_home": "Abwesend"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "An"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "Geschlossen",
 | 
			
		||||
      "closing": "Schlie\u00dft",
 | 
			
		||||
      "home": "Zu Hause",
 | 
			
		||||
      "locked": "Verriegelt",
 | 
			
		||||
      "not_home": "Abwesend",
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "on": "An",
 | 
			
		||||
      "open": "Offen",
 | 
			
		||||
      "opening": "\u00d6ffnet",
 | 
			
		||||
      "problem": "Problem",
 | 
			
		||||
      "stopped": "Angehalten",
 | 
			
		||||
      "unlocked": "Entriegelt"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "An"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "An"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "Verriegelt",
 | 
			
		||||
      "unlocked": "Entriegelt"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "Unt\u00e4tig",
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "An",
 | 
			
		||||
      "paused": "Pausiert",
 | 
			
		||||
      "playing": "Spielt",
 | 
			
		||||
      "standby": "Standby"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "Zu Hause",
 | 
			
		||||
      "not_home": "Abwesend"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "problem": "Problem"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "An"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "Szene"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "An"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "An"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "\u00dcber dem Horizont",
 | 
			
		||||
      "below_horizon": "Unter dem Horizont"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "An"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "aktiv",
 | 
			
		||||
      "idle": "Leerlauf",
 | 
			
		||||
      "paused": "pausiert"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "Reinigen",
 | 
			
		||||
      "docked": "Angedockt",
 | 
			
		||||
      "error": "Fehler",
 | 
			
		||||
      "idle": "Standby",
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "An",
 | 
			
		||||
      "paused": "Pausiert",
 | 
			
		||||
      "returning": "R\u00fcckkehr zur Dockingstation"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "Klare Nacht",
 | 
			
		||||
      "cloudy": "Bew\u00f6lkt",
 | 
			
		||||
      "exceptional": "Au\u00dfergew\u00f6hnlich",
 | 
			
		||||
      "fog": "Nebel",
 | 
			
		||||
      "hail": "Hagel",
 | 
			
		||||
      "lightning": "Gewitter",
 | 
			
		||||
      "lightning-rainy": "Gewitter, regnerisch",
 | 
			
		||||
      "partlycloudy": "Teilweise bew\u00f6lkt",
 | 
			
		||||
      "pouring": "Str\u00f6mend",
 | 
			
		||||
      "rainy": "Regnerisch",
 | 
			
		||||
      "snowy": "Verschneit",
 | 
			
		||||
      "snowy-rainy": "Verschneit, regnerisch",
 | 
			
		||||
      "sunny": "Sonnig",
 | 
			
		||||
      "windy": "Windig",
 | 
			
		||||
      "windy-variant": "Windig"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "Nicht erreichbar",
 | 
			
		||||
        "initializing": "Initialisierend",
 | 
			
		||||
        "ready": "Bereit",
 | 
			
		||||
        "sleeping": "Schlafend"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "Nicht erreichbar ({query_stage})",
 | 
			
		||||
        "initializing": "Initialisiere ({query_stage})"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,255 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "\u039f\u03c0\u03bb\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2",
 | 
			
		||||
      "armed_away": "\u039f\u03c0\u03bb\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2 \u03bc\u03b1\u03ba\u03c1\u03b9\u03ac",
 | 
			
		||||
      "armed_custom_bypass": "\u03a0\u03c1\u03bf\u03c3\u03b1\u03c1\u03bc\u03bf\u03c3\u03bc\u03ad\u03bd\u03b7 \u03c0\u03b1\u03c1\u03ac\u03ba\u03b1\u03bc\u03c8\u03b7 \u03b5\u03bd\u03b5\u03c1\u03b3\u03ae",
 | 
			
		||||
      "armed_home": "\u03a3\u03c0\u03af\u03c4\u03b9 \u039f\u03c0\u03bb\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf",
 | 
			
		||||
      "armed_night": "\u039f\u03c0\u03bb\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf \u03b2\u03c1\u03ac\u03b4\u03c5",
 | 
			
		||||
      "arming": "\u038c\u03c0\u03bb\u03b9\u03c3\u03b7",
 | 
			
		||||
      "disarmed": "\u0391\u03c6\u03bf\u03c0\u03bb\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2",
 | 
			
		||||
      "disarming": "\u0391\u03c6\u03cc\u03c0\u03bb\u03b9\u03c3\u03b7",
 | 
			
		||||
      "pending": "\u0395\u03ba\u03ba\u03c1\u03b5\u03bc\u03ae\u03c2",
 | 
			
		||||
      "triggered": "\u03a0\u03b1\u03c1\u03b1\u03b2\u03af\u03b1\u03c3\u03b7"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
 | 
			
		||||
      "on": "\u0395\u03bd\u03b5\u03c1\u03b3\u03cc\u03c2 "
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "\u039a\u03b1\u03bd\u03bf\u03bd\u03b9\u03ba\u03cc\u03c2",
 | 
			
		||||
        "on": "\u03a7\u03b1\u03bc\u03b7\u03bb\u03cc\u03c2"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "\u03a6\u03c5\u03c3\u03b9\u03bf\u03bb\u03bf\u03b3\u03b9\u03ba\u03cc",
 | 
			
		||||
        "on": "\u039a\u03c1\u03cd\u03bf"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "\u0391\u03c0\u03bf\u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7",
 | 
			
		||||
        "on": "\u03a3\u03c5\u03bd\u03b4\u03b5\u03b4\u03b5\u03bc\u03ad\u03bd\u03bf\u03c2"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "\u0391\u03bd\u03b5\u03bd\u03b5\u03c1\u03b3\u03cc\u03c2",
 | 
			
		||||
        "on": "\u0395\u03bd\u03b5\u03c1\u03b3\u03cc\u03c2"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03ae",
 | 
			
		||||
        "on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03ae"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
 | 
			
		||||
        "on": "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "\u0394\u03b5\u03bd \u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5",
 | 
			
		||||
        "on": "\u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "\u03a6\u03c5\u03c3\u03b9\u03bf\u03bb\u03bf\u03b3\u03b9\u03ba\u03cc",
 | 
			
		||||
        "on": "\u039a\u03b1\u03c5\u03c4\u03cc"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "\u039a\u03bb\u03b5\u03b9\u03b4\u03c9\u03bc\u03ad\u03bd\u03bf",
 | 
			
		||||
        "on": "\u039e\u03b5\u03ba\u03bb\u03b5\u03af\u03b4\u03c9\u03c4\u03bf"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "\u039e\u03b7\u03c1\u03cc",
 | 
			
		||||
        "on": "\u03a5\u03b3\u03c1\u03cc"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "\u0394\u03b5\u03bd \u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5",
 | 
			
		||||
        "on": "\u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "\u0394\u03b5\u03bd \u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5",
 | 
			
		||||
        "on": "\u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
 | 
			
		||||
        "on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "\u0395\u03ba\u03c4\u03cc\u03c2",
 | 
			
		||||
        "on": "\u03a3\u03c0\u03af\u03c4\u03b9"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9",
 | 
			
		||||
        "on": "\u03a0\u03c1\u03cc\u03b2\u03bb\u03b7\u03bc\u03b1"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "\u0391\u03c3\u03c6\u03b1\u03bb\u03ae\u03c2",
 | 
			
		||||
        "on": "\u0391\u03bd\u03b1\u03c3\u03c6\u03b1\u03bb\u03ae\u03c2"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "\u0394\u03b5\u03bd \u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5",
 | 
			
		||||
        "on": "\u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "\u0394\u03b5\u03bd \u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5",
 | 
			
		||||
        "on": "\u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "\u0394\u03b5\u03bd \u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5",
 | 
			
		||||
        "on": "\u0395\u03bd\u03c4\u03bf\u03c0\u03af\u03c3\u03c4\u03b7\u03ba\u03b5"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
 | 
			
		||||
        "on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "\u0391\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf",
 | 
			
		||||
      "on": "\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "\u0391\u03b4\u03c1\u03b1\u03bd\u03ad\u03c2",
 | 
			
		||||
      "recording": "\u039a\u03b1\u03c4\u03b1\u03b3\u03c1\u03ac\u03c6\u03b5\u03b9",
 | 
			
		||||
      "streaming": "\u039c\u03b5\u03c4\u03ac\u03b4\u03bf\u03c3\u03b7 \u03a1\u03bf\u03ae\u03c2"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "\u0391\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03bf",
 | 
			
		||||
      "cool": "\u0394\u03c1\u03bf\u03c3\u03b5\u03c1\u03cc",
 | 
			
		||||
      "dry": "\u039e\u03b7\u03c1\u03cc",
 | 
			
		||||
      "fan_only": "\u0391\u03bd\u03b5\u03bc\u03b9\u03c3\u03c4\u03ae\u03c1\u03b1\u03c2 \u03bc\u03cc\u03bd\u03bf",
 | 
			
		||||
      "heat": "\u0398\u03b5\u03c1\u03bc\u03cc",
 | 
			
		||||
      "heat_cool": "\u0398\u03ad\u03c1\u03bc\u03b1\u03bd\u03c3\u03b7 / \u03a8\u03cd\u03be\u03b7",
 | 
			
		||||
      "off": "\u0391\u03bd\u03b5\u03bd\u03b5\u03c1\u03b3\u03cc"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "\u0394\u03b9\u03b1\u03bc\u03bf\u03c1\u03c6\u03ce\u03c3\u03c4\u03b5",
 | 
			
		||||
      "configured": "\u0394\u03b9\u03b1\u03bc\u03bf\u03c1\u03c6\u03ce\u03b8\u03b7\u03ba\u03b5"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
 | 
			
		||||
      "closing": "\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf",
 | 
			
		||||
      "open": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc",
 | 
			
		||||
      "opening": "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1",
 | 
			
		||||
      "stopped": "\u03a3\u03c4\u03b1\u03bc\u03ac\u03c4\u03b7\u03c3\u03b5"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
 | 
			
		||||
      "on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc",
 | 
			
		||||
      "unavailable": "\u039c\u03b7 \u0394\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03bf",
 | 
			
		||||
      "unknown": "\u0386\u03b3\u03bd\u03c9\u03c3\u03c4\u03b7"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "\u03a3\u03c0\u03af\u03c4\u03b9",
 | 
			
		||||
      "not_home": "\u0395\u03ba\u03c4\u03cc\u03c2 \u03a3\u03c0\u03b9\u03c4\u03b9\u03bf\u03cd"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
 | 
			
		||||
      "on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
 | 
			
		||||
      "closing": "\u039a\u03bb\u03b5\u03af\u03bd\u03b5\u03b9",
 | 
			
		||||
      "home": "\u03a3\u03c0\u03af\u03c4\u03b9",
 | 
			
		||||
      "locked": "\u039a\u03bb\u03b5\u03b9\u03b4\u03c9\u03bc\u03ad\u03bd\u03bf",
 | 
			
		||||
      "not_home": "\u0395\u03ba\u03c4\u03cc\u03c2 \u03a3\u03c0\u03b9\u03c4\u03b9\u03bf\u03cd",
 | 
			
		||||
      "off": "\u0391\u03bd\u03b5\u03bd\u03b5\u03c1\u03b3\u03cc",
 | 
			
		||||
      "ok": "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9",
 | 
			
		||||
      "on": "\u0395\u03bd\u03b5\u03c1\u03b3\u03cc",
 | 
			
		||||
      "open": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc",
 | 
			
		||||
      "opening": "\u0391\u03bd\u03bf\u03af\u03b3\u03b5\u03b9",
 | 
			
		||||
      "problem": "\u03a0\u03c1\u03cc\u03b2\u03bb\u03b7\u03bc\u03b1",
 | 
			
		||||
      "stopped": "\u03a3\u03c4\u03b1\u03bc\u03b1\u03c4\u03b7\u03bc\u03ad\u03bd\u03bf",
 | 
			
		||||
      "unlocked": "\u039e\u03b5\u03ba\u03bb\u03b5\u03af\u03b4\u03c9\u03c4\u03bf"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
 | 
			
		||||
      "on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
 | 
			
		||||
      "on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "\u039a\u03bb\u03b5\u03b9\u03b4\u03c9\u03bc\u03ad\u03bd\u03b7",
 | 
			
		||||
      "unlocked": "\u039e\u03b5\u03ba\u03bb\u03b5\u03af\u03b4\u03c9\u03c4\u03b7"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "\u03a3\u03b5 \u03b1\u03b4\u03c1\u03ac\u03bd\u03b5\u03b9\u03b1",
 | 
			
		||||
      "off": "\u0391\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7",
 | 
			
		||||
      "on": "\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7",
 | 
			
		||||
      "paused": "\u03a3\u03b5 \u03a0\u03b1\u03cd\u03c3\u03b7",
 | 
			
		||||
      "playing": "\u039a\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae\u03c2",
 | 
			
		||||
      "standby": "\u039a\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03b1\u03bd\u03b1\u03bc\u03bf\u03bd\u03ae\u03c2"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "\u03a3\u03c0\u03af\u03c4\u03b9",
 | 
			
		||||
      "not_home": "\u0395\u03ba\u03c4\u03cc\u03c2"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9",
 | 
			
		||||
      "problem": "\u03a0\u03c1\u03cc\u03b2\u03bb\u03b7\u03bc\u03b1"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
 | 
			
		||||
      "on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "\u03a3\u03ba\u03af\u03c4\u03c3\u03bf"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "\u0391\u03bd\u03b5\u03bd\u03b5\u03c1\u03b3\u03cc",
 | 
			
		||||
      "on": "\u0395\u03bd\u03b5\u03c1\u03b3\u03cc"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
 | 
			
		||||
      "on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "\u03a0\u03ac\u03bd\u03c9 \u03b1\u03c0\u03cc \u03c4\u03bf\u03bd \u03bf\u03c1\u03af\u03b6\u03bf\u03bd\u03c4\u03b1",
 | 
			
		||||
      "below_horizon": "\u039a\u03ac\u03c4\u03c9 \u03b1\u03c0\u03cc \u03c4\u03bf\u03bd \u03bf\u03c1\u03af\u03b6\u03bf\u03bd\u03c4\u03b1"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "\u039a\u03bb\u03b5\u03b9\u03c3\u03c4\u03cc",
 | 
			
		||||
      "on": "\u0391\u03bd\u03bf\u03b9\u03c7\u03c4\u03cc"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "\u03b5\u03bd\u03b5\u03c1\u03b3\u03cc",
 | 
			
		||||
      "idle": "\u03a3\u03b5 \u03b1\u03b4\u03c1\u03ac\u03bd\u03b5\u03b9\u03b1",
 | 
			
		||||
      "paused": "\u03c3\u03b5 \u03c0\u03b1\u03cd\u03c3\u03b7"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2",
 | 
			
		||||
      "docked": "\u039a\u03b1\u03c1\u03c6\u03b9\u03c4\u03c3\u03c9\u03bc\u03ad\u03bd\u03bf",
 | 
			
		||||
      "error": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1",
 | 
			
		||||
      "idle": "\u03a3\u03b5 \u03b1\u03b4\u03c1\u03ac\u03bd\u03b5\u03b9\u03b1",
 | 
			
		||||
      "off": "\u039c\u03b7 \u0395\u03bd\u03b5\u03c1\u03b3\u03cc",
 | 
			
		||||
      "on": "\u0395\u03bd\u03b5\u03c1\u03b3\u03cc",
 | 
			
		||||
      "paused": "\u03a0\u03b1\u03cd\u03c3\u03b7",
 | 
			
		||||
      "returning": "\u0395\u03c0\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03c3\u03c4\u03bf dock"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "\u039e\u03b1\u03c3\u03c4\u03b5\u03c1\u03b9\u03ac, \u03bd\u03cd\u03c7\u03c4\u03b1",
 | 
			
		||||
      "cloudy": "\u039d\u03b5\u03c6\u03b5\u03bb\u03ce\u03b4\u03b7\u03c2",
 | 
			
		||||
      "exceptional": "\u0395\u03be\u03b1\u03b9\u03c1\u03b5\u03c4\u03b9\u03ba\u03cc",
 | 
			
		||||
      "fog": "\u039f\u03bc\u03af\u03c7\u03bb\u03b7",
 | 
			
		||||
      "hail": "\u03a7\u03b1\u03bb\u03ac\u03b6\u03b9",
 | 
			
		||||
      "lightning": "\u0391\u03c3\u03c4\u03c1\u03b1\u03c0\u03ae",
 | 
			
		||||
      "lightning-rainy": "\u039a\u03b1\u03c4\u03b1\u03b9\u03b3\u03af\u03b4\u03b1, \u03b2\u03c1\u03bf\u03c7\u03b5\u03c1\u03cc",
 | 
			
		||||
      "partlycloudy": "\u039c\u03b5\u03c1\u03b9\u03ba\u03ce\u03c2 \u03bd\u03b5\u03c6\u03b5\u03bb\u03ce\u03b4\u03b7\u03c2",
 | 
			
		||||
      "pouring": "\u03a8\u03b9\u03c7\u03b1\u03bb\u03af\u03b6\u03b5\u03b9",
 | 
			
		||||
      "rainy": "\u0392\u03c1\u03bf\u03c7\u03b5\u03c1\u03ae",
 | 
			
		||||
      "snowy": "\u03a7\u03b9\u03bf\u03bd\u03ce\u03b4\u03b7\u03c2",
 | 
			
		||||
      "snowy-rainy": "\u03a7\u03b9\u03bf\u03bd\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf, \u03b2\u03c1\u03bf\u03c7\u03b5\u03c1\u03cc",
 | 
			
		||||
      "sunny": "\u0397\u03bb\u03b9\u03cc\u03bb\u03bf\u03c5\u03c3\u03c4\u03bf",
 | 
			
		||||
      "windy": "\u0398\u03c5\u03b5\u03bb\u03bb\u03ce\u03b4\u03b5\u03b9\u03c2",
 | 
			
		||||
      "windy-variant": "\u0398\u03c5\u03b5\u03bb\u03bb\u03ce\u03b4\u03b5\u03b9\u03c2"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "\u039d\u03b5\u03ba\u03c1\u03cc",
 | 
			
		||||
        "initializing": "\u0391\u03c1\u03c7\u03b9\u03ba\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7",
 | 
			
		||||
        "ready": "\u0388\u03c4\u03bf\u03b9\u03bc\u03bf",
 | 
			
		||||
        "sleeping": "\u039a\u03bf\u03b9\u03bc\u03ac\u03c4\u03b1\u03b9"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "\u039d\u03b5\u03ba\u03c1\u03cc ( {query_stage} )",
 | 
			
		||||
        "initializing": "\u0391\u03c1\u03c7\u03b9\u03ba\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 ( {query_stage} )"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,255 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "Armado",
 | 
			
		||||
      "armed_away": "Armado  Fuera de Casa",
 | 
			
		||||
      "armed_custom_bypass": "Armada zona espec\u00edfica",
 | 
			
		||||
      "armed_home": "Armado en Casa",
 | 
			
		||||
      "armed_night": "Armado Nocturno",
 | 
			
		||||
      "arming": "Armando",
 | 
			
		||||
      "disarmed": "Desarmado",
 | 
			
		||||
      "disarming": "Desarmando",
 | 
			
		||||
      "pending": "Pendiente",
 | 
			
		||||
      "triggered": "Activado"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "Desactivado",
 | 
			
		||||
      "on": "Encendido"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Baja"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Fr\u00edo"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "Desconectado",
 | 
			
		||||
        "on": "Conectado"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "Desactivado",
 | 
			
		||||
        "on": "Encendido"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "Cerrada",
 | 
			
		||||
        "on": "Abierta"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "Cerrada",
 | 
			
		||||
        "on": "Abierta"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "Despejado",
 | 
			
		||||
        "on": "Detectado"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Caliente"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "Bloqueado",
 | 
			
		||||
        "on": "Desbloqueado"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "Seco",
 | 
			
		||||
        "on": "Humedo"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "Despejado",
 | 
			
		||||
        "on": "Detectado"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "Despejado",
 | 
			
		||||
        "on": "Detectado"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "Cerrado",
 | 
			
		||||
        "on": "Abierto"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "Fuera de casa",
 | 
			
		||||
        "on": "En Casa"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "OK",
 | 
			
		||||
        "on": "Problema"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "Seguro",
 | 
			
		||||
        "on": "Inseguro"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "Despejado",
 | 
			
		||||
        "on": "Detectado"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "Despejado",
 | 
			
		||||
        "on": "Detectado"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "Despejado",
 | 
			
		||||
        "on": "Detectado"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "Cerrada",
 | 
			
		||||
        "on": "Abierta"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "Desactivado",
 | 
			
		||||
      "on": "Activado"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "Inactivo",
 | 
			
		||||
      "recording": "Grabando",
 | 
			
		||||
      "streaming": "Streaming"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "Automatico",
 | 
			
		||||
      "cool": "Enfriar",
 | 
			
		||||
      "dry": "Seco",
 | 
			
		||||
      "fan_only": "S\u00f3lo ventilador",
 | 
			
		||||
      "heat": "Calentar",
 | 
			
		||||
      "heat_cool": "Calentar/Enfriar",
 | 
			
		||||
      "off": "Desactivar"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "Configurar",
 | 
			
		||||
      "configured": "Configurado"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "Cerrado",
 | 
			
		||||
      "closing": "Cerrando",
 | 
			
		||||
      "open": "Abierto",
 | 
			
		||||
      "opening": "Abriendo",
 | 
			
		||||
      "stopped": "Detenido"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "Desactivado",
 | 
			
		||||
      "on": "Encendido",
 | 
			
		||||
      "unavailable": "No disponible",
 | 
			
		||||
      "unknown": "Desconocido"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "En Casa",
 | 
			
		||||
      "not_home": "Fuera de Casa"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "Desactivado",
 | 
			
		||||
      "on": "Encendido"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "Cerrado",
 | 
			
		||||
      "closing": "Cerrando",
 | 
			
		||||
      "home": "En casa",
 | 
			
		||||
      "locked": "Cerrado",
 | 
			
		||||
      "not_home": "Fuera de Casa",
 | 
			
		||||
      "off": "Apagado",
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "on": "Encendido",
 | 
			
		||||
      "open": "Abierto",
 | 
			
		||||
      "opening": "Abriendo",
 | 
			
		||||
      "problem": "Problema",
 | 
			
		||||
      "stopped": "Detenido",
 | 
			
		||||
      "unlocked": "Abierto"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "Apagado",
 | 
			
		||||
      "on": "Encendido"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "Apagado",
 | 
			
		||||
      "on": "Encendido"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "Cerrado",
 | 
			
		||||
      "unlocked": "Abierto"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "Inactivo",
 | 
			
		||||
      "off": "Apagado",
 | 
			
		||||
      "on": "Encendido",
 | 
			
		||||
      "paused": "Pausado",
 | 
			
		||||
      "playing": "Reproduciendo",
 | 
			
		||||
      "standby": "Modo de espera"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "En casa",
 | 
			
		||||
      "not_home": "Fuera de casa"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "problem": "Problema"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "Apagado",
 | 
			
		||||
      "on": "Encendido"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "Reproduciendo Escena"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "Apagado",
 | 
			
		||||
      "on": "Encendido"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "",
 | 
			
		||||
      "on": ""
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "Sobre el horizonte",
 | 
			
		||||
      "below_horizon": "Bajo el horizonte"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "",
 | 
			
		||||
      "on": ""
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "activo",
 | 
			
		||||
      "idle": "inactivo",
 | 
			
		||||
      "paused": "pausado"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "Limpiando",
 | 
			
		||||
      "docked": "Acoplado",
 | 
			
		||||
      "error": "Error",
 | 
			
		||||
      "idle": "Inactivo",
 | 
			
		||||
      "off": "Encendida",
 | 
			
		||||
      "on": "Apagada",
 | 
			
		||||
      "paused": "Pausado",
 | 
			
		||||
      "returning": "Regresar al dock"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "Despejado, de noche",
 | 
			
		||||
      "cloudy": "Nublado",
 | 
			
		||||
      "exceptional": "Excepcional",
 | 
			
		||||
      "fog": "Niebla",
 | 
			
		||||
      "hail": "Granizo",
 | 
			
		||||
      "lightning": "Rel\u00e1mpagos",
 | 
			
		||||
      "lightning-rainy": "Rel\u00e1mpagos, lluvioso",
 | 
			
		||||
      "partlycloudy": "Parcialmente nublado",
 | 
			
		||||
      "pouring": "Torrencial",
 | 
			
		||||
      "rainy": "Lluvioso",
 | 
			
		||||
      "snowy": "Nevado",
 | 
			
		||||
      "snowy-rainy": "Nevado, lluvioso",
 | 
			
		||||
      "sunny": "Soleado",
 | 
			
		||||
      "windy": "Ventoso",
 | 
			
		||||
      "windy-variant": "Ventoso"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "Desconectado",
 | 
			
		||||
        "initializing": "Iniciando",
 | 
			
		||||
        "ready": "Listo",
 | 
			
		||||
        "sleeping": "Hibernacion"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "Desconectado ({query_stage})",
 | 
			
		||||
        "initializing": "Iniciando ( {query_stage} )"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,255 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "Armado",
 | 
			
		||||
      "armed_away": "Armado fuera de casa",
 | 
			
		||||
      "armed_custom_bypass": "Armada Zona Espec\u00edfica",
 | 
			
		||||
      "armed_home": "Armado en casa",
 | 
			
		||||
      "armed_night": "Armado noche",
 | 
			
		||||
      "arming": "Armando",
 | 
			
		||||
      "disarmed": "Desarmado",
 | 
			
		||||
      "disarming": "Desarmando",
 | 
			
		||||
      "pending": "Pendiente",
 | 
			
		||||
      "triggered": "Disparada"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "Apagado",
 | 
			
		||||
      "on": "Encendida"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Bajo"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Frio"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "Desconectado",
 | 
			
		||||
        "on": "Conectado"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "Apagado",
 | 
			
		||||
        "on": "Encendido"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "Cerrada",
 | 
			
		||||
        "on": "Abierta"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "Cerrada",
 | 
			
		||||
        "on": "Abierta"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "No detectado",
 | 
			
		||||
        "on": "Detectado"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Caliente"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "Bloqueado",
 | 
			
		||||
        "on": "Desbloqueado"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "Seco",
 | 
			
		||||
        "on": "H\u00famedo"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "Sin movimiento",
 | 
			
		||||
        "on": "Detectado"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "No detectado",
 | 
			
		||||
        "on": "Detectado"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "Cerrado",
 | 
			
		||||
        "on": "Abierto"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "Fuera de casa",
 | 
			
		||||
        "on": "En casa"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "OK",
 | 
			
		||||
        "on": "Problema"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "Seguro",
 | 
			
		||||
        "on": "Inseguro"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "No detectado",
 | 
			
		||||
        "on": "Detectado"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "No detectado",
 | 
			
		||||
        "on": "Detectado"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "No detectado",
 | 
			
		||||
        "on": "Detectado"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "Cerrada",
 | 
			
		||||
        "on": "Abierta"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "Apagado",
 | 
			
		||||
      "on": "Encendido"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "Inactivo",
 | 
			
		||||
      "recording": "Grabando",
 | 
			
		||||
      "streaming": "Transmitiendo"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "Autom\u00e1tico",
 | 
			
		||||
      "cool": "Fr\u00edo",
 | 
			
		||||
      "dry": "Seco",
 | 
			
		||||
      "fan_only": "S\u00f3lo ventilador",
 | 
			
		||||
      "heat": "Calor",
 | 
			
		||||
      "heat_cool": "Calor/Fr\u00edo",
 | 
			
		||||
      "off": "Apagado"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "Configurar",
 | 
			
		||||
      "configured": "Configurado"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "Cerrado",
 | 
			
		||||
      "closing": "Cerrando",
 | 
			
		||||
      "open": "Abierto",
 | 
			
		||||
      "opening": "Abriendo",
 | 
			
		||||
      "stopped": "Detenido"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "Apagado",
 | 
			
		||||
      "on": "Encendido",
 | 
			
		||||
      "unavailable": "No disponible",
 | 
			
		||||
      "unknown": "Desconocido"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "En casa",
 | 
			
		||||
      "not_home": "Fuera de casa"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "Apagado",
 | 
			
		||||
      "on": "Encendido"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "Cerrado",
 | 
			
		||||
      "closing": "Cerrando",
 | 
			
		||||
      "home": "En casa",
 | 
			
		||||
      "locked": "Bloqueado",
 | 
			
		||||
      "not_home": "Fuera de casa",
 | 
			
		||||
      "off": "Apagado",
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "on": "Encendido",
 | 
			
		||||
      "open": "Abierto",
 | 
			
		||||
      "opening": "Abriendo",
 | 
			
		||||
      "problem": "Problema",
 | 
			
		||||
      "stopped": "Detenido",
 | 
			
		||||
      "unlocked": "Desbloqueado"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "Apagado",
 | 
			
		||||
      "on": "Encendido"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "Apagada",
 | 
			
		||||
      "on": "Encendida"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "Bloqueado",
 | 
			
		||||
      "unlocked": "Desbloqueado"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "Inactivo",
 | 
			
		||||
      "off": "Apagado",
 | 
			
		||||
      "on": "Encendido",
 | 
			
		||||
      "paused": "En pausa",
 | 
			
		||||
      "playing": "Reproduciendo",
 | 
			
		||||
      "standby": "Apagado"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "Casa",
 | 
			
		||||
      "not_home": "Fuera de casa"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "problem": "Problema"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "Apagado",
 | 
			
		||||
      "on": "Encendido"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "En escena"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "Apagado",
 | 
			
		||||
      "on": "Encendido"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "Apagado",
 | 
			
		||||
      "on": "Encendido"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "Sobre el horizonte",
 | 
			
		||||
      "below_horizon": "Bajo el horizonte"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "Apagado",
 | 
			
		||||
      "on": "Encendido"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "activo",
 | 
			
		||||
      "idle": "inactivo",
 | 
			
		||||
      "paused": "pausado"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "Limpiando",
 | 
			
		||||
      "docked": "En base",
 | 
			
		||||
      "error": "Error",
 | 
			
		||||
      "idle": "Inactivo",
 | 
			
		||||
      "off": "Apagado",
 | 
			
		||||
      "on": "Encendido",
 | 
			
		||||
      "paused": "En pausa",
 | 
			
		||||
      "returning": "Volviendo a la base"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "Despejado, de noche",
 | 
			
		||||
      "cloudy": "Nublado",
 | 
			
		||||
      "exceptional": "Excepcional",
 | 
			
		||||
      "fog": "Niebla",
 | 
			
		||||
      "hail": "Granizo",
 | 
			
		||||
      "lightning": "Rel\u00e1mpagos",
 | 
			
		||||
      "lightning-rainy": "Rel\u00e1mpagos, lluvioso",
 | 
			
		||||
      "partlycloudy": "Parcialmente nublado",
 | 
			
		||||
      "pouring": "Torrencial",
 | 
			
		||||
      "rainy": "Lluvioso",
 | 
			
		||||
      "snowy": "Nevado",
 | 
			
		||||
      "snowy-rainy": "Nevado, lluvioso",
 | 
			
		||||
      "sunny": "Soleado",
 | 
			
		||||
      "windy": "Ventoso",
 | 
			
		||||
      "windy-variant": "Ventoso"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "No responde",
 | 
			
		||||
        "initializing": "Inicializando",
 | 
			
		||||
        "ready": "Listo",
 | 
			
		||||
        "sleeping": "Ahorro de energ\u00eda"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "No responde ({query_stage})",
 | 
			
		||||
        "initializing": "Inicializando ({query_stage})"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,255 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "Valves",
 | 
			
		||||
      "armed_away": "Valves eemal",
 | 
			
		||||
      "armed_custom_bypass": "Valves, eranditega",
 | 
			
		||||
      "armed_home": "Valves kodus",
 | 
			
		||||
      "armed_night": "Valves \u00f6ine",
 | 
			
		||||
      "arming": "Valvestab",
 | 
			
		||||
      "disarmed": "Maas",
 | 
			
		||||
      "disarming": "Maas...",
 | 
			
		||||
      "pending": "Ootel",
 | 
			
		||||
      "triggered": "H\u00e4ires"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "V\u00e4ljas",
 | 
			
		||||
      "on": "Sees"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "Tavaline",
 | 
			
		||||
        "on": "Madal"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "Normaalne",
 | 
			
		||||
        "on": "Jahe"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "Lahti \u00fchendatud",
 | 
			
		||||
        "on": "\u00dchendatud"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "V\u00e4ljas",
 | 
			
		||||
        "on": "Sees"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "Suletud",
 | 
			
		||||
        "on": "Avatud"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "Suletud",
 | 
			
		||||
        "on": "Avatud"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "Puudub",
 | 
			
		||||
        "on": "Tuvastatud"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "Normaalne",
 | 
			
		||||
        "on": "Palav"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "Lukus",
 | 
			
		||||
        "on": "Lukustamata"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "Kuiv",
 | 
			
		||||
        "on": "M\u00e4rg"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "Puudub",
 | 
			
		||||
        "on": "Tuvastatud"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "Puudub",
 | 
			
		||||
        "on": "Tuvastatud"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "Suletud",
 | 
			
		||||
        "on": "Avatud"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "Eemal",
 | 
			
		||||
        "on": "Kodus"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "OK",
 | 
			
		||||
        "on": "Probleem"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "Ohutu",
 | 
			
		||||
        "on": "Ohtlik"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "Puudub",
 | 
			
		||||
        "on": "Tuvastatud"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "Puudub",
 | 
			
		||||
        "on": "Tuvastatud"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "Puudub",
 | 
			
		||||
        "on": "Tuvastatud"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "Suletud",
 | 
			
		||||
        "on": "Avatud"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "V\u00e4ljas",
 | 
			
		||||
      "on": "Sees"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "Ootel",
 | 
			
		||||
      "recording": "Salvestab",
 | 
			
		||||
      "streaming": "Voogedastab"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "Automaatne",
 | 
			
		||||
      "cool": "Jahuta",
 | 
			
		||||
      "dry": "Kuiv",
 | 
			
		||||
      "fan_only": "Ainult ventilaator",
 | 
			
		||||
      "heat": "Soojenda",
 | 
			
		||||
      "heat_cool": "K\u00fcta/jahuta",
 | 
			
		||||
      "off": "V\u00e4ljas"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "Seadista",
 | 
			
		||||
      "configured": "Seadistatud"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "Suletud",
 | 
			
		||||
      "closing": "Sulgub",
 | 
			
		||||
      "open": "Avatud",
 | 
			
		||||
      "opening": "Avaneb",
 | 
			
		||||
      "stopped": "Peatatud"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "V\u00e4ljas",
 | 
			
		||||
      "on": "Sees",
 | 
			
		||||
      "unavailable": "Kadunud",
 | 
			
		||||
      "unknown": "Teadmata"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "Kodus",
 | 
			
		||||
      "not_home": "Eemal"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "V\u00e4ljas",
 | 
			
		||||
      "on": "Sees"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "Suletud",
 | 
			
		||||
      "closing": "Sulgub",
 | 
			
		||||
      "home": "Kodus",
 | 
			
		||||
      "locked": "Lukus",
 | 
			
		||||
      "not_home": "Eemal",
 | 
			
		||||
      "off": "V\u00e4ljas",
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "on": "Sees",
 | 
			
		||||
      "open": "Avatud",
 | 
			
		||||
      "opening": "Avaneb",
 | 
			
		||||
      "problem": "Probleem",
 | 
			
		||||
      "stopped": "Peatunud",
 | 
			
		||||
      "unlocked": "Lukustamata"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "V\u00e4ljas",
 | 
			
		||||
      "on": "Sees"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "V\u00e4ljas",
 | 
			
		||||
      "on": "Sees"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "Lukus",
 | 
			
		||||
      "unlocked": "Lahti"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "Ootel",
 | 
			
		||||
      "off": "V\u00e4ljas",
 | 
			
		||||
      "on": "Sees",
 | 
			
		||||
      "paused": "Peatatud",
 | 
			
		||||
      "playing": "M\u00e4ngib",
 | 
			
		||||
      "standby": "Unere\u017eiimil"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "Kodus",
 | 
			
		||||
      "not_home": "Eemal"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "problem": "Probleem"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "V\u00e4ljas",
 | 
			
		||||
      "on": "Sees"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "Stseenis"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "V\u00e4ljas",
 | 
			
		||||
      "on": "Sees"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "V\u00e4ljas",
 | 
			
		||||
      "on": "Sees"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "T\u00f5usnud",
 | 
			
		||||
      "below_horizon": "Loojunud"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "V\u00e4ljas",
 | 
			
		||||
      "on": "Sees"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "aktiivne",
 | 
			
		||||
      "idle": "ootel",
 | 
			
		||||
      "paused": "peatatud"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "Puhastamine",
 | 
			
		||||
      "docked": "Dokitud",
 | 
			
		||||
      "error": "Viga",
 | 
			
		||||
      "idle": "Ootel",
 | 
			
		||||
      "off": "V\u00e4ljas",
 | 
			
		||||
      "on": "Sees",
 | 
			
		||||
      "paused": "Peatatud",
 | 
			
		||||
      "returning": "P\u00f6\u00f6rdun tagasi dokki"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "Selge \u00f6\u00f6",
 | 
			
		||||
      "cloudy": "Pilves",
 | 
			
		||||
      "exceptional": "Erakordne",
 | 
			
		||||
      "fog": "Udu",
 | 
			
		||||
      "hail": "Rahe",
 | 
			
		||||
      "lightning": "\u00c4ikeseline",
 | 
			
		||||
      "lightning-rainy": "\u00c4ikeseline, vihmane",
 | 
			
		||||
      "partlycloudy": "Osaliselt pilves",
 | 
			
		||||
      "pouring": "Kallab",
 | 
			
		||||
      "rainy": "Vihmane",
 | 
			
		||||
      "snowy": "Lumine",
 | 
			
		||||
      "snowy-rainy": "L\u00f6rtsine",
 | 
			
		||||
      "sunny": "P\u00e4ikeseline",
 | 
			
		||||
      "windy": "Tuuline",
 | 
			
		||||
      "windy-variant": "Tuuline"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "Surnud",
 | 
			
		||||
        "initializing": "L\u00e4htestan",
 | 
			
		||||
        "ready": "Valmis",
 | 
			
		||||
        "sleeping": "Ootel"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "Surnud ({query_stage})",
 | 
			
		||||
        "initializing": "L\u00e4htestan ( {query_stage} )"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,198 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "pending": "Zain",
 | 
			
		||||
      "triggered": "Abiarazita"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "Itzalita",
 | 
			
		||||
      "on": "Piztuta"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "Normala",
 | 
			
		||||
        "on": "Baxua"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "Normala",
 | 
			
		||||
        "on": "Hotza"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "Deskonektatuta",
 | 
			
		||||
        "on": "Konektatuta"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "Itzalita",
 | 
			
		||||
        "on": "Piztuta"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "Itxita",
 | 
			
		||||
        "on": "Ireki"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "Itxita",
 | 
			
		||||
        "on": "Ireki"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "Normala",
 | 
			
		||||
        "on": "Beroa"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "Itxita",
 | 
			
		||||
        "on": "Irekita"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "Lehorra",
 | 
			
		||||
        "on": "Buztita"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "Itxita",
 | 
			
		||||
        "on": "Ireki"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "Kanpoan",
 | 
			
		||||
        "on": "Etxean"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "Ondo",
 | 
			
		||||
        "on": "Arazoa"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "Babestuta"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "Itxita",
 | 
			
		||||
        "on": "Ireki"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "Itzalita",
 | 
			
		||||
      "on": "Piztuta"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "recording": "Grabatzen"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "Automatikoa",
 | 
			
		||||
      "cool": "Hotza",
 | 
			
		||||
      "dry": "Lehorra",
 | 
			
		||||
      "fan_only": "Haizagailua bakarrik",
 | 
			
		||||
      "heat": "Beroa",
 | 
			
		||||
      "off": "Itzalita"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "Konfiguratu",
 | 
			
		||||
      "configured": "Konfiguratuta"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "Itxita",
 | 
			
		||||
      "closing": "Ixten",
 | 
			
		||||
      "open": "Irekita",
 | 
			
		||||
      "opening": "Irekitzen",
 | 
			
		||||
      "stopped": "Geldituta"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "Itzalita",
 | 
			
		||||
      "on": "Piztuta",
 | 
			
		||||
      "unavailable": "Ez dago erabilgarri",
 | 
			
		||||
      "unknown": "Ezezaguna"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "Etxean",
 | 
			
		||||
      "not_home": "Kanpoan"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "Itzalita",
 | 
			
		||||
      "on": "Piztuta"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "Itxita",
 | 
			
		||||
      "closing": "Ixten",
 | 
			
		||||
      "home": "Etxean",
 | 
			
		||||
      "not_home": "Kanpoan",
 | 
			
		||||
      "off": "Itzalita",
 | 
			
		||||
      "ok": "Itzalita",
 | 
			
		||||
      "on": "Piztuta",
 | 
			
		||||
      "open": "Ireki",
 | 
			
		||||
      "opening": "Irekitzen",
 | 
			
		||||
      "problem": "Arazoa",
 | 
			
		||||
      "stopped": "Geldirik"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "Itzalita",
 | 
			
		||||
      "on": "Piztuta"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "Itzalita",
 | 
			
		||||
      "on": "Piztuta"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "off": "Itzalita",
 | 
			
		||||
      "on": "Piztuta"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "Etxean",
 | 
			
		||||
      "not_home": "Kanpoan"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "Itzalita",
 | 
			
		||||
      "problem": "Arazoa"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "Itzalita",
 | 
			
		||||
      "on": "Piztuta"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "Itzalita",
 | 
			
		||||
      "on": "Piztuta"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "Itzalita",
 | 
			
		||||
      "on": "Piztuta"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "Horizonte gainetik",
 | 
			
		||||
      "below_horizon": "Horizonte azpitik"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "Itzalita",
 | 
			
		||||
      "on": "Piztuta"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "Garbitzen",
 | 
			
		||||
      "docked": "Basean",
 | 
			
		||||
      "error": "Errorea",
 | 
			
		||||
      "off": "Itzalita",
 | 
			
		||||
      "on": "Piztuta",
 | 
			
		||||
      "returning": "Basera itzultzen"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "Garbia, gaua",
 | 
			
		||||
      "cloudy": "Hodeitsua",
 | 
			
		||||
      "fog": "Lainoa",
 | 
			
		||||
      "hail": "Txingorra",
 | 
			
		||||
      "lightning": "Tximistak",
 | 
			
		||||
      "lightning-rainy": "Tximistak, euritsua",
 | 
			
		||||
      "partlycloudy": "Ostarteak",
 | 
			
		||||
      "pouring": "Botatzen",
 | 
			
		||||
      "rainy": "Euritsua",
 | 
			
		||||
      "snowy": "Elurtsua",
 | 
			
		||||
      "snowy-rainy": "Elurtsua, euritsua",
 | 
			
		||||
      "sunny": "Eguzkitsua",
 | 
			
		||||
      "windy": "Haizetsua",
 | 
			
		||||
      "windy-variant": "Haizetsua"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "Hilda",
 | 
			
		||||
        "initializing": "Hasieratzen",
 | 
			
		||||
        "ready": "Prest",
 | 
			
		||||
        "sleeping": "Lotan"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "Ez du erantzuten ({query_stage})",
 | 
			
		||||
        "initializing": "Hasieratzen ({query_stage})"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,247 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "\u0645\u0635\u0644\u062d \u0634\u062f\u0647",
 | 
			
		||||
      "armed_away": "\u0645\u0633\u0644\u062d \u0634\u062f\u0647 \u0628\u06cc\u0631\u0648\u0646",
 | 
			
		||||
      "armed_custom_bypass": "\u0628\u0627\u06cc\u06af\u0627\u0646\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u0645\u0633\u0644\u062d",
 | 
			
		||||
      "armed_home": "\u0645\u0633\u0644\u062d \u0634\u062f\u0647 \u062e\u0627\u0646\u0647",
 | 
			
		||||
      "armed_night": "\u0645\u0633\u0644\u062d \u0634\u062f\u0647 \u0634\u0628",
 | 
			
		||||
      "arming": "\u062f\u0631 \u062d\u0627\u0644 \u0645\u0633\u0644\u062d \u06a9\u0631\u062f\u0646",
 | 
			
		||||
      "disarmed": "\u063a\u06cc\u0631 \u0645\u0633\u0644\u062d",
 | 
			
		||||
      "disarming": "\u062f\u0631 \u062d\u0627\u0644 \u063a\u06cc\u0631 \u0645\u0633\u0644\u062d \u06a9\u0631\u062f\u0646",
 | 
			
		||||
      "pending": "\u062f\u0631 \u0627\u0646\u062a\u0638\u0627\u0631",
 | 
			
		||||
      "triggered": "\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u062e\u062a\u0647 \u0634\u062f\u0647"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "\u062e\u0627\u0645\u0648\u0634",
 | 
			
		||||
      "on": "\u0641\u0639\u0627\u0644"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "\u0639\u0627\u062f\u06cc",
 | 
			
		||||
        "on": "\u06a9\u0645"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "\u0639\u0627\u062f\u06cc",
 | 
			
		||||
        "on": "\u0633\u0631\u062f"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "\u0642\u0637\u0639 ",
 | 
			
		||||
        "on": "\u0645\u062a\u0635\u0644"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "\u062e\u0627\u0645\u0648\u0634",
 | 
			
		||||
        "on": "\u0631\u0648\u0634\u0646"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "\u0628\u0633\u062a\u0647",
 | 
			
		||||
        "on": "\u0628\u0627\u0632"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "\u0628\u0633\u062a\u0647",
 | 
			
		||||
        "on": "\u0628\u0627\u0632"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "\u0639\u0627\u062f\u06cc",
 | 
			
		||||
        "on": "\u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0634\u062f"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "\u0639\u0627\u062f\u06cc",
 | 
			
		||||
        "on": "\u062f\u0627\u063a"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "\u0642\u0641\u0644",
 | 
			
		||||
        "on": "\u0628\u0627\u0632"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "\u062e\u0634\u06a9",
 | 
			
		||||
        "on": "\u0645\u0631\u0637\u0648\u0628"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "\u0639\u0627\u062f\u06cc",
 | 
			
		||||
        "on": "\u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0634\u062f"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "\u0639\u0627\u062f\u06cc",
 | 
			
		||||
        "on": "\u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0634\u062f"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "\u0628\u0633\u062a\u0647 \u0634\u062f\u0647",
 | 
			
		||||
        "on": "\u0628\u0627\u0632"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "\u0628\u06cc\u0631\u0648\u0646",
 | 
			
		||||
        "on": "\u062e\u0627\u0646\u0647"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "\u062e\u0648\u0628",
 | 
			
		||||
        "on": "\u0645\u0634\u06a9\u0644"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "\u0627\u0645\u0646",
 | 
			
		||||
        "on": "\u0646\u0627 \u0627\u0645\u0646"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "\u0639\u0627\u062f\u06cc",
 | 
			
		||||
        "on": "\u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0634\u062f"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "\u0639\u0627\u062f\u06cc",
 | 
			
		||||
        "on": "\u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0634\u062f"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "\u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646",
 | 
			
		||||
        "on": "\u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0634\u062f"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "\u0628\u0633\u062a\u0647",
 | 
			
		||||
        "on": "\u0628\u0627\u0632"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "\u063a\u06cc\u0631\u0641\u0639\u0627\u0644",
 | 
			
		||||
      "on": "\u0641\u0639\u0627\u0644"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "\u0628\u06cc\u06a9\u0627\u0631",
 | 
			
		||||
      "recording": "\u062f\u0631 \u062d\u0627\u0644 \u0636\u0628\u0637",
 | 
			
		||||
      "streaming": "\u062f\u0631 \u062d\u0627\u0644 \u067e\u062e\u0634"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "\u062e\u0648\u062f\u06a9\u0627\u0631",
 | 
			
		||||
      "cool": "\u062e\u0646\u06a9",
 | 
			
		||||
      "dry": "\u062e\u0634\u06a9",
 | 
			
		||||
      "fan_only": "\u0641\u0642\u0637 \u067e\u0646\u06a9\u0647",
 | 
			
		||||
      "heat": "\u062d\u0631\u0627\u0631\u062a",
 | 
			
		||||
      "off": "\u062e\u0627\u0645\u0648\u0634"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc",
 | 
			
		||||
      "configured": "\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0634\u062f\u0647"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "\u0628\u0633\u062a\u0647 \u0634\u062f\u0647",
 | 
			
		||||
      "closing": "\u062f\u0631 \u062d\u0627\u0644 \u0628\u0633\u062a\u0647 \u0634\u062f\u0646",
 | 
			
		||||
      "open": "\u0628\u0627\u0632",
 | 
			
		||||
      "opening": "\u062f\u0631 \u062d\u0627\u0644 \u0628\u0627\u0632 \u0634\u062f\u0646",
 | 
			
		||||
      "stopped": "\u0645\u062a\u0648\u0642\u0641"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "\u062e\u0627\u0645\u0648\u0634",
 | 
			
		||||
      "on": "\u0631\u0648\u0634\u0646",
 | 
			
		||||
      "unavailable": "\u063a\u06cc\u0631\u0642\u0627\u0628\u0644 \u062f\u0633\u062a\u0631\u0633",
 | 
			
		||||
      "unknown": "\u0646\u0627\u0645\u0634\u062e\u0635"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "\u062e\u0627\u0646\u0647",
 | 
			
		||||
      "not_home": "\u0628\u06cc\u0631\u0648\u0646"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "\u062e\u0627\u0645\u0648\u0634",
 | 
			
		||||
      "on": "\u0631\u0648\u0634\u0646"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "\u0628\u0633\u062a\u0647",
 | 
			
		||||
      "closing": "\u062f\u0631 \u062d\u0627\u0644 \u0628\u0633\u062a\u0647 \u0634\u062f\u0646",
 | 
			
		||||
      "home": "\u062e\u0627\u0646\u0647",
 | 
			
		||||
      "locked": "\u0642\u0641\u0644 \u0634\u062f\u0647",
 | 
			
		||||
      "not_home": "\u0628\u06cc\u0631\u0648\u0646",
 | 
			
		||||
      "off": "\u063a\u06cc\u0631\u0641\u0639\u0627\u0644",
 | 
			
		||||
      "ok": "\u062e\u0648\u0628",
 | 
			
		||||
      "on": "\u0641\u0639\u0627\u0644",
 | 
			
		||||
      "open": "\u0628\u0627\u0632",
 | 
			
		||||
      "opening": "\u062f\u0631 \u062d\u0627\u0644 \u0628\u0627\u0632 \u0634\u062f\u0646",
 | 
			
		||||
      "problem": "\u0645\u0634\u06a9\u0644",
 | 
			
		||||
      "stopped": "\u0645\u062a\u0648\u0642\u0641",
 | 
			
		||||
      "unlocked": "\u0628\u0627\u0632"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "\u063a\u06cc\u0631\u0641\u0639\u0627\u0644",
 | 
			
		||||
      "on": "\u0641\u0639\u0627\u0644"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "\u062e\u0627\u0645\u0648\u0634",
 | 
			
		||||
      "on": "\u0631\u0648\u0634\u0646"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "\u0642\u0641\u0644 \u0634\u062f\u0647",
 | 
			
		||||
      "unlocked": "\u0628\u0627\u0632"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "\u0628\u06cc\u06a9\u0627\u0631",
 | 
			
		||||
      "off": "\u062e\u0627\u0645\u0648\u0634",
 | 
			
		||||
      "on": "\u0631\u0648\u0634\u0646",
 | 
			
		||||
      "paused": "\u062f\u0631 \u062d\u0627\u0644\u062a \u0645\u06a9\u062b",
 | 
			
		||||
      "playing": "\u062f\u0631 \u062d\u0627\u0644 \u067e\u062e\u0634",
 | 
			
		||||
      "standby": "\u0622\u0645\u0627\u062f\u0647 \u0628\u0647 \u06a9\u0627\u0631"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "\u062e\u0627\u0646\u0647",
 | 
			
		||||
      "not_home": "\u0628\u06cc\u0631\u0648\u0646"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "\u062e\u0648\u0628",
 | 
			
		||||
      "problem": "\u0645\u0634\u06a9\u0644"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "\u062e\u0627\u0645\u0648\u0634",
 | 
			
		||||
      "on": "\u0631\u0648\u0634\u0646"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "\u0635\u062d\u0646\u0647"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "\u063a\u06cc\u0631\u0641\u0639\u0627\u0644",
 | 
			
		||||
      "on": "\u0641\u0639\u0627\u0644"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "\u063a\u06cc\u0631 \u0641\u0639\u0627\u0644",
 | 
			
		||||
      "on": "\u0641\u0639\u0627\u0644"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "\u0628\u0627\u0644\u0627\u06cc \u0627\u0641\u0642",
 | 
			
		||||
      "below_horizon": "\u0632\u06cc\u0631 \u0627\u0641\u0642"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "\u062e\u0627\u0645\u0648\u0634",
 | 
			
		||||
      "on": "\u0631\u0648\u0634\u0646"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "\u0641\u0639\u0627\u0644",
 | 
			
		||||
      "idle": "\u0628\u06cc\u06a9\u0627\u0631 ",
 | 
			
		||||
      "paused": "\u0645\u062a\u0648\u0642\u0641 \u0634\u062f"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "\u062a\u0645\u06cc\u0632 \u06a9\u0631\u062f\u0646",
 | 
			
		||||
      "off": "\u063a\u06cc\u0631 \u0641\u0639\u0627\u0644",
 | 
			
		||||
      "on": "\u0641\u063a\u0627\u0644",
 | 
			
		||||
      "paused": "\u0645\u06a9\u062b"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "cloudy": "\u0627\u0628\u0631\u06cc",
 | 
			
		||||
      "fog": "\u0645\u0647",
 | 
			
		||||
      "hail": "\u062a\u06af\u0631\u06af",
 | 
			
		||||
      "lightning": "\u0631\u0639\u062f \u0648 \u0628\u0631\u0642",
 | 
			
		||||
      "partlycloudy": "\u0646\u06cc\u0645\u0647 \u0627\u0628\u0631\u06cc",
 | 
			
		||||
      "pouring": "\u0631\u06cc\u062e\u062a\u0646",
 | 
			
		||||
      "rainy": "\u0628\u0627\u0631\u0627\u0646\u06cc",
 | 
			
		||||
      "snowy": "\u0628\u0631\u0641\u06cc",
 | 
			
		||||
      "snowy-rainy": "\u0628\u0631\u0641\u06cc\u060c \u0628\u0627\u0631\u0627\u0646\u06cc",
 | 
			
		||||
      "sunny": "\u0622\u0641\u062a\u0627\u0628\u06cc",
 | 
			
		||||
      "windy": "\u0628\u0627\u062f",
 | 
			
		||||
      "windy-variant": "\u0628\u0627\u062f"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "\u0645\u0631\u062f\u0647",
 | 
			
		||||
        "initializing": "\u062f\u0631 \u062d\u0627\u0644 \u0622\u0645\u0627\u062f\u0647 \u0634\u062f\u0646",
 | 
			
		||||
        "ready": "\u0622\u0645\u0627\u062f\u0647",
 | 
			
		||||
        "sleeping": "\u062f\u0631 \u062d\u0627\u0644 \u062e\u0648\u0627\u0628"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "\u0645\u0631\u062f\u0647 ({query_stage})",
 | 
			
		||||
        "initializing": "\u062f\u0631 \u062d\u0627\u0644 \u0622\u0645\u0627\u062f\u0647 \u0634\u062f\u0646 ( {query_stage} )"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,255 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "Viritetty",
 | 
			
		||||
      "armed_away": "Viritetty (poissa)",
 | 
			
		||||
      "armed_custom_bypass": "Virityksen ohittaminen",
 | 
			
		||||
      "armed_home": "Viritetty (kotona)",
 | 
			
		||||
      "armed_night": "Viritetty (y\u00f6)",
 | 
			
		||||
      "arming": "Viritys",
 | 
			
		||||
      "disarmed": "Viritys pois",
 | 
			
		||||
      "disarming": "Virityksen poisto",
 | 
			
		||||
      "pending": "Odottaa",
 | 
			
		||||
      "triggered": "Lauennut"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "Pois",
 | 
			
		||||
      "on": "P\u00e4\u00e4ll\u00e4"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "Normaali",
 | 
			
		||||
        "on": "Alhainen"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "Normaali",
 | 
			
		||||
        "on": "Kylm\u00e4"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "Ei yhteytt\u00e4",
 | 
			
		||||
        "on": "Yhdistetty"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "Pois",
 | 
			
		||||
        "on": "P\u00e4\u00e4ll\u00e4"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "Suljettu",
 | 
			
		||||
        "on": "Auki"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "Suljettu",
 | 
			
		||||
        "on": "Auki"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "Pois",
 | 
			
		||||
        "on": "Havaittu"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "Normaali",
 | 
			
		||||
        "on": "Kuuma"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "Lukittu",
 | 
			
		||||
        "on": "Auki"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "Kuiva",
 | 
			
		||||
        "on": "Kostea"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "Ei liikett\u00e4",
 | 
			
		||||
        "on": "Havaittu"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "Ei liikett\u00e4",
 | 
			
		||||
        "on": "Havaittu"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "Suljettu",
 | 
			
		||||
        "on": "Auki"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "Poissa",
 | 
			
		||||
        "on": "Kotona"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "OK",
 | 
			
		||||
        "on": "Ongelma"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "Turvallinen",
 | 
			
		||||
        "on": "Vaarallinen"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "Ei savua",
 | 
			
		||||
        "on": "Havaittu"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "Ei \u00e4\u00e4nt\u00e4",
 | 
			
		||||
        "on": "Havaittu"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "Ei v\u00e4rin\u00e4\u00e4",
 | 
			
		||||
        "on": "Havaittu"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "Suljettu",
 | 
			
		||||
        "on": "Auki"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "Pois p\u00e4\u00e4lt\u00e4",
 | 
			
		||||
      "on": "P\u00e4\u00e4ll\u00e4"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "Lepotilassa",
 | 
			
		||||
      "recording": "Tallentaa",
 | 
			
		||||
      "streaming": "Toistaa"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "Automaatilla",
 | 
			
		||||
      "cool": "J\u00e4\u00e4hdytys",
 | 
			
		||||
      "dry": "Kuivaus",
 | 
			
		||||
      "fan_only": "Tuuletus",
 | 
			
		||||
      "heat": "L\u00e4mmitys",
 | 
			
		||||
      "heat_cool": "L\u00e4mmitys/j\u00e4\u00e4hdytys",
 | 
			
		||||
      "off": "Pois"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "M\u00e4\u00e4rittele",
 | 
			
		||||
      "configured": "M\u00e4\u00e4ritetty"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "Suljettu",
 | 
			
		||||
      "closing": "Suljetaan",
 | 
			
		||||
      "open": "Auki",
 | 
			
		||||
      "opening": "Avataan",
 | 
			
		||||
      "stopped": "Pys\u00e4ytetty"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "Pois",
 | 
			
		||||
      "on": "P\u00e4\u00e4ll\u00e4",
 | 
			
		||||
      "unavailable": "Ei saatavissa",
 | 
			
		||||
      "unknown": "Tuntematon"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "Kotona",
 | 
			
		||||
      "not_home": "Poissa"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "Pois",
 | 
			
		||||
      "on": "P\u00e4\u00e4ll\u00e4"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "Suljettu",
 | 
			
		||||
      "closing": "Suljetaan",
 | 
			
		||||
      "home": "Kotona",
 | 
			
		||||
      "locked": "Lukittu",
 | 
			
		||||
      "not_home": "Poissa",
 | 
			
		||||
      "off": "Pois",
 | 
			
		||||
      "ok": "Ok",
 | 
			
		||||
      "on": "P\u00e4\u00e4ll\u00e4",
 | 
			
		||||
      "open": "Auki",
 | 
			
		||||
      "opening": "Avataan",
 | 
			
		||||
      "problem": "Ongelma",
 | 
			
		||||
      "stopped": "Pys\u00e4ytetty",
 | 
			
		||||
      "unlocked": "Avattu"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "Pois",
 | 
			
		||||
      "on": "P\u00e4\u00e4ll\u00e4"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "Pois",
 | 
			
		||||
      "on": "P\u00e4\u00e4ll\u00e4"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "Lukittu",
 | 
			
		||||
      "unlocked": "Auki"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "Lepotilassa",
 | 
			
		||||
      "off": "Pois",
 | 
			
		||||
      "on": "P\u00e4\u00e4ll\u00e4",
 | 
			
		||||
      "paused": "Pys\u00e4ytetty",
 | 
			
		||||
      "playing": "Toistaa",
 | 
			
		||||
      "standby": "Lepotilassa"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "Koti",
 | 
			
		||||
      "not_home": "Poissa"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "Ok",
 | 
			
		||||
      "problem": "Ongelma"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "Pois",
 | 
			
		||||
      "on": "P\u00e4\u00e4ll\u00e4"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "Skenehallinta"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "Pois",
 | 
			
		||||
      "on": "P\u00e4\u00e4ll\u00e4"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "Pois",
 | 
			
		||||
      "on": "P\u00e4\u00e4ll\u00e4"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "Horisontin yll\u00e4",
 | 
			
		||||
      "below_horizon": "Horisontin alapuolella"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "Pois",
 | 
			
		||||
      "on": "P\u00e4\u00e4ll\u00e4"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "aktiivinen",
 | 
			
		||||
      "idle": "Lepotilassa",
 | 
			
		||||
      "paused": "Pys\u00e4ytetty"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "Imuroi",
 | 
			
		||||
      "docked": "Telakoituna",
 | 
			
		||||
      "error": "Virhe",
 | 
			
		||||
      "idle": "Lepotilassa",
 | 
			
		||||
      "off": "Pois p\u00e4\u00e4lt\u00e4",
 | 
			
		||||
      "on": "P\u00e4\u00e4ll\u00e4",
 | 
			
		||||
      "paused": "Pys\u00e4ytetty",
 | 
			
		||||
      "returning": "Palaamassa telakkaan"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "Y\u00f6, selke\u00e4\u00e4",
 | 
			
		||||
      "cloudy": "Pilvist\u00e4",
 | 
			
		||||
      "exceptional": "Poikkeuksellinen",
 | 
			
		||||
      "fog": "Sumuista",
 | 
			
		||||
      "hail": "Raekuuroja",
 | 
			
		||||
      "lightning": "Ukkoskuuroja",
 | 
			
		||||
      "lightning-rainy": "Ukkosvaara, sateista",
 | 
			
		||||
      "partlycloudy": "Osittain pilvist\u00e4",
 | 
			
		||||
      "pouring": "Kaatosadetta",
 | 
			
		||||
      "rainy": "Sateista",
 | 
			
		||||
      "snowy": "Lumisadetta",
 | 
			
		||||
      "snowy-rainy": "R\u00e4nt\u00e4sadetta",
 | 
			
		||||
      "sunny": "Aurinkoista",
 | 
			
		||||
      "windy": "Tuulista",
 | 
			
		||||
      "windy-variant": "Tuulista"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "Kuollut",
 | 
			
		||||
        "initializing": "Alustaa",
 | 
			
		||||
        "ready": "Valmis",
 | 
			
		||||
        "sleeping": "Lepotilassa"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "Kuollut ({query_stage})",
 | 
			
		||||
        "initializing": "Alustaa ( {query_stage} )"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,255 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "Activ\u00e9",
 | 
			
		||||
      "armed_away": "Enclench\u00e9e (absent)",
 | 
			
		||||
      "armed_custom_bypass": "Activ\u00e9e avec exception",
 | 
			
		||||
      "armed_home": "Enclench\u00e9e (pr\u00e9sent)",
 | 
			
		||||
      "armed_night": "Enclench\u00e9 (nuit)",
 | 
			
		||||
      "arming": "Activation",
 | 
			
		||||
      "disarmed": "D\u00e9sactiv\u00e9e",
 | 
			
		||||
      "disarming": "D\u00e9sactivation",
 | 
			
		||||
      "pending": "En attente",
 | 
			
		||||
      "triggered": "D\u00e9clench\u00e9"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "Inactif",
 | 
			
		||||
      "on": "Actif"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Faible"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "Normale",
 | 
			
		||||
        "on": "Froid"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "D\u00e9connect\u00e9",
 | 
			
		||||
        "on": "Connect\u00e9"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "Inactif",
 | 
			
		||||
        "on": "Actif"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "Ferm\u00e9e",
 | 
			
		||||
        "on": "Ouverte"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "Ferm\u00e9e",
 | 
			
		||||
        "on": "Ouverte"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "Non d\u00e9tect\u00e9",
 | 
			
		||||
        "on": "D\u00e9tect\u00e9"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "Normale",
 | 
			
		||||
        "on": "Chaud"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "Verrouill\u00e9",
 | 
			
		||||
        "on": "D\u00e9verrouill\u00e9"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "Sec",
 | 
			
		||||
        "on": "Humide"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "RAS",
 | 
			
		||||
        "on": "D\u00e9tect\u00e9"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "RAS",
 | 
			
		||||
        "on": "D\u00e9tect\u00e9"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "Ferm\u00e9",
 | 
			
		||||
        "on": "Ouvert"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "Absent",
 | 
			
		||||
        "on": "Pr\u00e9sent"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "OK",
 | 
			
		||||
        "on": "Probl\u00e8me"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "S\u00e9curis\u00e9",
 | 
			
		||||
        "on": "Dangereux"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "RAS",
 | 
			
		||||
        "on": "D\u00e9tect\u00e9"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "RAS",
 | 
			
		||||
        "on": "D\u00e9tect\u00e9"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "RAS",
 | 
			
		||||
        "on": "D\u00e9tect\u00e9e"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "Ferm\u00e9e",
 | 
			
		||||
        "on": "Ouverte"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "Inactif",
 | 
			
		||||
      "on": "Actif"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "En veille",
 | 
			
		||||
      "recording": "Enregistrement",
 | 
			
		||||
      "streaming": "Diffusion en cours"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "Auto",
 | 
			
		||||
      "cool": "Frais",
 | 
			
		||||
      "dry": "Sec",
 | 
			
		||||
      "fan_only": "Ventilateur seul",
 | 
			
		||||
      "heat": "Chauffe",
 | 
			
		||||
      "heat_cool": "Chaud/Froid",
 | 
			
		||||
      "off": "Inactif"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "Configurer",
 | 
			
		||||
      "configured": "Configur\u00e9"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "Ferm\u00e9",
 | 
			
		||||
      "closing": "Fermeture",
 | 
			
		||||
      "open": "Ouvert",
 | 
			
		||||
      "opening": "Ouverture",
 | 
			
		||||
      "stopped": "Arr\u00eat\u00e9"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "Inactif",
 | 
			
		||||
      "on": "Actif",
 | 
			
		||||
      "unavailable": "Indisponible",
 | 
			
		||||
      "unknown": "Inconnu"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "Pr\u00e9sent",
 | 
			
		||||
      "not_home": "Absent"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "\u00c9teint",
 | 
			
		||||
      "on": "Marche"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "Ferm\u00e9",
 | 
			
		||||
      "closing": "Fermeture",
 | 
			
		||||
      "home": "Pr\u00e9sent",
 | 
			
		||||
      "locked": "Verrouill\u00e9",
 | 
			
		||||
      "not_home": "Absent",
 | 
			
		||||
      "off": "Inactif",
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "on": "Actif",
 | 
			
		||||
      "open": "Ouvert",
 | 
			
		||||
      "opening": "Ouverture",
 | 
			
		||||
      "problem": "Probl\u00e8me",
 | 
			
		||||
      "stopped": "Arr\u00eat\u00e9",
 | 
			
		||||
      "unlocked": "D\u00e9verrouill\u00e9"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "Arr\u00eat\u00e9",
 | 
			
		||||
      "on": "Marche"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "\u00c9teinte",
 | 
			
		||||
      "on": "Actif"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "Verrouill\u00e9",
 | 
			
		||||
      "unlocked": "D\u00e9verrouill\u00e9"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "En veille",
 | 
			
		||||
      "off": "\u00c9teint",
 | 
			
		||||
      "on": "Marche",
 | 
			
		||||
      "paused": "En pause",
 | 
			
		||||
      "playing": "Lecture en cours",
 | 
			
		||||
      "standby": "En veille"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "Pr\u00e9sent",
 | 
			
		||||
      "not_home": "Absent"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "problem": "Probl\u00e8me"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "Arr\u00eat",
 | 
			
		||||
      "on": "Actif"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "Sc\u00e9nario"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "Inactif",
 | 
			
		||||
      "on": "Actif"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "Inactif",
 | 
			
		||||
      "on": "Actif"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "Au-dessus de l'horizon",
 | 
			
		||||
      "below_horizon": "Sous l\u2019horizon"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "Inactif",
 | 
			
		||||
      "on": "On"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "actif",
 | 
			
		||||
      "idle": "en veille",
 | 
			
		||||
      "paused": "en pause"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "Nettoyage",
 | 
			
		||||
      "docked": "Sur la base",
 | 
			
		||||
      "error": "Erreur",
 | 
			
		||||
      "idle": "Inactif",
 | 
			
		||||
      "off": "Off",
 | 
			
		||||
      "on": "On",
 | 
			
		||||
      "paused": "En pause",
 | 
			
		||||
      "returning": "Retourne \u00e0 la base"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "Nuit d\u00e9gag\u00e9e",
 | 
			
		||||
      "cloudy": "Nuageux",
 | 
			
		||||
      "exceptional": "Exceptionnel",
 | 
			
		||||
      "fog": "Brouillard",
 | 
			
		||||
      "hail": "Gr\u00eale",
 | 
			
		||||
      "lightning": "Orage",
 | 
			
		||||
      "lightning-rainy": "Orage / Pluie",
 | 
			
		||||
      "partlycloudy": "Partiellement nuageux",
 | 
			
		||||
      "pouring": "Averses",
 | 
			
		||||
      "rainy": "Pluie",
 | 
			
		||||
      "snowy": "Neige",
 | 
			
		||||
      "snowy-rainy": "Neige / Pluie",
 | 
			
		||||
      "sunny": "Soleil",
 | 
			
		||||
      "windy": "Vent",
 | 
			
		||||
      "windy-variant": "Vent"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "Morte",
 | 
			
		||||
        "initializing": "Initialisation",
 | 
			
		||||
        "ready": "Pr\u00eat",
 | 
			
		||||
        "sleeping": "En veille"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "Morte ( {query_stage} )",
 | 
			
		||||
        "initializing": "Initialisation ( {query_stage} )"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,219 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "Scharf",
 | 
			
		||||
      "armed_away": "Scharf usswerts",
 | 
			
		||||
      "armed_home": "Scharf dihei",
 | 
			
		||||
      "armed_night": "Scharf Nacht",
 | 
			
		||||
      "arming": "Scharf stel\u00e4",
 | 
			
		||||
      "disarmed": "Nid scharf",
 | 
			
		||||
      "disarming": "Entsperr\u00e4",
 | 
			
		||||
      "pending": "Usstehehnd",
 | 
			
		||||
      "triggered": "Usgl\u00f6sst"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "Us",
 | 
			
		||||
      "on": "Ah"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "Normau",
 | 
			
		||||
        "on": "Nidrig"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "Trennt",
 | 
			
		||||
        "on": "Verbunge"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "Us",
 | 
			
		||||
        "on": "Ah"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "Frei",
 | 
			
		||||
        "on": "Erk\u00e4nnt"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "on": "Heiss"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "Troch\u00e4",
 | 
			
		||||
        "on": "Nass"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "Ok",
 | 
			
		||||
        "on": "Erch\u00e4nt"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "Ok",
 | 
			
		||||
        "on": "Erch\u00e4nt"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "Gschlos\u00e4",
 | 
			
		||||
        "on": "Off\u00e4"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "Nid Dahei",
 | 
			
		||||
        "on": "Dahei"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "OK",
 | 
			
		||||
        "on": "Problem"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "Sicher",
 | 
			
		||||
        "on": "Unsicher"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "Ok",
 | 
			
		||||
        "on": "Erch\u00e4nt"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "Ok",
 | 
			
		||||
        "on": "Erch\u00e4nt"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "Ok",
 | 
			
		||||
        "on": "Erch\u00e4nt"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "Us",
 | 
			
		||||
      "on": "Ah"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "L\u00e4\u00e4rlauf",
 | 
			
		||||
      "recording": "Nimt uf",
 | 
			
		||||
      "streaming": "Streamt"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "Automatik",
 | 
			
		||||
      "cool": "Ch\u00fc\u00e4l\u00e4",
 | 
			
		||||
      "dry": "Troch\u00e4",
 | 
			
		||||
      "fan_only": "Nur L\u00fcfter",
 | 
			
		||||
      "heat": "Heiz\u00e4",
 | 
			
		||||
      "off": "Us"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "Konfiguri\u00e4r\u00e4",
 | 
			
		||||
      "configured": "Konfiguri\u00e4rt"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "Gschloss\u00e4",
 | 
			
		||||
      "closing": "Am schliesse",
 | 
			
		||||
      "open": "Off\u00e4",
 | 
			
		||||
      "opening": "Am \u00f6ffn\u00e4",
 | 
			
		||||
      "stopped": "Gstoppt"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "Us",
 | 
			
		||||
      "on": "Ah",
 | 
			
		||||
      "unavailable": "Nid verf\u00fc\u00e4gbar",
 | 
			
		||||
      "unknown": "Unbekannt"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "Dahei",
 | 
			
		||||
      "not_home": "Nid Dahei"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "Us",
 | 
			
		||||
      "on": "Ah"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "Gschloss\u00e4",
 | 
			
		||||
      "closing": "Schl\u00fcss\u00e4",
 | 
			
		||||
      "home": "Dahei",
 | 
			
		||||
      "locked": "Gsperrt",
 | 
			
		||||
      "not_home": "Nid Dahei",
 | 
			
		||||
      "off": "Us",
 | 
			
		||||
      "ok": "Ok",
 | 
			
		||||
      "on": "Ah",
 | 
			
		||||
      "open": "Off\u00e4",
 | 
			
		||||
      "opening": "Am \u00f6ffn\u00e4",
 | 
			
		||||
      "problem": "Problem",
 | 
			
		||||
      "stopped": "Gstoppt",
 | 
			
		||||
      "unlocked": "Entsperrt"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "Us",
 | 
			
		||||
      "on": "Ah"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "Us",
 | 
			
		||||
      "on": "Ah"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "Gsperrt",
 | 
			
		||||
      "unlocked": "Entsperrt"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "L\u00e4\u00e4rlauf",
 | 
			
		||||
      "off": "Us",
 | 
			
		||||
      "on": "Ah",
 | 
			
		||||
      "paused": "Pousi\u00e4r\u00e4",
 | 
			
		||||
      "playing": "Am spil\u00e4",
 | 
			
		||||
      "standby": "Standby"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "problem": "Problem"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "Us",
 | 
			
		||||
      "on": "Ah"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "Szen\u00e4"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "Us",
 | 
			
		||||
      "on": "Ah"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "Us",
 | 
			
		||||
      "on": "Ah"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "\u00dcberem Horizont",
 | 
			
		||||
      "below_horizon": "Underem Horizont"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "Us",
 | 
			
		||||
      "on": "Ah"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "Putze",
 | 
			
		||||
      "error": "F\u00e4hler",
 | 
			
		||||
      "off": "Us",
 | 
			
		||||
      "on": "I",
 | 
			
		||||
      "paused": "Pause"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "Klar, Nacht",
 | 
			
		||||
      "cloudy": "Bedeckt",
 | 
			
		||||
      "fog": "N\u00e4bu",
 | 
			
		||||
      "hail": "H\u00e4gu",
 | 
			
		||||
      "lightning": "Blitz\u00e4",
 | 
			
		||||
      "lightning-rainy": "Blitz\u00e4, R\u00e4ge",
 | 
			
		||||
      "partlycloudy": "Teilwis bedeckt",
 | 
			
		||||
      "pouring": "Sch\u00fctte",
 | 
			
		||||
      "rainy": "R\u00e4gn\u00e4risch",
 | 
			
		||||
      "snowy": "Schneie",
 | 
			
		||||
      "snowy-rainy": "Schneie, r\u00e4gnerisch",
 | 
			
		||||
      "sunny": "sunnig",
 | 
			
		||||
      "windy": "windig",
 | 
			
		||||
      "windy-variant": "windig"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "Tod",
 | 
			
		||||
        "initializing": "Inizialisi\u00e4r\u00e4",
 | 
			
		||||
        "ready": "Parat",
 | 
			
		||||
        "sleeping": "Schlaf\u00e4"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "Tod ({query_stage})",
 | 
			
		||||
        "initializing": "Inizialisi\u00e4r\u00e4 ( {query_stage} )"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,255 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "\u05d3\u05e8\u05d5\u05da",
 | 
			
		||||
      "armed_away": "\u05d3\u05e8\u05d5\u05da \u05dc\u05d0 \u05d1\u05d1\u05d9\u05ea",
 | 
			
		||||
      "armed_custom_bypass": "\u05de\u05e2\u05e7\u05e3 \u05de\u05d5\u05ea\u05d0\u05dd \u05d0\u05d9\u05e9\u05d9\u05ea \u05d3\u05e8\u05d5\u05da",
 | 
			
		||||
      "armed_home": "\u05d4\u05d1\u05d9\u05ea \u05d3\u05e8\u05d5\u05da",
 | 
			
		||||
      "armed_night": "\u05d3\u05e8\u05d5\u05da \u05dc\u05d9\u05dc\u05d4",
 | 
			
		||||
      "arming": "\u05de\u05e4\u05e2\u05d9\u05dc",
 | 
			
		||||
      "disarmed": "\u05de\u05e0\u05d5\u05d8\u05e8\u05dc",
 | 
			
		||||
      "disarming": "\u05de\u05e0\u05d8\u05e8\u05dc",
 | 
			
		||||
      "pending": "\u05de\u05de\u05ea\u05d9\u05df",
 | 
			
		||||
      "triggered": "\u05d4\u05d5\u05e4\u05e2\u05dc"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "\u05db\u05d1\u05d5\u05d9",
 | 
			
		||||
      "on": "\u05d3\u05dc\u05d5\u05e7"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "\u05e0\u05d5\u05e8\u05de\u05dc\u05d9",
 | 
			
		||||
        "on": "\u05e0\u05de\u05d5\u05da"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "\u05e8\u05d2\u05d9\u05dc",
 | 
			
		||||
        "on": "\u05e7\u05b7\u05e8"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "\u05de\u05e0\u05d5\u05ea\u05e7",
 | 
			
		||||
        "on": "\u05de\u05d7\u05d5\u05d1\u05e8"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "\u05db\u05d1\u05d5\u05d9",
 | 
			
		||||
        "on": "\u05d3\u05dc\u05d5\u05e7"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "\u05e1\u05d2\u05d5\u05e8\u05d4",
 | 
			
		||||
        "on": "\u05e4\u05ea\u05d5\u05d7\u05d4"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "\u05e1\u05d2\u05d5\u05e8\u05d4",
 | 
			
		||||
        "on": "\u05e4\u05ea\u05d5\u05d7\u05d4"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "\u05e0\u05e7\u05d9",
 | 
			
		||||
        "on": "\u05d0\u05d5\u05ea\u05e8"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "\u05e8\u05d2\u05d9\u05dc",
 | 
			
		||||
        "on": "\u05d7\u05dd"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "\u05e0\u05e2\u05d5\u05dc",
 | 
			
		||||
        "on": "\u05dc\u05d0 \u05e0\u05e2\u05d5\u05dc"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "\u05d9\u05d1\u05e9",
 | 
			
		||||
        "on": "\u05e8\u05d8\u05d5\u05d1"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "\u05e0\u05e7\u05d9",
 | 
			
		||||
        "on": "\u05d6\u05d5\u05d4\u05d4"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "\u05e0\u05e7\u05d9",
 | 
			
		||||
        "on": "\u05d6\u05d5\u05d4\u05d4"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "\u05e1\u05d2\u05d5\u05e8",
 | 
			
		||||
        "on": "\u05e4\u05ea\u05d5\u05d7"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "\u05dc\u05d0 \u05e0\u05d5\u05db\u05d7",
 | 
			
		||||
        "on": "\u05e0\u05d5\u05db\u05d7"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "\u05d0\u05d5\u05e7\u05d9\u05d9",
 | 
			
		||||
        "on": "\u05d1\u05e2\u05d9\u05d9\u05d4"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "\u05d1\u05d8\u05d5\u05d7",
 | 
			
		||||
        "on": "\u05dc\u05d0 \u05d1\u05d8\u05d5\u05d7"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "\u05e0\u05e7\u05d9",
 | 
			
		||||
        "on": "\u05d0\u05d5\u05ea\u05e8"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "\u05e0\u05e7\u05d9",
 | 
			
		||||
        "on": "\u05d0\u05d5\u05ea\u05e8"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "\u05e0\u05e7\u05d9",
 | 
			
		||||
        "on": "\u05d0\u05d5\u05ea\u05e8"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "\u05e1\u05d2\u05d5\u05e8",
 | 
			
		||||
        "on": "\u05e4\u05ea\u05d5\u05d7"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "\u05db\u05d1\u05d5\u05d9",
 | 
			
		||||
      "on": "\u05d3\u05dc\u05d5\u05e7"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "\u05de\u05d7\u05db\u05d4",
 | 
			
		||||
      "recording": "\u05de\u05e7\u05dc\u05d9\u05d8",
 | 
			
		||||
      "streaming": "\u05de\u05d6\u05e8\u05d9\u05dd"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "\u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9",
 | 
			
		||||
      "cool": "\u05e7\u05e8\u05d5\u05e8",
 | 
			
		||||
      "dry": "\u05d9\u05d1\u05e9",
 | 
			
		||||
      "fan_only": "\u05de\u05d0\u05d5\u05d5\u05e8\u05e8 \u05d1\u05dc\u05d1\u05d3",
 | 
			
		||||
      "heat": "\u05d7\u05d9\u05de\u05d5\u05dd",
 | 
			
		||||
      "heat_cool": "\u05d7\u05d9\u05de\u05d5\u05dd/\u05e7\u05d9\u05e8\u05d5\u05e8",
 | 
			
		||||
      "off": "\u05db\u05d1\u05d5\u05d9"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "\u05d4\u05d2\u05d3\u05e8",
 | 
			
		||||
      "configured": "\u05d4\u05d5\u05d2\u05d3\u05e8"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "\u05e0\u05e1\u05d2\u05e8",
 | 
			
		||||
      "closing": "\u05e1\u05d5\u05d2\u05e8",
 | 
			
		||||
      "open": "\u05e4\u05ea\u05d5\u05d7",
 | 
			
		||||
      "opening": "\u05e4\u05d5\u05ea\u05d7",
 | 
			
		||||
      "stopped": "\u05e2\u05e6\u05d5\u05e8"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "\u05db\u05d1\u05d5\u05d9",
 | 
			
		||||
      "on": "\u05de\u05d5\u05e4\u05e2\u05dc",
 | 
			
		||||
      "unavailable": "\u05dc\u05d0 \u05d6\u05de\u05d9\u05df",
 | 
			
		||||
      "unknown": "\u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "\u05d1\u05d1\u05d9\u05ea",
 | 
			
		||||
      "not_home": "\u05dc\u05d0 \u05d1\u05d1\u05d9\u05ea"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "\u05db\u05d1\u05d5\u05d9",
 | 
			
		||||
      "on": "\u05d3\u05dc\u05d5\u05e7"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "\u05e1\u05d2\u05d5\u05e8",
 | 
			
		||||
      "closing": "\u05e1\u05d5\u05d2\u05e8",
 | 
			
		||||
      "home": "\u05d1\u05d1\u05d9\u05ea",
 | 
			
		||||
      "locked": "\u05e0\u05e2\u05d5\u05dc",
 | 
			
		||||
      "not_home": "\u05dc\u05d0 \u05d1\u05d1\u05d9\u05ea",
 | 
			
		||||
      "off": "\u05db\u05d1\u05d5\u05d9",
 | 
			
		||||
      "ok": "\u05ea\u05e7\u05d9\u05df",
 | 
			
		||||
      "on": "\u05d3\u05dc\u05d5\u05e7",
 | 
			
		||||
      "open": "\u05e4\u05ea\u05d5\u05d7",
 | 
			
		||||
      "opening": "\u05e4\u05d5\u05ea\u05d7",
 | 
			
		||||
      "problem": "\u05d1\u05e2\u05d9\u05d4",
 | 
			
		||||
      "stopped": "\u05e0\u05e2\u05e6\u05e8",
 | 
			
		||||
      "unlocked": "\u05e4\u05ea\u05d5\u05d7"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "\u05db\u05d1\u05d5\u05d9",
 | 
			
		||||
      "on": "\u05d3\u05dc\u05d5\u05e7"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "\u05db\u05d1\u05d5\u05d9",
 | 
			
		||||
      "on": "\u05d3\u05dc\u05d5\u05e7"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "\u05e0\u05e2\u05d5\u05dc",
 | 
			
		||||
      "unlocked": "\u05e4\u05ea\u05d5\u05d7"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "\u05de\u05de\u05ea\u05d9\u05df",
 | 
			
		||||
      "off": "\u05db\u05d1\u05d5\u05d9",
 | 
			
		||||
      "on": "\u05d3\u05dc\u05d5\u05e7",
 | 
			
		||||
      "paused": "\u05de\u05d5\u05e9\u05d4\u05d4",
 | 
			
		||||
      "playing": "\u05de\u05e0\u05d2\u05df",
 | 
			
		||||
      "standby": "\u05de\u05e6\u05d1 \u05d4\u05de\u05ea\u05e0\u05d4"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "\u05d1\u05d1\u05d9\u05ea",
 | 
			
		||||
      "not_home": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "\u05ea\u05e7\u05d9\u05df",
 | 
			
		||||
      "problem": "\u05d1\u05e2\u05d9\u05d4"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "\u05db\u05d1\u05d5\u05d9",
 | 
			
		||||
      "on": "\u05d3\u05dc\u05d5\u05e7"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "\u05de\u05e4\u05e2\u05d9\u05dc \u05e1\u05e6\u05e0\u05d4"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "\u05db\u05d1\u05d5\u05d9",
 | 
			
		||||
      "on": "\u05d3\u05dc\u05d5\u05e7"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "\u05db\u05d1\u05d5\u05d9",
 | 
			
		||||
      "on": "\u05d3\u05dc\u05d5\u05e7"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "\u05de\u05e2\u05dc \u05d4\u05d0\u05d5\u05e4\u05e7",
 | 
			
		||||
      "below_horizon": "\u05de\u05ea\u05d7\u05ea \u05dc\u05d0\u05d5\u05e4\u05e7"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "\u05db\u05d1\u05d5\u05d9",
 | 
			
		||||
      "on": "\u05d3\u05dc\u05d5\u05e7"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "\u05e4\u05e2\u05d9\u05dc",
 | 
			
		||||
      "idle": "\u05dc\u05d0 \u05e4\u05e2\u05d9\u05dc",
 | 
			
		||||
      "paused": "\u05de\u05d5\u05e9\u05d4\u05d4"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "\u05de\u05e0\u05e7\u05d4",
 | 
			
		||||
      "docked": "\u05d1\u05e2\u05d2\u05d9\u05e0\u05d4",
 | 
			
		||||
      "error": "\u05e9\u05d2\u05d9\u05d0\u05d4",
 | 
			
		||||
      "idle": "\u05de\u05de\u05ea\u05d9\u05df",
 | 
			
		||||
      "off": "\u05de\u05db\u05d5\u05d1\u05d4",
 | 
			
		||||
      "on": "\u05de\u05d5\u05e4\u05e2\u05dc",
 | 
			
		||||
      "paused": "\u05de\u05d5\u05e9\u05d4\u05d4",
 | 
			
		||||
      "returning": "\u05d7\u05d6\u05d5\u05e8 \u05dc\u05e2\u05d2\u05d9\u05e0\u05d4"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "\u05dc\u05d9\u05dc\u05d4 \u05d1\u05d4\u05d9\u05e8",
 | 
			
		||||
      "cloudy": "\u05de\u05e2\u05d5\u05e0\u05df",
 | 
			
		||||
      "exceptional": "\u05d9\u05d5\u05e6\u05d0 \u05d3\u05d5\u05e4\u05df",
 | 
			
		||||
      "fog": "\u05e2\u05e8\u05e4\u05dc",
 | 
			
		||||
      "hail": "\u05d1\u05e8\u05d3",
 | 
			
		||||
      "lightning": "\u05d1\u05e8\u05e7",
 | 
			
		||||
      "lightning-rainy": "\u05d1\u05e8\u05e7, \u05d2\u05e9\u05d5\u05dd",
 | 
			
		||||
      "partlycloudy": "\u05de\u05e2\u05d5\u05e0\u05df \u05d7\u05dc\u05e7\u05d9\u05ea",
 | 
			
		||||
      "pouring": "\u05d2\u05e9\u05d5\u05dd",
 | 
			
		||||
      "rainy": "\u05d2\u05e9\u05d5\u05dd",
 | 
			
		||||
      "snowy": "\u05de\u05d5\u05e9\u05dc\u05d2",
 | 
			
		||||
      "snowy-rainy": "\u05de\u05d5\u05e9\u05dc\u05d2, \u05d2\u05e9\u05d5\u05dd",
 | 
			
		||||
      "sunny": "\u05e9\u05de\u05e9\u05d9",
 | 
			
		||||
      "windy": "\u05e1\u05d5\u05e2\u05e8",
 | 
			
		||||
      "windy-variant": "\u05e1\u05d5\u05e2\u05e8"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "\u05de\u05ea",
 | 
			
		||||
        "initializing": "\u05de\u05d0\u05ea\u05d7\u05dc",
 | 
			
		||||
        "ready": "\u05de\u05d5\u05db\u05df",
 | 
			
		||||
        "sleeping": "\u05d9\u05e9\u05df"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "\u05de\u05ea ({query_stage})",
 | 
			
		||||
        "initializing": "\u05de\u05d0\u05ea\u05d7\u05dc ({query_stage})"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,129 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "\u092c\u0902\u0926"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "\u0938\u093e\u0927\u093e\u0930\u0923",
 | 
			
		||||
        "on": "\u0915\u092e"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "\u0938\u093e\u0927\u093e\u0930\u0923",
 | 
			
		||||
        "on": "\u0938\u0930\u094d\u0926\u0940"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "\u0921\u093f\u0938\u094d\u0915\u0928\u0947\u0915\u094d\u091f \u0915\u093f\u092f\u093e \u0917\u092f\u093e",
 | 
			
		||||
        "on": "\u091c\u0941\u0921\u093c\u0947 \u0939\u0941\u090f"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "\u092c\u0902\u0926"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "\u092c\u0902\u0926",
 | 
			
		||||
        "on": "\u0916\u0941\u0932\u093e"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "\u092c\u0902\u0926",
 | 
			
		||||
        "on": "\u0916\u0941\u0932\u093e"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "on": "\u0917\u0930\u094d\u092e"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "\u0935\u093f\u0936\u0926",
 | 
			
		||||
        "on": "\u0905\u0928\u0941\u0938\u0928\u094d\u0927\u093e\u0928\u093f\u0924"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "on": "\u0916\u0941\u0932\u093e"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "on": "\u0918\u0930"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "\u092c\u0902\u0926",
 | 
			
		||||
        "on": "\u0916\u0941\u0932\u0940"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "\u092c\u0902\u0926"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "recording": "\u0930\u093f\u0915\u0949\u0930\u094d\u0921\u093f\u0902\u0917"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "cool": "\u0920\u0902\u0921\u093e",
 | 
			
		||||
      "dry": "\u0938\u0942\u0916\u093e",
 | 
			
		||||
      "heat": "\u0917\u0930\u094d\u092e\u0940",
 | 
			
		||||
      "off": "\u092c\u0902\u0926"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "\u092c\u0902\u0926",
 | 
			
		||||
      "unavailable": "\u0905\u0928\u0941\u092a\u0932\u092c\u094d\u0927",
 | 
			
		||||
      "unknown": "\u0905\u0928\u091c\u093e\u0928"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "\u0918\u0930"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "\u092c\u0902\u0926",
 | 
			
		||||
      "on": "\u091a\u093e\u0932\u0942"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "home": "\u0918\u0930",
 | 
			
		||||
      "off": "\u092c\u0902\u0926",
 | 
			
		||||
      "on": "\u091a\u093e\u0932\u0942",
 | 
			
		||||
      "problem": "\u0938\u092e\u0938\u094d\u092f\u093e"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "\u092c\u0902\u0926",
 | 
			
		||||
      "on": "\u091a\u093e\u0932\u0942"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "\u092c\u0902\u0926",
 | 
			
		||||
      "on": "\u091a\u093e\u0932\u0942"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "\u0905\u0935\u0930\u094b\u0927\u093f\u0924",
 | 
			
		||||
      "unlocked": "\u0916\u0941\u0932\u093e"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "off": "\u092c\u0902\u0926",
 | 
			
		||||
      "on": "\u091a\u093e\u0932\u0942"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "\u0920\u0940\u0915 \u0939\u0948",
 | 
			
		||||
      "problem": "\u0938\u092e\u0938\u094d\u092f\u093e"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "\u092c\u0902\u0926",
 | 
			
		||||
      "on": "\u091a\u093e\u0932\u0942"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "\u092c\u0902\u0926",
 | 
			
		||||
      "on": "\u091a\u093e\u0932\u0942"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "\u092c\u0902\u0926",
 | 
			
		||||
      "on": "\u091a\u093e\u0932\u0942"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "\u0915\u094d\u0937\u093f\u0924\u093f\u091c \u0938\u0947 \u090a\u092a\u0930",
 | 
			
		||||
      "below_horizon": "\u0915\u094d\u0937\u093f\u0924\u093f\u091c \u0915\u0947 \u0928\u0940\u091a\u0947"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "\u092c\u0902\u0926",
 | 
			
		||||
      "on": "\u091a\u093e\u0932\u0942"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "ready": "\u0924\u0948\u092f\u093e\u0930",
 | 
			
		||||
        "sleeping": "\u0938\u094b\u092f\u093e \u0939\u0941\u0906"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": " ( {query_stage} )",
 | 
			
		||||
        "initializing": "\u0906\u0930\u0902\u092d ({query_stage})"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,255 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "Aktiviran",
 | 
			
		||||
      "armed_away": "Aktiviran odsutno",
 | 
			
		||||
      "armed_custom_bypass": "Aktiviran",
 | 
			
		||||
      "armed_home": "Aktiviran doma",
 | 
			
		||||
      "armed_night": "Aktiviran no\u010dni",
 | 
			
		||||
      "arming": "Aktiviranje",
 | 
			
		||||
      "disarmed": "Deaktiviran",
 | 
			
		||||
      "disarming": "Deaktiviranje",
 | 
			
		||||
      "pending": "U tijeku",
 | 
			
		||||
      "triggered": "Okinut"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "Isklju\u010den",
 | 
			
		||||
      "on": "Uklju\u010den"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "Normalno",
 | 
			
		||||
        "on": "Prazna"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "Normalno",
 | 
			
		||||
        "on": "Hladno"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "Nije spojen",
 | 
			
		||||
        "on": "Spojen"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "Isklju\u010den",
 | 
			
		||||
        "on": "Uklju\u010den"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "Zatvoreno",
 | 
			
		||||
        "on": "Otvori"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "Zatvoren",
 | 
			
		||||
        "on": "Otvoreno"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "\u010cisto",
 | 
			
		||||
        "on": "Otkriveno"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "Normalno",
 | 
			
		||||
        "on": "Vru\u0107e"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "Zaklju\u010dano",
 | 
			
		||||
        "on": "Otklju\u010dano"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "Suho",
 | 
			
		||||
        "on": "Mokro"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "\u010cisto",
 | 
			
		||||
        "on": "Otkriveno"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "\u010cisto",
 | 
			
		||||
        "on": "Otkriveno"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "Zatvoreno",
 | 
			
		||||
        "on": "Otvoreno"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "Odsutan",
 | 
			
		||||
        "on": "Doma"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "OK",
 | 
			
		||||
        "on": "Problem"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "Sigurno",
 | 
			
		||||
        "on": "Nesigurno"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "\u010cisto",
 | 
			
		||||
        "on": "Otkriveno"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "\u010cisto",
 | 
			
		||||
        "on": "Otkriveno"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "\u010cisto",
 | 
			
		||||
        "on": "Otkriveno"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "Zatvoreno",
 | 
			
		||||
        "on": "Otvoreno"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "Isklju\u010den",
 | 
			
		||||
      "on": "Uklju\u010den"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "Neaktivan",
 | 
			
		||||
      "recording": "Snimanje",
 | 
			
		||||
      "streaming": "Oda\u0161ilja"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "Auto",
 | 
			
		||||
      "cool": "Hla\u0111enje",
 | 
			
		||||
      "dry": "Suho",
 | 
			
		||||
      "fan_only": "Samo ventilator",
 | 
			
		||||
      "heat": "Grijanje",
 | 
			
		||||
      "heat_cool": "Grijanje/Hla\u0111enje",
 | 
			
		||||
      "off": "Isklju\u010den"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "Konfiguriranje",
 | 
			
		||||
      "configured": "Konfiguriran"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "Zatvoreno",
 | 
			
		||||
      "closing": "Zatvaranje",
 | 
			
		||||
      "open": "Otvoreno",
 | 
			
		||||
      "opening": "Otvaranje",
 | 
			
		||||
      "stopped": "zaustavljen"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "Isklju\u010den",
 | 
			
		||||
      "on": "Uklju\u010den",
 | 
			
		||||
      "unavailable": "Nedostupan",
 | 
			
		||||
      "unknown": "Nepoznato"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "Doma",
 | 
			
		||||
      "not_home": "Odsutan"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "Isklju\u010den",
 | 
			
		||||
      "on": "Uklju\u010den"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "Zatvoreno",
 | 
			
		||||
      "closing": "Zatvaranje",
 | 
			
		||||
      "home": "Doma",
 | 
			
		||||
      "locked": "Zaklju\u010dano",
 | 
			
		||||
      "not_home": "Odsutan",
 | 
			
		||||
      "off": "Uklju\u010deno",
 | 
			
		||||
      "ok": "U redu",
 | 
			
		||||
      "on": "Uklju\u010deno",
 | 
			
		||||
      "open": "Otvoreno",
 | 
			
		||||
      "opening": "Otvaranje",
 | 
			
		||||
      "problem": "Problem",
 | 
			
		||||
      "stopped": "Zautavljeno",
 | 
			
		||||
      "unlocked": "Otklju\u010dano"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "Isklju\u010den",
 | 
			
		||||
      "on": "Uklju\u010den"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "Isklju\u010deno",
 | 
			
		||||
      "on": "Uklju\u010deno"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "Zaklju\u010dan",
 | 
			
		||||
      "unlocked": "Otklju\u010dan"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "Neaktivan",
 | 
			
		||||
      "off": "Isklju\u010den",
 | 
			
		||||
      "on": "Uklju\u010den",
 | 
			
		||||
      "paused": "Pauzirano",
 | 
			
		||||
      "playing": "Prikazivanje",
 | 
			
		||||
      "standby": "U stanju \u010dekanja"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "Doma",
 | 
			
		||||
      "not_home": "Odsutan"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "u redu",
 | 
			
		||||
      "problem": "Problem"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "Isklju\u010den",
 | 
			
		||||
      "on": "Uklju\u010den"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "Scene"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "Isklju\u010den",
 | 
			
		||||
      "on": "Uklju\u010den"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "Isklju\u010den",
 | 
			
		||||
      "on": "Uklju\u010den"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "Iznad horizonta",
 | 
			
		||||
      "below_horizon": "Ispod horizonta"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "Isklju\u010den",
 | 
			
		||||
      "on": "Uklju\u010den"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "aktivan",
 | 
			
		||||
      "idle": "neaktivan",
 | 
			
		||||
      "paused": "pauzirano"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "\u010ci\u0161\u0107enje",
 | 
			
		||||
      "docked": "Usidreni",
 | 
			
		||||
      "error": "Gre\u0161ka",
 | 
			
		||||
      "idle": "Neaktivan",
 | 
			
		||||
      "off": "Uga\u0161eno",
 | 
			
		||||
      "on": "Upaljeno",
 | 
			
		||||
      "paused": "Pauzirano",
 | 
			
		||||
      "returning": "Povratak na dok"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "Vedro, no\u0107",
 | 
			
		||||
      "cloudy": "Obla\u010dno",
 | 
			
		||||
      "exceptional": "Izuzetan",
 | 
			
		||||
      "fog": "Magla",
 | 
			
		||||
      "hail": "Tu\u010da",
 | 
			
		||||
      "lightning": "Munja",
 | 
			
		||||
      "lightning-rainy": "Munja, ki\u0161na",
 | 
			
		||||
      "partlycloudy": "Djelomi\u010dno obla\u010dno",
 | 
			
		||||
      "pouring": "Lije",
 | 
			
		||||
      "rainy": "Ki\u0161ovito",
 | 
			
		||||
      "snowy": "Snje\u017eno",
 | 
			
		||||
      "snowy-rainy": "Snje\u017eno, ki\u0161no",
 | 
			
		||||
      "sunny": "Sun\u010dano",
 | 
			
		||||
      "windy": "Vjetrovito",
 | 
			
		||||
      "windy-variant": "Vjetrovito"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "Mrtav",
 | 
			
		||||
        "initializing": "Inicijalizacija",
 | 
			
		||||
        "ready": "Spreman",
 | 
			
		||||
        "sleeping": "Spavanje"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "Mrtav ({query_stage})",
 | 
			
		||||
        "initializing": "Inicijalizacija ( {query_stage} )"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,255 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "\u00c9les\u00edtve",
 | 
			
		||||
      "armed_away": "\u00c9les\u00edtve t\u00e1vol",
 | 
			
		||||
      "armed_custom_bypass": "\u00c9les\u00edtve \u00e1thidal\u00e1ssal",
 | 
			
		||||
      "armed_home": "\u00c9les\u00edtve otthon",
 | 
			
		||||
      "armed_night": "\u00c9les\u00edtve \u00e9jszaka",
 | 
			
		||||
      "arming": "\u00c9les\u00edt\u00e9s",
 | 
			
		||||
      "disarmed": "Hat\u00e1stalan\u00edtva",
 | 
			
		||||
      "disarming": "Hat\u00e1stalan\u00edt\u00e1s",
 | 
			
		||||
      "pending": "F\u00fcgg\u0151ben",
 | 
			
		||||
      "triggered": "Riaszt\u00e1s"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "Ki",
 | 
			
		||||
      "on": "Be"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "Norm\u00e1l",
 | 
			
		||||
        "on": "Alacsony"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "Norm\u00e1l",
 | 
			
		||||
        "on": "Hideg"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "Lekapcsol\u00f3dva",
 | 
			
		||||
        "on": "Kapcsol\u00f3dva"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "Ki",
 | 
			
		||||
        "on": "Be"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "Z\u00e1rva",
 | 
			
		||||
        "on": "Nyitva"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "Z\u00e1rva",
 | 
			
		||||
        "on": "Nyitva"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "Norm\u00e1l",
 | 
			
		||||
        "on": "\u00c9szlelve"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "Norm\u00e1l",
 | 
			
		||||
        "on": "Meleg"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "Bez\u00e1rva",
 | 
			
		||||
        "on": "Kinyitva"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "Sz\u00e1raz",
 | 
			
		||||
        "on": "Nedves"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "Norm\u00e1l",
 | 
			
		||||
        "on": "\u00c9szlelve"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "Norm\u00e1l",
 | 
			
		||||
        "on": "\u00c9szlelve"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "Z\u00e1rva",
 | 
			
		||||
        "on": "Nyitva"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "T\u00e1vol",
 | 
			
		||||
        "on": "Otthon"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "OK",
 | 
			
		||||
        "on": "Probl\u00e9ma"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "Biztons\u00e1gos",
 | 
			
		||||
        "on": "Nem biztons\u00e1gos"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "Norm\u00e1l",
 | 
			
		||||
        "on": "\u00c9szlelve"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "Norm\u00e1l",
 | 
			
		||||
        "on": "\u00c9szlelve"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "Norm\u00e1l",
 | 
			
		||||
        "on": "\u00c9szlelve"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "Z\u00e1rva",
 | 
			
		||||
        "on": "Nyitva"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "Ki",
 | 
			
		||||
      "on": "Be"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "T\u00e9tlen",
 | 
			
		||||
      "recording": "Felv\u00e9tel",
 | 
			
		||||
      "streaming": "Streamel\u00e9s"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "Automatikus",
 | 
			
		||||
      "cool": "H\u0171t\u00e9s",
 | 
			
		||||
      "dry": "Sz\u00e1raz",
 | 
			
		||||
      "fan_only": "Csak ventil\u00e1tor",
 | 
			
		||||
      "heat": "F\u0171t\u00e9s",
 | 
			
		||||
      "heat_cool": "F\u0171t\u00e9s/H\u0171t\u00e9s",
 | 
			
		||||
      "off": "Ki"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "Be\u00e1ll\u00edt\u00e1s",
 | 
			
		||||
      "configured": "Be\u00e1ll\u00edtva"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "Z\u00e1rva",
 | 
			
		||||
      "closing": "Z\u00e1r\u00e1s",
 | 
			
		||||
      "open": "Nyitva",
 | 
			
		||||
      "opening": "Nyit\u00e1s",
 | 
			
		||||
      "stopped": "Meg\u00e1ll\u00edtva"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "Ki",
 | 
			
		||||
      "on": "Be",
 | 
			
		||||
      "unavailable": "Nem el\u00e9rhet\u0151",
 | 
			
		||||
      "unknown": "Ismeretlen"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "Otthon",
 | 
			
		||||
      "not_home": "T\u00e1vol"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "Ki",
 | 
			
		||||
      "on": "Be"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "Z\u00e1rva",
 | 
			
		||||
      "closing": "Z\u00e1r\u00e1s",
 | 
			
		||||
      "home": "Otthon",
 | 
			
		||||
      "locked": "Bez\u00e1rva",
 | 
			
		||||
      "not_home": "T\u00e1vol",
 | 
			
		||||
      "off": "Ki",
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "on": "Be",
 | 
			
		||||
      "open": "Nyitva",
 | 
			
		||||
      "opening": "Nyit\u00e1s",
 | 
			
		||||
      "problem": "Probl\u00e9ma",
 | 
			
		||||
      "stopped": "Meg\u00e1ll\u00edtva",
 | 
			
		||||
      "unlocked": "Kinyitva"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "Ki",
 | 
			
		||||
      "on": "Be"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "Ki",
 | 
			
		||||
      "on": "Be"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "Bez\u00e1rva",
 | 
			
		||||
      "unlocked": "Kinyitva"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "T\u00e9tlen",
 | 
			
		||||
      "off": "Ki",
 | 
			
		||||
      "on": "Be",
 | 
			
		||||
      "paused": "Sz\u00fcnetel",
 | 
			
		||||
      "playing": "Lej\u00e1tsz\u00e1s",
 | 
			
		||||
      "standby": "K\u00e9szenl\u00e9t"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "Otthon",
 | 
			
		||||
      "not_home": "T\u00e1vol"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "problem": "Probl\u00e9ma"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "Ki",
 | 
			
		||||
      "on": "Be"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "Jelenet be\u00e1ll\u00edt\u00e1sa"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "Ki",
 | 
			
		||||
      "on": "Be"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "Ki",
 | 
			
		||||
      "on": "Be"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "L\u00e1t\u00f3hat\u00e1r felett",
 | 
			
		||||
      "below_horizon": "L\u00e1t\u00f3hat\u00e1r alatt"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "Ki",
 | 
			
		||||
      "on": "Be"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "akt\u00edv",
 | 
			
		||||
      "idle": "t\u00e9tlen",
 | 
			
		||||
      "paused": "sz\u00fcneteltetve"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "Takar\u00edt\u00e1s",
 | 
			
		||||
      "docked": "Dokkolva",
 | 
			
		||||
      "error": "Hiba",
 | 
			
		||||
      "idle": "T\u00e9tlen",
 | 
			
		||||
      "off": "Ki",
 | 
			
		||||
      "on": "Be",
 | 
			
		||||
      "paused": "Sz\u00fcneteltetve",
 | 
			
		||||
      "returning": "Dokkol\u00e1s folyamatban"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "Tiszta, \u00e9jszaka",
 | 
			
		||||
      "cloudy": "Felh\u0151s",
 | 
			
		||||
      "exceptional": "Kiv\u00e9teles",
 | 
			
		||||
      "fog": "K\u00f6d",
 | 
			
		||||
      "hail": "J\u00e9ges\u0151",
 | 
			
		||||
      "lightning": "Vihar",
 | 
			
		||||
      "lightning-rainy": "Viharos, es\u0151s",
 | 
			
		||||
      "partlycloudy": "R\u00e9szben felh\u0151s",
 | 
			
		||||
      "pouring": "Szakad",
 | 
			
		||||
      "rainy": "Es\u0151s",
 | 
			
		||||
      "snowy": "Havaz\u00e1s",
 | 
			
		||||
      "snowy-rainy": "Havas, es\u0151s",
 | 
			
		||||
      "sunny": "Napos",
 | 
			
		||||
      "windy": "Szeles",
 | 
			
		||||
      "windy-variant": "Szeles"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "Halott",
 | 
			
		||||
        "initializing": "Inicializ\u00e1l\u00e1s",
 | 
			
		||||
        "ready": "K\u00e9sz",
 | 
			
		||||
        "sleeping": "Alv\u00e1s"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "Halott ({query_stage})",
 | 
			
		||||
        "initializing": "Inicializ\u00e1l\u00e1s ({query_stage})"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,255 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "\u0536\u056b\u0576\u057e\u0561\u056e",
 | 
			
		||||
      "armed_away": "\u0536\u056b\u0576\u057e\u0561\u056e",
 | 
			
		||||
      "armed_custom_bypass": "\u0536\u056b\u0576\u0574\u0561\u0576 \u0561\u0576\u0570\u0561\u057f\u0561\u056f\u0561\u0576 \u056f\u0578\u0564",
 | 
			
		||||
      "armed_home": "\u0536\u056b\u0576\u057e\u0561\u056e \u057f\u0578\u0582\u0576",
 | 
			
		||||
      "armed_night": "\u0536\u056b\u0576\u057e\u0561\u056e \u0563\u056b\u0577\u0565\u0580",
 | 
			
		||||
      "arming": "\u0536\u056b\u0576\u0565\u056c",
 | 
			
		||||
      "disarmed": "\u0536\u056b\u0576\u0561\u0569\u0561\u0583\u057e\u0561\u056e",
 | 
			
		||||
      "disarming": "\u0536\u056b\u0576\u0561\u0569\u0561\u0583\u0578\u0572",
 | 
			
		||||
      "pending": "\u054d\u057a\u0561\u057d\u0578\u0582\u0574",
 | 
			
		||||
      "triggered": "\u057a\u0561\u057f\u0573\u0561\u057c\u0568"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
 | 
			
		||||
      "on": "\u0544\u056b\u0561\u0581\u0561\u056e"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "\u0546\u0578\u0580\u0574\u0561\u056c \u0567",
 | 
			
		||||
        "on": "\u0551\u0561\u056e\u0580"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "\u0546\u0578\u0580\u0574\u0561\u056c",
 | 
			
		||||
        "on": "\u054d\u0561\u057c\u0568"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e \u0567",
 | 
			
		||||
        "on": "\u053f\u0561\u057a\u057e\u0561\u056e"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
 | 
			
		||||
        "on": "\u0544\u056b\u0561\u0581\u0561\u056e"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "\u0553\u0561\u056f\u057e\u0561\u056e \u0567",
 | 
			
		||||
        "on": "\u0532\u0561\u0581\u0565\u056c"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "\u0553\u0561\u056f\u057e\u0561\u056e \u0567",
 | 
			
		||||
        "on": "\u0532\u0561\u0581\u0565\u056c"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "\u0544\u0561\u0584\u0580\u0565\u056c",
 | 
			
		||||
        "on": "\u0540\u0561\u0575\u057f\u0576\u0561\u0562\u0565\u0580\u057e\u0565\u056c \u0567"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "\u0546\u0578\u0580\u0574\u0561\u056c",
 | 
			
		||||
        "on": "\u0539\u0565\u056a"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "\u056f\u0578\u0572\u057a\u057e\u0561\u056e",
 | 
			
		||||
        "on": "\u0562\u0561\u0581\u0565\u056c \u0567"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "\u0549\u0578\u0580",
 | 
			
		||||
        "on": "\u053d\u0578\u0576\u0561\u057e"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "\u0544\u0561\u0584\u0580\u0565\u056c",
 | 
			
		||||
        "on": "\u0540\u0561\u0575\u057f\u0576\u0561\u0562\u0565\u0580\u057e\u0565\u056c \u0567"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "\u0544\u0561\u0584\u0580\u0565\u056c",
 | 
			
		||||
        "on": "\u0540\u0561\u0575\u057f\u0576\u0561\u0562\u0565\u0580\u057e\u0565\u056c \u0567"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "\u0553\u0561\u056f\u057e\u0561\u056e",
 | 
			
		||||
        "on": "\u0532\u0561\u0581"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "\u0540\u0565\u057c\u0578\u0582",
 | 
			
		||||
        "on": "\u054f\u0578\u0582\u0576"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "OK",
 | 
			
		||||
        "on": "\u053d\u0576\u0564\u056b\u0580"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "\u0531\u057a\u0561\u0570\u0578\u057e",
 | 
			
		||||
        "on": "\u0531\u0576\u057e\u057f\u0561\u0576\u0563"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "\u0544\u0561\u0584\u0580\u0565\u056c",
 | 
			
		||||
        "on": "\u0540\u0561\u0575\u057f\u0576\u0561\u0562\u0565\u0580\u057e\u0565\u056c \u0567"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "\u0544\u0561\u0584\u0580\u0565\u056c",
 | 
			
		||||
        "on": "\u0540\u0561\u0575\u057f\u0576\u0561\u0562\u0565\u0580\u057e\u0565\u056c \u0567"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "\u0544\u0561\u0584\u0580\u0565\u056c",
 | 
			
		||||
        "on": "\u0540\u0561\u0575\u057f\u0576\u0561\u0562\u0565\u0580\u057e\u0565\u056c \u0567"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "\u0553\u0561\u056f\u057e\u0561\u056e \u0567",
 | 
			
		||||
        "on": "\u0532\u0561\u0581\u0565\u056c"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
 | 
			
		||||
      "on": "\u0544\u056b\u0561\u0581\u0561\u056e"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "\u057a\u0561\u0580\u0561\u057a",
 | 
			
		||||
      "recording": "\u0541\u0561\u0575\u0576\u0561\u0563\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568",
 | 
			
		||||
      "streaming": "\u0540\u0578\u057d\u0584"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "\u0531\u057e\u057f\u0578\u0574\u0561\u057f",
 | 
			
		||||
      "cool": "\u0540\u0578\u057e\u0561\u0581\u0578\u0582\u0574",
 | 
			
		||||
      "dry": "\u0549\u0578\u0580",
 | 
			
		||||
      "fan_only": "\u0555\u0564\u0561\u0583\u0578\u056d\u056b\u0579",
 | 
			
		||||
      "heat": "\u054b\u0565\u0580\u0574\u0578\u0582\u0569\u0575\u0578\u0582\u0576",
 | 
			
		||||
      "heat_cool": "\u054b\u0565\u057c\u0578\u0582\u0581\u0578\u0582\u0574/\u0540\u0578\u057e\u0561\u0581\u0578\u0582\u0574",
 | 
			
		||||
      "off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "\u053f\u0561\u0580\u0563\u0561\u057e\u0578\u0580\u0565\u056c",
 | 
			
		||||
      "configured": "\u053f\u0561\u0580\u0563\u0561\u057e\u0578\u0580\u057e\u0561\u056e"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "\u0553\u0561\u056f\u057e\u0561\u056e",
 | 
			
		||||
      "closing": "\u0553\u0561\u056f\u0578\u0582\u0574",
 | 
			
		||||
      "open": "\u0532\u0561\u0581",
 | 
			
		||||
      "opening": "\u0532\u0561\u0581\u0578\u0582\u0574",
 | 
			
		||||
      "stopped": "\u0534\u0561\u0564\u0561\u0580\u0565\u0581"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "\u0531\u0576\u057b\u0561\u057f\u0561\u056e",
 | 
			
		||||
      "on": "\u0544\u056b\u0561\u0581\u057e\u0561\u056e",
 | 
			
		||||
      "unavailable": "\u0531\u0576\u0570\u0561\u057d\u0561\u0576\u0565\u056c\u056b",
 | 
			
		||||
      "unknown": "\u0570\u0561\u0575\u057f\u0576\u056b \u0579\u0567"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "\u054f\u0578\u0582\u0576",
 | 
			
		||||
      "not_home": "\u0540\u0565\u057c\u0578\u0582"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
 | 
			
		||||
      "on": "\u0544\u056b\u0561\u0581\u0561\u056e"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "\u0553\u0561\u056f\u057e\u0561\u056e",
 | 
			
		||||
      "closing": "\u0553\u0561\u056f\u0578\u0582\u0574",
 | 
			
		||||
      "home": "\u054f\u0578\u0582\u0576",
 | 
			
		||||
      "locked": "\u056f\u0578\u0572\u057a\u057e\u0561\u056e \u0567",
 | 
			
		||||
      "not_home": "\u0540\u0565\u057c\u0578\u0582",
 | 
			
		||||
      "off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
 | 
			
		||||
      "ok": "\u053c\u0561\u057e",
 | 
			
		||||
      "on": "\u0544\u056b\u0561\u0581\u0561\u056e",
 | 
			
		||||
      "open": "\u0532\u0561\u0581\u0565\u0584",
 | 
			
		||||
      "opening": "\u0532\u0561\u0581\u0578\u0582\u0574",
 | 
			
		||||
      "problem": "\u053d\u0576\u0564\u056b\u0580",
 | 
			
		||||
      "stopped": "\u0534\u0561\u0564\u0561\u0580\u0565\u0581",
 | 
			
		||||
      "unlocked": "\u0532\u0561\u0581\u0565\u056c \u0567"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
 | 
			
		||||
      "on": "\u0544\u056b\u0561\u0581\u0561\u056e"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "\u054d\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
 | 
			
		||||
      "on": "\u0544\u056b\u0561\u0581\u0561\u056e"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "\u053f\u0578\u0572\u057a\u057e\u0561\u056e \u0567",
 | 
			
		||||
      "unlocked": "\u0532\u0561\u0581 \u0567"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "\u054a\u0561\u0580\u0561\u057a",
 | 
			
		||||
      "off": "\u0531\u0576\u057b\u0561\u057f\u0561\u056e",
 | 
			
		||||
      "on": "\u0544\u056b\u0561\u0581\u0561\u056e",
 | 
			
		||||
      "paused": "\u0534\u0561\u0564\u0561\u0580 \u0567",
 | 
			
		||||
      "playing": "\u053d\u0561\u0572\u0578\u0582\u0574",
 | 
			
		||||
      "standby": "\u054d\u057a\u0561\u057d\u0578\u0582\u0574"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "\u057f\u0578\u0582\u0576",
 | 
			
		||||
      "not_home": "\u0540\u0565\u057c\u0578\u0582"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "\u053c\u0561\u057e",
 | 
			
		||||
      "problem": "\u053d\u0576\u0564\u056b\u0580"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
 | 
			
		||||
      "on": "\u0544\u056b\u0561\u0581\u0561\u056e"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "\u0553\u0578\u0580\u0561\u0563\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
 | 
			
		||||
      "on": "\u0544\u056b\u0561\u0581\u0561\u056e"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "\u0531\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
 | 
			
		||||
      "on": "\u0574\u056b\u0561\u0581\u0561\u056e"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "\u0540\u0578\u0580\u056b\u0566\u0578\u0576\u056b \u057e\u0565\u0580\u0587\u0578\u0582\u0574",
 | 
			
		||||
      "below_horizon": "\u0540\u0578\u0580\u056b\u0566\u0578\u0576\u056b \u0576\u0565\u0580\u0584\u0587\u0578\u0582\u0574"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "\u0561\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
 | 
			
		||||
      "on": "\u0574\u056b\u0561\u0581\u0561\u056e"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "\u0561\u056f\u057f\u056b\u057e",
 | 
			
		||||
      "idle": "\u057a\u0561\u0580\u0561\u057a",
 | 
			
		||||
      "paused": "\u0564\u0561\u0564\u0561\u0580 "
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "\u0544\u0561\u0584\u0580\u0578\u0582\u0574",
 | 
			
		||||
      "docked": "\u053e\u0561\u056e\u056f\u057e\u0561\u056e",
 | 
			
		||||
      "error": "\u054d\u056d\u0561\u056c",
 | 
			
		||||
      "idle": "\u054a\u0561\u0580\u0561\u057a",
 | 
			
		||||
      "off": "\u0561\u0576\u057b\u0561\u057f\u057e\u0561\u056e",
 | 
			
		||||
      "on": "\u057e\u0580\u0561",
 | 
			
		||||
      "paused": "\u0534\u0561\u0564\u0561\u0580 \u0567",
 | 
			
		||||
      "returning": "\u054e\u0565\u0580\u0561\u0564\u0561\u057c\u0576\u0561\u056c\u0578\u057e \u0576\u0561\u057e\u0561\u0570\u0561\u0576\u0563\u056b\u057d\u057f"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "\u0544\u0561\u0584\u0580\u0565\u056c \u057d\u057f\u0578\u0582\u0563\u057e\u0561\u056e \u056b\u0580\u0565\u0580\u0568",
 | 
			
		||||
      "cloudy": "\u0531\u0574\u057a\u0561\u0574\u0561\u056e",
 | 
			
		||||
      "exceptional": "\u0532\u0561\u0581\u0561\u057c\u056b\u056f",
 | 
			
		||||
      "fog": "\u0544\u0561\u057c\u0561\u056d\u0578\u0582\u0572",
 | 
			
		||||
      "hail": "\u053f\u0561\u0580\u056f\u0578\u0582\u057f",
 | 
			
		||||
      "lightning": "\u053f\u0561\u0575\u056e\u0561\u056f",
 | 
			
		||||
      "lightning-rainy": "\u053f\u0561\u0575\u056e\u0561\u056f, \u0561\u0576\u0571\u0580\u0587",
 | 
			
		||||
      "partlycloudy": "\u0544\u0561\u057d\u0561\u0574\u0562 \u0561\u0574\u057a\u0561\u0574\u0561\u056e",
 | 
			
		||||
      "pouring": "\u053c\u0581\u0576\u0565\u056c",
 | 
			
		||||
      "rainy": "\u0531\u0576\u0571\u0580\u0587\u0578\u057f",
 | 
			
		||||
      "snowy": "\u0541\u0575\u0578\u0582\u0576\u0578\u057f \u0567",
 | 
			
		||||
      "snowy-rainy": "\u0541\u0575\u0578\u0582\u0576\u0561\u057c\u0561\u057f, \u0561\u0576\u0571\u0580\u0587\u0578\u057f",
 | 
			
		||||
      "sunny": "\u0531\u0580\u0587\u0578\u057f",
 | 
			
		||||
      "windy": "\u053f\u0561\u0574",
 | 
			
		||||
      "windy-variant": "\u0554\u0561\u0574\u0578\u057f"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "\u0544\u0565\u057c\u0561\u056e",
 | 
			
		||||
        "initializing": "\u0546\u0561\u056d\u0561\u0571\u0565\u057c\u0576\u0578\u0572",
 | 
			
		||||
        "ready": "\u054a\u0561\u057f\u0580\u0561\u057d\u057f \u0567",
 | 
			
		||||
        "sleeping": "\u0554\u0576\u0565\u056c"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "\u0544\u0561\u0570\u0561\u0581\u0561\u056e{query_stage})",
 | 
			
		||||
        "initializing": "\u0546\u0561\u056d\u0561\u0571\u0565\u057c\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576({query_stage})"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,255 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "Bersenjata",
 | 
			
		||||
      "armed_away": "Armed away",
 | 
			
		||||
      "armed_custom_bypass": "Armed custom bypass",
 | 
			
		||||
      "armed_home": "Armed home",
 | 
			
		||||
      "armed_night": "Armed night",
 | 
			
		||||
      "arming": "Mempersenjatai",
 | 
			
		||||
      "disarmed": "Dilucuti",
 | 
			
		||||
      "disarming": "Melucuti",
 | 
			
		||||
      "pending": "Tertunda",
 | 
			
		||||
      "triggered": "Terpicu"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "Off",
 | 
			
		||||
      "on": "On"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Rendah"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Dingin"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "Terputus",
 | 
			
		||||
        "on": "Terhubung"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "Off",
 | 
			
		||||
        "on": "On"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "Tertutup",
 | 
			
		||||
        "on": "Terbuka"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "Tertutup",
 | 
			
		||||
        "on": "Terbuka"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "Kosong",
 | 
			
		||||
        "on": "Terdeteksi"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Panas"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "Terkunci",
 | 
			
		||||
        "on": "Terbuka"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "Kering",
 | 
			
		||||
        "on": "Basah"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "Tidak ada",
 | 
			
		||||
        "on": "Terdeteksi"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "Tidak ada",
 | 
			
		||||
        "on": "Terdeteksi"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "Tertutup",
 | 
			
		||||
        "on": "Terbuka"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "Keluar",
 | 
			
		||||
        "on": "Rumah"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "Oke",
 | 
			
		||||
        "on": "Masalah"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "Aman",
 | 
			
		||||
        "on": "Tidak aman"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "Tidak ada",
 | 
			
		||||
        "on": "Terdeteksi"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "Tidak ada",
 | 
			
		||||
        "on": "Terdeteksi"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "Tidak ada",
 | 
			
		||||
        "on": "Terdeteksi"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "Tertutup",
 | 
			
		||||
        "on": "Terbuka"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "Off",
 | 
			
		||||
      "on": "On"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "Siaga",
 | 
			
		||||
      "recording": "Merekam",
 | 
			
		||||
      "streaming": "Streaming"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "Auto",
 | 
			
		||||
      "cool": "Sejuk",
 | 
			
		||||
      "dry": "Kering",
 | 
			
		||||
      "fan_only": "Hanya kipas",
 | 
			
		||||
      "heat": "Panas",
 | 
			
		||||
      "heat_cool": "Panas/Dingin",
 | 
			
		||||
      "off": "Off"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "Konfigurasi",
 | 
			
		||||
      "configured": "Terkonfigurasi"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "Tertutup",
 | 
			
		||||
      "closing": "Menutup",
 | 
			
		||||
      "open": "Buka",
 | 
			
		||||
      "opening": "Membuka",
 | 
			
		||||
      "stopped": "Terhenti"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "Off",
 | 
			
		||||
      "on": "On",
 | 
			
		||||
      "unavailable": "Tidak tersedia",
 | 
			
		||||
      "unknown": "Tidak diketahui"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "Rumah",
 | 
			
		||||
      "not_home": "Keluar"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "Off",
 | 
			
		||||
      "on": "On"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "Tertutup",
 | 
			
		||||
      "closing": "Menutup",
 | 
			
		||||
      "home": "Rumah",
 | 
			
		||||
      "locked": "Terkunci",
 | 
			
		||||
      "not_home": "Keluar",
 | 
			
		||||
      "off": "Off",
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "on": "On",
 | 
			
		||||
      "open": "Terbuka",
 | 
			
		||||
      "opening": "Membuka",
 | 
			
		||||
      "problem": "Masalah",
 | 
			
		||||
      "stopped": "Tertutup",
 | 
			
		||||
      "unlocked": "Terbuka"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "Off",
 | 
			
		||||
      "on": "On"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "Off",
 | 
			
		||||
      "on": "On"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "Terkunci",
 | 
			
		||||
      "unlocked": "Terbuka"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "Diam",
 | 
			
		||||
      "off": "Off",
 | 
			
		||||
      "on": "On",
 | 
			
		||||
      "paused": "Jeda",
 | 
			
		||||
      "playing": "Memainkan",
 | 
			
		||||
      "standby": "Siaga"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "Di rumah",
 | 
			
		||||
      "not_home": "Keluar"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "problem": "Masalah"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "Off",
 | 
			
		||||
      "on": "On"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "Scening"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "Off",
 | 
			
		||||
      "on": "On"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "Off",
 | 
			
		||||
      "on": "On"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "Terbit",
 | 
			
		||||
      "below_horizon": "Tenggelam"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "Off",
 | 
			
		||||
      "on": "On"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "Aktif",
 | 
			
		||||
      "idle": "Siaga",
 | 
			
		||||
      "paused": "Jeda"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "Membersihkan",
 | 
			
		||||
      "docked": "Berlabuh",
 | 
			
		||||
      "error": "Kesalahan",
 | 
			
		||||
      "idle": "Siaga",
 | 
			
		||||
      "off": "Padam",
 | 
			
		||||
      "on": "Nyala",
 | 
			
		||||
      "paused": "Dijeda",
 | 
			
		||||
      "returning": "Kembali ke dock"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "Cerah, malam",
 | 
			
		||||
      "cloudy": "Berawan",
 | 
			
		||||
      "exceptional": "Luar biasa",
 | 
			
		||||
      "fog": "Kabut",
 | 
			
		||||
      "hail": "Hujan es",
 | 
			
		||||
      "lightning": "Petir",
 | 
			
		||||
      "lightning-rainy": "Petir, hujan",
 | 
			
		||||
      "partlycloudy": "Sebagian berawan",
 | 
			
		||||
      "pouring": "Hujan lebat",
 | 
			
		||||
      "rainy": "Hujan",
 | 
			
		||||
      "snowy": "Bersalju",
 | 
			
		||||
      "snowy-rainy": "Bersalju, hujan",
 | 
			
		||||
      "sunny": "Cerah",
 | 
			
		||||
      "windy": "Berangin",
 | 
			
		||||
      "windy-variant": "Berangin"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "Mati",
 | 
			
		||||
        "initializing": "Inisialisasi",
 | 
			
		||||
        "ready": "Siap",
 | 
			
		||||
        "sleeping": "Tidur"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "Mati ({query_stage})",
 | 
			
		||||
        "initializing": "Inisialisasi ( {query_stage} )"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,246 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "\u00c1 ver\u00f0i",
 | 
			
		||||
      "armed_away": "\u00c1 ver\u00f0i \u00fati",
 | 
			
		||||
      "armed_home": "\u00c1 ver\u00f0i heima",
 | 
			
		||||
      "armed_night": "\u00c1 ver\u00f0i n\u00f3tt",
 | 
			
		||||
      "arming": "Set \u00e1 v\u00f6r\u00f0",
 | 
			
		||||
      "disarmed": "ekki \u00e1 ver\u00f0i",
 | 
			
		||||
      "disarming": "tek af ver\u00f0i",
 | 
			
		||||
      "pending": "B\u00ed\u00f0ur",
 | 
			
		||||
      "triggered": "R\u00e6st"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "\u00d3virk",
 | 
			
		||||
      "on": "Virk"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "Venjulegt",
 | 
			
		||||
        "on": "L\u00e1gt"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "Venjulegt",
 | 
			
		||||
        "on": "Kalt"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "Aftengdur",
 | 
			
		||||
        "on": "Tengdur"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "Sl\u00f6kkt",
 | 
			
		||||
        "on": "Kveikt"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "Loku\u00f0",
 | 
			
		||||
        "on": "Opin"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "Loku\u00f0",
 | 
			
		||||
        "on": "Opin"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "Hreinsa",
 | 
			
		||||
        "on": "Uppg\u00f6tva\u00f0"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "Venjulegt",
 | 
			
		||||
        "on": "Heitt"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "L\u00e6st",
 | 
			
		||||
        "on": "Afl\u00e6st"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "\u00deurrt",
 | 
			
		||||
        "on": "Blautt"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "Engin hreyfing",
 | 
			
		||||
        "on": "Hreyfing"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "Hreinsa",
 | 
			
		||||
        "on": "Uppg\u00f6tva\u00f0"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "Fjarverandi",
 | 
			
		||||
        "on": "Heima"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "\u00cd lagi",
 | 
			
		||||
        "on": "Vandam\u00e1l"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "\u00d6ruggt",
 | 
			
		||||
        "on": "\u00d3\u00f6ruggt"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "Hreinsa",
 | 
			
		||||
        "on": "Uppg\u00f6tva\u00f0"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "Hreinsa",
 | 
			
		||||
        "on": "Uppg\u00f6tva\u00f0"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "on": "Uppg\u00f6tva\u00f0"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "Loka",
 | 
			
		||||
        "on": "Opna"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "\u00d3virkt",
 | 
			
		||||
      "on": "Virkt"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "A\u00f0ger\u00f0alaus",
 | 
			
		||||
      "recording": "\u00cd uppt\u00f6ku",
 | 
			
		||||
      "streaming": "Streymi"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "Sj\u00e1lfvirkt",
 | 
			
		||||
      "cool": "K\u00e6ling",
 | 
			
		||||
      "dry": "\u00deurrt",
 | 
			
		||||
      "fan_only": "Vifta eing\u00f6ngu",
 | 
			
		||||
      "heat": "Hitun",
 | 
			
		||||
      "heat_cool": "Hita/K\u00e6la",
 | 
			
		||||
      "off": "Sl\u00f6kkt"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "Stilli",
 | 
			
		||||
      "configured": "Stillt"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "Loka\u00f0",
 | 
			
		||||
      "closing": "Loka",
 | 
			
		||||
      "open": "Opin",
 | 
			
		||||
      "opening": "Opna",
 | 
			
		||||
      "stopped": "St\u00f6\u00f0vu\u00f0"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "Af",
 | 
			
		||||
      "on": "\u00c1",
 | 
			
		||||
      "unavailable": "Ekki tilt\u00e6kt",
 | 
			
		||||
      "unknown": "\u00d3\u00feekkt"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "Heima",
 | 
			
		||||
      "not_home": "Fjarverandi"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "Sl\u00f6kkt",
 | 
			
		||||
      "on": "\u00cd gangi"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "Loku\u00f0",
 | 
			
		||||
      "closing": "Loka",
 | 
			
		||||
      "home": "Heima",
 | 
			
		||||
      "locked": "L\u00e6st",
 | 
			
		||||
      "not_home": "Fjarverandi",
 | 
			
		||||
      "off": "\u00d3virkur",
 | 
			
		||||
      "ok": "\u00cd lagi",
 | 
			
		||||
      "on": "Virkur",
 | 
			
		||||
      "open": "Opin",
 | 
			
		||||
      "opening": "Opna",
 | 
			
		||||
      "problem": "Vandam\u00e1l",
 | 
			
		||||
      "stopped": "St\u00f6\u00f0va\u00f0",
 | 
			
		||||
      "unlocked": "Afl\u00e6st"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "Af",
 | 
			
		||||
      "on": "\u00c1"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "Sl\u00f6kkt",
 | 
			
		||||
      "on": "Kveikt"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "L\u00e6st",
 | 
			
		||||
      "unlocked": "Afl\u00e6st"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "A\u00f0ger\u00f0alaus",
 | 
			
		||||
      "off": "Sl\u00f6kkt",
 | 
			
		||||
      "on": "\u00ed gangi",
 | 
			
		||||
      "paused": "\u00cd bi\u00f0",
 | 
			
		||||
      "playing": "Spila",
 | 
			
		||||
      "standby": "Bi\u00f0sta\u00f0a"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "Heima",
 | 
			
		||||
      "not_home": "Fjarverandi"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "\u00cd lagi",
 | 
			
		||||
      "problem": "Vandam\u00e1l"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "\u00d3virk",
 | 
			
		||||
      "on": "Virk"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "\u00d3virkt",
 | 
			
		||||
      "on": "Virkt"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "Af",
 | 
			
		||||
      "on": "\u00c1"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "Yfir sj\u00f3ndeildarhring",
 | 
			
		||||
      "below_horizon": "Undir sj\u00f3ndeildarhring"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "Sl\u00f6kkt",
 | 
			
		||||
      "on": "Kveikt"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "virkur",
 | 
			
		||||
      "idle": "a\u00f0ger\u00f0alaus",
 | 
			
		||||
      "paused": "\u00ed bi\u00f0"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "A\u00f0 ryksuga",
 | 
			
		||||
      "docked": "\u00ed tengikv\u00ed",
 | 
			
		||||
      "error": "Villa",
 | 
			
		||||
      "idle": "A\u00f0ger\u00f0alaus",
 | 
			
		||||
      "off": "Sl\u00f6kkt",
 | 
			
		||||
      "on": "\u00cd gangi",
 | 
			
		||||
      "paused": "\u00cd bi\u00f0",
 | 
			
		||||
      "returning": "\u00c1 lei\u00f0 tilbaka \u00ed tengikv\u00ed"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "Hei\u00f0sk\u00fdrt, n\u00f3tt",
 | 
			
		||||
      "cloudy": "Sk\u00fdja\u00f0",
 | 
			
		||||
      "exceptional": "Mj\u00f6g gott",
 | 
			
		||||
      "fog": "\u00deoka",
 | 
			
		||||
      "hail": "Hagl\u00e9l",
 | 
			
		||||
      "lightning": "Eldingar",
 | 
			
		||||
      "lightning-rainy": "Eldingar, rigning",
 | 
			
		||||
      "partlycloudy": "A\u00f0 hluta til sk\u00fdja\u00f0",
 | 
			
		||||
      "pouring": "\u00darhelli",
 | 
			
		||||
      "rainy": "Rigning",
 | 
			
		||||
      "snowy": "Snj\u00f3koma",
 | 
			
		||||
      "snowy-rainy": "Slydda",
 | 
			
		||||
      "sunny": "S\u00f3lskin",
 | 
			
		||||
      "windy": "Vindasamt",
 | 
			
		||||
      "windy-variant": "Vindasamt"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "Dau\u00f0ur",
 | 
			
		||||
        "initializing": "Frumstilli",
 | 
			
		||||
        "ready": "Tilb\u00fainn",
 | 
			
		||||
        "sleeping": "\u00cd dvala"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "Dau\u00f0ur ({query_stage})",
 | 
			
		||||
        "initializing": "Frumstilli ({query_stage})"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,255 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "Attivo",
 | 
			
		||||
      "armed_away": "Attivo fuori casa",
 | 
			
		||||
      "armed_custom_bypass": "Attivo con bypass",
 | 
			
		||||
      "armed_home": "Attivo in casa",
 | 
			
		||||
      "armed_night": "Attivo Notte",
 | 
			
		||||
      "arming": "In attivazione",
 | 
			
		||||
      "disarmed": "Disattivo",
 | 
			
		||||
      "disarming": "In disattivazione",
 | 
			
		||||
      "pending": "In sospeso",
 | 
			
		||||
      "triggered": "Attivato"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "Spento",
 | 
			
		||||
      "on": "Acceso"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "Normale",
 | 
			
		||||
        "on": "Basso"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "Normale",
 | 
			
		||||
        "on": "Freddo"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "Disconnesso",
 | 
			
		||||
        "on": "Connesso"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "Spento",
 | 
			
		||||
        "on": "Acceso"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "Chiusa",
 | 
			
		||||
        "on": "Aperta"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "Chiusa",
 | 
			
		||||
        "on": "Aperta"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "Assente",
 | 
			
		||||
        "on": "Rilevato"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "Normale",
 | 
			
		||||
        "on": "Caldo"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "Bloccato",
 | 
			
		||||
        "on": "Sbloccato"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "Asciutto",
 | 
			
		||||
        "on": "Bagnato"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "Assente",
 | 
			
		||||
        "on": "Rilevato"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "Vuoto",
 | 
			
		||||
        "on": "Rilevato"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "Chiuso",
 | 
			
		||||
        "on": "Aperta"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "Fuori casa",
 | 
			
		||||
        "on": "A casa"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "OK",
 | 
			
		||||
        "on": "Problema"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "Sicuro",
 | 
			
		||||
        "on": "Non Sicuro"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "Assente",
 | 
			
		||||
        "on": "Rilevato"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "Assente",
 | 
			
		||||
        "on": "Rilevato"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "Assente",
 | 
			
		||||
        "on": "Rilevata"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "Chiusa",
 | 
			
		||||
        "on": "Aperta"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "Disattivo",
 | 
			
		||||
      "on": "Attivo"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "Inattiva",
 | 
			
		||||
      "recording": "In registrazione",
 | 
			
		||||
      "streaming": "Streaming"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "Auto",
 | 
			
		||||
      "cool": "Freddo",
 | 
			
		||||
      "dry": "Secco",
 | 
			
		||||
      "fan_only": "Solo ventilatore",
 | 
			
		||||
      "heat": "Caldo",
 | 
			
		||||
      "heat_cool": "Caldo/Freddo",
 | 
			
		||||
      "off": "Spento"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "Configura",
 | 
			
		||||
      "configured": "Configurato"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "Chiuso",
 | 
			
		||||
      "closing": "In chiusura",
 | 
			
		||||
      "open": "Aperto",
 | 
			
		||||
      "opening": "In apertura",
 | 
			
		||||
      "stopped": "Arrestato"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "Spento",
 | 
			
		||||
      "on": "Acceso",
 | 
			
		||||
      "unavailable": "Non disponibile",
 | 
			
		||||
      "unknown": "Sconosciuto"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "A casa",
 | 
			
		||||
      "not_home": "Fuori casa"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "Spento",
 | 
			
		||||
      "on": "Acceso"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "Chiuso",
 | 
			
		||||
      "closing": "Chiusura",
 | 
			
		||||
      "home": "A casa",
 | 
			
		||||
      "locked": "Bloccato",
 | 
			
		||||
      "not_home": "Fuori casa",
 | 
			
		||||
      "off": "Spento",
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "on": "Acceso",
 | 
			
		||||
      "open": "Aperto",
 | 
			
		||||
      "opening": "Apertura",
 | 
			
		||||
      "problem": "Problema",
 | 
			
		||||
      "stopped": "Fermato",
 | 
			
		||||
      "unlocked": "Sbloccato"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "Spento",
 | 
			
		||||
      "on": "Acceso"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "Spento",
 | 
			
		||||
      "on": "Acceso"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "Bloccato",
 | 
			
		||||
      "unlocked": "Sbloccato"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "Inattivo",
 | 
			
		||||
      "off": "Spento",
 | 
			
		||||
      "on": "Acceso",
 | 
			
		||||
      "paused": "In pausa",
 | 
			
		||||
      "playing": "In riproduzione",
 | 
			
		||||
      "standby": "Pausa"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "A casa",
 | 
			
		||||
      "not_home": "Fuori casa"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "problem": "Problema"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "Spento",
 | 
			
		||||
      "on": "Acceso"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "Sceneggiando"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "Spento",
 | 
			
		||||
      "on": "Acceso"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "Spento",
 | 
			
		||||
      "on": "Acceso"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "Sopra l'orizzonte",
 | 
			
		||||
      "below_horizon": "Sotto l'orizzonte"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "Spento",
 | 
			
		||||
      "on": "Acceso"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "attivo",
 | 
			
		||||
      "idle": "inattivo",
 | 
			
		||||
      "paused": "in pausa"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "Pulendo",
 | 
			
		||||
      "docked": "In base",
 | 
			
		||||
      "error": "Errore",
 | 
			
		||||
      "idle": "Inattivo",
 | 
			
		||||
      "off": "Spento",
 | 
			
		||||
      "on": "Acceso",
 | 
			
		||||
      "paused": "In pausa",
 | 
			
		||||
      "returning": "Ritorno alla base"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "Sereno, notte",
 | 
			
		||||
      "cloudy": "Nuvoloso",
 | 
			
		||||
      "exceptional": "Eccezionale",
 | 
			
		||||
      "fog": "Nebbia",
 | 
			
		||||
      "hail": "Grandine",
 | 
			
		||||
      "lightning": "Temporale",
 | 
			
		||||
      "lightning-rainy": "Temporale, piovoso",
 | 
			
		||||
      "partlycloudy": "Parzialmente nuvoloso",
 | 
			
		||||
      "pouring": "Piogge intense",
 | 
			
		||||
      "rainy": "Piovoso",
 | 
			
		||||
      "snowy": "Nevoso",
 | 
			
		||||
      "snowy-rainy": "Nevoso, piovoso",
 | 
			
		||||
      "sunny": "Soleggiato",
 | 
			
		||||
      "windy": "Ventoso",
 | 
			
		||||
      "windy-variant": "Ventoso"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "Disattivo",
 | 
			
		||||
        "initializing": "Avvio",
 | 
			
		||||
        "ready": "Pronto",
 | 
			
		||||
        "sleeping": "In attesa"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "Disattivo ({query_stage})",
 | 
			
		||||
        "initializing": "Avvio ({query_stage})"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,207 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "triggered": "\u30c8\u30ea\u30ac\u30fc"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "\u30aa\u30d5",
 | 
			
		||||
      "on": "\u30aa\u30f3"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "\u901a\u5e38",
 | 
			
		||||
        "on": "\u4f4e"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "\u901a\u5e38",
 | 
			
		||||
        "on": "\u4f4e\u6e29"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "\u5207\u65ad",
 | 
			
		||||
        "on": "\u63a5\u7d9a\u6e08"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "\u30aa\u30d5",
 | 
			
		||||
        "on": "\u30aa\u30f3"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "\u9589\u9396",
 | 
			
		||||
        "on": "\u958b\u653e"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "\u9589\u9396",
 | 
			
		||||
        "on": "\u958b\u653e"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "\u672a\u691c\u51fa",
 | 
			
		||||
        "on": "\u691c\u51fa"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "\u6b63\u5e38",
 | 
			
		||||
        "on": "\u9ad8\u6e29"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "\u30ed\u30c3\u30af\u3055\u308c\u307e\u3057\u305f",
 | 
			
		||||
        "on": "\u30ed\u30c3\u30af\u3055\u308c\u3066\u3044\u307e\u305b\u3093"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "\u30c9\u30e9\u30a4",
 | 
			
		||||
        "on": "\u30a6\u30a7\u30c3\u30c8"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "\u672a\u691c\u51fa",
 | 
			
		||||
        "on": "\u691c\u51fa"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "\u672a\u691c\u51fa",
 | 
			
		||||
        "on": "\u691c\u51fa"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "\u9589\u9396",
 | 
			
		||||
        "on": "\u958b\u653e"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "\u5916\u51fa",
 | 
			
		||||
        "on": "\u5728\u5b85"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "OK"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "\u5b89\u5168",
 | 
			
		||||
        "on": "\u5371\u967a"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "\u672a\u691c\u51fa",
 | 
			
		||||
        "on": "\u691c\u51fa"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "\u672a\u691c\u51fa",
 | 
			
		||||
        "on": "\u691c\u51fa"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "\u672a\u691c\u51fa",
 | 
			
		||||
        "on": "\u691c\u51fa"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "\u9589\u9396",
 | 
			
		||||
        "on": "\u958b\u653e"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "\u30aa\u30d5",
 | 
			
		||||
      "on": "\u30aa\u30f3"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "\u30a2\u30a4\u30c9\u30eb"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "\u30aa\u30fc\u30c8",
 | 
			
		||||
      "cool": "\u51b7\u623f",
 | 
			
		||||
      "dry": "\u30c9\u30e9\u30a4",
 | 
			
		||||
      "fan_only": "\u30d5\u30a1\u30f3\u306e\u307f",
 | 
			
		||||
      "heat": "\u6696\u623f",
 | 
			
		||||
      "off": "\u30aa\u30d5"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "\u8a2d\u5b9a",
 | 
			
		||||
      "configured": "\u8a2d\u5b9a\u6e08\u307f"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "\u9589\u9396",
 | 
			
		||||
      "opening": "\u6249"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "\u30aa\u30d5",
 | 
			
		||||
      "on": "\u30aa\u30f3",
 | 
			
		||||
      "unavailable": "\u5229\u7528\u4e0d\u53ef",
 | 
			
		||||
      "unknown": "\u4e0d\u660e"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "\u5728\u5b85",
 | 
			
		||||
      "not_home": "\u5916\u51fa"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "\u30aa\u30d5",
 | 
			
		||||
      "on": "\u30aa\u30f3"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "\u9589\u9396",
 | 
			
		||||
      "home": "\u5728\u5b85",
 | 
			
		||||
      "locked": "\u30ed\u30c3\u30af\u3055\u308c\u307e\u3057\u305f",
 | 
			
		||||
      "not_home": "\u5916\u51fa",
 | 
			
		||||
      "off": "\u30aa\u30d5",
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "on": "\u30aa\u30f3",
 | 
			
		||||
      "opening": "\u6249"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "\u30aa\u30d5",
 | 
			
		||||
      "on": "\u30aa\u30f3"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "\u30aa\u30d5",
 | 
			
		||||
      "on": "\u30aa\u30f3"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "\u30a2\u30a4\u30c9\u30eb",
 | 
			
		||||
      "off": "\u30aa\u30d5",
 | 
			
		||||
      "on": "\u30aa\u30f3",
 | 
			
		||||
      "paused": "\u4e00\u6642\u505c\u6b62",
 | 
			
		||||
      "playing": "\u518d\u751f\u4e2d"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "\u5728\u5b85",
 | 
			
		||||
      "not_home": "\u5916\u51fa"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "OK"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "\u30aa\u30d5",
 | 
			
		||||
      "on": "\u30aa\u30f3"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "\u30aa\u30d5",
 | 
			
		||||
      "on": "\u30aa\u30f3"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "\u30aa\u30d5",
 | 
			
		||||
      "on": "\u30aa\u30f3"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "\u5730\u5e73\u7dda\u306e\u4e0a",
 | 
			
		||||
      "below_horizon": "\u5730\u5e73\u7dda\u3088\u308a\u4e0b"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "\u30aa\u30d5",
 | 
			
		||||
      "on": "\u30aa\u30f3"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "\u6674\u308c\u305f\u591c",
 | 
			
		||||
      "cloudy": "\u66c7\u308a",
 | 
			
		||||
      "fog": "\u9727",
 | 
			
		||||
      "hail": "\u96f9",
 | 
			
		||||
      "lightning": "\u96f7",
 | 
			
		||||
      "lightning-rainy": "\u96f7\u96e8",
 | 
			
		||||
      "partlycloudy": "\u6674\u308c\u6642\u3005\u66c7\u308a",
 | 
			
		||||
      "pouring": "\u5927\u96e8",
 | 
			
		||||
      "rainy": "\u96e8",
 | 
			
		||||
      "snowy": "\u96ea",
 | 
			
		||||
      "snowy-rainy": "\u307f\u305e\u308c",
 | 
			
		||||
      "sunny": "\u6674\u308c",
 | 
			
		||||
      "windy": "\u5f37\u98a8"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "initializing": "\u521d\u671f\u5316\u4e2d",
 | 
			
		||||
        "ready": "\u6e96\u5099\u5b8c\u4e86",
 | 
			
		||||
        "sleeping": "\u30b9\u30ea\u30fc\u30d7"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": " ({query_stage})",
 | 
			
		||||
        "initializing": "\u521d\u671f\u5316\u4e2d ( {query_stage} )"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,255 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "\uacbd\ube44\uc911",
 | 
			
		||||
      "armed_away": "\uacbd\ube44\uc911(\uc678\ucd9c)",
 | 
			
		||||
      "armed_custom_bypass": "\uacbd\ube44\uc911(\uc0ac\uc6a9\uc790 \uc6b0\ud68c)",
 | 
			
		||||
      "armed_home": "\uacbd\ube44\uc911(\uc7ac\uc2e4)",
 | 
			
		||||
      "armed_night": "\uacbd\ube44\uc911(\uc57c\uac04)",
 | 
			
		||||
      "arming": "\uacbd\ube44\uc911",
 | 
			
		||||
      "disarmed": "\ud574\uc81c\ub428",
 | 
			
		||||
      "disarming": "\ud574\uc81c\uc911",
 | 
			
		||||
      "pending": "\ubcf4\ub958\uc911",
 | 
			
		||||
      "triggered": "\uc791\ub3d9\ub428"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "\uaebc\uc9d0",
 | 
			
		||||
      "on": "\ucf1c\uc9d0"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "\ubcf4\ud1b5",
 | 
			
		||||
        "on": "\ub0ae\uc74c"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "\ubcf4\ud1b5",
 | 
			
		||||
        "on": "\uc800\uc628"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "\uc5f0\uacb0\ud574\uc81c\ub428",
 | 
			
		||||
        "on": "\uc5f0\uacb0\ub428"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "\uaebc\uc9d0",
 | 
			
		||||
        "on": "\ucf1c\uc9d0"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "\ub2eb\ud798",
 | 
			
		||||
        "on": "\uc5f4\ub9bc"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "\ub2eb\ud798",
 | 
			
		||||
        "on": "\uc5f4\ub9bc"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "\uc774\uc0c1\uc5c6\uc74c",
 | 
			
		||||
        "on": "\uac10\uc9c0\ub428"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "\ubcf4\ud1b5",
 | 
			
		||||
        "on": "\uace0\uc628"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "\uc7a0\uae40",
 | 
			
		||||
        "on": "\ud574\uc81c"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "\uac74\uc870\ud568",
 | 
			
		||||
        "on": "\uc2b5\ud568"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "\uc774\uc0c1\uc5c6\uc74c",
 | 
			
		||||
        "on": "\uac10\uc9c0\ub428"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "\uc774\uc0c1\uc5c6\uc74c",
 | 
			
		||||
        "on": "\uac10\uc9c0\ub428"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "\ub2eb\ud798",
 | 
			
		||||
        "on": "\uc5f4\ub9bc"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "\uc678\ucd9c",
 | 
			
		||||
        "on": "\uc7ac\uc2e4"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "\ubb38\uc81c\uc5c6\uc74c",
 | 
			
		||||
        "on": "\ubb38\uc81c\uc788\uc74c"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "\uc548\uc804",
 | 
			
		||||
        "on": "\uc704\ud5d8"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "\uc774\uc0c1\uc5c6\uc74c",
 | 
			
		||||
        "on": "\uac10\uc9c0\ub428"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "\uc774\uc0c1\uc5c6\uc74c",
 | 
			
		||||
        "on": "\uac10\uc9c0\ub428"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "\uc774\uc0c1\uc5c6\uc74c",
 | 
			
		||||
        "on": "\uac10\uc9c0\ub428"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "\ub2eb\ud798",
 | 
			
		||||
        "on": "\uc5f4\ub9bc"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "\uaebc\uc9d0",
 | 
			
		||||
      "on": "\ucf1c\uc9d0"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "\ub300\uae30\uc911",
 | 
			
		||||
      "recording": "\ub179\ud654\uc911",
 | 
			
		||||
      "streaming": "\uc2a4\ud2b8\ub9ac\ubc0d"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "\uc790\ub3d9",
 | 
			
		||||
      "cool": "\ub0c9\ubc29",
 | 
			
		||||
      "dry": "\uc81c\uc2b5",
 | 
			
		||||
      "fan_only": "\uc1a1\ud48d",
 | 
			
		||||
      "heat": "\ub09c\ubc29",
 | 
			
		||||
      "heat_cool": "\ub0c9\ub09c\ubc29",
 | 
			
		||||
      "off": "\uaebc\uc9d0"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "\uc124\uc815",
 | 
			
		||||
      "configured": "\uc124\uc815\ub428"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "\ub2eb\ud798",
 | 
			
		||||
      "closing": "\ub2eb\ub294\uc911",
 | 
			
		||||
      "open": "\uc5f4\ub9bc",
 | 
			
		||||
      "opening": "\uc5ec\ub294\uc911",
 | 
			
		||||
      "stopped": "\uba48\ucda4"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "\uaebc\uc9d0",
 | 
			
		||||
      "on": "\ucf1c\uc9d0",
 | 
			
		||||
      "unavailable": "\uc0ac\uc6a9\ubd88\uac00",
 | 
			
		||||
      "unknown": "\uc54c\uc218\uc5c6\uc74c"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "\uc7ac\uc2e4",
 | 
			
		||||
      "not_home": "\uc678\ucd9c"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "\uaebc\uc9d0",
 | 
			
		||||
      "on": "\ucf1c\uc9d0"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "\ub2eb\ud798",
 | 
			
		||||
      "closing": "\ub2eb\ub294\uc911",
 | 
			
		||||
      "home": "\uc7ac\uc2e4",
 | 
			
		||||
      "locked": "\uc7a0\uae40",
 | 
			
		||||
      "not_home": "\uc678\ucd9c",
 | 
			
		||||
      "off": "\uaebc\uc9d0",
 | 
			
		||||
      "ok": "\ubb38\uc81c\uc5c6\uc74c",
 | 
			
		||||
      "on": "\ucf1c\uc9d0",
 | 
			
		||||
      "open": "\uc5f4\ub9bc",
 | 
			
		||||
      "opening": "\uc5ec\ub294\uc911",
 | 
			
		||||
      "problem": "\ubb38\uc81c\uc788\uc74c",
 | 
			
		||||
      "stopped": "\uba48\ucda4",
 | 
			
		||||
      "unlocked": "\ud574\uc81c"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "\uaebc\uc9d0",
 | 
			
		||||
      "on": "\ucf1c\uc9d0"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "\uaebc\uc9d0",
 | 
			
		||||
      "on": "\ucf1c\uc9d0"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "\uc7a0\uae40",
 | 
			
		||||
      "unlocked": "\ud574\uc81c"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "\ub300\uae30\uc911",
 | 
			
		||||
      "off": "\uaebc\uc9d0",
 | 
			
		||||
      "on": "\ucf1c\uc9d0",
 | 
			
		||||
      "paused": "\uc77c\uc2dc\uc911\uc9c0",
 | 
			
		||||
      "playing": "\uc7ac\uc0dd\uc911",
 | 
			
		||||
      "standby": "\uc900\ube44\uc911"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "\uc7ac\uc2e4",
 | 
			
		||||
      "not_home": "\uc678\ucd9c"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "\ubb38\uc81c\uc5c6\uc74c",
 | 
			
		||||
      "problem": "\ubb38\uc81c\uc788\uc74c"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "\uaebc\uc9d0",
 | 
			
		||||
      "on": "\ucf1c\uc9d0"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "\uc52c \uad6c\uc131\uc911"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "\uaebc\uc9d0",
 | 
			
		||||
      "on": "\ucf1c\uc9d0"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "\uaebc\uc9d0",
 | 
			
		||||
      "on": "\ucf1c\uc9d0"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "\uc8fc\uac04",
 | 
			
		||||
      "below_horizon": "\uc57c\uac04"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "\uaebc\uc9d0",
 | 
			
		||||
      "on": "\ucf1c\uc9d0"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "\ud65c\uc131\ud654",
 | 
			
		||||
      "idle": "\ub300\uae30\uc911",
 | 
			
		||||
      "paused": "\uc77c\uc2dc\uc911\uc9c0\ub428"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "\uccad\uc18c\uc911",
 | 
			
		||||
      "docked": "\ucda9\uc804\uc911",
 | 
			
		||||
      "error": "\uc791\ub3d9 \uc624\ub958",
 | 
			
		||||
      "idle": "\ub300\uae30\uc911",
 | 
			
		||||
      "off": "\uaebc\uc9d0",
 | 
			
		||||
      "on": "\ucf1c\uc9d0",
 | 
			
		||||
      "paused": "\uc77c\uc2dc\uc911\uc9c0\ub428",
 | 
			
		||||
      "returning": "\ucda9\uc804 \ubcf5\uadc0 \uc911"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "\ub9d1\uc74c (\ubc24)",
 | 
			
		||||
      "cloudy": "\ud750\ub9bc",
 | 
			
		||||
      "exceptional": "\uc608\uc678\uc0ac\ud56d",
 | 
			
		||||
      "fog": "\uc548\uac1c",
 | 
			
		||||
      "hail": "\uc6b0\ubc15",
 | 
			
		||||
      "lightning": "\ubc88\uac1c",
 | 
			
		||||
      "lightning-rainy": "\ub1cc\uc6b0",
 | 
			
		||||
      "partlycloudy": "\ub300\uccb4\ub85c \ud750\ub9bc",
 | 
			
		||||
      "pouring": "\ud638\uc6b0",
 | 
			
		||||
      "rainy": "\ube44",
 | 
			
		||||
      "snowy": "\ub208",
 | 
			
		||||
      "snowy-rainy": "\uc9c4\ub208\uac1c\ube44",
 | 
			
		||||
      "sunny": "\ub9d1\uc74c",
 | 
			
		||||
      "windy": "\ubc14\ub78c",
 | 
			
		||||
      "windy-variant": "\ubc14\ub78c"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "\uc751\ub2f5\uc5c6\uc74c",
 | 
			
		||||
        "initializing": "\ucd08\uae30\ud654\uc911",
 | 
			
		||||
        "ready": "\uc900\ube44",
 | 
			
		||||
        "sleeping": "\uc808\uc804\ubaa8\ub4dc"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "\uc751\ub2f5\uc5c6\uc74c ({query_stage})",
 | 
			
		||||
        "initializing": "\ucd08\uae30\ud654\uc911 ({query_stage})"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,255 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "Aktiv\u00e9iert",
 | 
			
		||||
      "armed_away": "Aktiv\u00e9iert \u00cbnnerwee",
 | 
			
		||||
      "armed_custom_bypass": "Aktiv, Benotzerdefin\u00e9iert",
 | 
			
		||||
      "armed_home": "Aktiv\u00e9iert Doheem",
 | 
			
		||||
      "armed_night": "Aktiv\u00e9iert Nuecht",
 | 
			
		||||
      "arming": "Aktiv\u00e9ieren",
 | 
			
		||||
      "disarmed": "Desaktiv\u00e9iert",
 | 
			
		||||
      "disarming": "Desaktiv\u00e9ieren",
 | 
			
		||||
      "pending": "Ustoend",
 | 
			
		||||
      "triggered": "Ausgel\u00e9ist"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "Un"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Niddreg"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Kal"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "Net Verbonnen",
 | 
			
		||||
        "on": "Verbonnen"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "Aus",
 | 
			
		||||
        "on": "Un"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "Zou",
 | 
			
		||||
        "on": "Op"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "Zou",
 | 
			
		||||
        "on": "Op"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "Kloer",
 | 
			
		||||
        "on": "Detekt\u00e9iert"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Waarm"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "Gespaart",
 | 
			
		||||
        "on": "Net gespaart"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "Dr\u00e9chen",
 | 
			
		||||
        "on": "Naass"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "Roueg",
 | 
			
		||||
        "on": "Detekt\u00e9iert"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "Roueg",
 | 
			
		||||
        "on": "Detekt\u00e9iert"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "Zou",
 | 
			
		||||
        "on": "Op"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "\u00cbnnerwee",
 | 
			
		||||
        "on": "Doheem"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "OK",
 | 
			
		||||
        "on": "Problem"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "S\u00e9cher",
 | 
			
		||||
        "on": "Ons\u00e9cher"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "Kloer",
 | 
			
		||||
        "on": "Detekt\u00e9iert"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "Roueg",
 | 
			
		||||
        "on": "Detekt\u00e9iert"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "Kloer",
 | 
			
		||||
        "on": "Detekt\u00e9iert"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "Zou",
 | 
			
		||||
        "on": "Op"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "Un"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "Roueg",
 | 
			
		||||
      "recording": "H\u00eblt Op",
 | 
			
		||||
      "streaming": "Streamt"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "Auto",
 | 
			
		||||
      "cool": "Kill",
 | 
			
		||||
      "dry": "Dr\u00e9chen",
 | 
			
		||||
      "fan_only": "N\u00ebmme Ventilator",
 | 
			
		||||
      "heat": "Heizen",
 | 
			
		||||
      "heat_cool": "H\u00ebtzen/Ofkillen",
 | 
			
		||||
      "off": "Aus"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "Astellen",
 | 
			
		||||
      "configured": "Agestallt"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "Zou",
 | 
			
		||||
      "closing": "G\u00ebtt zougemaach",
 | 
			
		||||
      "open": "Op",
 | 
			
		||||
      "opening": "G\u00ebtt opgemaach",
 | 
			
		||||
      "stopped": "Gestoppt"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "Un",
 | 
			
		||||
      "unavailable": "Net erreechbar",
 | 
			
		||||
      "unknown": "Onbekannt"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "Doheem",
 | 
			
		||||
      "not_home": "\u00cbnnerwee"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "Un"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "Zou",
 | 
			
		||||
      "closing": "G\u00ebtt zougemaach",
 | 
			
		||||
      "home": "Doheem",
 | 
			
		||||
      "locked": "Gespaart",
 | 
			
		||||
      "not_home": "\u00cbnnerwee",
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "on": "Un",
 | 
			
		||||
      "open": "Op",
 | 
			
		||||
      "opening": "G\u00ebtt opgemaach",
 | 
			
		||||
      "problem": "Problem",
 | 
			
		||||
      "stopped": "Gestoppt",
 | 
			
		||||
      "unlocked": "Net gespaart"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "Un"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "Un"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "Gespaart",
 | 
			
		||||
      "unlocked": "Net gespaart"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "Waart",
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "Un",
 | 
			
		||||
      "paused": "Pauseiert",
 | 
			
		||||
      "playing": "Spillt",
 | 
			
		||||
      "standby": "Standby"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "Doheem",
 | 
			
		||||
      "not_home": "\u00cbnnerwee"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "problem": "Problem"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "Un"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "Zeen"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "Un"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "Un"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "Iwwert dem Horizont",
 | 
			
		||||
      "below_horizon": "\u00cbnnert dem Horizont"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "Un"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "Aktiv",
 | 
			
		||||
      "idle": "Waart",
 | 
			
		||||
      "paused": "Pauseiert"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "Botzt",
 | 
			
		||||
      "docked": "Agedockt",
 | 
			
		||||
      "error": "Feeler",
 | 
			
		||||
      "idle": "Waart",
 | 
			
		||||
      "off": "Aus",
 | 
			
		||||
      "on": "Un",
 | 
			
		||||
      "paused": "Pauseiert",
 | 
			
		||||
      "returning": "K\u00ebnnt zur Statioun zer\u00e9ck"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "Kloer, Nuecht",
 | 
			
		||||
      "cloudy": "Wollekeg",
 | 
			
		||||
      "exceptional": "Aussergew\u00e9inlech",
 | 
			
		||||
      "fog": "Niwwel",
 | 
			
		||||
      "hail": "Kn\u00ebppelsteng",
 | 
			
		||||
      "lightning": "Bl\u00ebtz",
 | 
			
		||||
      "lightning-rainy": "Bl\u00ebtz, Reen",
 | 
			
		||||
      "partlycloudy": "Liicht wollekeg",
 | 
			
		||||
      "pouring": "Schloreen",
 | 
			
		||||
      "rainy": "Reen",
 | 
			
		||||
      "snowy": "Schn\u00e9i",
 | 
			
		||||
      "snowy-rainy": "Schn\u00e9i, Reen",
 | 
			
		||||
      "sunny": "Sonneg",
 | 
			
		||||
      "windy": "L\u00ebfteg",
 | 
			
		||||
      "windy-variant": "L\u00ebfteg"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "Net Ereechbar",
 | 
			
		||||
        "initializing": "Initialis\u00e9iert",
 | 
			
		||||
        "ready": "Bereet",
 | 
			
		||||
        "sleeping": "Schl\u00e9ift"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "Net Ereechbar ({query_stage})",
 | 
			
		||||
        "initializing": "Initialis\u00e9iert ( {query_stage} )"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,138 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "U\u017erakinta",
 | 
			
		||||
      "armed_home": "Nam\u0173 apsauga \u012fjungta",
 | 
			
		||||
      "arming": "Saugojimo re\u017eimo \u012fjungimas",
 | 
			
		||||
      "disarmed": "Atrakinta",
 | 
			
		||||
      "disarming": "Saugojimo re\u017eimo i\u0161jungimas",
 | 
			
		||||
      "pending": "Laukiama",
 | 
			
		||||
      "triggered": "Aktyvinta"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "I\u0161jungta",
 | 
			
		||||
      "on": "\u012ejungta"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "Atsijung\u0119s",
 | 
			
		||||
        "on": "Prisijung\u0119s"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "I\u0161jungta",
 | 
			
		||||
        "on": "\u012ejungta"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "U\u017edaryta",
 | 
			
		||||
        "on": "Atidaryta"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "U\u017edaryta",
 | 
			
		||||
        "on": "Atidaryta"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "Neaptikta",
 | 
			
		||||
        "on": "Aptikta"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "Sausa",
 | 
			
		||||
        "on": "\u0160lapia"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "Nejuda",
 | 
			
		||||
        "on": "Aptiktas judesys"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "Laisva",
 | 
			
		||||
        "on": "U\u017eimta"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "U\u017edaryta",
 | 
			
		||||
        "on": "Atidaryta"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "Saugu",
 | 
			
		||||
        "on": "Nesaugu"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "Neaptikta",
 | 
			
		||||
        "on": "Aptikta"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "Tylu",
 | 
			
		||||
        "on": "Aptikta"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "Neaptikta",
 | 
			
		||||
        "on": "Aptikta"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "U\u017edaryta",
 | 
			
		||||
        "on": "Atidaryta"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "I\u0161jungta",
 | 
			
		||||
      "on": "\u012ejungta"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "Laukimo re\u017eimas",
 | 
			
		||||
      "recording": "\u012era\u0161ymas",
 | 
			
		||||
      "streaming": "Transliuojama"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "off": "I\u0161jungta"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "I\u0161jungta",
 | 
			
		||||
      "on": "\u012ejungta",
 | 
			
		||||
      "unavailable": "(nepasiekiamas)",
 | 
			
		||||
      "unknown": "Ne\u017einoma"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "I\u0161jungta",
 | 
			
		||||
      "on": "\u012ejungta"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "off": "I\u0161jungta",
 | 
			
		||||
      "ok": "Ok",
 | 
			
		||||
      "on": "\u012ejungta"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "on": "\u012ejungta"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "on": "\u012ejungta"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "Namuose",
 | 
			
		||||
      "not_home": "I\u0161vyk\u0119s"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "I\u0161jungta",
 | 
			
		||||
      "on": "\u012ejungta"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "I\u0161jungta",
 | 
			
		||||
      "on": "\u012ejungta"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "I\u0161jungta",
 | 
			
		||||
      "on": "\u012ejungta"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "I\u0161jungta",
 | 
			
		||||
      "on": "\u012ejungta"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "aktyvus",
 | 
			
		||||
      "paused": "pristabdytas"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": " ({query_stage})",
 | 
			
		||||
        "initializing": " ( {query_stage} )"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,255 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "Piesl\u0113gta",
 | 
			
		||||
      "armed_away": "Piesl\u0113gta uz promb\u016btni",
 | 
			
		||||
      "armed_custom_bypass": "Piesl\u0113gts piel\u0101gots apvedce\u013c\u0161",
 | 
			
		||||
      "armed_home": "Piesl\u0113gta m\u0101j\u0101s",
 | 
			
		||||
      "armed_night": "Piesl\u0113gta uz nakti",
 | 
			
		||||
      "arming": "Piesl\u0113dzas",
 | 
			
		||||
      "disarmed": "Atsl\u0113gta",
 | 
			
		||||
      "disarming": "Atsl\u0113dzas",
 | 
			
		||||
      "pending": "Gaida",
 | 
			
		||||
      "triggered": "Aktiviz\u0113ta"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "Izsl\u0113gts",
 | 
			
		||||
      "on": "Iesl\u0113gts"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "Norm\u0101ls",
 | 
			
		||||
        "on": "Zems"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "Norm\u0101ls",
 | 
			
		||||
        "on": "Auksts"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "Atvienots",
 | 
			
		||||
        "on": "Piesl\u0113dzies"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "Izsl\u0113gts",
 | 
			
		||||
        "on": "Iesl\u0113gts"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "Aizv\u0113rtas",
 | 
			
		||||
        "on": "Atv\u0113rtas"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "Aizv\u0113rtas",
 | 
			
		||||
        "on": "Atv\u0113rtas"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "Br\u012bvs",
 | 
			
		||||
        "on": "Sajusta"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "Norm\u0101ls",
 | 
			
		||||
        "on": "Karsts"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "Sl\u0113gts",
 | 
			
		||||
        "on": "Atsl\u0113gts"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "Sauss",
 | 
			
		||||
        "on": "Slapj\u0161"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "Br\u012bvs",
 | 
			
		||||
        "on": "Sajusta"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "Br\u012bvs",
 | 
			
		||||
        "on": "Aiz\u0146emts"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "Aizv\u0113rts",
 | 
			
		||||
        "on": "Atv\u0113rts"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "Promb\u016btne",
 | 
			
		||||
        "on": "M\u0101j\u0101s"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "OK",
 | 
			
		||||
        "on": "Probl\u0113ma"
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "Dro\u0161i",
 | 
			
		||||
        "on": "Nedro\u0161i"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "Br\u012bvs",
 | 
			
		||||
        "on": "Sajusta"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "Br\u012bvs",
 | 
			
		||||
        "on": "Sajusts"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "Br\u012bvs",
 | 
			
		||||
        "on": "Sajusts"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "Aizv\u0113rts",
 | 
			
		||||
        "on": "Atv\u0113rts"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "Izsl\u0113gts",
 | 
			
		||||
      "on": "Iesl\u0113gts"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "D\u012bkst\u0101ve",
 | 
			
		||||
      "recording": "Ieraksta",
 | 
			
		||||
      "streaming": "Straum\u0113"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "Auto",
 | 
			
		||||
      "cool": "Dzes\u0113\u0161ana",
 | 
			
		||||
      "dry": "Sauss",
 | 
			
		||||
      "fan_only": "Tikai ventilators",
 | 
			
		||||
      "heat": "Sild\u012b\u0161ana",
 | 
			
		||||
      "heat_cool": "Sild\u012bt / Atdzes\u0113t",
 | 
			
		||||
      "off": "Izsl\u0113gts"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "Konfigur\u0113t",
 | 
			
		||||
      "configured": "Konfigur\u0113ts"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "Sl\u0113gts",
 | 
			
		||||
      "closing": "Sl\u0113dzas",
 | 
			
		||||
      "open": "Atv\u0113rts",
 | 
			
		||||
      "opening": "Atveras",
 | 
			
		||||
      "stopped": "Aptur\u0113ts"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "Izsl\u0113gts",
 | 
			
		||||
      "on": "Iesl\u0113gts",
 | 
			
		||||
      "unavailable": "Nepieejams",
 | 
			
		||||
      "unknown": "Nezin\u0101ms"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "M\u0101j\u0101s",
 | 
			
		||||
      "not_home": "Prom"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "Izsl\u0113gts",
 | 
			
		||||
      "on": "Iesl\u0113gts"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "Sl\u0113gta",
 | 
			
		||||
      "closing": "Sl\u0113dzas",
 | 
			
		||||
      "home": "M\u0101j\u0101s",
 | 
			
		||||
      "locked": "Blo\u0137\u0113ta",
 | 
			
		||||
      "not_home": "Promb\u016btn\u0113",
 | 
			
		||||
      "off": "Izsl\u0113gta",
 | 
			
		||||
      "ok": "OK",
 | 
			
		||||
      "on": "Iesl\u0113gta",
 | 
			
		||||
      "open": "Atv\u0113rta",
 | 
			
		||||
      "opening": "Atveras",
 | 
			
		||||
      "problem": "Probl\u0113ma",
 | 
			
		||||
      "stopped": "Aptur\u0113ta",
 | 
			
		||||
      "unlocked": "Atblo\u0137\u0113ta"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "Izsl\u0113gta",
 | 
			
		||||
      "on": "Iesl\u0113gta"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "Izsl\u0113gta",
 | 
			
		||||
      "on": "Iesl\u0113gta"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "Aizsl\u0113gts",
 | 
			
		||||
      "unlocked": "Atsl\u0113gts"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "D\u012bkst\u0101v\u0113",
 | 
			
		||||
      "off": "Izsl\u0113gts",
 | 
			
		||||
      "on": "Iesl\u0113gts",
 | 
			
		||||
      "paused": "Aptur\u0113ts",
 | 
			
		||||
      "playing": "Atska\u0146o",
 | 
			
		||||
      "standby": "Gaid\u012b\u0161anas re\u017e\u012bm\u0101"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "M\u0101j\u0101s",
 | 
			
		||||
      "not_home": "Promb\u016btne"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "Labi",
 | 
			
		||||
      "problem": "Probl\u0113ma"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "Izsl\u0113gta",
 | 
			
		||||
      "on": "Iesl\u0113gts"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "Ainas rad\u012b\u0161ana"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "Izsl\u0113gts",
 | 
			
		||||
      "on": "Iesl\u0113gts"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "Izsl\u0113gts",
 | 
			
		||||
      "on": "Iesl\u0113gts"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "Virs horizonta",
 | 
			
		||||
      "below_horizon": "Zem horizonta"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "Izsl\u0113gts",
 | 
			
		||||
      "on": "Iesl\u0113gts"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "akt\u012bvs",
 | 
			
		||||
      "idle": "d\u012bkst\u0101ve",
 | 
			
		||||
      "paused": "aptur\u0113ts"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "Notiek uzkop\u0161ana",
 | 
			
		||||
      "docked": "Pie doka",
 | 
			
		||||
      "error": "K\u013c\u016bda",
 | 
			
		||||
      "idle": "D\u012bkst\u0101v\u0113",
 | 
			
		||||
      "off": "Izsl\u0113gts",
 | 
			
		||||
      "on": "Iesl\u0113gts",
 | 
			
		||||
      "paused": "Aptur\u0113ts",
 | 
			
		||||
      "returning": "Ce\u013c\u0101 pie doka"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "Skaidrs, nakts",
 | 
			
		||||
      "cloudy": "M\u0101ko\u0146ains",
 | 
			
		||||
      "exceptional": "Iz\u0146\u0113muma k\u0101rt\u0101",
 | 
			
		||||
      "fog": "Migla",
 | 
			
		||||
      "hail": "Krusa",
 | 
			
		||||
      "lightning": "Zibens",
 | 
			
		||||
      "lightning-rainy": "Zibens, lietus",
 | 
			
		||||
      "partlycloudy": "Da\u013c\u0113ji apm\u0101cies",
 | 
			
		||||
      "pouring": "Lietusg\u0101ze",
 | 
			
		||||
      "rainy": "Lietains",
 | 
			
		||||
      "snowy": "Sniegs",
 | 
			
		||||
      "snowy-rainy": "Sniegs, lietus",
 | 
			
		||||
      "sunny": "Saulains",
 | 
			
		||||
      "windy": "V\u0113jains",
 | 
			
		||||
      "windy-variant": "V\u0113jains"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "Beigta",
 | 
			
		||||
        "initializing": "Inicializ\u0113",
 | 
			
		||||
        "ready": "Gatavs",
 | 
			
		||||
        "sleeping": "Gu\u013c"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "Beigta ({query_stage})",
 | 
			
		||||
        "initializing": "Inicializ\u0113 ({query_stage})"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,255 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "state": {
 | 
			
		||||
    "alarm_control_panel": {
 | 
			
		||||
      "armed": "Armert",
 | 
			
		||||
      "armed_away": "Armert borte",
 | 
			
		||||
      "armed_custom_bypass": "Armert tilpasset unntak",
 | 
			
		||||
      "armed_home": "Armert hjemme",
 | 
			
		||||
      "armed_night": "Armert natt",
 | 
			
		||||
      "arming": "Armerer",
 | 
			
		||||
      "disarmed": "Avsl\u00e5tt",
 | 
			
		||||
      "disarming": "Skrur av",
 | 
			
		||||
      "pending": "Venter",
 | 
			
		||||
      "triggered": "Utl\u00f8st"
 | 
			
		||||
    },
 | 
			
		||||
    "automation": {
 | 
			
		||||
      "off": "Av",
 | 
			
		||||
      "on": "P\u00e5"
 | 
			
		||||
    },
 | 
			
		||||
    "binary_sensor": {
 | 
			
		||||
      "battery": {
 | 
			
		||||
        "off": "Normalt",
 | 
			
		||||
        "on": "Lavt"
 | 
			
		||||
      },
 | 
			
		||||
      "cold": {
 | 
			
		||||
        "off": "",
 | 
			
		||||
        "on": "Kald"
 | 
			
		||||
      },
 | 
			
		||||
      "connectivity": {
 | 
			
		||||
        "off": "Frakoblet",
 | 
			
		||||
        "on": "Tilkoblet"
 | 
			
		||||
      },
 | 
			
		||||
      "default": {
 | 
			
		||||
        "off": "Av",
 | 
			
		||||
        "on": "P\u00e5"
 | 
			
		||||
      },
 | 
			
		||||
      "door": {
 | 
			
		||||
        "off": "Lukket",
 | 
			
		||||
        "on": "\u00c5pen"
 | 
			
		||||
      },
 | 
			
		||||
      "garage_door": {
 | 
			
		||||
        "off": "Lukket",
 | 
			
		||||
        "on": "\u00c5pen"
 | 
			
		||||
      },
 | 
			
		||||
      "gas": {
 | 
			
		||||
        "off": "Klar",
 | 
			
		||||
        "on": "Oppdaget"
 | 
			
		||||
      },
 | 
			
		||||
      "heat": {
 | 
			
		||||
        "off": "Normal",
 | 
			
		||||
        "on": "Varm"
 | 
			
		||||
      },
 | 
			
		||||
      "lock": {
 | 
			
		||||
        "off": "L\u00e5st",
 | 
			
		||||
        "on": "Ul\u00e5st"
 | 
			
		||||
      },
 | 
			
		||||
      "moisture": {
 | 
			
		||||
        "off": "T\u00f8rr",
 | 
			
		||||
        "on": "Fuktig"
 | 
			
		||||
      },
 | 
			
		||||
      "motion": {
 | 
			
		||||
        "off": "Klar",
 | 
			
		||||
        "on": "Oppdaget"
 | 
			
		||||
      },
 | 
			
		||||
      "occupancy": {
 | 
			
		||||
        "off": "Klar",
 | 
			
		||||
        "on": "Oppdaget"
 | 
			
		||||
      },
 | 
			
		||||
      "opening": {
 | 
			
		||||
        "off": "Lukket",
 | 
			
		||||
        "on": "\u00c5pen"
 | 
			
		||||
      },
 | 
			
		||||
      "presence": {
 | 
			
		||||
        "off": "Borte",
 | 
			
		||||
        "on": "Hjemme"
 | 
			
		||||
      },
 | 
			
		||||
      "problem": {
 | 
			
		||||
        "off": "",
 | 
			
		||||
        "on": ""
 | 
			
		||||
      },
 | 
			
		||||
      "safety": {
 | 
			
		||||
        "off": "Sikker",
 | 
			
		||||
        "on": "Usikker"
 | 
			
		||||
      },
 | 
			
		||||
      "smoke": {
 | 
			
		||||
        "off": "Klar",
 | 
			
		||||
        "on": "Oppdaget"
 | 
			
		||||
      },
 | 
			
		||||
      "sound": {
 | 
			
		||||
        "off": "Klar",
 | 
			
		||||
        "on": "Oppdaget"
 | 
			
		||||
      },
 | 
			
		||||
      "vibration": {
 | 
			
		||||
        "off": "Klar",
 | 
			
		||||
        "on": "Oppdaget"
 | 
			
		||||
      },
 | 
			
		||||
      "window": {
 | 
			
		||||
        "off": "Lukket",
 | 
			
		||||
        "on": "\u00c5pent"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "calendar": {
 | 
			
		||||
      "off": "Av",
 | 
			
		||||
      "on": "P\u00e5"
 | 
			
		||||
    },
 | 
			
		||||
    "camera": {
 | 
			
		||||
      "idle": "Inaktiv",
 | 
			
		||||
      "recording": "Opptak",
 | 
			
		||||
      "streaming": "Str\u00f8mmer"
 | 
			
		||||
    },
 | 
			
		||||
    "climate": {
 | 
			
		||||
      "auto": "Auto",
 | 
			
		||||
      "cool": "Kj\u00f8ling",
 | 
			
		||||
      "dry": "T\u00f8rr",
 | 
			
		||||
      "fan_only": "Kun vifte",
 | 
			
		||||
      "heat": "Varme",
 | 
			
		||||
      "heat_cool": "Varme/kj\u00f8ling",
 | 
			
		||||
      "off": "Av"
 | 
			
		||||
    },
 | 
			
		||||
    "configurator": {
 | 
			
		||||
      "configure": "Konfigurer",
 | 
			
		||||
      "configured": "Konfigurert"
 | 
			
		||||
    },
 | 
			
		||||
    "cover": {
 | 
			
		||||
      "closed": "Lukket",
 | 
			
		||||
      "closing": "Lukker",
 | 
			
		||||
      "open": "\u00c5pen",
 | 
			
		||||
      "opening": "\u00c5pner",
 | 
			
		||||
      "stopped": "Stoppet"
 | 
			
		||||
    },
 | 
			
		||||
    "default": {
 | 
			
		||||
      "off": "Av",
 | 
			
		||||
      "on": "P\u00e5",
 | 
			
		||||
      "unavailable": "Utilgjengelig",
 | 
			
		||||
      "unknown": "Ukjent"
 | 
			
		||||
    },
 | 
			
		||||
    "device_tracker": {
 | 
			
		||||
      "home": "Hjemme",
 | 
			
		||||
      "not_home": "Borte"
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
      "off": "Av",
 | 
			
		||||
      "on": "P\u00e5"
 | 
			
		||||
    },
 | 
			
		||||
    "group": {
 | 
			
		||||
      "closed": "Lukket",
 | 
			
		||||
      "closing": "Lukker",
 | 
			
		||||
      "home": "Hjemme",
 | 
			
		||||
      "locked": "L\u00e5st",
 | 
			
		||||
      "not_home": "Borte",
 | 
			
		||||
      "off": "Av",
 | 
			
		||||
      "ok": "",
 | 
			
		||||
      "on": "P\u00e5",
 | 
			
		||||
      "open": "\u00c5pen",
 | 
			
		||||
      "opening": "\u00c5pner",
 | 
			
		||||
      "problem": "Problem",
 | 
			
		||||
      "stopped": "Stoppet",
 | 
			
		||||
      "unlocked": "Ul\u00e5st"
 | 
			
		||||
    },
 | 
			
		||||
    "input_boolean": {
 | 
			
		||||
      "off": "Av",
 | 
			
		||||
      "on": "P\u00e5"
 | 
			
		||||
    },
 | 
			
		||||
    "light": {
 | 
			
		||||
      "off": "Av",
 | 
			
		||||
      "on": "P\u00e5"
 | 
			
		||||
    },
 | 
			
		||||
    "lock": {
 | 
			
		||||
      "locked": "L\u00e5st",
 | 
			
		||||
      "unlocked": "Ul\u00e5st"
 | 
			
		||||
    },
 | 
			
		||||
    "media_player": {
 | 
			
		||||
      "idle": "Inaktiv",
 | 
			
		||||
      "off": "Av",
 | 
			
		||||
      "on": "P\u00e5",
 | 
			
		||||
      "paused": "Pauset",
 | 
			
		||||
      "playing": "Spiller",
 | 
			
		||||
      "standby": "Avventer"
 | 
			
		||||
    },
 | 
			
		||||
    "person": {
 | 
			
		||||
      "home": "Hjemme",
 | 
			
		||||
      "not_home": "Borte"
 | 
			
		||||
    },
 | 
			
		||||
    "plant": {
 | 
			
		||||
      "ok": "",
 | 
			
		||||
      "problem": "Problem"
 | 
			
		||||
    },
 | 
			
		||||
    "remote": {
 | 
			
		||||
      "off": "Av",
 | 
			
		||||
      "on": "P\u00e5"
 | 
			
		||||
    },
 | 
			
		||||
    "scene": {
 | 
			
		||||
      "scening": "Scenende"
 | 
			
		||||
    },
 | 
			
		||||
    "script": {
 | 
			
		||||
      "off": "Av",
 | 
			
		||||
      "on": "P\u00e5"
 | 
			
		||||
    },
 | 
			
		||||
    "sensor": {
 | 
			
		||||
      "off": "Av",
 | 
			
		||||
      "on": "P\u00e5"
 | 
			
		||||
    },
 | 
			
		||||
    "sun": {
 | 
			
		||||
      "above_horizon": "Over horisonten",
 | 
			
		||||
      "below_horizon": "Under horisonten"
 | 
			
		||||
    },
 | 
			
		||||
    "switch": {
 | 
			
		||||
      "off": "Av",
 | 
			
		||||
      "on": "P\u00e5"
 | 
			
		||||
    },
 | 
			
		||||
    "timer": {
 | 
			
		||||
      "active": "aktiv",
 | 
			
		||||
      "idle": "inaktiv",
 | 
			
		||||
      "paused": "pauset"
 | 
			
		||||
    },
 | 
			
		||||
    "vacuum": {
 | 
			
		||||
      "cleaning": "Rengj\u00f8r",
 | 
			
		||||
      "docked": "Dokket",
 | 
			
		||||
      "error": "Feil",
 | 
			
		||||
      "idle": "Inaktiv",
 | 
			
		||||
      "off": "Av",
 | 
			
		||||
      "on": "P\u00e5",
 | 
			
		||||
      "paused": "Pauset",
 | 
			
		||||
      "returning": "Returner til dokk"
 | 
			
		||||
    },
 | 
			
		||||
    "weather": {
 | 
			
		||||
      "clear-night": "Klart, natt",
 | 
			
		||||
      "cloudy": "Skyet",
 | 
			
		||||
      "exceptional": "Eksepsjonell",
 | 
			
		||||
      "fog": "T\u00e5ke",
 | 
			
		||||
      "hail": "Hagl",
 | 
			
		||||
      "lightning": "Lyn",
 | 
			
		||||
      "lightning-rainy": "Lyn, regn",
 | 
			
		||||
      "partlycloudy": "Delvis skyet",
 | 
			
		||||
      "pouring": "Kraftig nedb\u00f8r",
 | 
			
		||||
      "rainy": "Regn",
 | 
			
		||||
      "snowy": "Sn\u00f8",
 | 
			
		||||
      "snowy-rainy": "Sludd",
 | 
			
		||||
      "sunny": "Solfylt",
 | 
			
		||||
      "windy": "Vind",
 | 
			
		||||
      "windy-variant": "Vind"
 | 
			
		||||
    },
 | 
			
		||||
    "zwave": {
 | 
			
		||||
      "default": {
 | 
			
		||||
        "dead": "D\u00f8d",
 | 
			
		||||
        "initializing": "Initialiserer",
 | 
			
		||||
        "ready": "Klar",
 | 
			
		||||
        "sleeping": "Sover"
 | 
			
		||||
      },
 | 
			
		||||
      "query_stage": {
 | 
			
		||||
        "dead": "D\u00f8d ({query_stage})",
 | 
			
		||||
        "initializing": "Initialiserer ({query_stage})"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user