mirror of
https://github.com/home-assistant/core.git
synced 2025-09-20 10:29:26 +00:00
Compare commits
2107 Commits
2022.12.0b
...
sensor_num
Author | SHA1 | Date | |
---|---|---|---|
![]() |
2f608d8650 | ||
![]() |
65324431a4 | ||
![]() |
4dba9c09fc | ||
![]() |
35b82db8b0 | ||
![]() |
a28e7e1541 | ||
![]() |
7f01d57965 | ||
![]() |
0d018d53f1 | ||
![]() |
be25d17e02 | ||
![]() |
7db166b515 | ||
![]() |
33ede351f0 | ||
![]() |
1c4ba61725 | ||
![]() |
f4654128db | ||
![]() |
be69c81db5 | ||
![]() |
f8c6e4c20a | ||
![]() |
d88849fb04 | ||
![]() |
e706696271 | ||
![]() |
53638ba138 | ||
![]() |
47453420c1 | ||
![]() |
0c383e28c4 | ||
![]() |
98b4a412f7 | ||
![]() |
da35ac1942 | ||
![]() |
365ce55d77 | ||
![]() |
28affe91be | ||
![]() |
2cdeb6f1cd | ||
![]() |
7e206b5854 | ||
![]() |
1edd00c51f | ||
![]() |
772df02cce | ||
![]() |
8337d4613e | ||
![]() |
50373500c3 | ||
![]() |
a8b23d7139 | ||
![]() |
c715534821 | ||
![]() |
e0f8b5bbd1 | ||
![]() |
f7fdaadde0 | ||
![]() |
e57dad79fc | ||
![]() |
00118a6f96 | ||
![]() |
f874258e7e | ||
![]() |
53c5f02ca2 | ||
![]() |
857df05308 | ||
![]() |
d22e670334 | ||
![]() |
2c12171e25 | ||
![]() |
98a79dd5a2 | ||
![]() |
73cd03255f | ||
![]() |
d4489faa68 | ||
![]() |
5f57648578 | ||
![]() |
21d1c647c5 | ||
![]() |
032a37b121 | ||
![]() |
3b5fd4bd06 | ||
![]() |
7368c86ecb | ||
![]() |
7e7a27f8b9 | ||
![]() |
cc36848a6d | ||
![]() |
d2e75e4f7a | ||
![]() |
d485630ce9 | ||
![]() |
a4fa0925b7 | ||
![]() |
c56832bb2c | ||
![]() |
9ac8f9aa37 | ||
![]() |
709d1cb8af | ||
![]() |
1958dd5550 | ||
![]() |
92a833b192 | ||
![]() |
4e9bd09d39 | ||
![]() |
b82ecfdd28 | ||
![]() |
0f4b17755e | ||
![]() |
c612a92cfb | ||
![]() |
80ffac48a3 | ||
![]() |
4f965f0eca | ||
![]() |
569bf3bb76 | ||
![]() |
f9e8247401 | ||
![]() |
344a0c55a5 | ||
![]() |
11e125f2e8 | ||
![]() |
691a234090 | ||
![]() |
eebc338c3b | ||
![]() |
58de7b8df0 | ||
![]() |
b1e939d1f1 | ||
![]() |
ec3475910f | ||
![]() |
799edd90aa | ||
![]() |
0f6f63da64 | ||
![]() |
e93bfa6556 | ||
![]() |
6a94a58325 | ||
![]() |
a7ddd592fb | ||
![]() |
733798f483 | ||
![]() |
af5fd74d6f | ||
![]() |
efd2817221 | ||
![]() |
d97a061285 | ||
![]() |
e2edbc4259 | ||
![]() |
d0c7f42559 | ||
![]() |
b69576d6de | ||
![]() |
adb0d85511 | ||
![]() |
072f228e4d | ||
![]() |
803cd8d9a3 | ||
![]() |
50c2992f36 | ||
![]() |
15492aead0 | ||
![]() |
661f7e1522 | ||
![]() |
e9543a7254 | ||
![]() |
8f74bff354 | ||
![]() |
f9f9741d2a | ||
![]() |
ef800335fb | ||
![]() |
8c993116e1 | ||
![]() |
bfbf9b9751 | ||
![]() |
89c0b27b42 | ||
![]() |
561fc2d771 | ||
![]() |
3ff3834cae | ||
![]() |
a79885ceaf | ||
![]() |
57cf11f067 | ||
![]() |
49148421cb | ||
![]() |
fca3382d37 | ||
![]() |
42c4f2f7fa | ||
![]() |
ae6bc96002 | ||
![]() |
e4a78420b8 | ||
![]() |
bd9a8ba6f1 | ||
![]() |
78207121c0 | ||
![]() |
687184138c | ||
![]() |
e738924780 | ||
![]() |
71d7098530 | ||
![]() |
020d52c3e2 | ||
![]() |
b84cf3a3d9 | ||
![]() |
2c8cb13034 | ||
![]() |
9cd48b4999 | ||
![]() |
04bc522fa5 | ||
![]() |
caa1ba7e13 | ||
![]() |
138a522d2e | ||
![]() |
62dcbe5258 | ||
![]() |
7ed9967245 | ||
![]() |
b3380261d7 | ||
![]() |
eb5d63237c | ||
![]() |
2bef69c6a7 | ||
![]() |
0d579f6ac3 | ||
![]() |
8a5a1b810a | ||
![]() |
95d0329d6c | ||
![]() |
d4955a3d87 | ||
![]() |
adeaf746ec | ||
![]() |
38203003d2 | ||
![]() |
25c451832b | ||
![]() |
468457eff4 | ||
![]() |
7af86fe130 | ||
![]() |
54fcf58449 | ||
![]() |
c727f403ff | ||
![]() |
4181a9baf0 | ||
![]() |
6e285c87c3 | ||
![]() |
2e70de9dd9 | ||
![]() |
6ea234ed57 | ||
![]() |
282d6af2a2 | ||
![]() |
484e73beaa | ||
![]() |
9a6e620810 | ||
![]() |
1139555448 | ||
![]() |
cbcff6435f | ||
![]() |
fea30c1ce9 | ||
![]() |
b9ffc67a44 | ||
![]() |
ca8cc284ed | ||
![]() |
ff91fb7d74 | ||
![]() |
021ac84405 | ||
![]() |
17d3159e77 | ||
![]() |
fa7ad20372 | ||
![]() |
28a3b4a32c | ||
![]() |
c395698ea2 | ||
![]() |
e06603bbbd | ||
![]() |
4cafd393c6 | ||
![]() |
e50a531cd9 | ||
![]() |
7ab88fa713 | ||
![]() |
4955dd3e1b | ||
![]() |
1d1d69ca02 | ||
![]() |
a56f6cb863 | ||
![]() |
7d672b4a4d | ||
![]() |
df0fc30695 | ||
![]() |
1b97a51b5e | ||
![]() |
74ae351ac0 | ||
![]() |
03a8dcfdc1 | ||
![]() |
c5c7bb36cc | ||
![]() |
c5c68cd429 | ||
![]() |
7d641e4d3e | ||
![]() |
a85c4a1ddf | ||
![]() |
17f85165c8 | ||
![]() |
bbed1099d5 | ||
![]() |
7ddb467ba6 | ||
![]() |
b2004e62b1 | ||
![]() |
0ccab19d2c | ||
![]() |
f182e314e5 | ||
![]() |
23c9580a4a | ||
![]() |
a1ed2a57eb | ||
![]() |
7ff1265b10 | ||
![]() |
5f1edbccd1 | ||
![]() |
665a2889ec | ||
![]() |
0cf676d501 | ||
![]() |
65a44cad8f | ||
![]() |
3007e0259d | ||
![]() |
f327a247a0 | ||
![]() |
a2fb6fbaa8 | ||
![]() |
0eabc27982 | ||
![]() |
82f006bc5c | ||
![]() |
890c2277ca | ||
![]() |
6270f33bee | ||
![]() |
f3cf760772 | ||
![]() |
d0b67689e0 | ||
![]() |
60b799aac9 | ||
![]() |
0e9b74986f | ||
![]() |
a8c952f82f | ||
![]() |
5a77a2801b | ||
![]() |
781a4267cf | ||
![]() |
7bd56ad7d6 | ||
![]() |
540eb8de16 | ||
![]() |
33c777529e | ||
![]() |
b253bb841e | ||
![]() |
f548ccfb92 | ||
![]() |
1a2652e1bb | ||
![]() |
5285d057d2 | ||
![]() |
3bfdba50d9 | ||
![]() |
e427a70dc7 | ||
![]() |
c1e3c1a27c | ||
![]() |
dae7bcf387 | ||
![]() |
b76c0c6f08 | ||
![]() |
086a6460ef | ||
![]() |
ba63a9600e | ||
![]() |
e832ef78f8 | ||
![]() |
6c8efe3a3b | ||
![]() |
5c6656dcac | ||
![]() |
9636fe4602 | ||
![]() |
a851b20c97 | ||
![]() |
4b427ec02c | ||
![]() |
b507fb1e06 | ||
![]() |
a4c52567a7 | ||
![]() |
2c9e8ad475 | ||
![]() |
52afdb4a8b | ||
![]() |
099b844dce | ||
![]() |
09891ead8d | ||
![]() |
da390dbd9a | ||
![]() |
dbab57ba87 | ||
![]() |
b91a0d21d2 | ||
![]() |
c599d1e1f8 | ||
![]() |
b3c5c6ae9c | ||
![]() |
886d2fc3a1 | ||
![]() |
90fc8dd860 | ||
![]() |
4b88a71d60 | ||
![]() |
ff5c1ce2d3 | ||
![]() |
9a68f0abe8 | ||
![]() |
b89a51c63d | ||
![]() |
949c88930f | ||
![]() |
0d3bf0e911 | ||
![]() |
c3c290b576 | ||
![]() |
0daaa37e09 | ||
![]() |
80a8da26bc | ||
![]() |
310d7718a0 | ||
![]() |
6cad0c7984 | ||
![]() |
b4ddff751a | ||
![]() |
d684aa4225 | ||
![]() |
43f3b0f933 | ||
![]() |
58e8f53117 | ||
![]() |
d36d98937d | ||
![]() |
f8c0e80ef7 | ||
![]() |
0530f61373 | ||
![]() |
02e973026d | ||
![]() |
e717f56113 | ||
![]() |
73c4ac53d2 | ||
![]() |
c9499f6574 | ||
![]() |
d703a83412 | ||
![]() |
e96cea997e | ||
![]() |
44beb350cd | ||
![]() |
a9533c72fc | ||
![]() |
65ad953497 | ||
![]() |
8d678209db | ||
![]() |
1b1f8a1d61 | ||
![]() |
1b4fda2321 | ||
![]() |
14d3911bfd | ||
![]() |
09ca8465a6 | ||
![]() |
c97cf62b47 | ||
![]() |
63bddae01d | ||
![]() |
66f12d7dab | ||
![]() |
bf41a971a2 | ||
![]() |
df0c0297c8 | ||
![]() |
9f5b1e58cb | ||
![]() |
b7de185924 | ||
![]() |
22dee1f92b | ||
![]() |
e084fe4903 | ||
![]() |
b29425a9eb | ||
![]() |
42ca46d7b2 | ||
![]() |
3f4c8a28ec | ||
![]() |
9fb4f6b643 | ||
![]() |
8981e4820a | ||
![]() |
5f0adfe6e4 | ||
![]() |
3ec7f0280e | ||
![]() |
2ab3d3ebf5 | ||
![]() |
ea95abcb30 | ||
![]() |
6d811d3fdb | ||
![]() |
66e21d7701 | ||
![]() |
60894c33a7 | ||
![]() |
613aa6f43a | ||
![]() |
94c7f7bbb7 | ||
![]() |
7d1dec8d31 | ||
![]() |
978aafdd09 | ||
![]() |
e15aaf2853 | ||
![]() |
c1332f68b3 | ||
![]() |
e3b81ad170 | ||
![]() |
51001ad1e1 | ||
![]() |
295308c39c | ||
![]() |
b4dd1b8cb2 | ||
![]() |
15ab04f97d | ||
![]() |
33fb27eb1a | ||
![]() |
9ef86b7b66 | ||
![]() |
c15f4ad648 | ||
![]() |
7c8f6e9fad | ||
![]() |
8672be3829 | ||
![]() |
052145fabd | ||
![]() |
6f94e47270 | ||
![]() |
68dd2802a1 | ||
![]() |
74a76c6fe7 | ||
![]() |
f719ecf086 | ||
![]() |
00e5f23249 | ||
![]() |
6582ee3591 | ||
![]() |
29e3d06a42 | ||
![]() |
b03677db1c | ||
![]() |
ea43effcc9 | ||
![]() |
a1a324a02e | ||
![]() |
fb81b1791f | ||
![]() |
2c9d0b7f18 | ||
![]() |
077ca97ef8 | ||
![]() |
bfc19c8cc3 | ||
![]() |
64535175b1 | ||
![]() |
d0153f5031 | ||
![]() |
ab76b3ffb3 | ||
![]() |
4f87c1f30f | ||
![]() |
6397138589 | ||
![]() |
da35097803 | ||
![]() |
40be2324cc | ||
![]() |
8abce25948 | ||
![]() |
b0ed0d5d41 | ||
![]() |
f57c0ea725 | ||
![]() |
1eec87214f | ||
![]() |
d7dda6bee5 | ||
![]() |
45b4b0e990 | ||
![]() |
af107d7853 | ||
![]() |
0c1abd5f10 | ||
![]() |
8bc303a562 | ||
![]() |
4d215e573c | ||
![]() |
70a9c8f8aa | ||
![]() |
66c3115b26 | ||
![]() |
b1ae7d409b | ||
![]() |
9e4be56939 | ||
![]() |
32c1a01159 | ||
![]() |
9c76cd1b6a | ||
![]() |
5102d1a5f3 | ||
![]() |
7661b222b4 | ||
![]() |
7729a5cf8a | ||
![]() |
a22041c9be | ||
![]() |
52ea64d1d0 | ||
![]() |
711c92a87f | ||
![]() |
71c4588747 | ||
![]() |
79a3d2e6f6 | ||
![]() |
974601cc2e | ||
![]() |
71d54da673 | ||
![]() |
9669b286c4 | ||
![]() |
72dae914fc | ||
![]() |
0b0e977ce9 | ||
![]() |
332d3e0f19 | ||
![]() |
8e117ee499 | ||
![]() |
30bf0634fe | ||
![]() |
a0810053f1 | ||
![]() |
504a3d3028 | ||
![]() |
e0d0dc05e4 | ||
![]() |
bcec69fec1 | ||
![]() |
e1fc494b54 | ||
![]() |
b9a7b908f3 | ||
![]() |
5ff0479c16 | ||
![]() |
4c84824ac8 | ||
![]() |
8cf6ebd363 | ||
![]() |
c842666bea | ||
![]() |
8227c84e05 | ||
![]() |
0657c99efd | ||
![]() |
771e07c68b | ||
![]() |
d5797d9f7d | ||
![]() |
164fad112c | ||
![]() |
aac89a3493 | ||
![]() |
53b931e21a | ||
![]() |
ca4d7634a8 | ||
![]() |
2dca826fa9 | ||
![]() |
a49461a040 | ||
![]() |
a62b8a4f5b | ||
![]() |
772a432c4d | ||
![]() |
5306883288 | ||
![]() |
402be4ebde | ||
![]() |
f608e150fd | ||
![]() |
91c502ae55 | ||
![]() |
e8d19e7c62 | ||
![]() |
255611238b | ||
![]() |
e1483ff746 | ||
![]() |
1e2f00e186 | ||
![]() |
0c8b6c13fc | ||
![]() |
50800d2590 | ||
![]() |
be5fe29dc9 | ||
![]() |
58bfeb3110 | ||
![]() |
80929c5f8c | ||
![]() |
7e51aeb916 | ||
![]() |
7f4a727e10 | ||
![]() |
df77646c8a | ||
![]() |
914704e459 | ||
![]() |
7e8c081065 | ||
![]() |
a9728bd3a5 | ||
![]() |
c14aa7bee4 | ||
![]() |
db6cacafcb | ||
![]() |
ae39b95bb1 | ||
![]() |
d94f007dbf | ||
![]() |
24fdd588fd | ||
![]() |
79b52a2b41 | ||
![]() |
29b2b6727e | ||
![]() |
658db7ff05 | ||
![]() |
e1512fd3e1 | ||
![]() |
92742ae423 | ||
![]() |
c8b9260f92 | ||
![]() |
585c4acfee | ||
![]() |
3c4455c696 | ||
![]() |
4be7b62607 | ||
![]() |
afb704f607 | ||
![]() |
656632f504 | ||
![]() |
9a4329aa1d | ||
![]() |
f00aadfc25 | ||
![]() |
59ad232ce5 | ||
![]() |
5aca996f22 | ||
![]() |
8f10c22a23 | ||
![]() |
aa7e051538 | ||
![]() |
82a13740b3 | ||
![]() |
8dd0752bd0 | ||
![]() |
58beab1b59 | ||
![]() |
2c127c00d4 | ||
![]() |
67f7a9ea78 | ||
![]() |
15a35004dd | ||
![]() |
d935f9400d | ||
![]() |
8aeb20db00 | ||
![]() |
9631146745 | ||
![]() |
c0d9dcdb3f | ||
![]() |
40d39a15c9 | ||
![]() |
200d3ae845 | ||
![]() |
6802f3db30 | ||
![]() |
3f348714e2 | ||
![]() |
bcd4c031c6 | ||
![]() |
6f44bd43b0 | ||
![]() |
74096b87eb | ||
![]() |
4b6157cd9b | ||
![]() |
2f98485ae7 | ||
![]() |
ca885f3fab | ||
![]() |
d1ecc418bb | ||
![]() |
353638426e | ||
![]() |
0dabbcfca1 | ||
![]() |
37c1052cce | ||
![]() |
a83318f373 | ||
![]() |
4f63398941 | ||
![]() |
29337bc6eb | ||
![]() |
c40c37e9ee | ||
![]() |
f2b348dbdf | ||
![]() |
e43802eb07 | ||
![]() |
4bebf00598 | ||
![]() |
5e6ba594aa | ||
![]() |
f0ba7a3795 | ||
![]() |
fea5330cee | ||
![]() |
141acba40d | ||
![]() |
bc115634d1 | ||
![]() |
1cc8feabb7 | ||
![]() |
6d336ec136 | ||
![]() |
d26484d482 | ||
![]() |
a44e44b7d0 | ||
![]() |
9cdf7a09ed | ||
![]() |
1cfcc9313b | ||
![]() |
a87a9790e9 | ||
![]() |
382e1ac679 | ||
![]() |
f17a829bd8 | ||
![]() |
767b43bb0e | ||
![]() |
9d9817328b | ||
![]() |
0b45fb6dc3 | ||
![]() |
33d0dec648 | ||
![]() |
5279535046 | ||
![]() |
87b2a73460 | ||
![]() |
91aaca6471 | ||
![]() |
b722a7e05b | ||
![]() |
cc74fcbda7 | ||
![]() |
1c2510bfb3 | ||
![]() |
829df7ddfd | ||
![]() |
f93bbd55ba | ||
![]() |
f6cd399b9e | ||
![]() |
27359dfc89 | ||
![]() |
b4abfb1697 | ||
![]() |
bd1c476edf | ||
![]() |
cf68d081ca | ||
![]() |
65c4e63e30 | ||
![]() |
25392655e7 | ||
![]() |
096ef5da47 | ||
![]() |
072517f17e | ||
![]() |
3cd6bd87a7 | ||
![]() |
0f3221eac7 | ||
![]() |
8485588aca | ||
![]() |
11b9a0b383 | ||
![]() |
9b835f88c7 | ||
![]() |
cb36905ce5 | ||
![]() |
8e7e210693 | ||
![]() |
b7f484a84f | ||
![]() |
1918f21fb1 | ||
![]() |
6c5f9c6fcb | ||
![]() |
1e9de194d3 | ||
![]() |
566c0f63bd | ||
![]() |
f7d69ee325 | ||
![]() |
551e098177 | ||
![]() |
c5fb3e7fab | ||
![]() |
14a32cd63b | ||
![]() |
ec1b4d5651 | ||
![]() |
669e6202ad | ||
![]() |
4aba3fdad6 | ||
![]() |
2ed6df9003 | ||
![]() |
6a7e6ad0fd | ||
![]() |
5656129b60 | ||
![]() |
96578f3f89 | ||
![]() |
4138e518ef | ||
![]() |
aa43acb443 | ||
![]() |
b459261ef2 | ||
![]() |
a318576c4f | ||
![]() |
9a6aaea9db | ||
![]() |
627ded42f5 | ||
![]() |
fa09eba165 | ||
![]() |
fcf53668c5 | ||
![]() |
d61b915286 | ||
![]() |
b0153c7deb | ||
![]() |
2447e24677 | ||
![]() |
502fea5f95 | ||
![]() |
caa8f9e49b | ||
![]() |
8beb043d62 | ||
![]() |
cb27cfe7dd | ||
![]() |
1d5ecdd4ea | ||
![]() |
8b3a6514a3 | ||
![]() |
d2e11797f8 | ||
![]() |
26c419705e | ||
![]() |
f0e6f45e43 | ||
![]() |
abc8b891be | ||
![]() |
851eef1144 | ||
![]() |
15db63bb3b | ||
![]() |
d949f51f10 | ||
![]() |
b85d6e6ede | ||
![]() |
c3c9ed6835 | ||
![]() |
a818ef6411 | ||
![]() |
788edc21fb | ||
![]() |
612f93d636 | ||
![]() |
b5956eb8dd | ||
![]() |
2087c53fa5 | ||
![]() |
c1f08256e2 | ||
![]() |
156307f3f2 | ||
![]() |
c6f60bf45d | ||
![]() |
5fbc005224 | ||
![]() |
156c815499 | ||
![]() |
3aad153913 | ||
![]() |
b087c1e734 | ||
![]() |
7636477760 | ||
![]() |
89d085a69c | ||
![]() |
d8c3b87d44 | ||
![]() |
1945ba06ba | ||
![]() |
3d4b1fb689 | ||
![]() |
a35a4efaaa | ||
![]() |
fe583b7c4a | ||
![]() |
1afb4897a8 | ||
![]() |
c5dedb7a79 | ||
![]() |
5b2c1d701a | ||
![]() |
b229347625 | ||
![]() |
6a89b3a135 | ||
![]() |
9205020fa4 | ||
![]() |
9f0bed0f0c | ||
![]() |
c3e27f6812 | ||
![]() |
83591704b5 | ||
![]() |
ee85a23d19 | ||
![]() |
bcef0d66ac | ||
![]() |
1a8933d59d | ||
![]() |
0328e8954d | ||
![]() |
0a367359f4 | ||
![]() |
8165f487c7 | ||
![]() |
c1589d3c89 | ||
![]() |
6859a9ebdd | ||
![]() |
54d570a9cf | ||
![]() |
c26d620ab1 | ||
![]() |
dd18708b63 | ||
![]() |
2b037efee2 | ||
![]() |
13cfd60019 | ||
![]() |
11a81dc485 | ||
![]() |
f9662e0af0 | ||
![]() |
3179101fbc | ||
![]() |
ccd8bc14e0 | ||
![]() |
ce43a53585 | ||
![]() |
affea9a305 | ||
![]() |
fa0d653216 | ||
![]() |
719f2e650c | ||
![]() |
233332c3a0 | ||
![]() |
9709391b52 | ||
![]() |
0b02abf708 | ||
![]() |
d3c41bc31c | ||
![]() |
8c235357a4 | ||
![]() |
176eb01016 | ||
![]() |
dfc33f858a | ||
![]() |
b81453cb6b | ||
![]() |
a7ebec4d02 | ||
![]() |
65ca62c991 | ||
![]() |
cd31624768 | ||
![]() |
05c1aff0f6 | ||
![]() |
64c2340fab | ||
![]() |
8e5236528f | ||
![]() |
01e1e254e2 | ||
![]() |
28804b7ecc | ||
![]() |
91ac6400b9 | ||
![]() |
9828b2d13f | ||
![]() |
03d9d30eca | ||
![]() |
3cb56211f8 | ||
![]() |
209c47383d | ||
![]() |
1a0bce715a | ||
![]() |
104f74054b | ||
![]() |
e35ab75c0b | ||
![]() |
72d3fa6d89 | ||
![]() |
e5f67c9119 | ||
![]() |
cef1809536 | ||
![]() |
2850583085 | ||
![]() |
b20eb54800 | ||
![]() |
d92b423127 | ||
![]() |
10829fdadb | ||
![]() |
476de319ea | ||
![]() |
314576048d | ||
![]() |
508b93c17f | ||
![]() |
64ee0cf627 | ||
![]() |
ef4b7c8a22 | ||
![]() |
19426ec18a | ||
![]() |
3ae4e98204 | ||
![]() |
a81045653d | ||
![]() |
a653ea30bd | ||
![]() |
8117f4af3a | ||
![]() |
3627a98602 | ||
![]() |
77f9548e51 | ||
![]() |
913bc827ba | ||
![]() |
c478e503e5 | ||
![]() |
6938f791f9 | ||
![]() |
43fb68ed79 | ||
![]() |
768c3e163d | ||
![]() |
8fbcb93ab4 | ||
![]() |
1fcd25130f | ||
![]() |
5f67e79ad9 | ||
![]() |
bca462401c | ||
![]() |
8b893b7062 | ||
![]() |
dffc913f9e | ||
![]() |
ec61f5f998 | ||
![]() |
9b5ac5b173 | ||
![]() |
be899b6ab6 | ||
![]() |
c191daedc3 | ||
![]() |
67716edb0c | ||
![]() |
21cdb6ece3 | ||
![]() |
bce7bd771e | ||
![]() |
b2b6ae417d | ||
![]() |
d35c4f8d82 | ||
![]() |
8dadbe45fa | ||
![]() |
a5a079fb06 | ||
![]() |
7953c4a6d5 | ||
![]() |
4c2b20db68 | ||
![]() |
6baa905448 | ||
![]() |
87aacf9fbe | ||
![]() |
d748894b88 | ||
![]() |
ae302bbec0 | ||
![]() |
d44210e573 | ||
![]() |
e75c85f679 | ||
![]() |
80714c544a | ||
![]() |
4c31317c06 | ||
![]() |
1deb4c68f3 | ||
![]() |
9927bb3330 | ||
![]() |
8e26c048a7 | ||
![]() |
28bea53afe | ||
![]() |
f941864308 | ||
![]() |
2ca73be9d0 | ||
![]() |
9415e7e51b | ||
![]() |
686258acd5 | ||
![]() |
49031b8fa7 | ||
![]() |
cb04a52220 | ||
![]() |
db5edfcf64 | ||
![]() |
578a1cdc02 | ||
![]() |
3bb9be2382 | ||
![]() |
1f6efe8c3e | ||
![]() |
107461df0d | ||
![]() |
4f20b15742 | ||
![]() |
6581bad7ce | ||
![]() |
197634503f | ||
![]() |
32fc0e03a5 | ||
![]() |
2e9ea0c934 | ||
![]() |
856f68252b | ||
![]() |
2789747b0f | ||
![]() |
45d14739c5 | ||
![]() |
d0f95d84b4 | ||
![]() |
1e852e761c | ||
![]() |
c3859f9170 | ||
![]() |
6df4fc6708 | ||
![]() |
596f779254 | ||
![]() |
e18117fd63 | ||
![]() |
b5a9e682be | ||
![]() |
cc016c9bba | ||
![]() |
4895f2e7c2 | ||
![]() |
8418a30cc0 | ||
![]() |
e4e96d3394 | ||
![]() |
e18a6e376c | ||
![]() |
45a41421b6 | ||
![]() |
5a4df9d870 | ||
![]() |
64e235285d | ||
![]() |
a7fb3c82fb | ||
![]() |
305fb86d50 | ||
![]() |
679e971131 | ||
![]() |
b0d4b73874 | ||
![]() |
a176de6d4b | ||
![]() |
b71d332a10 | ||
![]() |
c625051665 | ||
![]() |
255a8362a1 | ||
![]() |
43cc8a1ebf | ||
![]() |
ae9a57b2a8 | ||
![]() |
0ae855d345 | ||
![]() |
b14c141fe3 | ||
![]() |
05590f63c9 | ||
![]() |
2757f97114 | ||
![]() |
6f92c5381d | ||
![]() |
77feaecbfa | ||
![]() |
3ee73f0fea | ||
![]() |
e603645b90 | ||
![]() |
42a4dd98f1 | ||
![]() |
c8cd41b5d4 | ||
![]() |
06bc9c7b22 | ||
![]() |
a2f6299fc1 | ||
![]() |
a575dfb5c3 | ||
![]() |
ccd7f09de6 | ||
![]() |
f9dcb2ea84 | ||
![]() |
2286029b5d | ||
![]() |
82ec769ec5 | ||
![]() |
1a4cac95a1 | ||
![]() |
0200327fa8 | ||
![]() |
941f82b60c | ||
![]() |
3d7c61bbed | ||
![]() |
1afb30344a | ||
![]() |
db428f2141 | ||
![]() |
856895ddf5 | ||
![]() |
d3249432c9 | ||
![]() |
7af23698bc | ||
![]() |
6e3cf896f7 | ||
![]() |
b297b78086 | ||
![]() |
4bdf87d383 | ||
![]() |
e47364f34d | ||
![]() |
fe7d32dc5d | ||
![]() |
62a003a053 | ||
![]() |
b5d1421dfd | ||
![]() |
ebab2bd0f9 | ||
![]() |
e7babb4266 | ||
![]() |
1a042c2dad | ||
![]() |
731ca046f6 | ||
![]() |
c844276e95 | ||
![]() |
9f9cdb62eb | ||
![]() |
c73830439f | ||
![]() |
940b5d62b4 | ||
![]() |
caa8fc4d10 | ||
![]() |
67b238c8d1 | ||
![]() |
85ba8a6cde | ||
![]() |
667fde997d | ||
![]() |
de2588f6e0 | ||
![]() |
02357193ad | ||
![]() |
4889373819 | ||
![]() |
d01a62fec5 | ||
![]() |
a7647fee28 | ||
![]() |
7621c450c7 | ||
![]() |
3d02b5af21 | ||
![]() |
67f8d82818 | ||
![]() |
2ae986d45b | ||
![]() |
4eddd8b75a | ||
![]() |
298d7504fd | ||
![]() |
d313d82eb7 | ||
![]() |
65750fec9b | ||
![]() |
4d660f926d | ||
![]() |
105b34bd77 | ||
![]() |
5d7f33ad76 | ||
![]() |
5fdf78ed30 | ||
![]() |
fa7d7415d7 | ||
![]() |
b64d14004a | ||
![]() |
0a8380cbe1 | ||
![]() |
9eb06fd59d | ||
![]() |
b86c58b0ea | ||
![]() |
bba9ad3243 | ||
![]() |
d40a4aa970 | ||
![]() |
05c32c51fd | ||
![]() |
6aa44d5b82 | ||
![]() |
f9dbce8bf4 | ||
![]() |
6a801fc058 | ||
![]() |
bf67458d83 | ||
![]() |
db8a94d5e2 | ||
![]() |
ca0fe488ba | ||
![]() |
4a22b463d1 | ||
![]() |
e24989b446 | ||
![]() |
f2df72e014 | ||
![]() |
77542fc842 | ||
![]() |
069d8024a4 | ||
![]() |
07bd208c7d | ||
![]() |
6970a8a87a | ||
![]() |
2c95c0b3a1 | ||
![]() |
02897fb9a3 | ||
![]() |
57239769ba | ||
![]() |
818253ced4 | ||
![]() |
b6316b4904 | ||
![]() |
8983f665cf | ||
![]() |
a8f95c36a6 | ||
![]() |
3bb435c292 | ||
![]() |
e35b21823e | ||
![]() |
9491de2bd1 | ||
![]() |
b933a53aa3 | ||
![]() |
174cc23309 | ||
![]() |
c181fb6de0 | ||
![]() |
86ab5f76e0 | ||
![]() |
8747d01e7b | ||
![]() |
1766df3faa | ||
![]() |
aa5b29c560 | ||
![]() |
72c9ca2567 | ||
![]() |
1cdd535f21 | ||
![]() |
54168c9bdb | ||
![]() |
a332cd8aba | ||
![]() |
60604f7905 | ||
![]() |
02f1dce137 | ||
![]() |
a0e18051c7 | ||
![]() |
c225ed0a1a | ||
![]() |
f1895fa826 | ||
![]() |
88356a95e6 | ||
![]() |
186151008f | ||
![]() |
7adb8d5ddc | ||
![]() |
aa1c539683 | ||
![]() |
a8cdb86b23 | ||
![]() |
b3454bfd9c | ||
![]() |
834847988d | ||
![]() |
caf15534bb | ||
![]() |
10cb2e31c4 | ||
![]() |
85c9f9facf | ||
![]() |
5ff7b3bb1a | ||
![]() |
e5ba423d6d | ||
![]() |
b30d4ef7cf | ||
![]() |
00e563f1b8 | ||
![]() |
cf06f3b81d | ||
![]() |
a781fcca86 | ||
![]() |
764550f2e1 | ||
![]() |
7396bcc585 | ||
![]() |
cdafd94550 | ||
![]() |
1f86a0a76f | ||
![]() |
dfa9f0e11d | ||
![]() |
05187d7bf4 | ||
![]() |
7bdfa7b9ec | ||
![]() |
c4c64a8bed | ||
![]() |
6ce88cd5af | ||
![]() |
112b2c22f7 | ||
![]() |
06a35fb7db | ||
![]() |
cf5fca0464 | ||
![]() |
9d7e99eeb7 | ||
![]() |
318871f8a9 | ||
![]() |
4162dfdc4e | ||
![]() |
36f16b0ff2 | ||
![]() |
8f7aca7b69 | ||
![]() |
b0270f1ab7 | ||
![]() |
2511402400 | ||
![]() |
90e55cd711 | ||
![]() |
7eb1b8c2fe | ||
![]() |
487782a6d1 | ||
![]() |
800b8abe39 | ||
![]() |
1b592e6885 | ||
![]() |
d81febd3f4 | ||
![]() |
45eb1efc6f | ||
![]() |
fc00c6d885 | ||
![]() |
30c9f4f926 | ||
![]() |
5d6634906d | ||
![]() |
5eb7aed0ca | ||
![]() |
2a965a6e44 | ||
![]() |
d2c733628f | ||
![]() |
a18a629c19 | ||
![]() |
0b163aac7d | ||
![]() |
07fa7504fb | ||
![]() |
8b6e54a01b | ||
![]() |
dc000d2289 | ||
![]() |
da51765f5c | ||
![]() |
ecaec0332d | ||
![]() |
3a905f80df | ||
![]() |
3ad4caa3d7 | ||
![]() |
ad65fc27bc | ||
![]() |
d2537dacc6 | ||
![]() |
1804006da0 | ||
![]() |
5000c426c6 | ||
![]() |
e3e64c103d | ||
![]() |
c3991b591a | ||
![]() |
2e989b16ad | ||
![]() |
a2ef0caa07 | ||
![]() |
e99840f82c | ||
![]() |
b27e89b40e | ||
![]() |
dddba4ba45 | ||
![]() |
0fbb334ad9 | ||
![]() |
b257de57d9 | ||
![]() |
f215ae9dd9 | ||
![]() |
c3716015c4 | ||
![]() |
ee3ab45012 | ||
![]() |
7f2b7340b9 | ||
![]() |
dfca3c2448 | ||
![]() |
757e4cf9e1 | ||
![]() |
d3c7cbbfb0 | ||
![]() |
4025ac712f | ||
![]() |
21c0e93ee9 | ||
![]() |
015281078a | ||
![]() |
6d012ea7c0 | ||
![]() |
cf3ca816a8 | ||
![]() |
2976f843b5 | ||
![]() |
9ad05b55d9 | ||
![]() |
194adcde9c | ||
![]() |
d75087ede5 | ||
![]() |
968cf641b8 | ||
![]() |
f12ffe1e49 | ||
![]() |
9d45071e3f | ||
![]() |
8bb5763ea0 | ||
![]() |
bd8cb4f166 | ||
![]() |
31bf0a0105 | ||
![]() |
4b178e88a4 | ||
![]() |
d9be9fe6d5 | ||
![]() |
b9339a290a | ||
![]() |
220ec1906c | ||
![]() |
52032c6c7f | ||
![]() |
0d5bdaf037 | ||
![]() |
aace1da358 | ||
![]() |
3ecbb235cc | ||
![]() |
39b110b9b0 | ||
![]() |
7e6b087773 | ||
![]() |
9ed629d838 | ||
![]() |
f620d2bb2f | ||
![]() |
5cc3636be7 | ||
![]() |
1e78314638 | ||
![]() |
71ce7373a3 | ||
![]() |
9e68117a33 | ||
![]() |
33bb9c230b | ||
![]() |
f0f2c12d91 | ||
![]() |
2840821594 | ||
![]() |
edfd83c3a7 | ||
![]() |
ee88f34a91 | ||
![]() |
fa4c250001 | ||
![]() |
59d6f827c3 | ||
![]() |
26ea02aa8f | ||
![]() |
d73b86132b | ||
![]() |
8034faadca | ||
![]() |
3c2b7c0d69 | ||
![]() |
563ad02c65 | ||
![]() |
fe89b663e7 | ||
![]() |
dcd07d3135 | ||
![]() |
cf92142b64 | ||
![]() |
8bf2299407 | ||
![]() |
bdcccd9d83 | ||
![]() |
2507ec1f4b | ||
![]() |
5b8b6167ac | ||
![]() |
b5d5a720dc | ||
![]() |
1fbdb80430 | ||
![]() |
c4d03088c0 | ||
![]() |
bdd87bcc87 | ||
![]() |
77dd0b2fd3 | ||
![]() |
f61d605d6d | ||
![]() |
21fbe07218 | ||
![]() |
57f792d88f | ||
![]() |
3ac5b780ff | ||
![]() |
a36709cc8d | ||
![]() |
18a18aa6c4 | ||
![]() |
f4a71ea83f | ||
![]() |
ef759e9c63 | ||
![]() |
11df364b10 | ||
![]() |
146b43f8c5 | ||
![]() |
9c689d757c | ||
![]() |
829c8e611e | ||
![]() |
28ad27a3b3 | ||
![]() |
4a48f0d659 | ||
![]() |
26a964b90a | ||
![]() |
4335a7c653 | ||
![]() |
377396ba16 | ||
![]() |
8ffeffd9d2 | ||
![]() |
b578d08e8a | ||
![]() |
83f6e168e5 | ||
![]() |
ab6535382d | ||
![]() |
49885757db | ||
![]() |
6b68d3d365 | ||
![]() |
280f6e4752 | ||
![]() |
e8b68e67a7 | ||
![]() |
c1075ebb8c | ||
![]() |
3a02c627fa | ||
![]() |
240b4078cd | ||
![]() |
433c0defbe | ||
![]() |
8bb964e1bd | ||
![]() |
e33c743f4a | ||
![]() |
01e99c0229 | ||
![]() |
8805a7e555 | ||
![]() |
80c357c00f | ||
![]() |
6e9d3bf8e9 | ||
![]() |
9c88dea584 | ||
![]() |
4e4fc1767f | ||
![]() |
b80997cc43 | ||
![]() |
cc3c5772c5 | ||
![]() |
439b35c310 | ||
![]() |
6ba6991ecd | ||
![]() |
a9640d9c94 | ||
![]() |
a5225a3606 | ||
![]() |
d52d068469 | ||
![]() |
09b3611a63 | ||
![]() |
ab2f05d3e9 | ||
![]() |
90ac0c870f | ||
![]() |
0fd113db59 | ||
![]() |
1b43323f5e | ||
![]() |
ee21bc5d7f | ||
![]() |
a981117f2d | ||
![]() |
d3b1a2c95e | ||
![]() |
f5c35ac0c1 | ||
![]() |
6108e581b1 | ||
![]() |
c8c68f05ec | ||
![]() |
b80467dc58 | ||
![]() |
6e9f0eca03 | ||
![]() |
22dbbd4b71 | ||
![]() |
0239938d99 | ||
![]() |
9f24897814 | ||
![]() |
b29c96639b | ||
![]() |
49b1d6e7fe | ||
![]() |
e150b0cf0f | ||
![]() |
5169721916 | ||
![]() |
dd0f11a062 | ||
![]() |
516cb31635 | ||
![]() |
6718b40181 | ||
![]() |
799d527fb5 | ||
![]() |
7fdf00a9fb | ||
![]() |
7d54620f34 | ||
![]() |
38f183a683 | ||
![]() |
a75bad3a83 | ||
![]() |
45fbbbaea1 | ||
![]() |
d89c259d7e | ||
![]() |
6490dcf099 | ||
![]() |
6349760a2c | ||
![]() |
c1a6f83f12 | ||
![]() |
171e114ec1 | ||
![]() |
b5664f9eaf | ||
![]() |
ca7384f96e | ||
![]() |
11b03b5669 | ||
![]() |
34798189ca | ||
![]() |
3737170d37 | ||
![]() |
6af07aa348 | ||
![]() |
5caef34209 | ||
![]() |
d1935603a9 | ||
![]() |
58b36514ad | ||
![]() |
4cea5420b3 | ||
![]() |
a0d41e1d97 | ||
![]() |
e7e1a7d46e | ||
![]() |
2a9526de17 | ||
![]() |
fed8f905c8 | ||
![]() |
0d290ac21e | ||
![]() |
8a0fb21988 | ||
![]() |
605619a5ee | ||
![]() |
972eb34ed9 | ||
![]() |
cc6a2f0338 | ||
![]() |
6ebf2ec9ec | ||
![]() |
9ecee11af6 | ||
![]() |
9a1669103b | ||
![]() |
368ea0586d | ||
![]() |
4a7db6ee71 | ||
![]() |
a10b9572c7 | ||
![]() |
0b47bf1f0b | ||
![]() |
5f4d286556 | ||
![]() |
b23ab3c65a | ||
![]() |
7c199b36f8 | ||
![]() |
d4e55ee030 | ||
![]() |
f3ec82543e | ||
![]() |
4013d4c48d | ||
![]() |
93ac908776 | ||
![]() |
2ad1a53038 | ||
![]() |
6b95fa5942 | ||
![]() |
94e6743a7b | ||
![]() |
c4a5d12df4 | ||
![]() |
8db086f65b | ||
![]() |
b470c3484b | ||
![]() |
3ba59fbebe | ||
![]() |
f3fab5c1f5 | ||
![]() |
94b80db968 | ||
![]() |
240e1fd8f3 | ||
![]() |
5d6ca6dd44 | ||
![]() |
5cfa98e400 | ||
![]() |
9c36f05ac4 | ||
![]() |
b8a1537b58 | ||
![]() |
0ad16e25ef | ||
![]() |
3dd342baf3 | ||
![]() |
472c23d35f | ||
![]() |
1724fcc150 | ||
![]() |
be9010f459 | ||
![]() |
2176281894 | ||
![]() |
323810e31a | ||
![]() |
c9efebbf0c | ||
![]() |
3b84dba72e | ||
![]() |
987e77780a | ||
![]() |
b302d1f3fc | ||
![]() |
534bb74069 | ||
![]() |
02b5da710b | ||
![]() |
f999258a42 | ||
![]() |
6ecf2e8c71 | ||
![]() |
aaa78259b5 | ||
![]() |
2371a6cc72 | ||
![]() |
46166160fe | ||
![]() |
7da434f455 | ||
![]() |
0a77232444 | ||
![]() |
9af17fa5a0 | ||
![]() |
11c174aca3 | ||
![]() |
9cf86b234b | ||
![]() |
bcbae1388d | ||
![]() |
f740312247 | ||
![]() |
f79ffb2981 | ||
![]() |
2d120cb6ba | ||
![]() |
ad782166c7 | ||
![]() |
bc9202cf02 | ||
![]() |
0d385d3b67 | ||
![]() |
76fa24aba1 | ||
![]() |
95ae37cd87 | ||
![]() |
bc1d22f4ec | ||
![]() |
67e1872ab6 | ||
![]() |
516c2b0cdb | ||
![]() |
60f067b68f | ||
![]() |
ff76567061 | ||
![]() |
93488cfa0f | ||
![]() |
9655619667 | ||
![]() |
32736b3336 | ||
![]() |
c77b78928e | ||
![]() |
a7ba242f1f | ||
![]() |
043d58d697 | ||
![]() |
6408890543 | ||
![]() |
c5f7d7ae85 | ||
![]() |
7ab27cd9bf | ||
![]() |
9932c0cb91 | ||
![]() |
565d4f85c1 | ||
![]() |
0ae55fb58b | ||
![]() |
812665cda4 | ||
![]() |
a1588cd6af | ||
![]() |
6220804639 | ||
![]() |
c0d5ceb18c | ||
![]() |
ec33f6fe78 | ||
![]() |
b72e0f1d87 | ||
![]() |
b65d4a9efd | ||
![]() |
f56f391f81 | ||
![]() |
2d4625ad69 | ||
![]() |
ed0e583556 | ||
![]() |
e5b6f05e5b | ||
![]() |
45e9b8b119 | ||
![]() |
a9fa9a5dd3 | ||
![]() |
e62ee331c7 | ||
![]() |
34b5928707 | ||
![]() |
fdf2f8a2ea | ||
![]() |
d51f483855 | ||
![]() |
208b281505 | ||
![]() |
a168df342d | ||
![]() |
5c7120aa36 | ||
![]() |
6d4489e822 | ||
![]() |
d90ec3ccca | ||
![]() |
82977a43d3 | ||
![]() |
c6a0c7eccc | ||
![]() |
ad51952802 | ||
![]() |
e7cb3f1979 | ||
![]() |
9c348b6330 | ||
![]() |
f275389ffe | ||
![]() |
2dd9229dc4 | ||
![]() |
fd78373b5c | ||
![]() |
6b6f115d7e | ||
![]() |
fbb406842e | ||
![]() |
e141374831 | ||
![]() |
896526c24b | ||
![]() |
11b5de9463 | ||
![]() |
f6991cd4dc | ||
![]() |
d12857c68c | ||
![]() |
f8467d253e | ||
![]() |
9b3d727e8e | ||
![]() |
0a8514d7cd | ||
![]() |
34dc47ad10 | ||
![]() |
60de2a82c7 | ||
![]() |
8ffd540c85 | ||
![]() |
28eda7d1f0 | ||
![]() |
06095b1fec | ||
![]() |
7abff358a5 | ||
![]() |
3e18d70483 | ||
![]() |
02f64ada2d | ||
![]() |
f8fa676ac8 | ||
![]() |
7a7f986444 | ||
![]() |
8cbbdf21f3 | ||
![]() |
7440c34901 | ||
![]() |
7be60d4569 | ||
![]() |
a50622cbfd | ||
![]() |
fb41b024c0 | ||
![]() |
80ac4c0269 | ||
![]() |
0e0677b690 | ||
![]() |
50d9e3efe6 | ||
![]() |
ca28006d76 | ||
![]() |
ac3711e6ab | ||
![]() |
5901964bf6 | ||
![]() |
b24c40f2df | ||
![]() |
2cb7a80f98 | ||
![]() |
3ac7c687be | ||
![]() |
f05de2b28c | ||
![]() |
1b3d3d5cc3 | ||
![]() |
eba64f84ef | ||
![]() |
a9be2adf06 | ||
![]() |
55885f49f2 | ||
![]() |
e4f692ce6f | ||
![]() |
005bc8994d | ||
![]() |
df2d0cd3e3 | ||
![]() |
b2388b74d9 | ||
![]() |
bcf32f8331 | ||
![]() |
f68a7636c5 | ||
![]() |
0e98e0f65f | ||
![]() |
0e8164c07a | ||
![]() |
7aadcc1f97 | ||
![]() |
d9aff9d7b0 | ||
![]() |
46e11c2fa8 | ||
![]() |
522477d5a4 | ||
![]() |
cc2b592221 | ||
![]() |
bd86111dd8 | ||
![]() |
f0514008fa | ||
![]() |
3c8a66abbe | ||
![]() |
f1d509be03 | ||
![]() |
fbdc7d44bc | ||
![]() |
cae386465e | ||
![]() |
31847e3a69 | ||
![]() |
5787e1506c | ||
![]() |
9a29f64128 | ||
![]() |
6c0e4a9e8f | ||
![]() |
381480813d | ||
![]() |
1fc9eb6629 | ||
![]() |
6374cc6480 | ||
![]() |
dd560a517c | ||
![]() |
5d4216d648 | ||
![]() |
c0da80b567 | ||
![]() |
e33cea9ff7 | ||
![]() |
0defe97892 | ||
![]() |
9f399a1bbe | ||
![]() |
f51cf87361 | ||
![]() |
d8cbff65f1 | ||
![]() |
570824100c | ||
![]() |
ee66ffc8de | ||
![]() |
8678b36e71 | ||
![]() |
187b03446e | ||
![]() |
3312a041fd | ||
![]() |
235a34c10c | ||
![]() |
f84533838a | ||
![]() |
5fbe36d43e | ||
![]() |
1dec6854e5 | ||
![]() |
bfdca4b274 | ||
![]() |
e164fdbef8 | ||
![]() |
77e71cf18b | ||
![]() |
d849dab7ba | ||
![]() |
7768084655 | ||
![]() |
b90a51490f | ||
![]() |
2049993941 | ||
![]() |
bd9f03010f | ||
![]() |
6261994fcf | ||
![]() |
e693ba17e0 | ||
![]() |
bfb509ccb8 | ||
![]() |
c4b45fb110 | ||
![]() |
b8a4399078 | ||
![]() |
50f05ac51a | ||
![]() |
fa7018bbec | ||
![]() |
9c2c57831b | ||
![]() |
fb1702647d | ||
![]() |
b3ab0a0199 | ||
![]() |
65aaea6ec6 | ||
![]() |
72671b93d2 | ||
![]() |
2512eb1e4c | ||
![]() |
5c43f0861f | ||
![]() |
345081ba15 | ||
![]() |
de5c7b0414 | ||
![]() |
9ce64f8990 | ||
![]() |
6ef4086683 | ||
![]() |
b146f52317 | ||
![]() |
001bd78bcb | ||
![]() |
ba4ec8f8c1 | ||
![]() |
8aa3a6cc15 | ||
![]() |
ed43e1d3a4 | ||
![]() |
b7654c0fce | ||
![]() |
cbcfeee322 | ||
![]() |
cb982294bd | ||
![]() |
551d52103d | ||
![]() |
128ccbaa57 | ||
![]() |
580f2058a7 | ||
![]() |
03ca50f292 | ||
![]() |
5e2753d2fc | ||
![]() |
46e02ebaff | ||
![]() |
c354868270 | ||
![]() |
3f3ffe3060 | ||
![]() |
ba24cb6e72 | ||
![]() |
0e9c6b2bba | ||
![]() |
5bdaad9c13 | ||
![]() |
99f3cfdf8a | ||
![]() |
cb37df6a61 | ||
![]() |
7feb0807e2 | ||
![]() |
5d4591a3ec | ||
![]() |
29797b93f7 | ||
![]() |
850c082649 | ||
![]() |
af875eec50 | ||
![]() |
0854f29b7c | ||
![]() |
0c7eb431e6 | ||
![]() |
8827d9e88f | ||
![]() |
059ecd10a2 | ||
![]() |
5e04a87cc6 | ||
![]() |
2bcf9717ed | ||
![]() |
64cf4b2258 | ||
![]() |
599569bc53 | ||
![]() |
94a02e7613 | ||
![]() |
94d1375be3 | ||
![]() |
4296f227cf | ||
![]() |
cc27986cac | ||
![]() |
5ebbeff42d | ||
![]() |
e383533ff3 | ||
![]() |
694fa3d014 | ||
![]() |
e170681016 | ||
![]() |
06db5476e4 | ||
![]() |
1de41ab123 | ||
![]() |
5a5f01fcd4 | ||
![]() |
4d69cf1cc3 | ||
![]() |
cf598bb5fd | ||
![]() |
1624cb1046 | ||
![]() |
572af57ffe | ||
![]() |
d441fb2ec5 | ||
![]() |
624c93bb38 | ||
![]() |
b01efc55a2 | ||
![]() |
44e37a8026 | ||
![]() |
1cad55f721 | ||
![]() |
b8f83074ce | ||
![]() |
511f3335a1 | ||
![]() |
54ba09ec1c | ||
![]() |
24a34b1739 | ||
![]() |
a06b1eaf69 | ||
![]() |
f5c56152d5 | ||
![]() |
7ef145d4ce | ||
![]() |
a752232de8 | ||
![]() |
c99025be26 | ||
![]() |
653805584b | ||
![]() |
acd31d4ae3 | ||
![]() |
6c32337c8e | ||
![]() |
eae8154753 | ||
![]() |
d1489fe76f | ||
![]() |
633c82d9fe | ||
![]() |
a83d577b42 | ||
![]() |
dea513cdbd | ||
![]() |
76f92cc985 | ||
![]() |
5058272818 | ||
![]() |
4c8e3aa7c4 | ||
![]() |
2215adf5cf | ||
![]() |
5990bd7ca3 | ||
![]() |
d4f69a3652 | ||
![]() |
3149c52be1 | ||
![]() |
03112bbeea | ||
![]() |
f1466a3b86 | ||
![]() |
16bff198de | ||
![]() |
941d175087 | ||
![]() |
0cebf1acb1 | ||
![]() |
08586868f5 | ||
![]() |
3aa759fc49 | ||
![]() |
b96330df03 | ||
![]() |
101118a60e | ||
![]() |
cf92d8c536 | ||
![]() |
a70163042d | ||
![]() |
1baaf621be | ||
![]() |
2b12aac24e | ||
![]() |
ca457ccf3c | ||
![]() |
8819634b61 | ||
![]() |
ac1359b3d8 | ||
![]() |
ffb1722ca8 | ||
![]() |
75739d8621 | ||
![]() |
79cacade5c | ||
![]() |
1807f44e03 | ||
![]() |
55b46bfa7a | ||
![]() |
8c70e5aaad | ||
![]() |
5872b72f80 | ||
![]() |
5bc9ea0e47 | ||
![]() |
31a3f1100a | ||
![]() |
c737378ee1 | ||
![]() |
e4c610af62 | ||
![]() |
070aa714a0 | ||
![]() |
f39f3b612a | ||
![]() |
139dd22ce6 | ||
![]() |
94755a5773 | ||
![]() |
a8f09b4063 | ||
![]() |
e2e272aeb6 | ||
![]() |
6cfd991e91 | ||
![]() |
9830cbfd5d | ||
![]() |
f9779d3e97 | ||
![]() |
96533e4c8f | ||
![]() |
6234190cfe | ||
![]() |
1b803454ce | ||
![]() |
490d2cfb71 | ||
![]() |
5874b4cdcf | ||
![]() |
e575fffd23 | ||
![]() |
f17a42dc27 | ||
![]() |
24e11c6dcb | ||
![]() |
12e7ea3a39 | ||
![]() |
20b5e92656 | ||
![]() |
2e195d848f | ||
![]() |
a2935654b9 | ||
![]() |
cdeb91ea12 | ||
![]() |
53637d486d | ||
![]() |
f7a6eb4f69 | ||
![]() |
6ee8c8b60e | ||
![]() |
d9c19e6e11 | ||
![]() |
baef267f33 | ||
![]() |
30df9e7706 | ||
![]() |
3c07f92e72 | ||
![]() |
da1f9c2823 | ||
![]() |
2c02abfdd4 | ||
![]() |
cb13418bab | ||
![]() |
7e682af472 | ||
![]() |
4e2cebc6d6 | ||
![]() |
7b26a952bd | ||
![]() |
8051e5d4f4 | ||
![]() |
b0cee0bc46 | ||
![]() |
41341c76cf | ||
![]() |
2bd1a68559 | ||
![]() |
df58b5d9bd | ||
![]() |
b8ce10f9a1 | ||
![]() |
17d674e1cc | ||
![]() |
98f84c7c17 | ||
![]() |
1f0ea73463 | ||
![]() |
0d874899ea | ||
![]() |
10e796e9d5 | ||
![]() |
298ea3ff46 | ||
![]() |
a6217ca9b9 | ||
![]() |
ac183b1394 | ||
![]() |
93cd73246a | ||
![]() |
2e92fefc0a | ||
![]() |
92beab82e2 | ||
![]() |
370e458f2a | ||
![]() |
5c794234e7 | ||
![]() |
fa55ba72a4 | ||
![]() |
682501eb47 | ||
![]() |
19acbf0d2a | ||
![]() |
2205006d31 | ||
![]() |
d41fe01736 | ||
![]() |
4e1b399efd | ||
![]() |
06b4c82a37 | ||
![]() |
c832982d94 | ||
![]() |
93fe77de8d | ||
![]() |
588211223b | ||
![]() |
b85e175812 | ||
![]() |
d2ee08c6fe | ||
![]() |
6a1c59be2c | ||
![]() |
97efcab310 | ||
![]() |
d6fc2d9452 | ||
![]() |
99b4c9d5f4 | ||
![]() |
115dc4fa4b | ||
![]() |
7de11cfcfa | ||
![]() |
7f0a9a5897 | ||
![]() |
e8e4f6a515 | ||
![]() |
93cffe8631 | ||
![]() |
39a47c939c | ||
![]() |
3bdf80574d | ||
![]() |
756070cd81 | ||
![]() |
55133b3a27 | ||
![]() |
8619bdeec6 | ||
![]() |
cf196c09ac | ||
![]() |
73a43bfd1d | ||
![]() |
fa33f27153 | ||
![]() |
c7cc4bcbd5 | ||
![]() |
d58852be66 | ||
![]() |
8ab945a67f | ||
![]() |
ecbcb9496d | ||
![]() |
af7a487706 | ||
![]() |
316f187bee | ||
![]() |
2f45e6c2ae | ||
![]() |
9a488cf250 | ||
![]() |
255f35b979 | ||
![]() |
fc94569a0d | ||
![]() |
d0a389ce36 | ||
![]() |
f4fb4bc91c | ||
![]() |
869cdc399f | ||
![]() |
de8575c890 | ||
![]() |
e900918e51 | ||
![]() |
bbecf6ca37 | ||
![]() |
cb3ab9b51e | ||
![]() |
1a42bd5c4c | ||
![]() |
556c355e9c | ||
![]() |
61e13bf84d | ||
![]() |
a1ed09f2cc | ||
![]() |
ba94485ca1 | ||
![]() |
8a3fc2e82b | ||
![]() |
0265aae247 | ||
![]() |
e0bb26e964 | ||
![]() |
057bb6ea0a | ||
![]() |
79d3d4ceae | ||
![]() |
ba043c9ebb | ||
![]() |
d60fe7e7cd | ||
![]() |
a6ddac9004 | ||
![]() |
9580c4f1ec | ||
![]() |
d89ba40010 | ||
![]() |
82efbee443 | ||
![]() |
b67009dee3 | ||
![]() |
4ef7bb9bbe | ||
![]() |
78cc547782 | ||
![]() |
63807e443a | ||
![]() |
1661daa911 | ||
![]() |
5df7cb0fb5 | ||
![]() |
bd65258905 | ||
![]() |
68857dc272 | ||
![]() |
55a5e17cf2 | ||
![]() |
6a8d9a91cb | ||
![]() |
fba13dcc90 | ||
![]() |
1f3da9cf1a | ||
![]() |
8ca92254b6 | ||
![]() |
fd9124279b | ||
![]() |
f88ed6b69e | ||
![]() |
7142b4ecac | ||
![]() |
2c238baa24 | ||
![]() |
3fc667f55d | ||
![]() |
3884e16b46 | ||
![]() |
3405fa60ec | ||
![]() |
c212e317c3 | ||
![]() |
074dec36ad | ||
![]() |
53363cf7e8 | ||
![]() |
7f8c4293b4 | ||
![]() |
ace20782f1 | ||
![]() |
0d8cd2d067 | ||
![]() |
af272c6730 | ||
![]() |
88ef8cc51a | ||
![]() |
5651f4a3fe | ||
![]() |
f988a1164d | ||
![]() |
0ccac69ce1 | ||
![]() |
1a476258c7 | ||
![]() |
df23f03131 | ||
![]() |
09ae02fd56 | ||
![]() |
7c13e7cdfd | ||
![]() |
6e612a45ff | ||
![]() |
418be1eeb6 | ||
![]() |
026f660889 | ||
![]() |
4ad589dcf6 | ||
![]() |
952bf5497f | ||
![]() |
f4c13645d2 | ||
![]() |
3351846b0e | ||
![]() |
ee10f9c4ce | ||
![]() |
099a653bed | ||
![]() |
bb3feceb57 | ||
![]() |
1ab6352a87 | ||
![]() |
b4274e4a26 | ||
![]() |
429dbd4215 | ||
![]() |
cce438951d | ||
![]() |
4461e0f262 | ||
![]() |
fe2e357ae9 | ||
![]() |
e618a8cc0c | ||
![]() |
627a208d9f | ||
![]() |
2f19b56d5e | ||
![]() |
0f40a73bb4 | ||
![]() |
f1fc54d29d | ||
![]() |
a29aaebd4c | ||
![]() |
1f60296415 | ||
![]() |
52594717ca | ||
![]() |
20f0abacc0 | ||
![]() |
0dd20fb309 | ||
![]() |
ebdf9a8658 | ||
![]() |
3168b30535 | ||
![]() |
292294fb96 | ||
![]() |
884fbdd5ce | ||
![]() |
b96eab3e5e | ||
![]() |
14a47f5dff | ||
![]() |
5e5e89ea18 | ||
![]() |
d423cbf8eb | ||
![]() |
168b3b50cd | ||
![]() |
4c73826baf | ||
![]() |
47522546e6 | ||
![]() |
ecdbddc1fa | ||
![]() |
f99d26231f | ||
![]() |
10a6c56fec | ||
![]() |
487d84c8f9 | ||
![]() |
119664b55e | ||
![]() |
e7064bda25 | ||
![]() |
bf66f39ca4 | ||
![]() |
d95a843d93 | ||
![]() |
76d33fdaf1 | ||
![]() |
0b4d1fe641 | ||
![]() |
1e70901b9e | ||
![]() |
dac8560e14 | ||
![]() |
5e949b062a | ||
![]() |
2d2318438c | ||
![]() |
6ce2bf6be5 | ||
![]() |
b32ba33250 | ||
![]() |
c97b48cf3b | ||
![]() |
2b3123b925 | ||
![]() |
5f160be8f6 | ||
![]() |
a3ab6a99e3 | ||
![]() |
571a63f86e | ||
![]() |
6e5d4b592d | ||
![]() |
f29024795b | ||
![]() |
d6158c0fcc | ||
![]() |
ed8aa51c76 | ||
![]() |
813226e331 | ||
![]() |
02fa5656bb | ||
![]() |
5c272583e7 | ||
![]() |
d9903c4cf9 | ||
![]() |
768d147cb2 | ||
![]() |
2d9095263e | ||
![]() |
9f10bd46ac | ||
![]() |
089906790e | ||
![]() |
6b858ce8af | ||
![]() |
8e3953a9d5 | ||
![]() |
1af72e3671 | ||
![]() |
b41d0be952 | ||
![]() |
f5a8ce4aca | ||
![]() |
186e3a6d98 | ||
![]() |
e479fbed0c | ||
![]() |
c70faeae96 | ||
![]() |
09a83b90ea | ||
![]() |
80b3572627 | ||
![]() |
c51c8f7e8f | ||
![]() |
14ee3f1ddc | ||
![]() |
7f3f271a59 | ||
![]() |
93dd971b39 | ||
![]() |
650d4d7faa | ||
![]() |
e94da1ad0f | ||
![]() |
dcea8a6ced | ||
![]() |
b0b3b36392 | ||
![]() |
30ac390471 | ||
![]() |
c4a01cf8d2 | ||
![]() |
0184aadb09 | ||
![]() |
d72c28a135 | ||
![]() |
bf4c399b19 | ||
![]() |
033a16b67e | ||
![]() |
cfa08c5229 | ||
![]() |
d375361072 | ||
![]() |
f02b6f1119 | ||
![]() |
9a25e75947 | ||
![]() |
6b751de7ad | ||
![]() |
bf18ff9fb9 | ||
![]() |
3d7a3afca7 | ||
![]() |
360f36eb71 | ||
![]() |
9f1c5d70bc | ||
![]() |
cc40c6d16a | ||
![]() |
283349f17e | ||
![]() |
59b6d56207 | ||
![]() |
353fb3be7d | ||
![]() |
bedb587290 | ||
![]() |
4ef2e91fd5 | ||
![]() |
a0518295d5 | ||
![]() |
774ebc760c | ||
![]() |
ae9506d0bb | ||
![]() |
c0a7934828 | ||
![]() |
227330563a | ||
![]() |
4d885b71ff | ||
![]() |
e16b874469 | ||
![]() |
9aaeefeb8e | ||
![]() |
c7d1402320 | ||
![]() |
98eabd2f68 | ||
![]() |
da62528526 | ||
![]() |
b7c7e7f57b | ||
![]() |
45a9c1ca8c | ||
![]() |
5a970e0a2b | ||
![]() |
961c8cc167 | ||
![]() |
0e2ebfe5c4 | ||
![]() |
b97ec8125f | ||
![]() |
62d22d7a2d | ||
![]() |
47a7807cbd | ||
![]() |
b7b7cdcfcf | ||
![]() |
c75bf20a3c | ||
![]() |
edffb794f7 | ||
![]() |
412e9d34d9 | ||
![]() |
700dbcf2a4 | ||
![]() |
fcbb40092a | ||
![]() |
42a9069338 | ||
![]() |
4a848e8222 | ||
![]() |
fed308b59d | ||
![]() |
0e95875912 | ||
![]() |
9f67eb1aaa | ||
![]() |
85235ea5f6 | ||
![]() |
fc43fb17a9 | ||
![]() |
534d343f67 | ||
![]() |
946d5535b4 | ||
![]() |
0f5c678708 | ||
![]() |
cc5d319369 | ||
![]() |
b5107a3f1d | ||
![]() |
1ad4cb40df | ||
![]() |
69bc95a715 | ||
![]() |
677f0dc335 | ||
![]() |
9733d31cd0 | ||
![]() |
e32074c74e | ||
![]() |
aa23a125bf | ||
![]() |
05c429bcd7 | ||
![]() |
e64973c7cc | ||
![]() |
31d0e5e316 | ||
![]() |
8fb400e7ca | ||
![]() |
a3fb8a6514 | ||
![]() |
4c2975ad99 | ||
![]() |
7c6806e75d | ||
![]() |
692a732555 | ||
![]() |
b9753a9f92 | ||
![]() |
812db974c7 | ||
![]() |
9b5c5938ce | ||
![]() |
938475d988 | ||
![]() |
1ee2959e4e | ||
![]() |
a3e62c9ecf | ||
![]() |
3d4ee5906d | ||
![]() |
38ab48b4fd | ||
![]() |
463edd984b | ||
![]() |
0a2fa9984d | ||
![]() |
89efc455e3 | ||
![]() |
3fe2f4f572 | ||
![]() |
712cb1157f | ||
![]() |
4452a84ee0 | ||
![]() |
753a4e9e5e | ||
![]() |
41041cb673 | ||
![]() |
22e5d86324 | ||
![]() |
5ef972c5d9 | ||
![]() |
aa27d2ec2a | ||
![]() |
a99a92a2e9 | ||
![]() |
2d206e7e31 | ||
![]() |
b8a5869f76 | ||
![]() |
583b4aef07 | ||
![]() |
52d4a358a0 | ||
![]() |
eb6310f7bb | ||
![]() |
f65e18c019 | ||
![]() |
b23f505130 | ||
![]() |
876258e68a | ||
![]() |
1667b4b19e | ||
![]() |
4fe025b297 | ||
![]() |
431df618c3 | ||
![]() |
3b117998fb | ||
![]() |
cc7ce8ec45 | ||
![]() |
2b647bcd5b | ||
![]() |
87d24d4cbe | ||
![]() |
a48741d891 | ||
![]() |
3edb0969de | ||
![]() |
f24f0c2954 | ||
![]() |
22b4c445a0 | ||
![]() |
254d46b80f | ||
![]() |
fa06398721 | ||
![]() |
a30f14a15e | ||
![]() |
9cd159ee01 | ||
![]() |
d91e44485c | ||
![]() |
80a8d5443d | ||
![]() |
ec47f7b6ff | ||
![]() |
95641fa780 | ||
![]() |
0f68a57913 | ||
![]() |
531873fb4d | ||
![]() |
39fecb523d | ||
![]() |
87432be102 | ||
![]() |
858cf8ca33 | ||
![]() |
1c0543bcd5 | ||
![]() |
6745f0c56a | ||
![]() |
9b4d86399e | ||
![]() |
9008006ac8 | ||
![]() |
d61be9a0eb | ||
![]() |
3838c2ab62 | ||
![]() |
c9611303d5 | ||
![]() |
00655ef21c | ||
![]() |
c169654bdf | ||
![]() |
e1505339a5 | ||
![]() |
3a2fb402a4 | ||
![]() |
d8982116fb | ||
![]() |
4c346697f0 | ||
![]() |
eb03307bce | ||
![]() |
77336427a4 | ||
![]() |
169b7c91c3 | ||
![]() |
b22bcc568a | ||
![]() |
fbab7413a5 | ||
![]() |
1f6e2511f8 | ||
![]() |
4fbaefe55a | ||
![]() |
127eca3c35 | ||
![]() |
5fa9da25f2 | ||
![]() |
188ce9bf49 | ||
![]() |
0aa4d0fb7b | ||
![]() |
7178cacdc2 | ||
![]() |
d3df4dd3c1 | ||
![]() |
bd342ddc13 | ||
![]() |
5976de6b7a | ||
![]() |
a65ce7e6c6 | ||
![]() |
f19a1147fe | ||
![]() |
9094d73df1 | ||
![]() |
642cefb035 | ||
![]() |
5c79dae4c0 | ||
![]() |
119f2a90b7 | ||
![]() |
c467b890fe | ||
![]() |
3c704ba8da | ||
![]() |
1ac7f5f013 | ||
![]() |
af1c326cff | ||
![]() |
456c5515c8 | ||
![]() |
68efa37bff | ||
![]() |
f53145c540 | ||
![]() |
c196fefe31 | ||
![]() |
d2fc3a22e2 | ||
![]() |
535aba10ee | ||
![]() |
3970da0ad3 | ||
![]() |
c947152c48 | ||
![]() |
b17391014a | ||
![]() |
2cfdae0c45 | ||
![]() |
e53758c1bb | ||
![]() |
ab3f0fc63b | ||
![]() |
2a6162a34d | ||
![]() |
df0f694b01 | ||
![]() |
fec887420d | ||
![]() |
ea95f74d6d | ||
![]() |
ca5dc01207 | ||
![]() |
1e0345a377 | ||
![]() |
5c700916d3 | ||
![]() |
d5c322732f | ||
![]() |
376db101d6 | ||
![]() |
cd487ccaed | ||
![]() |
09f9bb05dc | ||
![]() |
b63359b186 | ||
![]() |
e15388a2a0 | ||
![]() |
a1758a71d2 | ||
![]() |
55b996f5db | ||
![]() |
b44e8673a8 | ||
![]() |
5d31673465 | ||
![]() |
d63a1ab511 | ||
![]() |
9ba0809852 | ||
![]() |
9a97784168 | ||
![]() |
a77d9af989 | ||
![]() |
b4984ea255 | ||
![]() |
6b43c457ff | ||
![]() |
e3aca53899 | ||
![]() |
01ee066163 | ||
![]() |
549d1151b7 | ||
![]() |
4192e2377c | ||
![]() |
7c3ca38eb7 | ||
![]() |
cc132bfad6 | ||
![]() |
4e73063ed3 | ||
![]() |
8f761f44bd | ||
![]() |
b172abaeeb | ||
![]() |
061cef1a5e | ||
![]() |
e9796547c6 | ||
![]() |
558dceac42 | ||
![]() |
9c7b80090a | ||
![]() |
ea8511bcfc | ||
![]() |
19ddf478e2 | ||
![]() |
5cdcbcd5fe | ||
![]() |
803d4a9998 | ||
![]() |
e71eb8dfe2 | ||
![]() |
52f754e83d | ||
![]() |
8193ddf61a | ||
![]() |
b922e9331f | ||
![]() |
f25017313a | ||
![]() |
6c8823fc14 | ||
![]() |
911863ebf4 | ||
![]() |
7f345e7672 | ||
![]() |
26080fbb89 | ||
![]() |
51ea3ff400 | ||
![]() |
8ccc77eb3d | ||
![]() |
5994dd558b | ||
![]() |
b548be35bc | ||
![]() |
2cf1235b78 | ||
![]() |
609fc9196f | ||
![]() |
b7396a736e | ||
![]() |
a64e56c8ad | ||
![]() |
94160903a7 | ||
![]() |
f4948e8f48 | ||
![]() |
ec7302ef1b | ||
![]() |
16f94e68b3 | ||
![]() |
4f63eab453 | ||
![]() |
0f2097595e | ||
![]() |
0edcb26844 | ||
![]() |
5d71afef85 | ||
![]() |
ec0af2f25d | ||
![]() |
248d5ff541 | ||
![]() |
f5334c5aed | ||
![]() |
96c442349f | ||
![]() |
38f62ae622 | ||
![]() |
500b00bd66 | ||
![]() |
54fb4df3aa | ||
![]() |
de09792cdd | ||
![]() |
9864d9e0d2 | ||
![]() |
3ba264c318 | ||
![]() |
c4326ed1ef | ||
![]() |
90438edc17 | ||
![]() |
0eacd84ff3 | ||
![]() |
9987f7a125 | ||
![]() |
c4afc33fc5 | ||
![]() |
7091781692 | ||
![]() |
ac87528bec | ||
![]() |
ee8a2d1e25 | ||
![]() |
25961d71ef | ||
![]() |
25feac1bc4 | ||
![]() |
b2edf9b598 | ||
![]() |
5e81f853e6 | ||
![]() |
997d4fbe53 | ||
![]() |
844a9fb817 | ||
![]() |
2ca7d0dd97 | ||
![]() |
c2fa1bdd49 | ||
![]() |
3de8185506 | ||
![]() |
694cec3459 | ||
![]() |
7b462e1b8e | ||
![]() |
f5cfd0329c | ||
![]() |
92bc93466e | ||
![]() |
54dd556459 | ||
![]() |
8553faf3c8 | ||
![]() |
1631d10365 | ||
![]() |
141f37504d | ||
![]() |
f97795fbb9 | ||
![]() |
ebf133ef80 | ||
![]() |
886525112b | ||
![]() |
9a15494e69 | ||
![]() |
047012d167 | ||
![]() |
dfb0887765 | ||
![]() |
fccf7fe1ca | ||
![]() |
8ed6fcd58e | ||
![]() |
f6f89b6c5a | ||
![]() |
12a81cc9f4 | ||
![]() |
31725d5411 | ||
![]() |
7af18ac0ad | ||
![]() |
41e4f10977 | ||
![]() |
b031905956 | ||
![]() |
e11917b7cb | ||
![]() |
fa98685b1e | ||
![]() |
b665a060f7 | ||
![]() |
41d5256533 | ||
![]() |
1f3e5fb4fc | ||
![]() |
b4b136b43e | ||
![]() |
111a38589e | ||
![]() |
1a9302b8f6 | ||
![]() |
9f7fd8956f | ||
![]() |
511fd293b6 | ||
![]() |
552a87dfcc | ||
![]() |
9d96a021c7 | ||
![]() |
e7a06046a7 | ||
![]() |
46669a1704 | ||
![]() |
8d1a70391e | ||
![]() |
dc3401c94e | ||
![]() |
65b391e651 | ||
![]() |
75c5137e77 | ||
![]() |
4819576b62 | ||
![]() |
e1923bc13b | ||
![]() |
874315c3fc | ||
![]() |
4c8f7bbf50 | ||
![]() |
91d6d620c2 | ||
![]() |
d715aa6867 | ||
![]() |
c507ad86d1 | ||
![]() |
ba0d6fe611 | ||
![]() |
647469f472 | ||
![]() |
cb69364ad2 | ||
![]() |
46caefca7b | ||
![]() |
8cdadd1552 | ||
![]() |
91cf2e2792 | ||
![]() |
923fa473e1 | ||
![]() |
9f36412076 | ||
![]() |
04793978d3 | ||
![]() |
985c1b31e1 | ||
![]() |
96e9bf13fe | ||
![]() |
de352c520c | ||
![]() |
72fd57a685 | ||
![]() |
10db0d8bb1 | ||
![]() |
6c74809400 | ||
![]() |
c25ba19ffd | ||
![]() |
d62bdbb9ff | ||
![]() |
a3c4996291 | ||
![]() |
8a1a341b3a | ||
![]() |
b8613ec09d | ||
![]() |
55d1474e4a | ||
![]() |
87e2bbbfab | ||
![]() |
4f94ad475f | ||
![]() |
9856a811ae | ||
![]() |
11609a63e3 | ||
![]() |
a14e465246 | ||
![]() |
d915fd3052 | ||
![]() |
0c9a78fb8e | ||
![]() |
7ed1d4988b | ||
![]() |
3de7b439b8 | ||
![]() |
d1bbd241aa | ||
![]() |
c2da664bcc | ||
![]() |
5121952a85 | ||
![]() |
1ee9c0cb8d | ||
![]() |
587381440f | ||
![]() |
3ab9a14ce7 | ||
![]() |
30db947d99 | ||
![]() |
3f891ef4ee | ||
![]() |
aa37f6c934 | ||
![]() |
bc9f86f342 | ||
![]() |
762eb57636 | ||
![]() |
91cdf0ecf7 | ||
![]() |
67192d4ea7 | ||
![]() |
7eda67be11 | ||
![]() |
f1ce8a9004 | ||
![]() |
2c4f9ca037 | ||
![]() |
171bed7637 | ||
![]() |
e918adb25d | ||
![]() |
8fdf35b80a | ||
![]() |
6295cf3dc4 | ||
![]() |
d97bcfdca9 | ||
![]() |
106a405733 | ||
![]() |
399f0ea161 | ||
![]() |
150e49f4c2 | ||
![]() |
b97f95efc4 | ||
![]() |
1011c30cc5 | ||
![]() |
4f4d60c105 | ||
![]() |
9682249830 | ||
![]() |
6053b6f94a | ||
![]() |
7b98656bcd | ||
![]() |
069c1f35ca | ||
![]() |
eb13f2b724 | ||
![]() |
ff7a70d31b | ||
![]() |
bd04c1d9f9 | ||
![]() |
f125fd5772 | ||
![]() |
67875b99a3 | ||
![]() |
1f7a7d5cb5 | ||
![]() |
1ca9824191 | ||
![]() |
f801fe307e | ||
![]() |
aa4a0df194 | ||
![]() |
73162e6fb5 | ||
![]() |
03dc527a85 | ||
![]() |
06c8b838b5 | ||
![]() |
303f203c2a | ||
![]() |
e015f8bf8f | ||
![]() |
b75eb71764 | ||
![]() |
42c6920a91 | ||
![]() |
32dfc59d9e | ||
![]() |
226a880645 | ||
![]() |
2602b45ec8 | ||
![]() |
f0f4e4595c | ||
![]() |
63e8dd58ef | ||
![]() |
1c86a543b7 | ||
![]() |
c8fbdde3b8 | ||
![]() |
efc637cb2b | ||
![]() |
68e454712d | ||
![]() |
40d337479e | ||
![]() |
c7a6b5983f | ||
![]() |
ee5de654ab | ||
![]() |
1f30d761a6 | ||
![]() |
7e2960a973 | ||
![]() |
ee7022dc67 | ||
![]() |
ec24b93c17 | ||
![]() |
88c8eef4eb | ||
![]() |
c70388869b | ||
![]() |
34fd64addf | ||
![]() |
3044e78d43 | ||
![]() |
1efc71624a | ||
![]() |
5f9290e572 | ||
![]() |
64a72daa27 | ||
![]() |
0f83db82d9 | ||
![]() |
8f9baafac1 | ||
![]() |
6c896adcff | ||
![]() |
f1ee920463 | ||
![]() |
c617e7da31 | ||
![]() |
6499f5460a | ||
![]() |
e436f6a7b2 | ||
![]() |
db0dfe875a | ||
![]() |
7378277212 | ||
![]() |
4ca6db825c | ||
![]() |
cefdce5002 | ||
![]() |
1577f6ea50 | ||
![]() |
de77132a5a | ||
![]() |
44d3f2192c | ||
![]() |
aace084931 | ||
![]() |
90f2a54165 | ||
![]() |
e139470c56 | ||
![]() |
a1eab7f842 | ||
![]() |
0d1506c3cf | ||
![]() |
cd0037a780 | ||
![]() |
766c2f8bb4 | ||
![]() |
ffbde4ac90 | ||
![]() |
0cacfef325 | ||
![]() |
9321c2191e | ||
![]() |
237a1d50d9 | ||
![]() |
c6ad48e236 | ||
![]() |
b735e66d2f | ||
![]() |
955d4abf13 | ||
![]() |
5422a17a35 | ||
![]() |
2a0496a3a9 | ||
![]() |
f88d22b833 | ||
![]() |
0dfc0af08c | ||
![]() |
6cef37641c | ||
![]() |
949ebeeb97 | ||
![]() |
58f2fc8610 | ||
![]() |
b40923a4cd | ||
![]() |
a63dd811dd | ||
![]() |
4a23216e1e | ||
![]() |
652fedf4d1 | ||
![]() |
ee0fbae2ca | ||
![]() |
4a56461d3c | ||
![]() |
6651dfaf9b | ||
![]() |
de1e97a81f | ||
![]() |
03154e1d83 | ||
![]() |
cc105e5c27 | ||
![]() |
144f1b918b | ||
![]() |
5a8cf38552 | ||
![]() |
aab0c4eb71 | ||
![]() |
8b867d612f | ||
![]() |
d3b35ca2a7 | ||
![]() |
832bc15daa | ||
![]() |
ef588a556a | ||
![]() |
bd97f59395 | ||
![]() |
e325ec26d0 | ||
![]() |
155db2f2e1 | ||
![]() |
8eeba490d1 | ||
![]() |
a4a80f367b | ||
![]() |
46500beefc | ||
![]() |
80debae96d | ||
![]() |
21c051935f | ||
![]() |
5789790d32 | ||
![]() |
bf7e50eb32 | ||
![]() |
fc93521e02 | ||
![]() |
4edebacba5 | ||
![]() |
faea29a268 | ||
![]() |
c6796494b4 | ||
![]() |
484756c834 | ||
![]() |
ce00f093d6 | ||
![]() |
3feea879dd | ||
![]() |
ccb5910db0 | ||
![]() |
56c0eacb08 | ||
![]() |
3e71436267 | ||
![]() |
c9c2886b26 | ||
![]() |
6e4551f73f | ||
![]() |
6fb9bdec93 | ||
![]() |
e23007322d | ||
![]() |
18e4c065eb | ||
![]() |
5d1ca73a34 | ||
![]() |
e2308fd15c | ||
![]() |
845ce5c6ea | ||
![]() |
1d1b59b800 | ||
![]() |
87b6bb45d0 | ||
![]() |
fa31192448 | ||
![]() |
5533368171 | ||
![]() |
f4a58c7dc7 | ||
![]() |
8e357faa4d | ||
![]() |
8e617bbc1d | ||
![]() |
843f537109 | ||
![]() |
817bbfe6aa | ||
![]() |
38b9d896b2 | ||
![]() |
c91417e71f | ||
![]() |
4bef6ac191 | ||
![]() |
f0d8168db7 | ||
![]() |
9f236c4ca5 | ||
![]() |
0d1f476bee |
304
.coveragerc
304
.coveragerc
File diff suppressed because it is too large
Load Diff
3
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
3
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -80,8 +80,7 @@ body:
|
||||
label: Diagnostics information
|
||||
placeholder: "drag-and-drop the diagnostics data file here (do not copy-and-paste the content)"
|
||||
description: >-
|
||||
Many integrations provide the ability to download diagnostic data
|
||||
on the device page (and on the integration dashboard).
|
||||
Many integrations provide the ability to [download diagnostic data](https://www.home-assistant.io/docs/configuration/troubleshooting/#debug-logs-and-diagnostics).
|
||||
|
||||
**It would really help if you could download the diagnostics data for the device you are having issues with,
|
||||
and <ins>drag-and-drop that file into the textbox below.</ins>**
|
||||
|
49
.github/workflows/builder.yml
vendored
49
.github/workflows/builder.yml
vendored
@@ -10,7 +10,7 @@ on:
|
||||
|
||||
env:
|
||||
BUILD_TYPE: core
|
||||
DEFAULT_PYTHON: 3.9
|
||||
DEFAULT_PYTHON: "3.10"
|
||||
|
||||
jobs:
|
||||
init:
|
||||
@@ -24,12 +24,12 @@ jobs:
|
||||
publish: ${{ steps.version.outputs.publish }}
|
||||
steps:
|
||||
- name: Checkout the repository
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
||||
uses: actions/setup-python@v4.3.0
|
||||
uses: actions/setup-python@v4.5.0
|
||||
with:
|
||||
python-version: ${{ env.DEFAULT_PYTHON }}
|
||||
|
||||
@@ -67,10 +67,10 @@ jobs:
|
||||
if: github.repository_owner == 'home-assistant' && needs.init.outputs.publish == 'true'
|
||||
steps:
|
||||
- name: Checkout the repository
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
|
||||
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
||||
uses: actions/setup-python@v4.3.0
|
||||
uses: actions/setup-python@v4.5.0
|
||||
with:
|
||||
python-version: ${{ env.DEFAULT_PYTHON }}
|
||||
|
||||
@@ -100,7 +100,7 @@ jobs:
|
||||
arch: ${{ fromJson(needs.init.outputs.architectures) }}
|
||||
steps:
|
||||
- name: Checkout the repository
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
|
||||
- name: Download nightly wheels of frontend
|
||||
if: needs.init.outputs.channel == 'dev'
|
||||
@@ -113,9 +113,20 @@ jobs:
|
||||
workflow_conclusion: success
|
||||
name: wheels
|
||||
|
||||
- name: Download nightly wheels of intents
|
||||
if: needs.init.outputs.channel == 'dev'
|
||||
uses: dawidd6/action-download-artifact@v2
|
||||
with:
|
||||
github_token: ${{secrets.GITHUB_TOKEN}}
|
||||
repo: home-assistant/intents
|
||||
branch: main
|
||||
workflow: nightly.yaml
|
||||
workflow_conclusion: success
|
||||
name: package
|
||||
|
||||
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
||||
if: needs.init.outputs.channel == 'dev'
|
||||
uses: actions/setup-python@v4.3.0
|
||||
uses: actions/setup-python@v4.5.0
|
||||
with:
|
||||
python-version: ${{ env.DEFAULT_PYTHON }}
|
||||
|
||||
@@ -140,6 +151,24 @@ jobs:
|
||||
python -m script.gen_requirements_all
|
||||
fi
|
||||
|
||||
if [[ "$(ls home_assistant_intents*.whl)" =~ ^home_assistant_intents-(.*)-py3-none-any.whl$ ]]; then
|
||||
echo "Found intents wheel, setting version to: ${BASH_REMATCH[1]}"
|
||||
yq \
|
||||
--inplace e -o json \
|
||||
'del(.requirements[] | select(contains("home-assistant-intents")))' \
|
||||
homeassistant/components/conversation/manifest.json
|
||||
|
||||
intents_version="${BASH_REMATCH[1]}" yq \
|
||||
--inplace e -o json \
|
||||
'.requirements += ["home-assistant-intents=="+env(intents_version)]' \
|
||||
homeassistant/components/conversation/manifest.json
|
||||
|
||||
sed -i "s|home-assistant-intents==.*|home-assistant-intents==${BASH_REMATCH[1]}|" \
|
||||
homeassistant/package_constraints.txt
|
||||
|
||||
python -m script.gen_requirements_all
|
||||
fi
|
||||
|
||||
- name: Write meta info file
|
||||
shell: bash
|
||||
run: |
|
||||
@@ -198,7 +227,7 @@ jobs:
|
||||
- yellow
|
||||
steps:
|
||||
- name: Checkout the repository
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
|
||||
- name: Set build additional args
|
||||
run: |
|
||||
@@ -241,7 +270,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout the repository
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
|
||||
- name: Initialize git
|
||||
uses: home-assistant/actions/helpers/git-init@master
|
||||
@@ -280,7 +309,7 @@ jobs:
|
||||
- "homeassistant"
|
||||
steps:
|
||||
- name: Checkout the repository
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
|
||||
- name: Login to DockerHub
|
||||
if: matrix.registry == 'homeassistant'
|
||||
|
308
.github/workflows/ci.yaml
vendored
308
.github/workflows/ci.yaml
vendored
@@ -18,13 +18,22 @@ on:
|
||||
description: "Skip pytest"
|
||||
default: false
|
||||
type: boolean
|
||||
pylint-only:
|
||||
description: "Only run pylint"
|
||||
default: false
|
||||
type: boolean
|
||||
mypy-only:
|
||||
description: "Only run mypy"
|
||||
default: false
|
||||
type: boolean
|
||||
|
||||
env:
|
||||
CACHE_VERSION: 3
|
||||
PIP_CACHE_VERSION: 3
|
||||
HA_SHORT_VERSION: 2022.12
|
||||
DEFAULT_PYTHON: 3.9
|
||||
ALL_PYTHON_VERSIONS: "['3.9', '3.10']"
|
||||
MYPY_CACHE_VERSION: 3
|
||||
HA_SHORT_VERSION: 2023.3
|
||||
DEFAULT_PYTHON: "3.10"
|
||||
ALL_PYTHON_VERSIONS: "['3.10']"
|
||||
PRE_COMMIT_CACHE: ~/.cache/pre-commit
|
||||
PIP_CACHE: /tmp/pip-cache
|
||||
SQLALCHEMY_WARN_20: 1
|
||||
@@ -56,7 +65,7 @@ jobs:
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: Check out code from GitHub
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
- name: Generate partial Python venv restore key
|
||||
id: generate_python_cache_key
|
||||
run: >-
|
||||
@@ -163,20 +172,23 @@ jobs:
|
||||
pre-commit:
|
||||
name: Prepare pre-commit base
|
||||
runs-on: ubuntu-20.04
|
||||
if: |
|
||||
github.event.inputs.pylint-only != 'true'
|
||||
&& github.event.inputs.mypy-only != 'true'
|
||||
needs:
|
||||
- info
|
||||
steps:
|
||||
- name: Check out code from GitHub
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
||||
id: python
|
||||
uses: actions/setup-python@v4.3.0
|
||||
uses: actions/setup-python@v4.5.0
|
||||
with:
|
||||
python-version: ${{ env.DEFAULT_PYTHON }}
|
||||
check-latest: true
|
||||
- name: Restore base Python virtual environment
|
||||
id: cache-venv
|
||||
uses: actions/cache@v3.0.11
|
||||
uses: actions/cache@v3.2.4
|
||||
with:
|
||||
path: venv
|
||||
key: >-
|
||||
@@ -191,7 +203,7 @@ jobs:
|
||||
pip install "$(cat requirements_test.txt | grep pre-commit)"
|
||||
- name: Restore pre-commit environment from cache
|
||||
id: cache-precommit
|
||||
uses: actions/cache@v3.0.11
|
||||
uses: actions/cache@v3.2.4
|
||||
with:
|
||||
path: ${{ env.PRE_COMMIT_CACHE }}
|
||||
key: >-
|
||||
@@ -211,39 +223,31 @@ jobs:
|
||||
- pre-commit
|
||||
steps:
|
||||
- name: Check out code from GitHub
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
||||
uses: actions/setup-python@v4.3.0
|
||||
uses: actions/setup-python@v4.5.0
|
||||
id: python
|
||||
with:
|
||||
python-version: ${{ env.DEFAULT_PYTHON }}
|
||||
check-latest: true
|
||||
- name: Restore base Python virtual environment
|
||||
id: cache-venv
|
||||
uses: actions/cache@v3.0.11
|
||||
uses: actions/cache/restore@v3.2.4
|
||||
with:
|
||||
path: venv
|
||||
fail-on-cache-miss: true
|
||||
key: >-
|
||||
${{ runner.os }}-${{ steps.python.outputs.python-version }}-venv-${{
|
||||
needs.info.outputs.pre-commit_cache_key }}
|
||||
- name: Fail job if Python cache restore failed
|
||||
if: steps.cache-venv.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
echo "Failed to restore Python virtual environment from cache"
|
||||
exit 1
|
||||
- name: Restore pre-commit environment from cache
|
||||
id: cache-precommit
|
||||
uses: actions/cache@v3.0.11
|
||||
uses: actions/cache/restore@v3.2.4
|
||||
with:
|
||||
path: ${{ env.PRE_COMMIT_CACHE }}
|
||||
fail-on-cache-miss: true
|
||||
key: >-
|
||||
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
|
||||
needs.info.outputs.pre-commit_cache_key }}
|
||||
- name: Fail job if pre-commit cache restore failed
|
||||
if: steps.cache-precommit.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
echo "Failed to restore pre-commit environment from cache"
|
||||
exit 1
|
||||
- name: Run black (fully)
|
||||
if: needs.info.outputs.test_full_suite == 'true'
|
||||
run: |
|
||||
@@ -255,7 +259,7 @@ jobs:
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
shopt -s globstar
|
||||
pre-commit run --hook-stage manual black --files {homeassistant,tests}/components/${{ needs.info.outputs.integrations_glob }}/**/* --show-diff-on-failure
|
||||
pre-commit run --hook-stage manual black --files {homeassistant,tests}/components/${{ needs.info.outputs.integrations_glob }}/{*,**/*} --show-diff-on-failure
|
||||
|
||||
lint-flake8:
|
||||
name: Check flake8
|
||||
@@ -265,39 +269,31 @@ jobs:
|
||||
- pre-commit
|
||||
steps:
|
||||
- name: Check out code from GitHub
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
||||
uses: actions/setup-python@v4.3.0
|
||||
uses: actions/setup-python@v4.5.0
|
||||
id: python
|
||||
with:
|
||||
python-version: ${{ env.DEFAULT_PYTHON }}
|
||||
check-latest: true
|
||||
- name: Restore base Python virtual environment
|
||||
id: cache-venv
|
||||
uses: actions/cache@v3.0.11
|
||||
uses: actions/cache/restore@v3.2.4
|
||||
with:
|
||||
path: venv
|
||||
fail-on-cache-miss: true
|
||||
key: >-
|
||||
${{ runner.os }}-${{ steps.python.outputs.python-version }}-venv-${{
|
||||
needs.info.outputs.pre-commit_cache_key }}
|
||||
- name: Fail job if Python cache restore failed
|
||||
if: steps.cache-venv.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
echo "Failed to restore Python virtual environment from cache"
|
||||
exit 1
|
||||
- name: Restore pre-commit environment from cache
|
||||
id: cache-precommit
|
||||
uses: actions/cache@v3.0.11
|
||||
uses: actions/cache/restore@v3.2.4
|
||||
with:
|
||||
path: ${{ env.PRE_COMMIT_CACHE }}
|
||||
fail-on-cache-miss: true
|
||||
key: >-
|
||||
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
|
||||
needs.info.outputs.pre-commit_cache_key }}
|
||||
- name: Fail job if pre-commit cache restore failed
|
||||
if: steps.cache-precommit.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
echo "Failed to restore pre-commit environment from cache"
|
||||
exit 1
|
||||
- name: Register flake8 problem matcher
|
||||
run: |
|
||||
echo "::add-matcher::.github/workflows/matchers/flake8.json"
|
||||
@@ -312,7 +308,56 @@ jobs:
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
shopt -s globstar
|
||||
pre-commit run --hook-stage manual flake8 --files {homeassistant,tests}/components/${{ needs.info.outputs.integrations_glob }}/**/*
|
||||
pre-commit run --hook-stage manual flake8 --files {homeassistant,tests}/components/${{ needs.info.outputs.integrations_glob }}/{*,**/*}
|
||||
|
||||
lint-ruff:
|
||||
name: Check ruff
|
||||
runs-on: ubuntu-latest
|
||||
needs:
|
||||
- info
|
||||
- pre-commit
|
||||
steps:
|
||||
- name: Check out code from GitHub
|
||||
uses: actions/checkout@v3.3.0
|
||||
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
||||
uses: actions/setup-python@v4.5.0
|
||||
id: python
|
||||
with:
|
||||
python-version: ${{ env.DEFAULT_PYTHON }}
|
||||
check-latest: true
|
||||
- name: Restore base Python virtual environment
|
||||
id: cache-venv
|
||||
uses: actions/cache/restore@v3.2.4
|
||||
with:
|
||||
path: venv
|
||||
fail-on-cache-miss: true
|
||||
key: >-
|
||||
${{ runner.os }}-${{ steps.python.outputs.python-version }}-venv-${{
|
||||
needs.info.outputs.pre-commit_cache_key }}
|
||||
- name: Restore pre-commit environment from cache
|
||||
id: cache-precommit
|
||||
uses: actions/cache/restore@v3.2.4
|
||||
with:
|
||||
path: ${{ env.PRE_COMMIT_CACHE }}
|
||||
fail-on-cache-miss: true
|
||||
key: >-
|
||||
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
|
||||
needs.info.outputs.pre-commit_cache_key }}
|
||||
- name: Register ruff problem matcher
|
||||
run: |
|
||||
echo "::add-matcher::.github/workflows/matchers/ruff.json"
|
||||
- name: Run ruff (fully)
|
||||
if: needs.info.outputs.test_full_suite == 'true'
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
pre-commit run --hook-stage manual ruff --all-files
|
||||
- name: Run ruff (partially)
|
||||
if: needs.info.outputs.test_full_suite == 'false'
|
||||
shell: bash
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
shopt -s globstar
|
||||
pre-commit run --hook-stage manual ruff --files {homeassistant,tests}/components/${{ needs.info.outputs.integrations_glob }}/{*,**/*}
|
||||
|
||||
lint-isort:
|
||||
name: Check isort
|
||||
@@ -322,39 +367,31 @@ jobs:
|
||||
- pre-commit
|
||||
steps:
|
||||
- name: Check out code from GitHub
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
||||
uses: actions/setup-python@v4.3.0
|
||||
uses: actions/setup-python@v4.5.0
|
||||
id: python
|
||||
with:
|
||||
python-version: ${{ env.DEFAULT_PYTHON }}
|
||||
check-latest: true
|
||||
- name: Restore base Python virtual environment
|
||||
id: cache-venv
|
||||
uses: actions/cache@v3.0.11
|
||||
uses: actions/cache/restore@v3.2.4
|
||||
with:
|
||||
path: venv
|
||||
fail-on-cache-miss: true
|
||||
key: >-
|
||||
${{ runner.os }}-${{ steps.python.outputs.python-version }}-venv-${{
|
||||
needs.info.outputs.pre-commit_cache_key }}
|
||||
- name: Fail job if Python cache restore failed
|
||||
if: steps.cache-venv.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
echo "Failed to restore Python virtual environment from cache"
|
||||
exit 1
|
||||
- name: Restore pre-commit environment from cache
|
||||
id: cache-precommit
|
||||
uses: actions/cache@v3.0.11
|
||||
uses: actions/cache/restore@v3.2.4
|
||||
with:
|
||||
path: ${{ env.PRE_COMMIT_CACHE }}
|
||||
fail-on-cache-miss: true
|
||||
key: >-
|
||||
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
|
||||
needs.info.outputs.pre-commit_cache_key }}
|
||||
- name: Fail job if pre-commit cache restore failed
|
||||
if: steps.cache-precommit.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
echo "Failed to restore pre-commit environment from cache"
|
||||
exit 1
|
||||
- name: Run isort
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
@@ -368,39 +405,31 @@ jobs:
|
||||
- pre-commit
|
||||
steps:
|
||||
- name: Check out code from GitHub
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
||||
uses: actions/setup-python@v4.3.0
|
||||
uses: actions/setup-python@v4.5.0
|
||||
id: python
|
||||
with:
|
||||
python-version: ${{ env.DEFAULT_PYTHON }}
|
||||
check-latest: true
|
||||
- name: Restore base Python virtual environment
|
||||
id: cache-venv
|
||||
uses: actions/cache@v3.0.11
|
||||
uses: actions/cache/restore@v3.2.4
|
||||
with:
|
||||
path: venv
|
||||
fail-on-cache-miss: true
|
||||
key: >-
|
||||
${{ runner.os }}-${{ steps.python.outputs.python-version }}-venv-${{
|
||||
needs.info.outputs.pre-commit_cache_key }}
|
||||
- name: Fail job if Python cache restore failed
|
||||
if: steps.cache-venv.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
echo "Failed to restore Python virtual environment from cache"
|
||||
exit 1
|
||||
- name: Restore pre-commit environment from cache
|
||||
id: cache-precommit
|
||||
uses: actions/cache@v3.0.11
|
||||
uses: actions/cache/restore@v3.2.4
|
||||
with:
|
||||
path: ${{ env.PRE_COMMIT_CACHE }}
|
||||
fail-on-cache-miss: true
|
||||
key: >-
|
||||
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
|
||||
needs.info.outputs.pre-commit_cache_key }}
|
||||
- name: Fail job if pre-commit cache restore failed
|
||||
if: steps.cache-precommit.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
echo "Failed to restore pre-commit environment from cache"
|
||||
exit 1
|
||||
|
||||
- name: Run pyupgrade (fully)
|
||||
if: needs.info.outputs.test_full_suite == 'true'
|
||||
@@ -413,7 +442,7 @@ jobs:
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
shopt -s globstar
|
||||
pre-commit run --hook-stage manual pyupgrade --files {homeassistant,tests}/components/${{ needs.info.outputs.integrations_glob }}/**/* --show-diff-on-failure
|
||||
pre-commit run --hook-stage manual pyupgrade --files {homeassistant,tests}/components/${{ needs.info.outputs.integrations_glob }}/{*,**/*} --show-diff-on-failure
|
||||
|
||||
- name: Register yamllint problem matcher
|
||||
run: |
|
||||
@@ -442,7 +471,7 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
pre-commit run --hook-stage manual prettier --files {homeassistant,tests}/components/${{ needs.info.outputs.integrations_glob }}/**/*
|
||||
pre-commit run --hook-stage manual prettier --files {homeassistant,tests}/components/${{ needs.info.outputs.integrations_glob }}/{*,**/*}
|
||||
|
||||
- name: Register check executables problem matcher
|
||||
run: |
|
||||
@@ -483,7 +512,7 @@ jobs:
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
shopt -s globstar
|
||||
pre-commit run --hook-stage manual bandit --files {homeassistant,tests}/components/${{ needs.info.outputs.integrations_glob }}/**/* --show-diff-on-failure
|
||||
pre-commit run --hook-stage manual bandit --files {homeassistant,tests}/components/${{ needs.info.outputs.integrations_glob }}/{*,**/*} --show-diff-on-failure
|
||||
|
||||
base:
|
||||
name: Prepare dependencies
|
||||
@@ -495,10 +524,10 @@ jobs:
|
||||
python-version: ${{ fromJSON(needs.info.outputs.python_versions) }}
|
||||
steps:
|
||||
- name: Check out code from GitHub
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
id: python
|
||||
uses: actions/setup-python@v4.3.0
|
||||
uses: actions/setup-python@v4.5.0
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
check-latest: true
|
||||
@@ -509,7 +538,7 @@ jobs:
|
||||
env.HA_SHORT_VERSION }}-$(date -u '+%Y-%m-%dT%H:%M:%s')" >> $GITHUB_OUTPUT
|
||||
- name: Restore base Python virtual environment
|
||||
id: cache-venv
|
||||
uses: actions/cache@v3.0.11
|
||||
uses: actions/cache@v3.2.4
|
||||
with:
|
||||
path: venv
|
||||
key: >-
|
||||
@@ -517,7 +546,7 @@ jobs:
|
||||
needs.info.outputs.python_cache_key }}
|
||||
- name: Restore pip wheel cache
|
||||
if: steps.cache-venv.outputs.cache-hit != 'true'
|
||||
uses: actions/cache@v3.0.11
|
||||
uses: actions/cache@v3.2.4
|
||||
with:
|
||||
path: ${{ env.PIP_CACHE }}
|
||||
key: >-
|
||||
@@ -554,31 +583,30 @@ jobs:
|
||||
hassfest:
|
||||
name: Check hassfest
|
||||
runs-on: ubuntu-20.04
|
||||
if: |
|
||||
github.event.inputs.pylint-only != 'true'
|
||||
&& github.event.inputs.mypy-only != 'true'
|
||||
needs:
|
||||
- info
|
||||
- base
|
||||
steps:
|
||||
- name: Check out code from GitHub
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
||||
id: python
|
||||
uses: actions/setup-python@v4.3.0
|
||||
uses: actions/setup-python@v4.5.0
|
||||
with:
|
||||
python-version: ${{ env.DEFAULT_PYTHON }}
|
||||
check-latest: true
|
||||
- name: Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
|
||||
id: cache-venv
|
||||
uses: actions/cache@v3.0.11
|
||||
uses: actions/cache/restore@v3.2.4
|
||||
with:
|
||||
path: venv
|
||||
fail-on-cache-miss: true
|
||||
key: >-
|
||||
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
|
||||
needs.info.outputs.python_cache_key }}
|
||||
- name: Fail job if Python cache restore failed
|
||||
if: steps.cache-venv.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
echo "Failed to restore Python virtual environment from cache"
|
||||
exit 1
|
||||
- name: Run hassfest
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
@@ -587,31 +615,30 @@ jobs:
|
||||
gen-requirements-all:
|
||||
name: Check all requirements
|
||||
runs-on: ubuntu-20.04
|
||||
if: |
|
||||
github.event.inputs.pylint-only != 'true'
|
||||
&& github.event.inputs.mypy-only != 'true'
|
||||
needs:
|
||||
- info
|
||||
- base
|
||||
steps:
|
||||
- name: Check out code from GitHub
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
||||
id: python
|
||||
uses: actions/setup-python@v4.3.0
|
||||
uses: actions/setup-python@v4.5.0
|
||||
with:
|
||||
python-version: ${{ env.DEFAULT_PYTHON }}
|
||||
check-latest: true
|
||||
- name: Restore base Python virtual environment
|
||||
id: cache-venv
|
||||
uses: actions/cache@v3.0.11
|
||||
uses: actions/cache/restore@v3.2.4
|
||||
with:
|
||||
path: venv
|
||||
fail-on-cache-miss: true
|
||||
key: >-
|
||||
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
|
||||
needs.info.outputs.python_cache_key }}
|
||||
- name: Fail job if Python cache restore failed
|
||||
if: steps.cache-venv.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
echo "Failed to restore Python virtual environment from cache"
|
||||
exit 1
|
||||
- name: Run gen_requirements_all.py
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
@@ -621,31 +648,30 @@ jobs:
|
||||
name: Check pylint
|
||||
runs-on: ubuntu-20.04
|
||||
timeout-minutes: 20
|
||||
if: |
|
||||
github.event.inputs.mypy-only != 'true'
|
||||
|| github.event.inputs.pylint-only == 'true'
|
||||
needs:
|
||||
- info
|
||||
- base
|
||||
steps:
|
||||
- name: Check out code from GitHub
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
||||
id: python
|
||||
uses: actions/setup-python@v4.3.0
|
||||
uses: actions/setup-python@v4.5.0
|
||||
with:
|
||||
python-version: ${{ env.DEFAULT_PYTHON }}
|
||||
check-latest: true
|
||||
- name: Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
|
||||
id: cache-venv
|
||||
uses: actions/cache@v3.0.11
|
||||
uses: actions/cache/restore@v3.2.4
|
||||
with:
|
||||
path: venv
|
||||
fail-on-cache-miss: true
|
||||
key: >-
|
||||
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
|
||||
needs.info.outputs.python_cache_key }}
|
||||
- name: Fail job if Python cache restore failed
|
||||
if: steps.cache-venv.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
echo "Failed to restore Python virtual environment from cache"
|
||||
exit 1
|
||||
- name: Register pylint problem matcher
|
||||
run: |
|
||||
echo "::add-matcher::.github/workflows/matchers/pylint.json"
|
||||
@@ -666,31 +692,48 @@ jobs:
|
||||
mypy:
|
||||
name: Check mypy
|
||||
runs-on: ubuntu-20.04
|
||||
if: |
|
||||
github.event.inputs.pylint-only != 'true'
|
||||
|| github.event.inputs.mypy-only == 'true'
|
||||
needs:
|
||||
- info
|
||||
- base
|
||||
steps:
|
||||
- name: Check out code from GitHub
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
||||
id: python
|
||||
uses: actions/setup-python@v4.3.0
|
||||
uses: actions/setup-python@v4.5.0
|
||||
with:
|
||||
python-version: ${{ env.DEFAULT_PYTHON }}
|
||||
check-latest: true
|
||||
- name: Generate partial mypy restore key
|
||||
id: generate-mypy-key
|
||||
run: |
|
||||
mypy_version=$(cat requirements_test.txt | grep mypy | cut -d '=' -f 3)
|
||||
echo "version=$mypy_version" >> $GITHUB_OUTPUT
|
||||
echo "key=mypy-${{ env.MYPY_CACHE_VERSION }}-$mypy_version-${{
|
||||
env.HA_SHORT_VERSION }}-$(date -u '+%Y-%m-%dT%H:%M:%s')" >> $GITHUB_OUTPUT
|
||||
- name: Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
|
||||
id: cache-venv
|
||||
uses: actions/cache@v3.0.11
|
||||
uses: actions/cache/restore@v3.2.4
|
||||
with:
|
||||
path: venv
|
||||
fail-on-cache-miss: true
|
||||
key: >-
|
||||
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
|
||||
needs.info.outputs.python_cache_key }}
|
||||
- name: Fail job if Python cache restore failed
|
||||
if: steps.cache-venv.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
echo "Failed to restore Python virtual environment from cache"
|
||||
exit 1
|
||||
- name: Restore mypy cache
|
||||
uses: actions/cache@v3.2.4
|
||||
with:
|
||||
path: .mypy_cache
|
||||
key: >-
|
||||
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
|
||||
steps.generate-mypy-key.outputs.key }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-${{ steps.python.outputs.python-version }}-mypy-${{
|
||||
env.MYPY_CACHE_VERSION }}-${{ steps.generate-mypy-key.outputs.version }}-${{
|
||||
env.HA_SHORT_VERSION }}-
|
||||
- name: Register mypy problem matcher
|
||||
run: |
|
||||
echo "::add-matcher::.github/workflows/matchers/mypy.json"
|
||||
@@ -710,6 +753,9 @@ jobs:
|
||||
|
||||
pip-check:
|
||||
runs-on: ubuntu-20.04
|
||||
if: |
|
||||
github.event.inputs.pylint-only != 'true'
|
||||
&& github.event.inputs.mypy-only != 'true'
|
||||
needs:
|
||||
- info
|
||||
- base
|
||||
@@ -720,26 +766,22 @@ jobs:
|
||||
name: Run pip check ${{ matrix.python-version }}
|
||||
steps:
|
||||
- name: Check out code from GitHub
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
id: python
|
||||
uses: actions/setup-python@v4.3.0
|
||||
uses: actions/setup-python@v4.5.0
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
check-latest: true
|
||||
- name: Restore full Python ${{ matrix.python-version }} virtual environment
|
||||
id: cache-venv
|
||||
uses: actions/cache@v3.0.11
|
||||
uses: actions/cache/restore@v3.2.4
|
||||
with:
|
||||
path: venv
|
||||
fail-on-cache-miss: true
|
||||
key: >-
|
||||
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
|
||||
needs.info.outputs.python_cache_key }}
|
||||
- name: Fail job if Python cache restore failed
|
||||
if: steps.cache-venv.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
echo "Failed to restore Python virtual environment from cache"
|
||||
exit 1
|
||||
- name: Run pip check
|
||||
run: |
|
||||
. venv/bin/activate
|
||||
@@ -750,6 +792,8 @@ jobs:
|
||||
if: |
|
||||
(github.event_name != 'push' || github.event.repository.full_name == 'home-assistant/core')
|
||||
&& github.event.inputs.lint-only != 'true'
|
||||
&& github.event.inputs.pylint-only != 'true'
|
||||
&& github.event.inputs.mypy-only != 'true'
|
||||
&& (needs.info.outputs.test_full_suite == 'true' || needs.info.outputs.tests_glob)
|
||||
needs:
|
||||
- info
|
||||
@@ -757,8 +801,9 @@ jobs:
|
||||
- gen-requirements-all
|
||||
- hassfest
|
||||
- lint-black
|
||||
- lint-other
|
||||
- lint-isort
|
||||
- lint-other
|
||||
- lint-ruff
|
||||
- mypy
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -775,25 +820,21 @@ jobs:
|
||||
bluez \
|
||||
ffmpeg
|
||||
- name: Check out code from GitHub
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
id: python
|
||||
uses: actions/setup-python@v4.3.0
|
||||
uses: actions/setup-python@v4.5.0
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
check-latest: true
|
||||
- name: Restore full Python ${{ matrix.python-version }} virtual environment
|
||||
id: cache-venv
|
||||
uses: actions/cache@v3.0.11
|
||||
uses: actions/cache/restore@v3.2.4
|
||||
with:
|
||||
path: venv
|
||||
fail-on-cache-miss: true
|
||||
key: ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
|
||||
needs.info.outputs.python_cache_key }}
|
||||
- name: Fail job if Python cache restore failed
|
||||
if: steps.cache-venv.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
echo "Failed to restore Python virtual environment from cache"
|
||||
exit 1
|
||||
- name: Register Python problem matcher
|
||||
run: |
|
||||
echo "::add-matcher::.github/workflows/matchers/python.json"
|
||||
@@ -852,7 +893,7 @@ jobs:
|
||||
-p no:sugar \
|
||||
tests/components/${{ matrix.group }}
|
||||
- name: Upload coverage artifact
|
||||
uses: actions/upload-artifact@v3.1.1
|
||||
uses: actions/upload-artifact@v3.1.2
|
||||
with:
|
||||
name: coverage-${{ matrix.python-version }}-${{ matrix.group }}
|
||||
path: coverage.xml
|
||||
@@ -873,6 +914,8 @@ jobs:
|
||||
if: |
|
||||
(github.event_name != 'push' || github.event.repository.full_name == 'home-assistant/core')
|
||||
&& github.event.inputs.lint-only != 'true'
|
||||
&& github.event.inputs.pylint-only != 'true'
|
||||
&& github.event.inputs.mypy-only != 'true'
|
||||
&& needs.info.outputs.test_full_suite == 'true'
|
||||
needs:
|
||||
- info
|
||||
@@ -880,8 +923,9 @@ jobs:
|
||||
- gen-requirements-all
|
||||
- hassfest
|
||||
- lint-black
|
||||
- lint-other
|
||||
- lint-isort
|
||||
- lint-other
|
||||
- lint-ruff
|
||||
- mypy
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -898,25 +942,21 @@ jobs:
|
||||
ffmpeg \
|
||||
libmariadb-dev-compat
|
||||
- name: Check out code from GitHub
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
id: python
|
||||
uses: actions/setup-python@v4.3.0
|
||||
uses: actions/setup-python@v4.5.0
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
check-latest: true
|
||||
- name: Restore full Python ${{ matrix.python-version }} virtual environment
|
||||
id: cache-venv
|
||||
uses: actions/cache@v3.0.11
|
||||
uses: actions/cache/restore@v3.2.4
|
||||
with:
|
||||
path: venv
|
||||
fail-on-cache-miss: true
|
||||
key: ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
|
||||
needs.info.outputs.python_cache_key }}
|
||||
- name: Fail job if Python cache restore failed
|
||||
if: steps.cache-venv.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
echo "Failed to restore Python virtual environment from cache"
|
||||
exit 1
|
||||
- name: Register Python problem matcher
|
||||
run: |
|
||||
echo "::add-matcher::.github/workflows/matchers/python.json"
|
||||
@@ -954,7 +994,7 @@ jobs:
|
||||
--dburl=mysql://root:password@127.0.0.1/homeassistant-test \
|
||||
tests/components/recorder
|
||||
- name: Upload coverage artifact
|
||||
uses: actions/upload-artifact@v3.1.1
|
||||
uses: actions/upload-artifact@v3.1.2
|
||||
with:
|
||||
name: coverage-${{ matrix.python-version }}-mariadb
|
||||
path: coverage.xml
|
||||
@@ -970,7 +1010,7 @@ jobs:
|
||||
- pytest
|
||||
steps:
|
||||
- name: Check out code from GitHub
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
- name: Download all coverage artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
- name: Upload coverage to Codecov (full coverage)
|
||||
|
2
.github/workflows/lock.yml
vendored
2
.github/workflows/lock.yml
vendored
@@ -10,7 +10,7 @@ jobs:
|
||||
if: github.repository_owner == 'home-assistant'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: dessant/lock-threads@v3
|
||||
- uses: dessant/lock-threads@v4.0.0
|
||||
with:
|
||||
github-token: ${{ github.token }}
|
||||
issue-inactive-days: "30"
|
||||
|
30
.github/workflows/matchers/ruff.json
vendored
Normal file
30
.github/workflows/matchers/ruff.json
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"problemMatcher": [
|
||||
{
|
||||
"owner": "ruff-error",
|
||||
"severity": "error",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^(.*):(\\d+):(\\d+):\\s([EF]\\d{3}\\s.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"column": 3,
|
||||
"message": 4
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"owner": "ruff-warning",
|
||||
"severity": "warning",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^(.*):(\\d+):(\\d+):\\s([CDNW]\\d{3}\\s.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"column": 3,
|
||||
"message": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
95
.github/workflows/stale.yml
vendored
95
.github/workflows/stale.yml
vendored
@@ -11,34 +11,21 @@ jobs:
|
||||
if: github.repository_owner == 'home-assistant'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
# The 90 day stale policy
|
||||
# The 90 day stale policy for PRs
|
||||
# Used for:
|
||||
# - Issues & PRs
|
||||
# - PRs
|
||||
# - No PRs marked as no-stale
|
||||
# - No issues marked as no-stale or help-wanted
|
||||
- name: 90 days stale issues & PRs policy
|
||||
uses: actions/stale@v6.0.1
|
||||
# - No issues (-1)
|
||||
- name: 90 days stale PRs policy
|
||||
uses: actions/stale@v7.0.0
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
days-before-stale: 90
|
||||
days-before-close: 7
|
||||
days-before-issue-stale: -1
|
||||
days-before-issue-close: -1
|
||||
operations-per-run: 150
|
||||
remove-stale-when-updated: true
|
||||
stale-issue-label: "stale"
|
||||
exempt-issue-labels: "no-stale,help-wanted"
|
||||
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: >
|
||||
@@ -48,30 +35,47 @@ jobs:
|
||||
|
||||
Thank you for your contributions.
|
||||
|
||||
# The 30 day stale policy for PRS
|
||||
# Used for:
|
||||
# - PRs
|
||||
# - No PRs marked as no-stale or new-integrations
|
||||
# - No issues (-1)
|
||||
- name: 30 days stale PRs policy
|
||||
uses: actions/stale@v6.0.1
|
||||
# Generate a token for the GitHub App, we use this method to avoid
|
||||
# hitting API limits for our GitHub actions + have a higher rate limit.
|
||||
# This is only used for issues.
|
||||
- name: Generate app token
|
||||
id: token
|
||||
# Pinned to a specific version of the action for security reasons
|
||||
# v1.7.0
|
||||
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
days-before-stale: 30
|
||||
days-before-close: 7
|
||||
days-before-issue-close: -1
|
||||
operations-per-run: 50
|
||||
remove-stale-when-updated: true
|
||||
stale-pr-label: "stale"
|
||||
# Exempt new integrations, these often take more time.
|
||||
# They will automatically be handled by the 90 day version above.
|
||||
exempt-pr-labels: "no-stale,new-integration"
|
||||
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.
|
||||
app_id: ${{ secrets.ISSUE_TRIAGE_APP_ID }}
|
||||
private_key: ${{ secrets.ISSUE_TRIAGE_APP_PEM }}
|
||||
|
||||
Thank you for your contributions.
|
||||
# The 90 day stale policy for issues
|
||||
# Used for:
|
||||
# - Issues
|
||||
# - No issues marked as no-stale or help-wanted
|
||||
# - No PRs (-1)
|
||||
- name: 90 days stale issues
|
||||
uses: actions/stale@v7.0.0
|
||||
with:
|
||||
repo-token: ${{ steps.token.outputs.token }}
|
||||
days-before-stale: 90
|
||||
days-before-close: 7
|
||||
days-before-pr-stale: -1
|
||||
days-before-pr-close: -1
|
||||
operations-per-run: 250
|
||||
remove-stale-when-updated: true
|
||||
stale-issue-label: "stale"
|
||||
exempt-issue-labels: "no-stale,help-wanted,needs-more-information"
|
||||
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.
|
||||
|
||||
# The 30 day stale policy for issues
|
||||
# Used for:
|
||||
@@ -79,14 +83,15 @@ jobs:
|
||||
# - No Issues marked as no-stale or help-wanted
|
||||
# - No PRs (-1)
|
||||
- name: Needs more information stale issues policy
|
||||
uses: actions/stale@v6.0.1
|
||||
uses: actions/stale@v7.0.0
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
repo-token: ${{ steps.token.outputs.token }}
|
||||
only-labels: "needs-more-information"
|
||||
days-before-stale: 14
|
||||
days-before-close: 7
|
||||
days-before-pr-stale: -1
|
||||
days-before-pr-close: -1
|
||||
operations-per-run: 50
|
||||
operations-per-run: 250
|
||||
remove-stale-when-updated: true
|
||||
stale-issue-label: "stale"
|
||||
exempt-issue-labels: "no-stale,help-wanted"
|
||||
|
10
.github/workflows/translations.yaml
vendored
10
.github/workflows/translations.yaml
vendored
@@ -12,7 +12,7 @@ on:
|
||||
- "**strings.json"
|
||||
|
||||
env:
|
||||
DEFAULT_PYTHON: 3.9
|
||||
DEFAULT_PYTHON: "3.10"
|
||||
|
||||
jobs:
|
||||
upload:
|
||||
@@ -21,10 +21,10 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout the repository
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
|
||||
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
||||
uses: actions/setup-python@v4.3.0
|
||||
uses: actions/setup-python@v4.5.0
|
||||
with:
|
||||
python-version: ${{ env.DEFAULT_PYTHON }}
|
||||
|
||||
@@ -40,10 +40,10 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout the repository
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
|
||||
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
||||
uses: actions/setup-python@v4.3.0
|
||||
uses: actions/setup-python@v4.5.0
|
||||
with:
|
||||
python-version: ${{ env.DEFAULT_PYTHON }}
|
||||
|
||||
|
37
.github/workflows/wheels.yml
vendored
37
.github/workflows/wheels.yml
vendored
@@ -22,7 +22,7 @@ jobs:
|
||||
architectures: ${{ steps.info.outputs.architectures }}
|
||||
steps:
|
||||
- name: Checkout the repository
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
|
||||
- name: Get information
|
||||
id: info
|
||||
@@ -57,13 +57,13 @@ jobs:
|
||||
) > .env_file
|
||||
|
||||
- name: Upload env_file
|
||||
uses: actions/upload-artifact@v3.1.1
|
||||
uses: actions/upload-artifact@v3.1.2
|
||||
with:
|
||||
name: env_file
|
||||
path: ./.env_file
|
||||
|
||||
- name: Upload requirements_diff
|
||||
uses: actions/upload-artifact@v3.1.1
|
||||
uses: actions/upload-artifact@v3.1.2
|
||||
with:
|
||||
name: requirements_diff
|
||||
path: ./requirements_diff.txt
|
||||
@@ -79,7 +79,7 @@ jobs:
|
||||
arch: ${{ fromJson(needs.init.outputs.architectures) }}
|
||||
steps:
|
||||
- name: Checkout the repository
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
|
||||
- name: Download env_file
|
||||
uses: actions/download-artifact@v3
|
||||
@@ -116,7 +116,7 @@ jobs:
|
||||
arch: ${{ fromJson(needs.init.outputs.architectures) }}
|
||||
steps:
|
||||
- name: Checkout the repository
|
||||
uses: actions/checkout@v3.1.0
|
||||
uses: actions/checkout@v3.3.0
|
||||
|
||||
- name: Download env_file
|
||||
uses: actions/download-artifact@v3
|
||||
@@ -144,6 +144,14 @@ jobs:
|
||||
sed -i "s|# opencv-python-headless|opencv-python-headless|g" ${requirement_file}
|
||||
done
|
||||
|
||||
- name: Split requirements all
|
||||
run: |
|
||||
# We split requirements all into two different files.
|
||||
# This is to prevent the build from running out of memory when
|
||||
# resolving packages on 32-bits systems (like armhf, armv7).
|
||||
|
||||
split -l $(expr $(expr $(cat requirements_all.txt | wc -l) + 1) / 2) requirements_all.txt requirements_all.txt
|
||||
|
||||
- name: Adjust build env
|
||||
run: |
|
||||
if [ "${{ matrix.arch }}" = "i386" ]; then
|
||||
@@ -159,7 +167,7 @@ jobs:
|
||||
# Do not pin numpy in wheels building
|
||||
sed -i "/numpy/d" homeassistant/package_constraints.txt
|
||||
|
||||
- name: Build wheels
|
||||
- name: Build wheels (part 1)
|
||||
uses: home-assistant/wheels@2022.10.1
|
||||
with:
|
||||
abi: cp310
|
||||
@@ -172,4 +180,19 @@ jobs:
|
||||
legacy: true
|
||||
constraints: "homeassistant/package_constraints.txt"
|
||||
requirements-diff: "requirements_diff.txt"
|
||||
requirements: "requirements_all.txt"
|
||||
requirements: "requirements_all.txtaa"
|
||||
|
||||
- name: Build wheels (part 2)
|
||||
uses: home-assistant/wheels@2022.10.1
|
||||
with:
|
||||
abi: cp310
|
||||
tag: musllinux_1_2
|
||||
arch: ${{ matrix.arch }}
|
||||
wheels-key: ${{ secrets.WHEELS_KEY }}
|
||||
env-file: true
|
||||
apk: "libexecinfo-dev;bluez-dev;libffi-dev;openssl-dev;glib-dev;eudev-dev;libxml2-dev;libxslt-dev;libpng-dev;libjpeg-turbo-dev;tiff-dev;cups-dev;gmp-dev;mpfr-dev;mpc1-dev;ffmpeg-dev;gammu-dev;yaml-dev;openblas-dev;fftw-dev;lapack-dev;gfortran;blas-dev;eigen-dev;freetype-dev;glew-dev;harfbuzz-dev;hdf5-dev;libdc1394-dev;libtbb-dev;mesa-dev;openexr-dev;openjpeg-dev"
|
||||
skip-binary: aiohttp;grpcio
|
||||
legacy: true
|
||||
constraints: "homeassistant/package_constraints.txt"
|
||||
requirements-diff: "requirements_diff.txt"
|
||||
requirements: "requirements_all.txtab"
|
||||
|
@@ -1,9 +1,16 @@
|
||||
repos:
|
||||
- repo: https://github.com/charliermarsh/ruff-pre-commit
|
||||
rev: v0.0.237
|
||||
hooks:
|
||||
- id: ruff
|
||||
args:
|
||||
- --fix
|
||||
- repo: https://github.com/asottile/pyupgrade
|
||||
rev: v3.2.2
|
||||
rev: v3.3.1
|
||||
hooks:
|
||||
- id: pyupgrade
|
||||
args: [--py39-plus]
|
||||
args: [--py310-plus]
|
||||
stages: [manual]
|
||||
- repo: https://github.com/PyCQA/autoflake
|
||||
rev: v2.0.0
|
||||
hooks:
|
||||
@@ -11,12 +18,12 @@ repos:
|
||||
args:
|
||||
- --in-place
|
||||
- --remove-all-unused-imports
|
||||
stages: [manual]
|
||||
- repo: https://github.com/psf/black
|
||||
rev: 22.10.0
|
||||
rev: 22.12.0
|
||||
hooks:
|
||||
- id: black
|
||||
args:
|
||||
- --safe
|
||||
- --quiet
|
||||
files: ^((homeassistant|pylint|script|tests)/.+)?[^/]+\.py$
|
||||
- repo: https://github.com/codespell-project/codespell
|
||||
@@ -24,7 +31,7 @@ repos:
|
||||
hooks:
|
||||
- id: codespell
|
||||
args:
|
||||
- --ignore-words-list=additionals,alot,ba,bre,bund,datas,dof,dur,ether,farenheit,falsy,fo,haa,hass,hist,iam,iff,iif,incomfort,ines,ist,lightsensor,mut,nam,nd,pres,pullrequests,referer,resset,rime,ser,serie,sur,te,technik,ue,uint,unsecure,visability,wan,wanna,withing,zar
|
||||
- --ignore-words-list=additionals,alle,alot,ba,bre,bund,datas,dof,dur,ether,farenheit,falsy,fo,haa,hass,hist,iam,iff,iif,incomfort,ines,ist,lightsensor,mut,nam,nd,pres,pullrequests,referer,resset,rime,ser,serie,sur,te,technik,ue,uint,unsecure,visability,wan,wanna,withing,zar
|
||||
- --skip="./.*,*.csv,*.json"
|
||||
- --quiet-level=2
|
||||
exclude_types: [csv, json]
|
||||
@@ -37,11 +44,12 @@ repos:
|
||||
- pycodestyle==2.10.0
|
||||
- pyflakes==3.0.1
|
||||
- flake8-docstrings==1.6.0
|
||||
- pydocstyle==6.1.1
|
||||
- pydocstyle==6.2.3
|
||||
- flake8-comprehensions==3.10.1
|
||||
- flake8-noqa==1.3.0
|
||||
- mccabe==0.7.0
|
||||
files: ^(homeassistant|script|tests)/.+\.py$
|
||||
exclude: docs/source/conf.py
|
||||
stages: [manual]
|
||||
- repo: https://github.com/PyCQA/bandit
|
||||
rev: 1.7.4
|
||||
hooks:
|
||||
@@ -52,11 +60,11 @@ repos:
|
||||
- --configfile=tests/bandit.yaml
|
||||
files: ^(homeassistant|script|tests)/.+\.py$
|
||||
- repo: https://github.com/PyCQA/isort
|
||||
rev: 5.10.1
|
||||
rev: 5.12.0
|
||||
hooks:
|
||||
- id: isort
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v3.2.0
|
||||
rev: v4.4.0
|
||||
hooks:
|
||||
- id: check-executables-have-shebangs
|
||||
stages: [manual]
|
||||
@@ -85,7 +93,7 @@ repos:
|
||||
- id: python-typing-update
|
||||
stages: [manual]
|
||||
args:
|
||||
- --py39-plus
|
||||
- --py310-plus
|
||||
- --force
|
||||
- --keep-updates
|
||||
files: ^(homeassistant|tests|script)/.+\.py$
|
||||
|
@@ -56,7 +56,9 @@ homeassistant.components.amazon_polly.*
|
||||
homeassistant.components.ambient_station.*
|
||||
homeassistant.components.amcrest.*
|
||||
homeassistant.components.ampio.*
|
||||
homeassistant.components.analytics.*
|
||||
homeassistant.components.anthemav.*
|
||||
homeassistant.components.apcupsd.*
|
||||
homeassistant.components.aqualogic.*
|
||||
homeassistant.components.aseko_pool_live.*
|
||||
homeassistant.components.asuswrt.*
|
||||
@@ -67,6 +69,7 @@ homeassistant.components.backup.*
|
||||
homeassistant.components.baf.*
|
||||
homeassistant.components.bayesian.*
|
||||
homeassistant.components.binary_sensor.*
|
||||
homeassistant.components.bitcoin.*
|
||||
homeassistant.components.blockchain.*
|
||||
homeassistant.components.bluetooth.*
|
||||
homeassistant.components.bluetooth_tracker.*
|
||||
@@ -92,6 +95,7 @@ homeassistant.components.device_tracker.*
|
||||
homeassistant.components.devolo_home_control.*
|
||||
homeassistant.components.devolo_home_network.*
|
||||
homeassistant.components.dhcp.*
|
||||
homeassistant.components.diagnostics.*
|
||||
homeassistant.components.dlna_dmr.*
|
||||
homeassistant.components.dnsip.*
|
||||
homeassistant.components.dsmr.*
|
||||
@@ -108,6 +112,7 @@ homeassistant.components.fastdotcom.*
|
||||
homeassistant.components.feedreader.*
|
||||
homeassistant.components.file_upload.*
|
||||
homeassistant.components.filesize.*
|
||||
homeassistant.components.filter.*
|
||||
homeassistant.components.fitbit.*
|
||||
homeassistant.components.flux_led.*
|
||||
homeassistant.components.forecast_solar.*
|
||||
@@ -126,9 +131,15 @@ homeassistant.components.google_sheets.*
|
||||
homeassistant.components.greeneye_monitor.*
|
||||
homeassistant.components.group.*
|
||||
homeassistant.components.guardian.*
|
||||
homeassistant.components.hardkernel.*
|
||||
homeassistant.components.hardware.*
|
||||
homeassistant.components.here_travel_time.*
|
||||
homeassistant.components.history.*
|
||||
homeassistant.components.homeassistant.triggers.event
|
||||
homeassistant.components.homeassistant_alerts.*
|
||||
homeassistant.components.homeassistant_hardware.*
|
||||
homeassistant.components.homeassistant_sky_connect.*
|
||||
homeassistant.components.homeassistant_yellow.*
|
||||
homeassistant.components.homekit
|
||||
homeassistant.components.homekit.accessories
|
||||
homeassistant.components.homekit.aidmanager
|
||||
@@ -152,8 +163,8 @@ homeassistant.components.http.*
|
||||
homeassistant.components.huawei_lte.*
|
||||
homeassistant.components.hyperion.*
|
||||
homeassistant.components.ibeacon.*
|
||||
homeassistant.components.image.*
|
||||
homeassistant.components.image_processing.*
|
||||
homeassistant.components.image_upload.*
|
||||
homeassistant.components.input_button.*
|
||||
homeassistant.components.input_select.*
|
||||
homeassistant.components.integration.*
|
||||
@@ -164,10 +175,12 @@ homeassistant.components.jewish_calendar.*
|
||||
homeassistant.components.kaleidescape.*
|
||||
homeassistant.components.knx.*
|
||||
homeassistant.components.kraken.*
|
||||
homeassistant.components.lacrosse.*
|
||||
homeassistant.components.lacrosse_view.*
|
||||
homeassistant.components.lametric.*
|
||||
homeassistant.components.laundrify.*
|
||||
homeassistant.components.lcn.*
|
||||
homeassistant.components.ld2410_ble.*
|
||||
homeassistant.components.lidarr.*
|
||||
homeassistant.components.lifx.*
|
||||
homeassistant.components.light.*
|
||||
@@ -179,6 +192,7 @@ homeassistant.components.logger.*
|
||||
homeassistant.components.lookin.*
|
||||
homeassistant.components.luftdaten.*
|
||||
homeassistant.components.mailbox.*
|
||||
homeassistant.components.mastodon.*
|
||||
homeassistant.components.matter.*
|
||||
homeassistant.components.media_player.*
|
||||
homeassistant.components.media_source.*
|
||||
@@ -189,6 +203,7 @@ homeassistant.components.mjpeg.*
|
||||
homeassistant.components.modbus.*
|
||||
homeassistant.components.modem_callerid.*
|
||||
homeassistant.components.moon.*
|
||||
homeassistant.components.mopeka.*
|
||||
homeassistant.components.mqtt.*
|
||||
homeassistant.components.mysensors.*
|
||||
homeassistant.components.nam.*
|
||||
@@ -210,6 +225,7 @@ homeassistant.components.onewire.*
|
||||
homeassistant.components.open_meteo.*
|
||||
homeassistant.components.openexchangerates.*
|
||||
homeassistant.components.openuv.*
|
||||
homeassistant.components.otbr.*
|
||||
homeassistant.components.overkiz.*
|
||||
homeassistant.components.peco.*
|
||||
homeassistant.components.persistent_notification.*
|
||||
@@ -218,10 +234,12 @@ homeassistant.components.powerwall.*
|
||||
homeassistant.components.proximity.*
|
||||
homeassistant.components.prusalink.*
|
||||
homeassistant.components.pure_energie.*
|
||||
homeassistant.components.purpleair.*
|
||||
homeassistant.components.pvoutput.*
|
||||
homeassistant.components.qnap_qsw.*
|
||||
homeassistant.components.radarr.*
|
||||
homeassistant.components.rainmachine.*
|
||||
homeassistant.components.raspberry_pi.*
|
||||
homeassistant.components.rdw.*
|
||||
homeassistant.components.recollect_waste.*
|
||||
homeassistant.components.recorder.*
|
||||
@@ -234,18 +252,23 @@ homeassistant.components.ridwell.*
|
||||
homeassistant.components.rituals_perfume_genie.*
|
||||
homeassistant.components.roku.*
|
||||
homeassistant.components.rpi_power.*
|
||||
homeassistant.components.rss_feed_template.*
|
||||
homeassistant.components.rtsp_to_webrtc.*
|
||||
homeassistant.components.ruuvi_gateway.*
|
||||
homeassistant.components.ruuvitag_ble.*
|
||||
homeassistant.components.samsungtv.*
|
||||
homeassistant.components.scene.*
|
||||
homeassistant.components.schedule.*
|
||||
homeassistant.components.scrape.*
|
||||
homeassistant.components.select.*
|
||||
homeassistant.components.senseme.*
|
||||
homeassistant.components.sensibo.*
|
||||
homeassistant.components.sensirion_ble.*
|
||||
homeassistant.components.sensor.*
|
||||
homeassistant.components.senz.*
|
||||
homeassistant.components.sfr_box.*
|
||||
homeassistant.components.shelly.*
|
||||
homeassistant.components.simplepush.*
|
||||
homeassistant.components.simplisafe.*
|
||||
homeassistant.components.skybell.*
|
||||
homeassistant.components.slack.*
|
||||
@@ -253,6 +276,7 @@ homeassistant.components.sleepiq.*
|
||||
homeassistant.components.smhi.*
|
||||
homeassistant.components.snooz.*
|
||||
homeassistant.components.sonarr.*
|
||||
homeassistant.components.speedtestdotnet.*
|
||||
homeassistant.components.ssdp.*
|
||||
homeassistant.components.statistics.*
|
||||
homeassistant.components.steamist.*
|
||||
|
28
.vscode/tasks.json
vendored
28
.vscode/tasks.json
vendored
@@ -27,6 +27,20 @@
|
||||
},
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Pytest (changed tests only)",
|
||||
"type": "shell",
|
||||
"command": "pytest --timeout=10 --picked",
|
||||
"group": {
|
||||
"kind": "test",
|
||||
"isDefault": true
|
||||
},
|
||||
"presentation": {
|
||||
"reveal": "always",
|
||||
"panel": "new"
|
||||
},
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Flake8",
|
||||
"type": "shell",
|
||||
@@ -41,6 +55,20 @@
|
||||
},
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Ruff",
|
||||
"type": "shell",
|
||||
"command": "pre-commit run ruff --all-files",
|
||||
"group": {
|
||||
"kind": "test",
|
||||
"isDefault": true
|
||||
},
|
||||
"presentation": {
|
||||
"reveal": "always",
|
||||
"panel": "new"
|
||||
},
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Pylint",
|
||||
"type": "shell",
|
||||
|
106
CODEOWNERS
106
CODEOWNERS
@@ -55,6 +55,8 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/airtouch4/ @LonePurpleWolf
|
||||
/homeassistant/components/airvisual/ @bachya
|
||||
/tests/components/airvisual/ @bachya
|
||||
/homeassistant/components/airvisual_pro/ @bachya
|
||||
/tests/components/airvisual_pro/ @bachya
|
||||
/homeassistant/components/airzone/ @Noltari
|
||||
/tests/components/airzone/ @Noltari
|
||||
/homeassistant/components/aladdin_connect/ @mkmer
|
||||
@@ -65,8 +67,6 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/alert/ @home-assistant/core @frenck
|
||||
/homeassistant/components/alexa/ @home-assistant/cloud @ochlocracy @jbouwh
|
||||
/tests/components/alexa/ @home-assistant/cloud @ochlocracy @jbouwh
|
||||
/homeassistant/components/almond/ @gcampax @balloob
|
||||
/tests/components/almond/ @gcampax @balloob
|
||||
/homeassistant/components/amberelectric/ @madpilot
|
||||
/tests/components/amberelectric/ @madpilot
|
||||
/homeassistant/components/ambiclimate/ @danielhiversen
|
||||
@@ -154,6 +154,8 @@ build.json @home-assistant/supervisor
|
||||
/homeassistant/components/bluesound/ @thrawnarn
|
||||
/homeassistant/components/bluetooth/ @bdraco
|
||||
/tests/components/bluetooth/ @bdraco
|
||||
/homeassistant/components/bluetooth_adapters/ @bdraco
|
||||
/tests/components/bluetooth_adapters/ @bdraco
|
||||
/homeassistant/components/bmw_connected_drive/ @gerard33 @rikroe
|
||||
/tests/components/bmw_connected_drive/ @gerard33 @rikroe
|
||||
/homeassistant/components/bond/ @bdraco @prystupa @joshs85 @marciogranzotto
|
||||
@@ -209,8 +211,8 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/configurator/ @home-assistant/core
|
||||
/homeassistant/components/control4/ @lawtancool
|
||||
/tests/components/control4/ @lawtancool
|
||||
/homeassistant/components/conversation/ @home-assistant/core
|
||||
/tests/components/conversation/ @home-assistant/core
|
||||
/homeassistant/components/conversation/ @home-assistant/core @synesthesiam
|
||||
/tests/components/conversation/ @home-assistant/core @synesthesiam
|
||||
/homeassistant/components/coolmaster/ @OnFreund
|
||||
/tests/components/coolmaster/ @OnFreund
|
||||
/homeassistant/components/coronavirus/ @home-assistant/core
|
||||
@@ -263,6 +265,8 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/discord/ @tkdrob
|
||||
/homeassistant/components/discovery/ @home-assistant/core
|
||||
/tests/components/discovery/ @home-assistant/core
|
||||
/homeassistant/components/dlink/ @tkdrob
|
||||
/tests/components/dlink/ @tkdrob
|
||||
/homeassistant/components/dlna_dmr/ @StevenLooman @chishm
|
||||
/tests/components/dlna_dmr/ @StevenLooman @chishm
|
||||
/homeassistant/components/dlna_dms/ @chishm
|
||||
@@ -311,6 +315,8 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/emulated_kasa/ @kbickar
|
||||
/homeassistant/components/energy/ @home-assistant/core
|
||||
/tests/components/energy/ @home-assistant/core
|
||||
/homeassistant/components/energyzero/ @klaasnicolaas
|
||||
/tests/components/energyzero/ @klaasnicolaas
|
||||
/homeassistant/components/enigma2/ @fbradyirl
|
||||
/homeassistant/components/enocean/ @bdurrer
|
||||
/tests/components/enocean/ @bdurrer
|
||||
@@ -329,6 +335,8 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/escea/ @lazdavila
|
||||
/homeassistant/components/esphome/ @OttoWinter @jesserockz
|
||||
/tests/components/esphome/ @OttoWinter @jesserockz
|
||||
/homeassistant/components/eufylife_ble/ @bdr99
|
||||
/tests/components/eufylife_ble/ @bdr99
|
||||
/homeassistant/components/evil_genius_labs/ @balloob
|
||||
/tests/components/evil_genius_labs/ @balloob
|
||||
/homeassistant/components/evohome/ @zxdavb
|
||||
@@ -428,13 +436,17 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/google/ @allenporter
|
||||
/homeassistant/components/google_assistant/ @home-assistant/cloud
|
||||
/tests/components/google_assistant/ @home-assistant/cloud
|
||||
/homeassistant/components/google_assistant_sdk/ @tronikos
|
||||
/tests/components/google_assistant_sdk/ @tronikos
|
||||
/homeassistant/components/google_cloud/ @lufton
|
||||
/homeassistant/components/google_mail/ @tkdrob
|
||||
/tests/components/google_mail/ @tkdrob
|
||||
/homeassistant/components/google_sheets/ @tkdrob
|
||||
/tests/components/google_sheets/ @tkdrob
|
||||
/homeassistant/components/google_travel_time/ @eifinger
|
||||
/tests/components/google_travel_time/ @eifinger
|
||||
/homeassistant/components/govee_ble/ @bdraco
|
||||
/tests/components/govee_ble/ @bdraco
|
||||
/homeassistant/components/govee_ble/ @bdraco @PierreAronnax
|
||||
/tests/components/govee_ble/ @bdraco @PierreAronnax
|
||||
/homeassistant/components/gpsd/ @fabaff
|
||||
/homeassistant/components/gree/ @cmroche
|
||||
/tests/components/gree/ @cmroche
|
||||
@@ -495,8 +507,8 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/homematic/ @pvizeli @danielperna84
|
||||
/homeassistant/components/homewizard/ @DCSBL
|
||||
/tests/components/homewizard/ @DCSBL
|
||||
/homeassistant/components/honeywell/ @rdfurman
|
||||
/tests/components/honeywell/ @rdfurman
|
||||
/homeassistant/components/honeywell/ @rdfurman @mkmer
|
||||
/tests/components/honeywell/ @rdfurman @mkmer
|
||||
/homeassistant/components/http/ @home-assistant/core
|
||||
/tests/components/http/ @home-assistant/core
|
||||
/homeassistant/components/huawei_lte/ @scop @fphammerle
|
||||
@@ -525,10 +537,12 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/icloud/ @Quentame @nzapponi
|
||||
/homeassistant/components/ign_sismologia/ @exxamalte
|
||||
/tests/components/ign_sismologia/ @exxamalte
|
||||
/homeassistant/components/image/ @home-assistant/core
|
||||
/tests/components/image/ @home-assistant/core
|
||||
/homeassistant/components/image_processing/ @home-assistant/core
|
||||
/tests/components/image_processing/ @home-assistant/core
|
||||
/homeassistant/components/image_upload/ @home-assistant/core
|
||||
/tests/components/image_upload/ @home-assistant/core
|
||||
/homeassistant/components/imap/ @engrbm87
|
||||
/tests/components/imap/ @engrbm87
|
||||
/homeassistant/components/incomfort/ @zxdavb
|
||||
/homeassistant/components/influxdb/ @mdegat01
|
||||
/tests/components/influxdb/ @mdegat01
|
||||
@@ -552,8 +566,8 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/integration/ @dgomes
|
||||
/homeassistant/components/intellifire/ @jeeftor
|
||||
/tests/components/intellifire/ @jeeftor
|
||||
/homeassistant/components/intent/ @home-assistant/core
|
||||
/tests/components/intent/ @home-assistant/core
|
||||
/homeassistant/components/intent/ @home-assistant/core @synesthesiam
|
||||
/tests/components/intent/ @home-assistant/core @synesthesiam
|
||||
/homeassistant/components/intesishome/ @jnimmo
|
||||
/homeassistant/components/ios/ @robbiet480
|
||||
/tests/components/ios/ @robbiet480
|
||||
@@ -595,6 +609,8 @@ build.json @home-assistant/supervisor
|
||||
/homeassistant/components/keyboard_remote/ @bendavid @lanrat
|
||||
/homeassistant/components/keymitt_ble/ @spycle
|
||||
/tests/components/keymitt_ble/ @spycle
|
||||
/homeassistant/components/kitchen_sink/ @home-assistant/core
|
||||
/tests/components/kitchen_sink/ @home-assistant/core
|
||||
/homeassistant/components/kmtronic/ @dgomes
|
||||
/tests/components/kmtronic/ @dgomes
|
||||
/homeassistant/components/knx/ @Julius2342 @farmio @marvin-w
|
||||
@@ -621,6 +637,8 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/laundrify/ @xLarry
|
||||
/homeassistant/components/lcn/ @alengwenus
|
||||
/tests/components/lcn/ @alengwenus
|
||||
/homeassistant/components/ld2410_ble/ @930913
|
||||
/tests/components/ld2410_ble/ @930913
|
||||
/homeassistant/components/led_ble/ @bdraco
|
||||
/tests/components/led_ble/ @bdraco
|
||||
/homeassistant/components/lg_netcast/ @Drafteed
|
||||
@@ -665,9 +683,8 @@ build.json @home-assistant/supervisor
|
||||
/homeassistant/components/lyric/ @timmo001
|
||||
/tests/components/lyric/ @timmo001
|
||||
/homeassistant/components/mastodon/ @fabaff
|
||||
/homeassistant/components/matrix/ @tinloaf
|
||||
/homeassistant/components/matter/ @MartinHjelmare @marcelveldt
|
||||
/tests/components/matter/ @MartinHjelmare @marcelveldt
|
||||
/homeassistant/components/matter/ @home-assistant/matter
|
||||
/tests/components/matter/ @home-assistant/matter
|
||||
/homeassistant/components/mazda/ @bdr99
|
||||
/tests/components/mazda/ @bdr99
|
||||
/homeassistant/components/meater/ @Sotolotl @emontnemery
|
||||
@@ -721,6 +738,8 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/monoprice/ @etsinko @OnFreund
|
||||
/homeassistant/components/moon/ @fabaff @frenck
|
||||
/tests/components/moon/ @fabaff @frenck
|
||||
/homeassistant/components/mopeka/ @bdraco
|
||||
/tests/components/mopeka/ @bdraco
|
||||
/homeassistant/components/motion_blinds/ @starkillerOG
|
||||
/tests/components/motion_blinds/ @starkillerOG
|
||||
/homeassistant/components/motioneye/ @dermotduffy
|
||||
@@ -798,8 +817,8 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/number/ @home-assistant/core @Shulyaka
|
||||
/homeassistant/components/nut/ @bdraco @ollo69
|
||||
/tests/components/nut/ @bdraco @ollo69
|
||||
/homeassistant/components/nws/ @MatthewFlamm
|
||||
/tests/components/nws/ @MatthewFlamm
|
||||
/homeassistant/components/nws/ @MatthewFlamm @kamiyo
|
||||
/tests/components/nws/ @MatthewFlamm @kamiyo
|
||||
/homeassistant/components/nzbget/ @chriscla
|
||||
/tests/components/nzbget/ @chriscla
|
||||
/homeassistant/components/obihai/ @dshokouhi
|
||||
@@ -821,6 +840,8 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/onvif/ @hunterjm
|
||||
/homeassistant/components/open_meteo/ @frenck
|
||||
/tests/components/open_meteo/ @frenck
|
||||
/homeassistant/components/openai_conversation/ @balloob
|
||||
/tests/components/openai_conversation/ @balloob
|
||||
/homeassistant/components/openerz/ @misialq
|
||||
/tests/components/openerz/ @misialq
|
||||
/homeassistant/components/openexchangerates/ @MartinHjelmare
|
||||
@@ -836,11 +857,13 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/openweathermap/ @fabaff @freekode @nzapponi
|
||||
/homeassistant/components/opnsense/ @mtreinish
|
||||
/tests/components/opnsense/ @mtreinish
|
||||
/homeassistant/components/oralb/ @bdraco
|
||||
/tests/components/oralb/ @bdraco
|
||||
/homeassistant/components/oralb/ @bdraco @Lash-L
|
||||
/tests/components/oralb/ @bdraco @Lash-L
|
||||
/homeassistant/components/oru/ @bvlaicu
|
||||
/homeassistant/components/overkiz/ @imicknl @vlebourl @tetienne
|
||||
/tests/components/overkiz/ @imicknl @vlebourl @tetienne
|
||||
/homeassistant/components/otbr/ @home-assistant/core
|
||||
/tests/components/otbr/ @home-assistant/core
|
||||
/homeassistant/components/overkiz/ @imicknl @vlebourl @tetienne @nyroDev
|
||||
/tests/components/overkiz/ @imicknl @vlebourl @tetienne @nyroDev
|
||||
/homeassistant/components/ovo_energy/ @timmo001
|
||||
/tests/components/ovo_energy/ @timmo001
|
||||
/homeassistant/components/p1_monitor/ @klaasnicolaas
|
||||
@@ -873,8 +896,8 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/point/ @fredrike
|
||||
/homeassistant/components/poolsense/ @haemishkyd
|
||||
/tests/components/poolsense/ @haemishkyd
|
||||
/homeassistant/components/powerwall/ @bdraco @jrester
|
||||
/tests/components/powerwall/ @bdraco @jrester
|
||||
/homeassistant/components/powerwall/ @bdraco @jrester @daniel-simpson
|
||||
/tests/components/powerwall/ @bdraco @jrester @daniel-simpson
|
||||
/homeassistant/components/profiler/ @bdraco
|
||||
/tests/components/profiler/ @bdraco
|
||||
/homeassistant/components/progettihwsw/ @ardaseremet
|
||||
@@ -890,6 +913,8 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/ps4/ @ktnrg45
|
||||
/homeassistant/components/pure_energie/ @klaasnicolaas
|
||||
/tests/components/pure_energie/ @klaasnicolaas
|
||||
/homeassistant/components/purpleair/ @bachya
|
||||
/tests/components/purpleair/ @bachya
|
||||
/homeassistant/components/push/ @dgomes
|
||||
/tests/components/push/ @dgomes
|
||||
/homeassistant/components/pushbullet/ @engrbm87
|
||||
@@ -919,7 +944,8 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/radio_browser/ @frenck
|
||||
/homeassistant/components/radiotherm/ @bdraco @vinnyfuria
|
||||
/tests/components/radiotherm/ @bdraco @vinnyfuria
|
||||
/homeassistant/components/rainbird/ @konikvranik
|
||||
/homeassistant/components/rainbird/ @konikvranik @allenporter
|
||||
/tests/components/rainbird/ @konikvranik @allenporter
|
||||
/homeassistant/components/raincloud/ @vanstinator
|
||||
/homeassistant/components/rainforest_eagle/ @gtdiehl @jcalbert @hastarin
|
||||
/tests/components/rainforest_eagle/ @gtdiehl @jcalbert @hastarin
|
||||
@@ -940,6 +966,8 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/remote/ @home-assistant/core
|
||||
/homeassistant/components/renault/ @epenet
|
||||
/tests/components/renault/ @epenet
|
||||
/homeassistant/components/reolink/ @starkillerOG
|
||||
/tests/components/reolink/ @starkillerOG
|
||||
/homeassistant/components/repairs/ @home-assistant/core
|
||||
/tests/components/repairs/ @home-assistant/core
|
||||
/homeassistant/components/repetier/ @MTrab @ShadowBr0ther
|
||||
@@ -971,8 +999,12 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/rtsp_to_webrtc/ @allenporter
|
||||
/homeassistant/components/ruckus_unleashed/ @gabe565
|
||||
/tests/components/ruckus_unleashed/ @gabe565
|
||||
/homeassistant/components/ruuvi_gateway/ @akx
|
||||
/tests/components/ruuvi_gateway/ @akx
|
||||
/homeassistant/components/ruuvitag_ble/ @akx
|
||||
/tests/components/ruuvitag_ble/ @akx
|
||||
/homeassistant/components/rympro/ @OnFreund @elad-bar @maorcc
|
||||
/tests/components/rympro/ @OnFreund @elad-bar @maorcc
|
||||
/homeassistant/components/sabnzbd/ @shaiu
|
||||
/tests/components/sabnzbd/ @shaiu
|
||||
/homeassistant/components/safe_mode/ @home-assistant/core
|
||||
@@ -1017,6 +1049,8 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/senz/ @milanmeu
|
||||
/homeassistant/components/serial/ @fabaff
|
||||
/homeassistant/components/seven_segments/ @fabaff
|
||||
/homeassistant/components/sfr_box/ @epenet
|
||||
/tests/components/sfr_box/ @epenet
|
||||
/homeassistant/components/sharkiq/ @JeffResc @funkybunch @AritroSaha10
|
||||
/tests/components/sharkiq/ @JeffResc @funkybunch @AritroSaha10
|
||||
/homeassistant/components/shell_command/ @home-assistant/core
|
||||
@@ -1098,6 +1132,8 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/srp_energy/ @briglx
|
||||
/homeassistant/components/starline/ @anonym-tsk
|
||||
/tests/components/starline/ @anonym-tsk
|
||||
/homeassistant/components/starlink/ @boswelja
|
||||
/tests/components/starlink/ @boswelja
|
||||
/homeassistant/components/statistics/ @fabaff @ThomDietrich
|
||||
/tests/components/statistics/ @fabaff @ThomDietrich
|
||||
/homeassistant/components/steam_online/ @tkdrob
|
||||
@@ -1107,6 +1143,8 @@ build.json @home-assistant/supervisor
|
||||
/homeassistant/components/stiebel_eltron/ @fucm
|
||||
/homeassistant/components/stookalert/ @fwestenberg @frenck
|
||||
/tests/components/stookalert/ @fwestenberg @frenck
|
||||
/homeassistant/components/stookwijzer/ @fwestenberg
|
||||
/tests/components/stookwijzer/ @fwestenberg
|
||||
/homeassistant/components/stream/ @hunterjm @uvjustin @allenporter
|
||||
/tests/components/stream/ @hunterjm @uvjustin @allenporter
|
||||
/homeassistant/components/stt/ @pvizeli
|
||||
@@ -1127,8 +1165,8 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/switch_as_x/ @home-assistant/core
|
||||
/homeassistant/components/switchbee/ @jafar-atili
|
||||
/tests/components/switchbee/ @jafar-atili
|
||||
/homeassistant/components/switchbot/ @bdraco @danielhiversen @RenierM26 @murtas @Eloston
|
||||
/tests/components/switchbot/ @bdraco @danielhiversen @RenierM26 @murtas @Eloston
|
||||
/homeassistant/components/switchbot/ @bdraco @danielhiversen @RenierM26 @murtas @Eloston @dsypniewski
|
||||
/tests/components/switchbot/ @bdraco @danielhiversen @RenierM26 @murtas @Eloston @dsypniewski
|
||||
/homeassistant/components/switcher_kis/ @tomerfi @thecode
|
||||
/tests/components/switcher_kis/ @tomerfi @thecode
|
||||
/homeassistant/components/switchmate/ @danielhiversen @qiz-li
|
||||
@@ -1168,6 +1206,8 @@ build.json @home-assistant/supervisor
|
||||
/homeassistant/components/thermopro/ @bdraco
|
||||
/tests/components/thermopro/ @bdraco
|
||||
/homeassistant/components/thethingsnetwork/ @fabaff
|
||||
/homeassistant/components/thread/ @home-assistant/core
|
||||
/tests/components/thread/ @home-assistant/core
|
||||
/homeassistant/components/threshold/ @fabaff
|
||||
/tests/components/threshold/ @fabaff
|
||||
/homeassistant/components/tibber/ @danielhiversen
|
||||
@@ -1284,14 +1324,14 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/weather/ @home-assistant/core
|
||||
/homeassistant/components/webhook/ @home-assistant/core
|
||||
/tests/components/webhook/ @home-assistant/core
|
||||
/homeassistant/components/webostv/ @bendavid @thecode
|
||||
/tests/components/webostv/ @bendavid @thecode
|
||||
/homeassistant/components/webostv/ @thecode
|
||||
/tests/components/webostv/ @thecode
|
||||
/homeassistant/components/websocket_api/ @home-assistant/core
|
||||
/tests/components/websocket_api/ @home-assistant/core
|
||||
/homeassistant/components/wemo/ @esev
|
||||
/tests/components/wemo/ @esev
|
||||
/homeassistant/components/whirlpool/ @abmantis
|
||||
/tests/components/whirlpool/ @abmantis
|
||||
/homeassistant/components/whirlpool/ @abmantis @mkmer
|
||||
/tests/components/whirlpool/ @abmantis @mkmer
|
||||
/homeassistant/components/whois/ @frenck
|
||||
/tests/components/whois/ @frenck
|
||||
/homeassistant/components/wiffi/ @mampfes
|
||||
@@ -1347,6 +1387,8 @@ build.json @home-assistant/supervisor
|
||||
/tests/components/zeroconf/ @bdraco
|
||||
/homeassistant/components/zerproc/ @emlove
|
||||
/tests/components/zerproc/ @emlove
|
||||
/homeassistant/components/zeversolar/ @kvanzuijlen
|
||||
/tests/components/zeversolar/ @kvanzuijlen
|
||||
/homeassistant/components/zha/ @dmulcahey @adminiuga @puddly
|
||||
/tests/components/zha/ @dmulcahey @adminiuga @puddly
|
||||
/homeassistant/components/zodiac/ @JulienTant
|
||||
@@ -1356,8 +1398,8 @@ build.json @home-assistant/supervisor
|
||||
/homeassistant/components/zoneminder/ @rohankapoorcom
|
||||
/homeassistant/components/zwave_js/ @home-assistant/z-wave
|
||||
/tests/components/zwave_js/ @home-assistant/z-wave
|
||||
/homeassistant/components/zwave_me/ @lawfulchaos @Z-Wave-Me
|
||||
/tests/components/zwave_me/ @lawfulchaos @Z-Wave-Me
|
||||
/homeassistant/components/zwave_me/ @lawfulchaos @Z-Wave-Me @PoltoS
|
||||
/tests/components/zwave_me/ @lawfulchaos @Z-Wave-Me @PoltoS
|
||||
|
||||
# Individual files
|
||||
/homeassistant/components/demo/weather.py @fabaff
|
||||
|
49
Dockerfile
49
Dockerfile
@@ -5,28 +5,59 @@ FROM ${BUILD_FROM}
|
||||
ENV \
|
||||
S6_SERVICES_GRACETIME=220000
|
||||
|
||||
ARG QEMU_CPU
|
||||
|
||||
WORKDIR /usr/src
|
||||
|
||||
## Setup Home Assistant Core dependencies
|
||||
COPY requirements.txt homeassistant/
|
||||
COPY homeassistant/package_constraints.txt homeassistant/homeassistant/
|
||||
RUN \
|
||||
pip3 install --no-cache-dir --no-index --only-binary=:all: --find-links "${WHEELS_LINKS}" \
|
||||
-r homeassistant/requirements.txt --use-deprecated=legacy-resolver
|
||||
COPY requirements_all.txt home_assistant_frontend-* homeassistant/
|
||||
pip3 install \
|
||||
--no-cache-dir \
|
||||
--no-index \
|
||||
--only-binary=:all: \
|
||||
--find-links "${WHEELS_LINKS}" \
|
||||
--use-deprecated=legacy-resolver \
|
||||
-r homeassistant/requirements.txt
|
||||
|
||||
COPY requirements_all.txt home_assistant_frontend-* home_assistant_intents-* homeassistant/
|
||||
RUN \
|
||||
if ls homeassistant/home_assistant_frontend*.whl 1> /dev/null 2>&1; then \
|
||||
pip3 install --no-cache-dir --no-index homeassistant/home_assistant_frontend-*.whl; \
|
||||
pip3 install \
|
||||
--no-cache-dir \
|
||||
--no-index \
|
||||
homeassistant/home_assistant_frontend-*.whl; \
|
||||
fi \
|
||||
&& pip3 install --no-cache-dir --no-index --only-binary=:all: --find-links "${WHEELS_LINKS}" \
|
||||
-r homeassistant/requirements_all.txt --use-deprecated=legacy-resolver
|
||||
&& if ls homeassistant/home_assistant_intents*.whl 1> /dev/null 2>&1; then \
|
||||
pip3 install \
|
||||
--no-cache-dir \
|
||||
--no-index \
|
||||
homeassistant/home_assistant_intents-*.whl; \
|
||||
fi \
|
||||
&& \
|
||||
LD_PRELOAD="/usr/local/lib/libjemalloc.so.2" \
|
||||
MALLOC_CONF="background_thread:true,metadata_thp:auto,dirty_decay_ms:20000,muzzy_decay_ms:20000" \
|
||||
pip3 install \
|
||||
--no-cache-dir \
|
||||
--no-index \
|
||||
--only-binary=:all: \
|
||||
--find-links "${WHEELS_LINKS}" \
|
||||
--use-deprecated=legacy-resolver \
|
||||
-r homeassistant/requirements_all.txt
|
||||
|
||||
## Setup Home Assistant Core
|
||||
COPY . homeassistant/
|
||||
RUN \
|
||||
pip3 install --no-cache-dir --no-index --only-binary=:all: --find-links "${WHEELS_LINKS}" \
|
||||
-e ./homeassistant --use-deprecated=legacy-resolver \
|
||||
&& python3 -m compileall homeassistant/homeassistant
|
||||
pip3 install \
|
||||
--no-cache-dir \
|
||||
--no-index \
|
||||
--only-binary=:all: \
|
||||
--find-links "${WHEELS_LINKS}" \
|
||||
--use-deprecated=legacy-resolver \
|
||||
-e ./homeassistant \
|
||||
&& python3 -m compileall \
|
||||
homeassistant/homeassistant
|
||||
|
||||
# Home Assistant S6-Overlay
|
||||
COPY rootfs /
|
||||
|
@@ -1,4 +1,4 @@
|
||||
FROM mcr.microsoft.com/vscode/devcontainers/python:0-3.9
|
||||
FROM mcr.microsoft.com/vscode/devcontainers/python:0-3.10
|
||||
|
||||
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||
|
||||
|
24
codecov.yml
24
codecov.yml
@@ -6,19 +6,39 @@ coverage:
|
||||
default:
|
||||
target: 90
|
||||
threshold: 0.09
|
||||
config-flows:
|
||||
required:
|
||||
target: auto
|
||||
threshold: 1
|
||||
paths:
|
||||
- homeassistant/components/*/config_flow.py
|
||||
- homeassistant/components/*/device_action.py
|
||||
- homeassistant/components/*/device_condition.py
|
||||
- homeassistant/components/*/device_trigger.py
|
||||
- homeassistant/components/*/diagnostics.py
|
||||
- homeassistant/components/*/group.py
|
||||
- homeassistant/components/*/intent.py
|
||||
- homeassistant/components/*/logbook.py
|
||||
- homeassistant/components/*/media_source.py
|
||||
- homeassistant/components/*/recorder.py
|
||||
- homeassistant/components/*/scene.py
|
||||
patch:
|
||||
default:
|
||||
target: auto
|
||||
config-flows:
|
||||
required:
|
||||
target: 100
|
||||
threshold: 0
|
||||
paths:
|
||||
- homeassistant/components/*/config_flow.py
|
||||
- homeassistant/components/*/device_action.py
|
||||
- homeassistant/components/*/device_condition.py
|
||||
- homeassistant/components/*/device_trigger.py
|
||||
- homeassistant/components/*/diagnostics.py
|
||||
- homeassistant/components/*/group.py
|
||||
- homeassistant/components/*/intent.py
|
||||
- homeassistant/components/*/logbook.py
|
||||
- homeassistant/components/*/media_source.py
|
||||
- homeassistant/components/*/recorder.py
|
||||
- homeassistant/components/*/scene.py
|
||||
comment: false
|
||||
|
||||
# To make partial tests possible,
|
||||
|
@@ -1,6 +1,5 @@
|
||||
"""
|
||||
Sphinx extension to add ReadTheDocs-style "Edit on GitHub" links to the
|
||||
sidebar.
|
||||
Sphinx extension for ReadTheDocs-style "Edit on GitHub" links on the sidebar.
|
||||
|
||||
Loosely based on https://github.com/astropy/astropy/pull/347
|
||||
"""
|
||||
@@ -12,6 +11,7 @@ __licence__ = "BSD (3 clause)"
|
||||
|
||||
|
||||
def get_github_url(app, view, path):
|
||||
"""Build the GitHub URL."""
|
||||
return (
|
||||
f"https://github.com/{app.config.edit_on_github_project}/"
|
||||
f"{view}/{app.config.edit_on_github_branch}/"
|
||||
@@ -20,6 +20,7 @@ def get_github_url(app, view, path):
|
||||
|
||||
|
||||
def html_page_context(app, pagename, templatename, context, doctree):
|
||||
"""Build the HTML page."""
|
||||
if templatename != "page.html":
|
||||
return
|
||||
|
||||
@@ -38,6 +39,7 @@ def html_page_context(app, pagename, templatename, context, doctree):
|
||||
|
||||
|
||||
def setup(app):
|
||||
"""Set up the app."""
|
||||
app.add_config_value("edit_on_github_project", "", True)
|
||||
app.add_config_value("edit_on_github_branch", "master", True)
|
||||
app.add_config_value("edit_on_github_src_path", "", True) # 'eg' "docs/"
|
||||
|
@@ -1,21 +1,20 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Home-Assistant documentation build configuration file, created by
|
||||
# sphinx-quickstart on Sun Aug 28 13:13:10 2016.
|
||||
#
|
||||
# This file is execfile()d with the current directory set to its
|
||||
# containing dir.
|
||||
#
|
||||
# Note that not all possible configuration values are present in this
|
||||
# autogenerated file.
|
||||
#
|
||||
# All configuration values have a default; values that are commented out
|
||||
# serve to show the default.
|
||||
"""Home Assistant documentation build configuration file.
|
||||
|
||||
This file is execfile()d with the current directory set to its
|
||||
containing dir.
|
||||
|
||||
Note that not all possible configuration values are present in this
|
||||
autogenerated file.
|
||||
|
||||
All configuration values have a default; values that are commented out
|
||||
serve to show the default.
|
||||
|
||||
If extensions (or modules to document with autodoc) are in another directory,
|
||||
add these directories to sys.path here. If the directory is relative to the
|
||||
documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||
"""
|
||||
|
||||
# If extensions (or modules to document with autodoc) are in another directory,
|
||||
# add these directories to sys.path here. If the directory is relative to the
|
||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||
#
|
||||
import inspect
|
||||
import os
|
||||
import sys
|
||||
@@ -25,7 +24,7 @@ from homeassistant.const import __short_version__, __version__
|
||||
PROJECT_NAME = "Home Assistant"
|
||||
PROJECT_PACKAGE_NAME = "homeassistant"
|
||||
PROJECT_AUTHOR = "The Home Assistant Authors"
|
||||
PROJECT_COPYRIGHT = f" 2013-2020, {PROJECT_AUTHOR}"
|
||||
PROJECT_COPYRIGHT = PROJECT_AUTHOR
|
||||
PROJECT_LONG_DESCRIPTION = (
|
||||
"Home Assistant is an open-source "
|
||||
"home automation platform running on Python 3. "
|
||||
@@ -110,17 +109,17 @@ def linkcode_resolve(domain, info):
|
||||
for part in fullname.split("."):
|
||||
try:
|
||||
obj = getattr(obj, part)
|
||||
except:
|
||||
except Exception: # pylint: disable=broad-except
|
||||
return None
|
||||
try:
|
||||
fn = inspect.getsourcefile(obj)
|
||||
except:
|
||||
except Exception: # pylint: disable=broad-except
|
||||
fn = None
|
||||
if not fn:
|
||||
return None
|
||||
try:
|
||||
source, lineno = inspect.findsource(obj)
|
||||
except:
|
||||
except Exception: # pylint: disable=broad-except
|
||||
lineno = None
|
||||
if lineno:
|
||||
linespec = "#L%d" % (lineno + 1)
|
||||
|
@@ -15,7 +15,10 @@ FAULT_LOG_FILENAME = "home-assistant.log.fault"
|
||||
def validate_os() -> None:
|
||||
"""Validate that Home Assistant is running in a supported operating system."""
|
||||
if not sys.platform.startswith(("darwin", "linux")):
|
||||
print("Home Assistant only supports Linux, OSX and Windows using WSL")
|
||||
print(
|
||||
"Home Assistant only supports Linux, OSX and Windows using WSL",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
@@ -24,14 +27,15 @@ def validate_python() -> None:
|
||||
if sys.version_info[:3] < REQUIRED_PYTHON_VER:
|
||||
print(
|
||||
"Home Assistant requires at least Python "
|
||||
f"{REQUIRED_PYTHON_VER[0]}.{REQUIRED_PYTHON_VER[1]}.{REQUIRED_PYTHON_VER[2]}"
|
||||
f"{REQUIRED_PYTHON_VER[0]}.{REQUIRED_PYTHON_VER[1]}.{REQUIRED_PYTHON_VER[2]}",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def ensure_config_path(config_dir: str) -> None:
|
||||
"""Validate the configuration directory."""
|
||||
# pylint: disable=import-outside-toplevel
|
||||
# pylint: disable-next=import-outside-toplevel
|
||||
from . import config as config_util
|
||||
|
||||
lib_dir = os.path.join(config_dir, "deps")
|
||||
@@ -39,18 +43,23 @@ def ensure_config_path(config_dir: str) -> None:
|
||||
# Test if configuration directory exists
|
||||
if not os.path.isdir(config_dir):
|
||||
if config_dir != config_util.get_default_config_dir():
|
||||
if os.path.exists(config_dir):
|
||||
reason = "is not a directory"
|
||||
else:
|
||||
reason = "does not exist"
|
||||
print(
|
||||
f"Fatal Error: Specified configuration directory {config_dir} "
|
||||
"does not exist"
|
||||
f"Fatal Error: Specified configuration directory {config_dir} {reason}",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
os.mkdir(config_dir)
|
||||
except OSError:
|
||||
except OSError as ex:
|
||||
print(
|
||||
"Fatal Error: Unable to create default configuration "
|
||||
f"directory {config_dir}"
|
||||
f"directory {config_dir}: {ex}",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
@@ -58,14 +67,17 @@ def ensure_config_path(config_dir: str) -> None:
|
||||
if not os.path.isdir(lib_dir):
|
||||
try:
|
||||
os.mkdir(lib_dir)
|
||||
except OSError:
|
||||
print(f"Fatal Error: Unable to create library directory {lib_dir}")
|
||||
except OSError as ex:
|
||||
print(
|
||||
f"Fatal Error: Unable to create library directory {lib_dir}: {ex}",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def get_arguments() -> argparse.Namespace:
|
||||
"""Get parsed passed in arguments."""
|
||||
# pylint: disable=import-outside-toplevel
|
||||
# pylint: disable-next=import-outside-toplevel
|
||||
from . import config as config_util
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
@@ -172,7 +184,7 @@ def main() -> int:
|
||||
validate_os()
|
||||
|
||||
if args.script is not None:
|
||||
# pylint: disable=import-outside-toplevel
|
||||
# pylint: disable-next=import-outside-toplevel
|
||||
from . import scripts
|
||||
|
||||
return scripts.run(args.script)
|
||||
@@ -180,7 +192,7 @@ def main() -> int:
|
||||
config_dir = os.path.abspath(os.path.join(os.getcwd(), args.config))
|
||||
ensure_config_path(config_dir)
|
||||
|
||||
# pylint: disable=import-outside-toplevel
|
||||
# pylint: disable-next=import-outside-toplevel
|
||||
from . import runner
|
||||
|
||||
runtime_conf = runner.RuntimeConfig(
|
||||
|
@@ -5,7 +5,7 @@ import asyncio
|
||||
from collections import OrderedDict
|
||||
from collections.abc import Mapping
|
||||
from datetime import timedelta
|
||||
from typing import Any, Optional, cast
|
||||
from typing import Any, cast
|
||||
|
||||
import jwt
|
||||
|
||||
@@ -24,7 +24,7 @@ EVENT_USER_UPDATED = "user_updated"
|
||||
EVENT_USER_REMOVED = "user_removed"
|
||||
|
||||
_MfaModuleDict = dict[str, MultiFactorAuthModule]
|
||||
_ProviderKey = tuple[str, Optional[str]]
|
||||
_ProviderKey = tuple[str, str | None]
|
||||
_ProviderDict = dict[_ProviderKey, AuthProvider]
|
||||
|
||||
|
||||
@@ -87,7 +87,7 @@ class AuthManagerFlowManager(data_entry_flow.FlowManager):
|
||||
|
||||
async def async_create_flow(
|
||||
self,
|
||||
handler_key: Any,
|
||||
handler_key: str,
|
||||
*,
|
||||
context: dict[str, Any] | None = None,
|
||||
data: dict[str, Any] | None = None,
|
||||
@@ -534,7 +534,8 @@ class AuthManager:
|
||||
)
|
||||
if provider is None:
|
||||
raise InvalidProvider(
|
||||
f"Auth provider {refresh_token.credential.auth_provider_type}, {refresh_token.credential.auth_provider_id} not available"
|
||||
f"Auth provider {refresh_token.credential.auth_provider_type},"
|
||||
f" {refresh_token.credential.auth_provider_id} not available"
|
||||
)
|
||||
return provider
|
||||
|
||||
|
@@ -449,8 +449,10 @@ class AuthStore:
|
||||
created_at = dt_util.parse_datetime(rt_dict["created_at"])
|
||||
if created_at is None:
|
||||
getLogger(__name__).error(
|
||||
"Ignoring refresh token %(id)s with invalid created_at "
|
||||
"%(created_at)s for user_id %(user_id)s",
|
||||
(
|
||||
"Ignoring refresh token %(id)s with invalid created_at "
|
||||
"%(created_at)s for user_id %(user_id)s"
|
||||
),
|
||||
rt_dict,
|
||||
)
|
||||
continue
|
||||
@@ -553,7 +555,9 @@ class AuthStore:
|
||||
"client_icon": refresh_token.client_icon,
|
||||
"token_type": refresh_token.token_type,
|
||||
"created_at": refresh_token.created_at.isoformat(),
|
||||
"access_token_expiration": refresh_token.access_token_expiration.total_seconds(),
|
||||
"access_token_expiration": (
|
||||
refresh_token.access_token_expiration.total_seconds()
|
||||
),
|
||||
"token": refresh_token.token,
|
||||
"jwt_key": refresh_token.jwt_key,
|
||||
"last_used_at": refresh_token.last_used_at.isoformat()
|
||||
|
@@ -116,9 +116,7 @@ class SetupFlow(data_entry_flow.FlowHandler):
|
||||
|
||||
if user_input:
|
||||
result = await self._auth_module.async_setup_user(self._user_id, user_input)
|
||||
return self.async_create_entry(
|
||||
title=self._auth_module.name, data={"result": result}
|
||||
)
|
||||
return self.async_create_entry(data={"result": result})
|
||||
|
||||
return self.async_show_form(
|
||||
step_id="init", data_schema=self._setup_schema, errors=errors
|
||||
|
@@ -26,7 +26,7 @@ from . import (
|
||||
SetupFlow,
|
||||
)
|
||||
|
||||
REQUIREMENTS = ["pyotp==2.7.0"]
|
||||
REQUIREMENTS = ["pyotp==2.8.0"]
|
||||
|
||||
CONF_MESSAGE = "message"
|
||||
|
||||
@@ -330,7 +330,7 @@ class NotifySetupFlow(SetupFlow):
|
||||
self._user_id,
|
||||
{"notify_service": self._notify_service, "target": self._target},
|
||||
)
|
||||
return self.async_create_entry(title=self._auth_module.name, data={})
|
||||
return self.async_create_entry(data={})
|
||||
|
||||
errors["base"] = "invalid_code"
|
||||
|
||||
|
@@ -19,7 +19,7 @@ from . import (
|
||||
SetupFlow,
|
||||
)
|
||||
|
||||
REQUIREMENTS = ["pyotp==2.7.0", "PyQRCode==1.2.1"]
|
||||
REQUIREMENTS = ["pyotp==2.8.0", "PyQRCode==1.2.1"]
|
||||
|
||||
CONFIG_SCHEMA = MULTI_FACTOR_AUTH_MODULE_SCHEMA.extend({}, extra=vol.PREVENT_EXTRA)
|
||||
|
||||
@@ -47,8 +47,10 @@ def _generate_qr_code(data: str) -> str:
|
||||
.decode("ascii")
|
||||
.replace("\n", "")
|
||||
.replace(
|
||||
'<?xml version="1.0" encoding="UTF-8"?>'
|
||||
'<svg xmlns="http://www.w3.org/2000/svg"',
|
||||
(
|
||||
'<?xml version="1.0" encoding="UTF-8"?>'
|
||||
'<svg xmlns="http://www.w3.org/2000/svg"'
|
||||
),
|
||||
"<svg",
|
||||
)
|
||||
)
|
||||
@@ -206,9 +208,7 @@ class TotpSetupFlow(SetupFlow):
|
||||
result = await self._auth_module.async_setup_user(
|
||||
self._user_id, {"secret": self._ota_secret}
|
||||
)
|
||||
return self.async_create_entry(
|
||||
title=self._auth_module.name, data={"result": result}
|
||||
)
|
||||
return self.async_create_entry(data={"result": result})
|
||||
|
||||
errors["base"] = "invalid_code"
|
||||
|
||||
|
@@ -1,29 +1,28 @@
|
||||
"""Common code for permissions."""
|
||||
from collections.abc import Mapping
|
||||
from typing import Union
|
||||
|
||||
# MyPy doesn't support recursion yet. So writing it out as far as we need.
|
||||
|
||||
ValueType = Union[
|
||||
ValueType = (
|
||||
# Example: entities.all = { read: true, control: true }
|
||||
Mapping[str, bool],
|
||||
bool,
|
||||
None,
|
||||
]
|
||||
Mapping[str, bool]
|
||||
| bool
|
||||
| None
|
||||
)
|
||||
|
||||
# Example: entities.domains = { light: … }
|
||||
SubCategoryDict = Mapping[str, ValueType]
|
||||
|
||||
SubCategoryType = Union[SubCategoryDict, bool, None]
|
||||
SubCategoryType = SubCategoryDict | bool | None
|
||||
|
||||
CategoryType = Union[
|
||||
CategoryType = (
|
||||
# Example: entities.domains
|
||||
Mapping[str, SubCategoryType],
|
||||
Mapping[str, SubCategoryType]
|
||||
# Example: entities.all
|
||||
Mapping[str, ValueType],
|
||||
bool,
|
||||
None,
|
||||
]
|
||||
| Mapping[str, ValueType]
|
||||
| bool
|
||||
| None
|
||||
)
|
||||
|
||||
# Example: { entities: … }
|
||||
PolicyType = Mapping[str, CategoryType]
|
||||
|
@@ -3,13 +3,13 @@ from __future__ import annotations
|
||||
|
||||
from collections.abc import Callable
|
||||
from functools import wraps
|
||||
from typing import Optional, cast
|
||||
from typing import cast
|
||||
|
||||
from .const import SUBCAT_ALL
|
||||
from .models import PermissionLookup
|
||||
from .types import CategoryType, SubCategoryDict, ValueType
|
||||
|
||||
LookupFunc = Callable[[PermissionLookup, SubCategoryDict, str], Optional[ValueType]]
|
||||
LookupFunc = Callable[[PermissionLookup, SubCategoryDict, str], ValueType | None]
|
||||
SubCatLookupType = dict[str, LookupFunc]
|
||||
|
||||
|
||||
|
@@ -284,4 +284,4 @@ class LoginFlow(data_entry_flow.FlowHandler):
|
||||
|
||||
async def async_finish(self, flow_result: Any) -> FlowResult:
|
||||
"""Handle the pass of login flow."""
|
||||
return self.async_create_entry(title=self._auth_provider.name, data=flow_result)
|
||||
return self.async_create_entry(data=flow_result)
|
||||
|
@@ -93,9 +93,11 @@ class Data:
|
||||
self.is_legacy = True
|
||||
|
||||
logging.getLogger(__name__).warning(
|
||||
"Home Assistant auth provider is running in legacy mode "
|
||||
"because we detected usernames that are case-insensitive"
|
||||
"equivalent. Please change the username: '%s'.",
|
||||
(
|
||||
"Home Assistant auth provider is running in legacy mode "
|
||||
"because we detected usernames that are case-insensitive"
|
||||
"equivalent. Please change the username: '%s'."
|
||||
),
|
||||
username,
|
||||
)
|
||||
|
||||
@@ -108,9 +110,11 @@ class Data:
|
||||
self.is_legacy = True
|
||||
|
||||
logging.getLogger(__name__).warning(
|
||||
"Home Assistant auth provider is running in legacy mode "
|
||||
"because we detected usernames that start or end in a "
|
||||
"space. Please change the username: '%s'.",
|
||||
(
|
||||
"Home Assistant auth provider is running in legacy mode "
|
||||
"because we detected usernames that start or end in a "
|
||||
"space. Please change the username: '%s'."
|
||||
),
|
||||
username,
|
||||
)
|
||||
|
||||
|
@@ -14,7 +14,7 @@ from ipaddress import (
|
||||
ip_address,
|
||||
ip_network,
|
||||
)
|
||||
from typing import Any, Union, cast
|
||||
from typing import Any, cast
|
||||
|
||||
import voluptuous as vol
|
||||
|
||||
@@ -27,8 +27,8 @@ from . import AUTH_PROVIDER_SCHEMA, AUTH_PROVIDERS, AuthProvider, LoginFlow
|
||||
from .. import InvalidAuthError
|
||||
from ..models import Credentials, RefreshToken, UserMeta
|
||||
|
||||
IPAddress = Union[IPv4Address, IPv6Address]
|
||||
IPNetwork = Union[IPv4Network, IPv6Network]
|
||||
IPAddress = IPv4Address | IPv6Address
|
||||
IPNetwork = IPv4Network | IPv6Network
|
||||
|
||||
CONF_TRUSTED_NETWORKS = "trusted_networks"
|
||||
CONF_TRUSTED_USERS = "trusted_users"
|
||||
|
@@ -8,7 +8,9 @@ from .util.async_ import protect_loop
|
||||
def enable() -> None:
|
||||
"""Enable the detection of blocking calls in the event loop."""
|
||||
# Prevent urllib3 and requests doing I/O in event loop
|
||||
HTTPConnection.putrequest = protect_loop(HTTPConnection.putrequest) # type: ignore[assignment]
|
||||
HTTPConnection.putrequest = protect_loop( # type: ignore[assignment]
|
||||
HTTPConnection.putrequest
|
||||
)
|
||||
|
||||
# Prevent sleeping in event loop. Non-strict since 2022.02
|
||||
time.sleep = protect_loop(time.sleep, strict=False)
|
||||
|
@@ -284,8 +284,7 @@ async def async_from_config_dict(
|
||||
return None
|
||||
except HomeAssistantError:
|
||||
_LOGGER.error(
|
||||
"Home Assistant core failed to initialize. "
|
||||
"Further initialization aborted"
|
||||
"Home Assistant core failed to initialize. Further initialization aborted"
|
||||
)
|
||||
return None
|
||||
|
||||
@@ -347,7 +346,7 @@ def async_enable_logging(
|
||||
|
||||
if not log_no_color:
|
||||
try:
|
||||
# pylint: disable=import-outside-toplevel
|
||||
# pylint: disable-next=import-outside-toplevel
|
||||
from colorlog import ColoredFormatter
|
||||
|
||||
# basicConfig must be called after importing colorlog in order to
|
||||
@@ -386,7 +385,11 @@ def async_enable_logging(
|
||||
)
|
||||
threading.excepthook = lambda args: logging.getLogger(None).exception(
|
||||
"Uncaught thread exception",
|
||||
exc_info=(args.exc_type, args.exc_value, args.exc_traceback), # type: ignore[arg-type]
|
||||
exc_info=( # type: ignore[arg-type]
|
||||
args.exc_type,
|
||||
args.exc_value,
|
||||
args.exc_traceback,
|
||||
),
|
||||
)
|
||||
|
||||
# Log errors to a file if we have write access to file or config dir
|
||||
@@ -404,7 +407,10 @@ def async_enable_logging(
|
||||
not err_path_exists and os.access(err_dir, os.W_OK)
|
||||
):
|
||||
|
||||
err_handler: logging.handlers.RotatingFileHandler | logging.handlers.TimedRotatingFileHandler
|
||||
err_handler: (
|
||||
logging.handlers.RotatingFileHandler
|
||||
| logging.handlers.TimedRotatingFileHandler
|
||||
)
|
||||
if log_rotate_days:
|
||||
err_handler = logging.handlers.TimedRotatingFileHandler(
|
||||
err_log_path, when="midnight", backupCount=log_rotate_days
|
||||
@@ -463,7 +469,10 @@ def _get_domains(hass: core.HomeAssistant, config: dict[str, Any]) -> set[str]:
|
||||
|
||||
|
||||
async def _async_watch_pending_setups(hass: core.HomeAssistant) -> None:
|
||||
"""Periodic log of setups that are pending for longer than LOG_SLOW_STARTUP_INTERVAL."""
|
||||
"""Periodic log of setups that are pending.
|
||||
|
||||
Pending for longer than LOG_SLOW_STARTUP_INTERVAL.
|
||||
"""
|
||||
loop_count = 0
|
||||
setup_started: dict[str, datetime] = hass.data[DATA_SETUP_STARTED]
|
||||
previous_was_empty = True
|
||||
|
5
homeassistant/brands/airvisual.json
Normal file
5
homeassistant/brands/airvisual.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"domain": "airvisual",
|
||||
"name": "AirVisual",
|
||||
"integrations": ["airvisual", "airvisual_pro"]
|
||||
}
|
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"domain": "amazon",
|
||||
"name": "Amazon",
|
||||
"integrations": ["alexa", "amazon_polly", "aws", "route53"]
|
||||
"integrations": ["alexa", "amazon_polly", "aws", "fire_tv", "route53"]
|
||||
}
|
||||
|
6
homeassistant/brands/eufy.json
Normal file
6
homeassistant/brands/eufy.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"domain": "eufy",
|
||||
"name": "eufy",
|
||||
"integrations": ["eufy", "eufylife_ble"],
|
||||
"iot_standards": []
|
||||
}
|
@@ -3,8 +3,10 @@
|
||||
"name": "Google",
|
||||
"integrations": [
|
||||
"google_assistant",
|
||||
"google_assistant_sdk",
|
||||
"google_cloud",
|
||||
"google_domains",
|
||||
"google_mail",
|
||||
"google_maps",
|
||||
"google_pubsub",
|
||||
"google_sheets",
|
||||
|
@@ -3,10 +3,14 @@ from __future__ import annotations
|
||||
|
||||
from functools import partial
|
||||
|
||||
from abodepy import Abode, AbodeAutomation as AbodeAuto
|
||||
from abodepy.devices import AbodeDevice as AbodeDev
|
||||
from abodepy.exceptions import AbodeAuthenticationException, AbodeException
|
||||
import abodepy.helpers.timeline as TIMELINE
|
||||
from jaraco.abode.automation import Automation as AbodeAuto
|
||||
from jaraco.abode.client import Client as Abode
|
||||
from jaraco.abode.devices.base import Device as AbodeDev
|
||||
from jaraco.abode.exceptions import (
|
||||
AuthenticationException as AbodeAuthenticationException,
|
||||
Exception as AbodeException,
|
||||
)
|
||||
from jaraco.abode.helpers.timeline import Groups as GROUPS
|
||||
from requests.exceptions import ConnectTimeout, HTTPError
|
||||
import voluptuous as vol
|
||||
|
||||
@@ -26,7 +30,7 @@ from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
|
||||
from homeassistant.helpers import config_validation as cv, entity
|
||||
from homeassistant.helpers.dispatcher import dispatcher_send
|
||||
|
||||
from .const import ATTRIBUTION, CONF_POLLING, DEFAULT_CACHEDB, DOMAIN, LOGGER
|
||||
from .const import ATTRIBUTION, CONF_POLLING, DOMAIN, LOGGER
|
||||
|
||||
SERVICE_SETTINGS = "change_setting"
|
||||
SERVICE_CAPTURE_IMAGE = "capture_image"
|
||||
@@ -82,7 +86,6 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||
username = entry.data[CONF_USERNAME]
|
||||
password = entry.data[CONF_PASSWORD]
|
||||
polling = entry.data[CONF_POLLING]
|
||||
cache = hass.config.path(DEFAULT_CACHEDB)
|
||||
|
||||
# For previous config entries where unique_id is None
|
||||
if entry.unique_id is None:
|
||||
@@ -92,7 +95,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||
|
||||
try:
|
||||
abode = await hass.async_add_executor_job(
|
||||
Abode, username, password, True, True, True, cache
|
||||
Abode, username, password, True, True, True
|
||||
)
|
||||
|
||||
except AbodeAuthenticationException as ex:
|
||||
@@ -225,17 +228,17 @@ def setup_abode_events(hass: HomeAssistant) -> None:
|
||||
hass.bus.fire(event, data)
|
||||
|
||||
events = [
|
||||
TIMELINE.ALARM_GROUP,
|
||||
TIMELINE.ALARM_END_GROUP,
|
||||
TIMELINE.PANEL_FAULT_GROUP,
|
||||
TIMELINE.PANEL_RESTORE_GROUP,
|
||||
TIMELINE.AUTOMATION_GROUP,
|
||||
TIMELINE.DISARM_GROUP,
|
||||
TIMELINE.ARM_GROUP,
|
||||
TIMELINE.ARM_FAULT_GROUP,
|
||||
TIMELINE.TEST_GROUP,
|
||||
TIMELINE.CAPTURE_GROUP,
|
||||
TIMELINE.DEVICE_GROUP,
|
||||
GROUPS.ALARM,
|
||||
GROUPS.ALARM_END,
|
||||
GROUPS.PANEL_FAULT,
|
||||
GROUPS.PANEL_RESTORE,
|
||||
GROUPS.AUTOMATION,
|
||||
GROUPS.DISARM,
|
||||
GROUPS.ARM,
|
||||
GROUPS.ARM_FAULT,
|
||||
GROUPS.TEST,
|
||||
GROUPS.CAPTURE,
|
||||
GROUPS.DEVICE,
|
||||
]
|
||||
|
||||
for event in events:
|
||||
|
@@ -1,7 +1,7 @@
|
||||
"""Support for Abode Security System alarm control panels."""
|
||||
from __future__ import annotations
|
||||
|
||||
from abodepy.devices.alarm import AbodeAlarm as AbodeAl
|
||||
from jaraco.abode.devices.alarm import Alarm as AbodeAl
|
||||
|
||||
import homeassistant.components.alarm_control_panel as alarm
|
||||
from homeassistant.components.alarm_control_panel import AlarmControlPanelEntityFeature
|
||||
|
@@ -4,8 +4,8 @@ from __future__ import annotations
|
||||
from contextlib import suppress
|
||||
from typing import cast
|
||||
|
||||
from abodepy.devices.binary_sensor import AbodeBinarySensor as ABBinarySensor
|
||||
import abodepy.helpers.constants as CONST
|
||||
from jaraco.abode.devices.sensor import BinarySensor as ABBinarySensor
|
||||
from jaraco.abode.helpers import constants as CONST
|
||||
|
||||
from homeassistant.components.binary_sensor import (
|
||||
BinarySensorDeviceClass,
|
||||
|
@@ -4,9 +4,9 @@ from __future__ import annotations
|
||||
from datetime import timedelta
|
||||
from typing import Any, cast
|
||||
|
||||
from abodepy.devices import CONST, AbodeDevice as AbodeDev
|
||||
from abodepy.devices.camera import AbodeCamera as AbodeCam
|
||||
import abodepy.helpers.timeline as TIMELINE
|
||||
from jaraco.abode.devices.base import Device as AbodeDev
|
||||
from jaraco.abode.devices.camera import Camera as AbodeCam
|
||||
from jaraco.abode.helpers import constants as CONST, timeline as TIMELINE
|
||||
import requests
|
||||
from requests.models import Response
|
||||
|
||||
@@ -30,7 +30,7 @@ async def async_setup_entry(
|
||||
data: AbodeSystem = hass.data[DOMAIN]
|
||||
|
||||
async_add_entities(
|
||||
AbodeCamera(data, device, TIMELINE.CAPTURE_IMAGE)
|
||||
AbodeCamera(data, device, TIMELINE.CAPTURE_IMAGE) # pylint: disable=no-member
|
||||
for device in data.abode.get_devices(generic_type=CONST.TYPE_CAMERA)
|
||||
)
|
||||
|
||||
|
@@ -5,9 +5,12 @@ from collections.abc import Mapping
|
||||
from http import HTTPStatus
|
||||
from typing import Any, cast
|
||||
|
||||
from abodepy import Abode
|
||||
from abodepy.exceptions import AbodeAuthenticationException, AbodeException
|
||||
from abodepy.helpers.errors import MFA_CODE_REQUIRED
|
||||
from jaraco.abode.client import Client as Abode
|
||||
from jaraco.abode.exceptions import (
|
||||
AuthenticationException as AbodeAuthenticationException,
|
||||
Exception as AbodeException,
|
||||
)
|
||||
from jaraco.abode.helpers.errors import MFA_CODE_REQUIRED
|
||||
from requests.exceptions import ConnectTimeout, HTTPError
|
||||
import voluptuous as vol
|
||||
|
||||
@@ -15,7 +18,7 @@ from homeassistant import config_entries
|
||||
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
|
||||
from homeassistant.data_entry_flow import FlowResult
|
||||
|
||||
from .const import CONF_POLLING, DEFAULT_CACHEDB, DOMAIN, LOGGER
|
||||
from .const import CONF_POLLING, DOMAIN, LOGGER
|
||||
|
||||
CONF_MFA = "mfa_code"
|
||||
|
||||
@@ -35,7 +38,6 @@ class AbodeFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
||||
vol.Required(CONF_MFA): str,
|
||||
}
|
||||
|
||||
self._cache: str | None = None
|
||||
self._mfa_code: str | None = None
|
||||
self._password: str | None = None
|
||||
self._polling: bool = False
|
||||
@@ -43,12 +45,11 @@ class AbodeFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
||||
|
||||
async def _async_abode_login(self, step_id: str) -> FlowResult:
|
||||
"""Handle login with Abode."""
|
||||
self._cache = self.hass.config.path(DEFAULT_CACHEDB)
|
||||
errors = {}
|
||||
|
||||
try:
|
||||
await self.hass.async_add_executor_job(
|
||||
Abode, self._username, self._password, True, False, False, self._cache
|
||||
Abode, self._username, self._password, True, False, False
|
||||
)
|
||||
|
||||
except AbodeException as ex:
|
||||
@@ -77,12 +78,7 @@ class AbodeFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
||||
"""Handle multi-factor authentication (MFA) login with Abode."""
|
||||
try:
|
||||
# Create instance to access login method for passing MFA code
|
||||
abode = Abode(
|
||||
auto_login=False,
|
||||
get_devices=False,
|
||||
get_automations=False,
|
||||
cache_path=self._cache,
|
||||
)
|
||||
abode = Abode(auto_login=False, get_devices=False, get_automations=False)
|
||||
await self.hass.async_add_executor_job(
|
||||
abode.login, self._username, self._password, self._mfa_code
|
||||
)
|
||||
|
@@ -6,5 +6,4 @@ LOGGER = logging.getLogger(__package__)
|
||||
DOMAIN = "abode"
|
||||
ATTRIBUTION = "Data provided by goabode.com"
|
||||
|
||||
DEFAULT_CACHEDB = "abodepy_cache.pickle"
|
||||
CONF_POLLING = "polling"
|
||||
|
@@ -1,8 +1,8 @@
|
||||
"""Support for Abode Security System covers."""
|
||||
from typing import Any
|
||||
|
||||
from abodepy.devices.cover import AbodeCover as AbodeCV
|
||||
import abodepy.helpers.constants as CONST
|
||||
from jaraco.abode.devices.cover import Cover as AbodeCV
|
||||
from jaraco.abode.helpers import constants as CONST
|
||||
|
||||
from homeassistant.components.cover import CoverEntity
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
|
@@ -4,8 +4,8 @@ from __future__ import annotations
|
||||
from math import ceil
|
||||
from typing import Any
|
||||
|
||||
from abodepy.devices.light import AbodeLight as AbodeLT
|
||||
import abodepy.helpers.constants as CONST
|
||||
from jaraco.abode.devices.light import Light as AbodeLT
|
||||
from jaraco.abode.helpers import constants as CONST
|
||||
|
||||
from homeassistant.components.light import (
|
||||
ATTR_BRIGHTNESS,
|
||||
|
@@ -1,8 +1,8 @@
|
||||
"""Support for the Abode Security System locks."""
|
||||
from typing import Any
|
||||
|
||||
from abodepy.devices.lock import AbodeLock as AbodeLK
|
||||
import abodepy.helpers.constants as CONST
|
||||
from jaraco.abode.devices.lock import Lock as AbodeLK
|
||||
from jaraco.abode.helpers import constants as CONST
|
||||
|
||||
from homeassistant.components.lock import LockEntity
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
|
@@ -3,11 +3,11 @@
|
||||
"name": "Abode",
|
||||
"config_flow": true,
|
||||
"documentation": "https://www.home-assistant.io/integrations/abode",
|
||||
"requirements": ["abodepy==1.2.0"],
|
||||
"requirements": ["jaraco.abode==3.2.1"],
|
||||
"codeowners": ["@shred86"],
|
||||
"homekit": {
|
||||
"models": ["Abode", "Iota"]
|
||||
},
|
||||
"iot_class": "cloud_push",
|
||||
"loggers": ["abodepy", "lomond"]
|
||||
"loggers": ["jaraco.abode", "lomond"]
|
||||
}
|
||||
|
@@ -3,7 +3,8 @@ from __future__ import annotations
|
||||
|
||||
from typing import cast
|
||||
|
||||
from abodepy.devices.sensor import CONST, AbodeSensor as AbodeSense
|
||||
from jaraco.abode.devices.sensor import Sensor as AbodeSense
|
||||
from jaraco.abode.helpers import constants as CONST
|
||||
|
||||
from homeassistant.components.sensor import (
|
||||
SensorDeviceClass,
|
||||
|
@@ -3,7 +3,8 @@ from __future__ import annotations
|
||||
|
||||
from typing import Any, cast
|
||||
|
||||
from abodepy.devices.switch import CONST, AbodeSwitch as AbodeSW
|
||||
from jaraco.abode.devices.switch import Switch as AbodeSW
|
||||
from jaraco.abode.helpers import constants as CONST
|
||||
|
||||
from homeassistant.components.switch import SwitchEntity
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
|
@@ -2,7 +2,7 @@
|
||||
"config": {
|
||||
"abort": {
|
||||
"reauth_successful": "\u041f\u043e\u0432\u0442\u043e\u0440\u043d\u0430\u0442\u0430 \u0430\u0432\u0442\u0435\u043d\u0442\u0438\u043a\u0430\u0446\u0438\u044f \u0431\u0435\u0448\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u0430",
|
||||
"single_instance_allowed": "\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 Abode."
|
||||
"single_instance_allowed": "\u0412\u0435\u0447\u0435 \u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0430\u043d\u043e. \u0412\u044a\u0437\u043c\u043e\u0436\u043d\u0430 \u0435 \u0441\u0430\u043c\u043e \u0435\u0434\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f."
|
||||
},
|
||||
"error": {
|
||||
"cannot_connect": "\u041d\u0435\u0443\u0441\u043f\u0435\u0445 \u043f\u0440\u0438 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435"
|
||||
|
@@ -28,7 +28,7 @@
|
||||
"password": "Passwort",
|
||||
"username": "E-Mail"
|
||||
},
|
||||
"title": "Gib deine Abode-Anmeldeinformationen ein"
|
||||
"title": "Gib deine Abode Anmeldeinformationen ein"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
12
homeassistant/components/abode/translations/lt.json
Normal file
12
homeassistant/components/abode/translations/lt.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"config": {
|
||||
"step": {
|
||||
"user": {
|
||||
"data": {
|
||||
"password": "Slapta\u017eodis",
|
||||
"username": "El. pa\u0161tas"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -5,7 +5,7 @@
|
||||
"single_instance_allowed": "J\u00e1 configurado. Apenas uma \u00fanica configura\u00e7\u00e3o \u00e9 poss\u00edvel."
|
||||
},
|
||||
"error": {
|
||||
"cannot_connect": "Falha na liga\u00e7\u00e3o",
|
||||
"cannot_connect": "A liga\u00e7\u00e3o falhou",
|
||||
"invalid_auth": "Autentica\u00e7\u00e3o inv\u00e1lida",
|
||||
"invalid_mfa_code": "C\u00f3digo MFA inv\u00e1lido"
|
||||
},
|
||||
@@ -19,14 +19,14 @@
|
||||
"reauth_confirm": {
|
||||
"data": {
|
||||
"password": "Palavra-passe",
|
||||
"username": "Email"
|
||||
"username": ""
|
||||
},
|
||||
"title": "Preencha as informa\u00e7\u00f5es de login de Abode"
|
||||
},
|
||||
"user": {
|
||||
"data": {
|
||||
"password": "Palavra-passe",
|
||||
"username": "Email"
|
||||
"username": ""
|
||||
},
|
||||
"title": "Preencha as informa\u00e7\u00f5es de login de Abode"
|
||||
}
|
||||
|
@@ -1,6 +1,8 @@
|
||||
"""Diagnostics support for AccuWeather."""
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
from homeassistant.components.diagnostics import async_redact_data
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE
|
||||
@@ -14,7 +16,7 @@ TO_REDACT = {CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE}
|
||||
|
||||
async def async_get_config_entry_diagnostics(
|
||||
hass: HomeAssistant, config_entry: ConfigEntry
|
||||
) -> dict:
|
||||
) -> dict[str, Any]:
|
||||
"""Return diagnostics for a config entry."""
|
||||
coordinator: AccuWeatherDataUpdateCoordinator = hass.data[DOMAIN][
|
||||
config_entry.entry_id
|
||||
|
@@ -2,7 +2,7 @@
|
||||
"domain": "accuweather",
|
||||
"name": "AccuWeather",
|
||||
"documentation": "https://www.home-assistant.io/integrations/accuweather/",
|
||||
"requirements": ["accuweather==0.4.0"],
|
||||
"requirements": ["accuweather==0.5.0"],
|
||||
"codeowners": ["@bieniu"],
|
||||
"config_flow": true,
|
||||
"quality_scale": "platinum",
|
||||
|
@@ -14,17 +14,13 @@ from homeassistant.components.sensor import (
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import (
|
||||
CONCENTRATION_PARTS_PER_CUBIC_METER,
|
||||
LENGTH_FEET,
|
||||
LENGTH_INCHES,
|
||||
LENGTH_METERS,
|
||||
LENGTH_MILLIMETERS,
|
||||
PERCENTAGE,
|
||||
SPEED_KILOMETERS_PER_HOUR,
|
||||
SPEED_MILES_PER_HOUR,
|
||||
TEMP_CELSIUS,
|
||||
TEMP_FAHRENHEIT,
|
||||
TIME_HOURS,
|
||||
UV_INDEX,
|
||||
UnitOfLength,
|
||||
UnitOfSpeed,
|
||||
UnitOfTemperature,
|
||||
UnitOfTime,
|
||||
UnitOfVolumetricFlux,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
@@ -65,7 +61,8 @@ class AccuWeatherSensorDescription(
|
||||
"""Class describing AccuWeather sensor entities."""
|
||||
|
||||
attr_fn: Callable[[dict[str, Any]], dict[str, StateType]] = lambda _: {}
|
||||
unit_fn: Callable[[bool], str | None] = lambda _: None
|
||||
metric_unit: str | None = None
|
||||
us_customary_unit: str | None = None
|
||||
|
||||
|
||||
FORECAST_SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
|
||||
@@ -74,7 +71,7 @@ FORECAST_SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
|
||||
icon="mdi:weather-cloudy",
|
||||
name="Cloud cover day",
|
||||
entity_registry_enabled_default=False,
|
||||
unit_fn=lambda _: PERCENTAGE,
|
||||
native_unit_of_measurement=PERCENTAGE,
|
||||
value_fn=lambda data, _: cast(int, data),
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
@@ -82,7 +79,7 @@ FORECAST_SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
|
||||
icon="mdi:weather-cloudy",
|
||||
name="Cloud cover night",
|
||||
entity_registry_enabled_default=False,
|
||||
unit_fn=lambda _: PERCENTAGE,
|
||||
native_unit_of_measurement=PERCENTAGE,
|
||||
value_fn=lambda data, _: cast(int, data),
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
@@ -90,7 +87,7 @@ FORECAST_SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
|
||||
icon="mdi:grass",
|
||||
name="Grass pollen",
|
||||
entity_registry_enabled_default=False,
|
||||
unit_fn=lambda _: CONCENTRATION_PARTS_PER_CUBIC_METER,
|
||||
native_unit_of_measurement=CONCENTRATION_PARTS_PER_CUBIC_METER,
|
||||
value_fn=lambda data, _: cast(int, data[ATTR_VALUE]),
|
||||
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
|
||||
),
|
||||
@@ -98,7 +95,7 @@ FORECAST_SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
|
||||
key="HoursOfSun",
|
||||
icon="mdi:weather-partly-cloudy",
|
||||
name="Hours of sun",
|
||||
unit_fn=lambda _: TIME_HOURS,
|
||||
native_unit_of_measurement=UnitOfTime.HOURS,
|
||||
value_fn=lambda data, _: cast(float, data),
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
@@ -106,7 +103,7 @@ FORECAST_SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
|
||||
icon="mdi:blur",
|
||||
name="Mold pollen",
|
||||
entity_registry_enabled_default=False,
|
||||
unit_fn=lambda _: CONCENTRATION_PARTS_PER_CUBIC_METER,
|
||||
native_unit_of_measurement=CONCENTRATION_PARTS_PER_CUBIC_METER,
|
||||
value_fn=lambda data, _: cast(int, data[ATTR_VALUE]),
|
||||
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
|
||||
),
|
||||
@@ -122,7 +119,7 @@ FORECAST_SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
|
||||
key="Ragweed",
|
||||
icon="mdi:sprout",
|
||||
name="Ragweed pollen",
|
||||
unit_fn=lambda _: CONCENTRATION_PARTS_PER_CUBIC_METER,
|
||||
native_unit_of_measurement=CONCENTRATION_PARTS_PER_CUBIC_METER,
|
||||
entity_registry_enabled_default=False,
|
||||
value_fn=lambda data, _: cast(int, data[ATTR_VALUE]),
|
||||
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
|
||||
@@ -131,14 +128,16 @@ FORECAST_SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
|
||||
key="RealFeelTemperatureMax",
|
||||
device_class=SensorDeviceClass.TEMPERATURE,
|
||||
name="RealFeel temperature max",
|
||||
unit_fn=lambda metric: TEMP_CELSIUS if metric else TEMP_FAHRENHEIT,
|
||||
metric_unit=UnitOfTemperature.CELSIUS,
|
||||
us_customary_unit=UnitOfTemperature.FAHRENHEIT,
|
||||
value_fn=lambda data, _: cast(float, data[ATTR_VALUE]),
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
key="RealFeelTemperatureMin",
|
||||
device_class=SensorDeviceClass.TEMPERATURE,
|
||||
name="RealFeel temperature min",
|
||||
unit_fn=lambda metric: TEMP_CELSIUS if metric else TEMP_FAHRENHEIT,
|
||||
metric_unit=UnitOfTemperature.CELSIUS,
|
||||
us_customary_unit=UnitOfTemperature.FAHRENHEIT,
|
||||
value_fn=lambda data, _: cast(float, data[ATTR_VALUE]),
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
@@ -146,7 +145,8 @@ FORECAST_SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
|
||||
device_class=SensorDeviceClass.TEMPERATURE,
|
||||
name="RealFeel temperature shade max",
|
||||
entity_registry_enabled_default=False,
|
||||
unit_fn=lambda metric: TEMP_CELSIUS if metric else TEMP_FAHRENHEIT,
|
||||
metric_unit=UnitOfTemperature.CELSIUS,
|
||||
us_customary_unit=UnitOfTemperature.FAHRENHEIT,
|
||||
value_fn=lambda data, _: cast(float, data[ATTR_VALUE]),
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
@@ -154,28 +154,29 @@ FORECAST_SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
|
||||
device_class=SensorDeviceClass.TEMPERATURE,
|
||||
name="RealFeel temperature shade min",
|
||||
entity_registry_enabled_default=False,
|
||||
unit_fn=lambda metric: TEMP_CELSIUS if metric else TEMP_FAHRENHEIT,
|
||||
metric_unit=UnitOfTemperature.CELSIUS,
|
||||
us_customary_unit=UnitOfTemperature.FAHRENHEIT,
|
||||
value_fn=lambda data, _: cast(float, data[ATTR_VALUE]),
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
key="ThunderstormProbabilityDay",
|
||||
icon="mdi:weather-lightning",
|
||||
name="Thunderstorm probability day",
|
||||
unit_fn=lambda _: PERCENTAGE,
|
||||
native_unit_of_measurement=PERCENTAGE,
|
||||
value_fn=lambda data, _: cast(int, data),
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
key="ThunderstormProbabilityNight",
|
||||
icon="mdi:weather-lightning",
|
||||
name="Thunderstorm probability night",
|
||||
unit_fn=lambda _: PERCENTAGE,
|
||||
native_unit_of_measurement=PERCENTAGE,
|
||||
value_fn=lambda data, _: cast(int, data),
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
key="Tree",
|
||||
icon="mdi:tree-outline",
|
||||
name="Tree pollen",
|
||||
unit_fn=lambda _: CONCENTRATION_PARTS_PER_CUBIC_METER,
|
||||
native_unit_of_measurement=CONCENTRATION_PARTS_PER_CUBIC_METER,
|
||||
entity_registry_enabled_default=False,
|
||||
value_fn=lambda data, _: cast(int, data[ATTR_VALUE]),
|
||||
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
|
||||
@@ -184,53 +185,45 @@ FORECAST_SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
|
||||
key="UVIndex",
|
||||
icon="mdi:weather-sunny",
|
||||
name="UV index",
|
||||
unit_fn=lambda _: UV_INDEX,
|
||||
native_unit_of_measurement=UV_INDEX,
|
||||
value_fn=lambda data, _: cast(int, data[ATTR_VALUE]),
|
||||
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
key="WindGustDay",
|
||||
device_class=SensorDeviceClass.WIND_SPEED,
|
||||
icon="mdi:weather-windy",
|
||||
name="Wind gust day",
|
||||
entity_registry_enabled_default=False,
|
||||
unit_fn=lambda metric: SPEED_KILOMETERS_PER_HOUR
|
||||
if metric
|
||||
else SPEED_MILES_PER_HOUR,
|
||||
metric_unit=UnitOfSpeed.KILOMETERS_PER_HOUR,
|
||||
us_customary_unit=UnitOfSpeed.MILES_PER_HOUR,
|
||||
value_fn=lambda data, _: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
|
||||
attr_fn=lambda data: {"direction": data[ATTR_DIRECTION][ATTR_ENGLISH]},
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
key="WindGustNight",
|
||||
device_class=SensorDeviceClass.WIND_SPEED,
|
||||
icon="mdi:weather-windy",
|
||||
name="Wind gust night",
|
||||
entity_registry_enabled_default=False,
|
||||
unit_fn=lambda metric: SPEED_KILOMETERS_PER_HOUR
|
||||
if metric
|
||||
else SPEED_MILES_PER_HOUR,
|
||||
metric_unit=UnitOfSpeed.KILOMETERS_PER_HOUR,
|
||||
us_customary_unit=UnitOfSpeed.MILES_PER_HOUR,
|
||||
value_fn=lambda data, _: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
|
||||
attr_fn=lambda data: {"direction": data[ATTR_DIRECTION][ATTR_ENGLISH]},
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
key="WindDay",
|
||||
device_class=SensorDeviceClass.WIND_SPEED,
|
||||
icon="mdi:weather-windy",
|
||||
name="Wind day",
|
||||
unit_fn=lambda metric: SPEED_KILOMETERS_PER_HOUR
|
||||
if metric
|
||||
else SPEED_MILES_PER_HOUR,
|
||||
metric_unit=UnitOfSpeed.KILOMETERS_PER_HOUR,
|
||||
us_customary_unit=UnitOfSpeed.MILES_PER_HOUR,
|
||||
value_fn=lambda data, _: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
|
||||
attr_fn=lambda data: {"direction": data[ATTR_DIRECTION][ATTR_ENGLISH]},
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
key="WindNight",
|
||||
device_class=SensorDeviceClass.WIND_SPEED,
|
||||
icon="mdi:weather-windy",
|
||||
name="Wind night",
|
||||
unit_fn=lambda metric: SPEED_KILOMETERS_PER_HOUR
|
||||
if metric
|
||||
else SPEED_MILES_PER_HOUR,
|
||||
metric_unit=UnitOfSpeed.KILOMETERS_PER_HOUR,
|
||||
us_customary_unit=UnitOfSpeed.MILES_PER_HOUR,
|
||||
value_fn=lambda data, _: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
|
||||
attr_fn=lambda data: {"direction": data[ATTR_DIRECTION][ATTR_ENGLISH]},
|
||||
),
|
||||
@@ -243,7 +236,8 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
|
||||
name="Apparent temperature",
|
||||
entity_registry_enabled_default=False,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
unit_fn=lambda metric: TEMP_CELSIUS if metric else TEMP_FAHRENHEIT,
|
||||
metric_unit=UnitOfTemperature.CELSIUS,
|
||||
us_customary_unit=UnitOfTemperature.FAHRENHEIT,
|
||||
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
@@ -252,8 +246,10 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
|
||||
icon="mdi:weather-fog",
|
||||
name="Cloud ceiling",
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
unit_fn=lambda metric: LENGTH_METERS if metric else LENGTH_FEET,
|
||||
value_fn=lambda data, unit: round(cast(float, data[unit][ATTR_VALUE])),
|
||||
metric_unit=UnitOfLength.METERS,
|
||||
us_customary_unit=UnitOfLength.FEET,
|
||||
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
|
||||
native_precision=0,
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
key="CloudCover",
|
||||
@@ -261,7 +257,7 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
|
||||
name="Cloud cover",
|
||||
entity_registry_enabled_default=False,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
unit_fn=lambda _: PERCENTAGE,
|
||||
native_unit_of_measurement=PERCENTAGE,
|
||||
value_fn=lambda data, _: cast(int, data),
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
@@ -270,7 +266,8 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
|
||||
name="Dew point",
|
||||
entity_registry_enabled_default=False,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
unit_fn=lambda metric: TEMP_CELSIUS if metric else TEMP_FAHRENHEIT,
|
||||
metric_unit=UnitOfTemperature.CELSIUS,
|
||||
us_customary_unit=UnitOfTemperature.FAHRENHEIT,
|
||||
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
@@ -278,7 +275,8 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
|
||||
device_class=SensorDeviceClass.TEMPERATURE,
|
||||
name="RealFeel temperature",
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
unit_fn=lambda metric: TEMP_CELSIUS if metric else TEMP_FAHRENHEIT,
|
||||
metric_unit=UnitOfTemperature.CELSIUS,
|
||||
us_customary_unit=UnitOfTemperature.FAHRENHEIT,
|
||||
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
@@ -287,23 +285,27 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
|
||||
name="RealFeel temperature shade",
|
||||
entity_registry_enabled_default=False,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
unit_fn=lambda metric: TEMP_CELSIUS if metric else TEMP_FAHRENHEIT,
|
||||
metric_unit=UnitOfTemperature.CELSIUS,
|
||||
us_customary_unit=UnitOfTemperature.FAHRENHEIT,
|
||||
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
key="Precipitation",
|
||||
icon="mdi:weather-rainy",
|
||||
device_class=SensorDeviceClass.PRECIPITATION_INTENSITY,
|
||||
name="Precipitation",
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
unit_fn=lambda metric: LENGTH_MILLIMETERS if metric else LENGTH_INCHES,
|
||||
metric_unit=UnitOfVolumetricFlux.MILLIMETERS_PER_HOUR,
|
||||
us_customary_unit=UnitOfVolumetricFlux.INCHES_PER_HOUR,
|
||||
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
|
||||
attr_fn=lambda data: {"type": data["PrecipitationType"]},
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
key="PressureTendency",
|
||||
device_class="accuweather__pressure_tendency",
|
||||
device_class=SensorDeviceClass.ENUM,
|
||||
icon="mdi:gauge",
|
||||
name="Pressure tendency",
|
||||
options=["falling", "rising", "steady"],
|
||||
translation_key="pressure_tendency",
|
||||
value_fn=lambda data, _: cast(str, data["LocalizedText"]).lower(),
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
@@ -311,7 +313,7 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
|
||||
icon="mdi:weather-sunny",
|
||||
name="UV index",
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
unit_fn=lambda _: UV_INDEX,
|
||||
native_unit_of_measurement=UV_INDEX,
|
||||
value_fn=lambda data, _: cast(int, data),
|
||||
attr_fn=lambda data: {ATTR_LEVEL: data["UVIndexText"]},
|
||||
),
|
||||
@@ -321,7 +323,8 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
|
||||
name="Wet bulb temperature",
|
||||
entity_registry_enabled_default=False,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
unit_fn=lambda metric: TEMP_CELSIUS if metric else TEMP_FAHRENHEIT,
|
||||
metric_unit=UnitOfTemperature.CELSIUS,
|
||||
us_customary_unit=UnitOfTemperature.FAHRENHEIT,
|
||||
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
@@ -330,30 +333,27 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
|
||||
name="Wind chill temperature",
|
||||
entity_registry_enabled_default=False,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
unit_fn=lambda metric: TEMP_CELSIUS if metric else TEMP_FAHRENHEIT,
|
||||
metric_unit=UnitOfTemperature.CELSIUS,
|
||||
us_customary_unit=UnitOfTemperature.FAHRENHEIT,
|
||||
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
key="Wind",
|
||||
device_class=SensorDeviceClass.WIND_SPEED,
|
||||
icon="mdi:weather-windy",
|
||||
name="Wind",
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
unit_fn=lambda metric: SPEED_KILOMETERS_PER_HOUR
|
||||
if metric
|
||||
else SPEED_MILES_PER_HOUR,
|
||||
metric_unit=UnitOfSpeed.KILOMETERS_PER_HOUR,
|
||||
us_customary_unit=UnitOfSpeed.MILES_PER_HOUR,
|
||||
value_fn=lambda data, unit: cast(float, data[ATTR_SPEED][unit][ATTR_VALUE]),
|
||||
),
|
||||
AccuWeatherSensorDescription(
|
||||
key="WindGust",
|
||||
device_class=SensorDeviceClass.WIND_SPEED,
|
||||
icon="mdi:weather-windy",
|
||||
name="Wind gust",
|
||||
entity_registry_enabled_default=False,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
unit_fn=lambda metric: SPEED_KILOMETERS_PER_HOUR
|
||||
if metric
|
||||
else SPEED_MILES_PER_HOUR,
|
||||
metric_unit=UnitOfSpeed.KILOMETERS_PER_HOUR,
|
||||
us_customary_unit=UnitOfSpeed.MILES_PER_HOUR,
|
||||
value_fn=lambda data, unit: cast(float, data[ATTR_SPEED][unit][ATTR_VALUE]),
|
||||
),
|
||||
)
|
||||
@@ -413,13 +413,15 @@ class AccuWeatherSensor(
|
||||
self._attr_unique_id = (
|
||||
f"{coordinator.location_key}-{description.key}".lower()
|
||||
)
|
||||
self._attr_native_unit_of_measurement = description.native_unit_of_measurement
|
||||
if self.coordinator.hass.config.units is METRIC_SYSTEM:
|
||||
self._unit_system = API_METRIC
|
||||
if metric_unit := description.metric_unit:
|
||||
self._attr_native_unit_of_measurement = metric_unit
|
||||
else:
|
||||
self._unit_system = API_IMPERIAL
|
||||
self._attr_native_unit_of_measurement = self.entity_description.unit_fn(
|
||||
self.coordinator.hass.config.units is METRIC_SYSTEM
|
||||
)
|
||||
if us_customary_unit := description.us_customary_unit:
|
||||
self._attr_native_unit_of_measurement = us_customary_unit
|
||||
self._attr_device_info = coordinator.device_info
|
||||
if forecast_day is not None:
|
||||
self.forecast_day = forecast_day
|
||||
@@ -453,7 +455,7 @@ def _get_sensor_data(
|
||||
return sensors[ATTR_FORECAST][forecast_day][kind]
|
||||
|
||||
if kind == "Precipitation":
|
||||
return sensors["PrecipitationSummary"][kind]
|
||||
return sensors["PrecipitationSummary"]["PastHour"]
|
||||
|
||||
return sensors[kind]
|
||||
|
||||
|
@@ -22,6 +22,17 @@
|
||||
"single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]"
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"pressure_tendency": {
|
||||
"state": {
|
||||
"steady": "Steady",
|
||||
"rising": "Rising",
|
||||
"falling": "Falling"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"init": {
|
||||
|
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"state": {
|
||||
"accuweather__pressure_tendency": {
|
||||
"steady": "Steady",
|
||||
"rising": "Rising",
|
||||
"falling": "Falling"
|
||||
}
|
||||
}
|
||||
}
|
@@ -4,16 +4,6 @@
|
||||
"requests_exceeded": "\u062a\u0645 \u062a\u062c\u0627\u0648\u0632 \u0627\u0644\u0639\u062f\u062f \u0627\u0644\u0645\u0633\u0645\u0648\u062d \u0628\u0647 \u0645\u0646 \u0627\u0644\u0637\u0644\u0628\u0627\u062a \u0625\u0644\u0649 Accuweather API. \u0639\u0644\u064a\u0643 \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631 \u0623\u0648 \u062a\u063a\u064a\u064a\u0631 \u0645\u0641\u062a\u0627\u062d API."
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "\u0627\u0644\u0646\u0634\u0631\u0629 \u0627\u0644\u062c\u0648\u064a\u0629"
|
||||
},
|
||||
"description": "\u0646\u0638\u0631\u064b\u0627 \u0644\u0642\u064a\u0648\u062f \u0627\u0644\u0625\u0635\u062f\u0627\u0631 \u0627\u0644\u0645\u062c\u0627\u0646\u064a \u0645\u0646 \u0645\u0641\u062a\u0627\u062d AccuWeather API \u060c \u0639\u0646\u062f \u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u062a\u0646\u0628\u0624 \u0628\u0627\u0644\u0637\u0642\u0633 \u060c \u0633\u064a\u062a\u0645 \u0625\u062c\u0631\u0627\u0621 \u062a\u062d\u062f\u064a\u062b\u0627\u062a \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0643\u0644 80 \u062f\u0642\u064a\u0642\u0629 \u0628\u062f\u0644\u0627\u064b \u0645\u0646 \u0643\u0644 40 \u062f\u0642\u064a\u0642\u0629."
|
||||
}
|
||||
}
|
||||
},
|
||||
"system_health": {
|
||||
"info": {
|
||||
"can_reach_server": "\u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u062e\u0627\u062f\u0645 AccuWeather",
|
||||
|
@@ -18,6 +18,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"pressure_tendency": {
|
||||
"state": {
|
||||
"falling": "\u041f\u043e\u043d\u0438\u0436\u0435\u043d\u0438\u0435",
|
||||
"rising": "\u041f\u043e\u0432\u0438\u0448\u0435\u043d\u0438\u0435",
|
||||
"steady": "\u0421\u0442\u0430\u0431\u0438\u043b\u043d\u043e"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"init": {
|
||||
@@ -25,11 +36,6 @@
|
||||
"forecast": "\u041f\u0440\u043e\u0433\u043d\u043e\u0437\u0430 \u0437\u0430 \u0432\u0440\u0435\u043c\u0435\u0442\u043e"
|
||||
},
|
||||
"description": "\u041f\u043e\u0440\u0430\u0434\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u0442\u0430 \u043d\u0430 \u0431\u0435\u0437\u043f\u043b\u0430\u0442\u043d\u0430\u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u044f \u043d\u0430 API \u043a\u043b\u044e\u0447\u0430 \u043d\u0430 AccuWeather, \u043a\u043e\u0433\u0430\u0442\u043e \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u0442\u0435 \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0430\u0442\u0430 \u0437\u0430 \u0432\u0440\u0435\u043c\u0435\u0442\u043e, \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438\u0442\u0435 \u043d\u0430 \u0434\u0430\u043d\u043d\u0438 \u0449\u0435 \u0441\u0435 \u0438\u0437\u0432\u044a\u0440\u0448\u0432\u0430\u0442 \u043d\u0430 \u0432\u0441\u0435\u043a\u0438 80 \u043c\u0438\u043d\u0443\u0442\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0430 \u0432\u0441\u0435\u043a\u0438 40 \u043c\u0438\u043d\u0443\u0442\u0438."
|
||||
},
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "\u041f\u0440\u043e\u0433\u043d\u043e\u0437\u0430 \u0437\u0430 \u0432\u0440\u0435\u043c\u0435\u0442\u043e"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -22,18 +22,24 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"pressure_tendency": {
|
||||
"state": {
|
||||
"falling": "Disminuint",
|
||||
"rising": "Augmentant",
|
||||
"steady": "Estable"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"init": {
|
||||
"data": {
|
||||
"forecast": "Previsi\u00f3 meteorol\u00f2gica"
|
||||
}
|
||||
},
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "Previsi\u00f3 meteorol\u00f2gica"
|
||||
},
|
||||
"description": "Per culpa de les limitacions de la versi\u00f3 gratu\u00efta l'API d'AccuWeather, quan habilitis la previsi\u00f3 meteorol\u00f2gica, les actualitzacions de dades es faran cada 80 minuts en comptes de cada 40."
|
||||
"description": "Per culpa de les limitacions de la versi\u00f3 gratu\u00efta de l'API d'AccuWeather, quan activis la previsi\u00f3 meteorol\u00f2gica, les actualitzacions de dades es faran cada 80 minuts en comptes de cada 40."
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@@ -19,6 +19,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"pressure_tendency": {
|
||||
"state": {
|
||||
"steady": "Stabiln\u00ed"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"init": {
|
||||
@@ -26,12 +35,6 @@
|
||||
"forecast": "P\u0159edpov\u011b\u010f po\u010das\u00ed"
|
||||
},
|
||||
"description": "Vzhledem k omezen\u00edm bezplatn\u00e9 verze kl\u00ed\u010de AccuWeather API, kdy\u017e povol\u00edte p\u0159edpov\u011b\u010f po\u010das\u00ed, aktualizace dat se budou prov\u00e1d\u011bt ka\u017ed\u00fdch 80 minut m\u00edsto ka\u017ed\u00fdch 40 minut."
|
||||
},
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "P\u0159edpov\u011b\u010f po\u010das\u00ed"
|
||||
},
|
||||
"description": "Kdy\u017e povol\u00edte p\u0159edpov\u011b\u010f po\u010das\u00ed, budou aktualizace dat prov\u00e1d\u011bny ka\u017ed\u00fdch 80 minut nam\u00edsto 40 minut z d\u016fvodu omezen\u00ed bezplatn\u00e9 verze AccuWeather."
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@@ -22,6 +22,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"pressure_tendency": {
|
||||
"state": {
|
||||
"falling": "Fallend",
|
||||
"rising": "Steigend",
|
||||
"steady": "Stetig"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"init": {
|
||||
@@ -29,12 +40,6 @@
|
||||
"forecast": "Wettervorhersage"
|
||||
},
|
||||
"description": "Aufgrund der Einschr\u00e4nkungen der kostenlosen Version des AccuWeather API-Schl\u00fcssels werden bei aktivierter Wettervorhersage Datenaktualisierungen alle 80 Minuten statt alle 40 Minuten durchgef\u00fchrt."
|
||||
},
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "Wettervorhersage"
|
||||
},
|
||||
"description": "Aufgrund der Einschr\u00e4nkungen der kostenlosen Version des AccuWeather-API-Schl\u00fcssels werden bei aktivierter Wettervorhersage Datenaktualisierungen alle 80 Minuten statt alle 40 Minuten durchgef\u00fchrt."
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@@ -22,6 +22,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"pressure_tendency": {
|
||||
"state": {
|
||||
"falling": "\u03a0\u03c4\u03ce\u03c3\u03b7",
|
||||
"rising": "\u0391\u03c5\u03be\u03b1\u03bd\u03cc\u03bc\u03b5\u03bd\u03b7",
|
||||
"steady": "\u03a3\u03c4\u03b1\u03b8\u03b5\u03c1\u03ae"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"init": {
|
||||
@@ -29,12 +40,6 @@
|
||||
"forecast": "\u03a0\u03c1\u03cc\u03b3\u03bd\u03c9\u03c3\u03b7 \u03ba\u03b1\u03b9\u03c1\u03bf\u03cd"
|
||||
},
|
||||
"description": "\u039b\u03cc\u03b3\u03c9 \u03c4\u03c9\u03bd \u03c0\u03b5\u03c1\u03b9\u03bf\u03c1\u03b9\u03c3\u03bc\u03ce\u03bd \u03c4\u03b7\u03c2 \u03b4\u03c9\u03c1\u03b5\u03ac\u03bd \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 \u03ba\u03bb\u03b5\u03b9\u03b4\u03b9\u03bf\u03cd AccuWeather API, \u03cc\u03c4\u03b1\u03bd \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b5 \u03c4\u03b7\u03bd \u03c0\u03c1\u03cc\u03b3\u03bd\u03c9\u03c3\u03b7 \u03ba\u03b1\u03b9\u03c1\u03bf\u03cd, \u03bf\u03b9 \u03b5\u03bd\u03b7\u03bc\u03b5\u03c1\u03ce\u03c3\u03b5\u03b9\u03c2 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd \u03b8\u03b1 \u03b5\u03ba\u03c4\u03b5\u03bb\u03bf\u03cd\u03bd\u03c4\u03b1\u03b9 \u03ba\u03ac\u03b8\u03b5 80 \u03bb\u03b5\u03c0\u03c4\u03ac \u03b1\u03bd\u03c4\u03af \u03b3\u03b9\u03b1 \u03ba\u03ac\u03b8\u03b5 40 \u03bb\u03b5\u03c0\u03c4\u03ac."
|
||||
},
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "\u03a0\u03c1\u03cc\u03b3\u03bd\u03c9\u03c3\u03b7 \u03ba\u03b1\u03b9\u03c1\u03bf\u03cd"
|
||||
},
|
||||
"description": "\u039b\u03cc\u03b3\u03c9 \u03c4\u03c9\u03bd \u03c0\u03b5\u03c1\u03b9\u03bf\u03c1\u03b9\u03c3\u03bc\u03ce\u03bd \u03c4\u03b7\u03c2 \u03b4\u03c9\u03c1\u03b5\u03ac\u03bd \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 \u03ba\u03bb\u03b5\u03b9\u03b4\u03b9\u03bf\u03cd API \u03c4\u03bf\u03c5 AccuWeather, \u03cc\u03c4\u03b1\u03bd \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b5 \u03c4\u03b7\u03bd \u03c0\u03c1\u03cc\u03b3\u03bd\u03c9\u03c3\u03b7 \u03ba\u03b1\u03b9\u03c1\u03bf\u03cd, \u03bf\u03b9 \u03b5\u03bd\u03b7\u03bc\u03b5\u03c1\u03ce\u03c3\u03b5\u03b9\u03c2 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd \u03b8\u03b1 \u03c0\u03c1\u03b1\u03b3\u03bc\u03b1\u03c4\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bd\u03c4\u03b1\u03b9 \u03ba\u03ac\u03b8\u03b5 80 \u03bb\u03b5\u03c0\u03c4\u03ac \u03b1\u03bd\u03c4\u03af \u03b3\u03b9\u03b1 \u03ba\u03ac\u03b8\u03b5 40 \u03bb\u03b5\u03c0\u03c4\u03ac."
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@@ -22,6 +22,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"pressure_tendency": {
|
||||
"state": {
|
||||
"falling": "Falling",
|
||||
"rising": "Rising",
|
||||
"steady": "Steady"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"init": {
|
||||
@@ -29,12 +40,6 @@
|
||||
"forecast": "Weather forecast"
|
||||
},
|
||||
"description": "Due to the limitations of the free version of the AccuWeather API key, when you enable weather forecast, data updates will be performed every 80 minutes instead of every 40 minutes."
|
||||
},
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "Weather forecast"
|
||||
},
|
||||
"description": "Due to the limitations of the free version of the AccuWeather API key, when you enable weather forecast, data updates will be performed every 80 minutes instead of every 40 minutes."
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@@ -12,16 +12,6 @@
|
||||
"requests_exceeded": "Se super\u00f3 el n\u00famero permitido de solicitudes a la API de Accuweather. Tiene que esperar o cambiar la clave de API."
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "Pron\u00f3stico del tiempo"
|
||||
},
|
||||
"description": "Debido a las limitaciones de la versi\u00f3n gratuita de la clave API de AccuWeather, cuando habilita el pron\u00f3stico del tiempo, las actualizaciones de datos se realizar\u00e1n cada 64 minutos en lugar de cada 32 minutos."
|
||||
}
|
||||
}
|
||||
},
|
||||
"system_health": {
|
||||
"info": {
|
||||
"can_reach_server": "Llegar al servidor de AccuWeather",
|
||||
|
@@ -22,6 +22,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"pressure_tendency": {
|
||||
"state": {
|
||||
"falling": "Descendente",
|
||||
"rising": "Creciente",
|
||||
"steady": "Estable"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"init": {
|
||||
@@ -29,12 +40,6 @@
|
||||
"forecast": "Previsi\u00f3n meteorol\u00f3gica"
|
||||
},
|
||||
"description": "Debido a las limitaciones de la versi\u00f3n gratuita de la clave API de AccuWeather, cuando habilitas la previsi\u00f3n meteorol\u00f3gica, las actualizaciones de datos se realizar\u00e1n cada 80 minutos en lugar de cada 40 minutos."
|
||||
},
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "Previsi\u00f3n meteorol\u00f3gica"
|
||||
},
|
||||
"description": "Debido a las limitaciones de la versi\u00f3n gratuita de la clave API de AccuWeather, cuando habilitas la previsi\u00f3n meteorol\u00f3gica, las actualizaciones de datos se realizar\u00e1n cada 80 minutos en lugar de cada 40 minutos."
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@@ -22,6 +22,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"pressure_tendency": {
|
||||
"state": {
|
||||
"falling": "Langev",
|
||||
"rising": "T\u00f5usev",
|
||||
"steady": "\u00dchtlane"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"init": {
|
||||
@@ -29,12 +40,6 @@
|
||||
"forecast": "Ilmateade"
|
||||
},
|
||||
"description": "AccuWeather API tasuta versioonis toimub ilmaennustuse lubamisel andmete v\u00e4rskendamine iga 80 minuti j\u00e4rel (muidu 40 minutit)."
|
||||
},
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "Ilmateade"
|
||||
},
|
||||
"description": "AccuWeather API tasuta versioonis toimub ilmaennustuse lubamisel andmete v\u00e4rskendamine iga 80 minuti j\u00e4rel (muidu 40 minutit)."
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@@ -28,12 +28,6 @@
|
||||
"data": {
|
||||
"forecast": "Pr\u00e9visions m\u00e9t\u00e9orologiques"
|
||||
}
|
||||
},
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "Pr\u00e9visions m\u00e9t\u00e9orologiques"
|
||||
},
|
||||
"description": "En raison des limitations de la version gratuite de la cl\u00e9 API AccuWeather, lorsque vous activez les pr\u00e9visions m\u00e9t\u00e9orologiques, les mises \u00e0 jour des donn\u00e9es seront effectu\u00e9es toutes les 64 minutes au lieu de toutes les 32 minutes."
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@@ -22,9 +22,20 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"pressure_tendency": {
|
||||
"state": {
|
||||
"falling": "\u05e9\u05d5\u05e7\u05e2\u05ea",
|
||||
"rising": "\u05d6\u05d5\u05e8\u05d7\u05ea",
|
||||
"steady": "\u05d9\u05e6\u05d9\u05d1"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"user": {
|
||||
"init": {
|
||||
"data": {
|
||||
"forecast": "\u05ea\u05d7\u05d6\u05d9\u05ea \u05de\u05d6\u05d2 \u05d4\u05d0\u05d5\u05d5\u05d9\u05e8"
|
||||
},
|
||||
|
@@ -22,13 +22,24 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"pressure_tendency": {
|
||||
"state": {
|
||||
"falling": "Cs\u00f6kken\u0151",
|
||||
"rising": "Emelked\u0151",
|
||||
"steady": "\u00c1lland\u00f3"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"user": {
|
||||
"init": {
|
||||
"data": {
|
||||
"forecast": "Id\u0151j\u00e1r\u00e1s el\u0151rejelz\u00e9s"
|
||||
},
|
||||
"description": "Az AccuWeather API kulcs ingyenes verzi\u00f3j\u00e1nak korl\u00e1tai miatt, amikor enged\u00e9lyezi az id\u0151j\u00e1r\u00e1s -el\u0151rejelz\u00e9st, az adatfriss\u00edt\u00e9seket 40 percenk\u00e9nt 80 percenk\u00e9nt hajtj\u00e1k v\u00e9gre."
|
||||
"description": "Az AccuWeather API-kulcs ingyenes verzi\u00f3j\u00e1nak korl\u00e1tai miatt az id\u0151j\u00e1r\u00e1s-el\u0151rejelz\u00e9s enged\u00e9lyez\u00e9sekor az adatok friss\u00edt\u00e9se 40 perc helyett 80 percenk\u00e9nt t\u00f6rt\u00e9nik."
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@@ -22,6 +22,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"pressure_tendency": {
|
||||
"state": {
|
||||
"falling": "Turun",
|
||||
"rising": "Naik",
|
||||
"steady": "Tetap"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"init": {
|
||||
@@ -29,12 +40,6 @@
|
||||
"forecast": "Prakiraan cuaca"
|
||||
},
|
||||
"description": "Karena keterbatasan versi gratis kunci API AccuWeather, ketika Anda mengaktifkan prakiraan cuaca, pembaruan data akan dilakukan setiap 80 menit, bukan setiap 40 menit."
|
||||
},
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "Prakiraan cuaca"
|
||||
},
|
||||
"description": "Karena keterbatasan versi gratis kunci API AccuWeather, ketika Anda mengaktifkan prakiraan cuaca, pembaruan data akan dilakukan setiap 80 menit, bukan setiap 40 menit."
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@@ -22,13 +22,24 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"pressure_tendency": {
|
||||
"state": {
|
||||
"falling": "In diminuzione",
|
||||
"rising": "In aumento",
|
||||
"steady": "Stabile"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"user": {
|
||||
"init": {
|
||||
"data": {
|
||||
"forecast": "Previsioni meteo"
|
||||
"forecast": "Previsioni del tempo"
|
||||
},
|
||||
"description": "A causa delle limitazioni della versione gratuita della chiave API AccuWeather, quando si abilitano le previsioni del tempo, gli aggiornamenti dei dati verranno eseguiti ogni 80 minuti invece che ogni 40."
|
||||
"description": "A causa delle limitazioni della versione gratuita della chiave API AccuWeather, quando abiliti le previsioni del tempo, gli aggiornamenti dei dati verranno eseguiti ogni 80 minuti anzich\u00e9 ogni 40 minuti."
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@@ -22,16 +22,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "\u5929\u6c17\u4e88\u5831"
|
||||
},
|
||||
"description": "\u7121\u6599\u7248\u306eAccuWeather API\u30ad\u30fc\u306e\u5236\u9650\u306b\u3088\u308a\u3001\u5929\u6c17\u4e88\u5831\u3092\u6709\u52b9\u306b\u3057\u305f\u5834\u5408\u3001\u30c7\u30fc\u30bf\u306e\u66f4\u65b0\u306f40\u5206\u6bce\u3067\u306f\u306a\u304f80\u5206\u6bce\u306b\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002"
|
||||
}
|
||||
}
|
||||
},
|
||||
"system_health": {
|
||||
"info": {
|
||||
"can_reach_server": "AccuWeather\u30b5\u30fc\u30d0\u30fc\u3078\u306e\u30a2\u30af\u30bb\u30b9",
|
||||
|
@@ -19,13 +19,24 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"pressure_tendency": {
|
||||
"state": {
|
||||
"falling": "\ud558\uac15",
|
||||
"rising": "\uc0c1\uc2b9",
|
||||
"steady": "\uc548\uc815\ub428"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"user": {
|
||||
"init": {
|
||||
"data": {
|
||||
"forecast": "\ub0a0\uc528 \uc608\ubcf4"
|
||||
},
|
||||
"description": "\ubb34\ub8cc \ubc84\uc804\uc758 AccuWeather API \ud0a4\ub85c \uc77c\uae30\uc608\ubcf4\ub97c \ud65c\uc131\ud654\ud55c \uacbd\uc6b0 \uc81c\ud55c\uc0ac\ud56d\uc73c\ub85c \uc778\ud574 \uc5c5\ub370\uc774\ud2b8\ub294 40 \ubd84\uc774 \uc544\ub2cc 80 \ubd84\ub9c8\ub2e4 \uc218\ud589\ub429\ub2c8\ub2e4."
|
||||
"description": "\ubb34\ub8cc \ubc84\uc804 AccuWeather API \ud0a4\uc758 \uc81c\ud55c\uc73c\ub85c \uc778\ud574 \ub0a0\uc528 \uc608\ubcf4\ub97c \ud65c\uc131\ud654\ud558\uba74 \ub370\uc774\ud130 \uc5c5\ub370\uc774\ud2b8\uac00 40\ubd84\uc774 \uc544\ub2cc 80\ubd84\ub9c8\ub2e4 \uc218\ud589\ub429\ub2c8\ub2e4."
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@@ -19,16 +19,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "Wieder Pr\u00e9visioun"
|
||||
},
|
||||
"description": "Duerch d'Limite vun der Gratis Versioun vun der AccuWeather API, wann d'Wieder Pr\u00e9visoune aktiv\u00e9iert sinn, ginn d'Aktualis\u00e9ierungen all 64 Minutten gemaach, am plaatz vun all 32 Minutten."
|
||||
}
|
||||
}
|
||||
},
|
||||
"system_health": {
|
||||
"info": {
|
||||
"can_reach_server": "AccuWeather Server ereechbar",
|
||||
|
@@ -22,6 +22,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"pressure_tendency": {
|
||||
"state": {
|
||||
"falling": "Dalende",
|
||||
"rising": "Stijgende",
|
||||
"steady": "Stabiel"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"init": {
|
||||
@@ -29,12 +40,6 @@
|
||||
"forecast": "Weersverwachting"
|
||||
},
|
||||
"description": "Wanneer je de weersverwachting ingeschakeld zullen updates elke 80 minuten plaatsvinden i.p.v. elke 40 minuten, dit komt door de beperkingen van de gratis versie van de AccuWeather API sleutel."
|
||||
},
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "Weervoorspelling"
|
||||
},
|
||||
"description": "Vanwege de beperkingen van de gratis versie van de AccuWeather API-sleutel, worden gegevensupdates elke 64 minuten in plaats van elke 32 minuten uitgevoerd wanneer u weersvoorspelling inschakelt."
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@@ -22,6 +22,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"pressure_tendency": {
|
||||
"state": {
|
||||
"falling": "Fallende",
|
||||
"rising": "Stiger",
|
||||
"steady": "Jevn"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"init": {
|
||||
@@ -29,12 +40,6 @@
|
||||
"forecast": "V\u00e6rmelding"
|
||||
},
|
||||
"description": "P\u00e5 grunn av begrensningene til gratisversjonen av AccuWeather API-n\u00f8kkelen, n\u00e5r du aktiverer v\u00e6rmelding, vil dataoppdateringer utf\u00f8res hvert 80. minutt i stedet for hvert 40. minutt."
|
||||
},
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "V\u00e6rmelding"
|
||||
},
|
||||
"description": "P\u00e5 grunn av begrensningene i den gratis versjonen av AccuWeather API-n\u00f8kkelen, vil dataoppdateringer utf\u00f8res hvert 80. minutt i stedet for hvert 40. minutt n\u00e5r du aktiverer v\u00e6rmelding."
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@@ -22,9 +22,20 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"pressure_tendency": {
|
||||
"state": {
|
||||
"falling": "malej\u0105ce",
|
||||
"rising": "rosn\u0105ce",
|
||||
"steady": "sta\u0142e"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"user": {
|
||||
"init": {
|
||||
"data": {
|
||||
"forecast": "Prognoza pogody"
|
||||
},
|
||||
|
@@ -22,6 +22,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"pressure_tendency": {
|
||||
"state": {
|
||||
"falling": "Caindo",
|
||||
"rising": "Ascendente",
|
||||
"steady": "Est\u00e1vel"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"init": {
|
||||
@@ -29,12 +40,6 @@
|
||||
"forecast": "Previs\u00e3o do tempo"
|
||||
},
|
||||
"description": "Devido \u00e0s limita\u00e7\u00f5es da vers\u00e3o gratuita da chave API AccuWeather, quando voc\u00ea ativa a previs\u00e3o do tempo, as atualiza\u00e7\u00f5es de dados s\u00e3o realizadas a cada 80 minutos em vez de 40 minutos."
|
||||
},
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "Previs\u00e3o do Tempo"
|
||||
},
|
||||
"description": "Devido \u00e0s limita\u00e7\u00f5es da vers\u00e3o gratuita da chave da API AccuWeather, quando voc\u00ea habilita a previs\u00e3o do tempo, as atualiza\u00e7\u00f5es de dados ser\u00e3o realizadas a cada 64 minutos em vez de a cada 32 minutos."
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@@ -7,7 +7,7 @@
|
||||
"default": "Alguns sensores n\u00e3o s\u00e3o ativados por defeito. Podem ser ativados no registo da entidade ap\u00f3s a configura\u00e7\u00e3o da integra\u00e7\u00e3o.\nA previs\u00e3o do tempo n\u00e3o est\u00e1 ativada por defeito. Pode ativ\u00e1-la nas op\u00e7\u00f5es de integra\u00e7\u00e3o."
|
||||
},
|
||||
"error": {
|
||||
"cannot_connect": "Falha na liga\u00e7\u00e3o",
|
||||
"cannot_connect": "A liga\u00e7\u00e3o falhou",
|
||||
"invalid_api_key": "Chave de API inv\u00e1lida",
|
||||
"requests_exceeded": "O n\u00famero permitido de pedidos \u00e0 API do Accuweather foi excedido. \u00c9 necess\u00e1rio aguardar ou alterar a chave API."
|
||||
},
|
||||
@@ -22,16 +22,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "Previs\u00e3o meteorol\u00f3gica"
|
||||
},
|
||||
"description": "Devido \u00e0s limita\u00e7\u00f5es da vers\u00e3o gratuita da chave AccuWeather API, quando se activa a previs\u00e3o do tempo, as actualiza\u00e7\u00f5es de dados ser\u00e3o realizadas a cada 80 minutos em vez de a cada 40 minutos."
|
||||
}
|
||||
}
|
||||
},
|
||||
"system_health": {
|
||||
"info": {
|
||||
"can_reach_server": "Alcance o servidor AccuWeather",
|
||||
|
@@ -22,6 +22,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"pressure_tendency": {
|
||||
"state": {
|
||||
"falling": "\u041f\u043e\u043d\u0438\u0436\u0430\u0435\u0442\u0441\u044f",
|
||||
"rising": "\u041f\u043e\u0432\u044b\u0448\u0430\u0435\u0442\u0441\u044f",
|
||||
"steady": "\u041f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"init": {
|
||||
@@ -29,12 +40,6 @@
|
||||
"forecast": "\u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u044b"
|
||||
},
|
||||
"description": "\u0412 \u0441\u0432\u044f\u0437\u0438 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u043b\u044e\u0447\u0430 API AccuWeather, \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0430 \u043f\u043e\u0433\u043e\u0434\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0435 80 \u043c\u0438\u043d\u0443\u0442, \u0430 \u043d\u0435 \u043a\u0430\u0436\u0434\u044b\u0435 40 \u043c\u0438\u043d\u0443\u0442."
|
||||
},
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "\u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u044b"
|
||||
},
|
||||
"description": "\u0412 \u0441\u0432\u044f\u0437\u0438 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u043b\u044e\u0447\u0430 API AccuWeather, \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0430 \u043f\u043e\u0433\u043e\u0434\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0435 80 \u043c\u0438\u043d\u0443\u0442, \u0430 \u043d\u0435 \u043a\u0430\u0436\u0434\u044b\u0435 40 \u043c\u0438\u043d\u0443\u0442."
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@@ -2,7 +2,8 @@
|
||||
"state": {
|
||||
"accuweather__pressure_tendency": {
|
||||
"falling": "Klesaj\u00faci",
|
||||
"rising": "Padaj\u00faci"
|
||||
"rising": "Padaj\u00faci",
|
||||
"steady": "Stabiln\u00fd"
|
||||
}
|
||||
}
|
||||
}
|
@@ -3,6 +3,9 @@
|
||||
"abort": {
|
||||
"single_instance_allowed": "U\u017e je nakonfigurovan\u00fd. Mo\u017en\u00e1 len jedna konfigur\u00e1cia."
|
||||
},
|
||||
"create_entry": {
|
||||
"default": "Niektor\u00e9 sn\u00edma\u010de nie s\u00fa predvolene povolen\u00e9. M\u00f4\u017eete ich povoli\u0165 v registri ent\u00edt po konfigur\u00e1cii integr\u00e1cie.\n Predpove\u010f po\u010dasia nie je predvolene zapnut\u00e1. M\u00f4\u017eete to povoli\u0165 v mo\u017enostiach integr\u00e1cie."
|
||||
},
|
||||
"error": {
|
||||
"cannot_connect": "Nepodarilo sa pripoji\u0165",
|
||||
"invalid_api_key": "Neplatn\u00fd API k\u013e\u00fa\u010d",
|
||||
@@ -19,17 +22,24 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"pressure_tendency": {
|
||||
"state": {
|
||||
"falling": "Klesaj\u00faci",
|
||||
"rising": "St\u00fapaj\u00faci",
|
||||
"steady": "Stabiln\u00fd"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"init": {
|
||||
"data": {
|
||||
"forecast": "Predpove\u010f po\u010dasia"
|
||||
}
|
||||
},
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "Predpove\u010f po\u010dasia"
|
||||
}
|
||||
},
|
||||
"description": "Z d\u00f4vodu obmedzen\u00ed bezplatnej verzie k\u013e\u00fa\u010da AccuWeather API, ke\u010f povol\u00edte predpove\u010f po\u010dasia, aktualiz\u00e1cie \u00fadajov sa bud\u00fa vykon\u00e1va\u0165 ka\u017ed\u00fdch 80 min\u00fat namiesto ka\u017ed\u00fdch 40 min\u00fat."
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@@ -22,16 +22,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "V\u00e4derprognos"
|
||||
},
|
||||
"description": "P\u00e5 grund av begr\u00e4nsningarna f\u00f6r den kostnadsfria versionen av AccuWeather API-nyckeln, n\u00e4r du aktiverar v\u00e4derprognos, kommer datauppdateringar att utf\u00f6ras var 80:e minut ist\u00e4llet f\u00f6r var 40:e minut."
|
||||
}
|
||||
}
|
||||
},
|
||||
"system_health": {
|
||||
"info": {
|
||||
"can_reach_server": "N\u00e5 AccuWeather-servern",
|
||||
|
@@ -22,9 +22,20 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"pressure_tendency": {
|
||||
"state": {
|
||||
"falling": "D\u00fc\u015f\u00fcyor",
|
||||
"rising": "Y\u00fckseliyor",
|
||||
"steady": "Sabit"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"user": {
|
||||
"init": {
|
||||
"data": {
|
||||
"forecast": "Hava Durumu tahmini"
|
||||
},
|
||||
|
@@ -19,16 +19,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "\u041f\u0440\u043e\u0433\u043d\u043e\u0437 \u043f\u043e\u0433\u043e\u0434\u0438"
|
||||
},
|
||||
"description": "\u0423 \u0437\u0432'\u044f\u0437\u043a\u0443 \u0437 \u043e\u0431\u043c\u0435\u0436\u0435\u043d\u043d\u044f\u043c\u0438 \u0431\u0435\u0437\u043a\u043e\u0448\u0442\u043e\u0432\u043d\u043e\u0457 \u0432\u0435\u0440\u0441\u0456\u0457 \u043a\u043b\u044e\u0447\u0430 API AccuWeather, \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0456 \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0443 \u043f\u043e\u0433\u043e\u0434\u0438 \u043e\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u0434\u0430\u043d\u0438\u0445 \u0431\u0443\u0434\u0435 \u0432\u0456\u0434\u0431\u0443\u0432\u0430\u0442\u0438\u0441\u044f \u043a\u043e\u0436\u043d\u0456 64 \u0445\u0432\u0438\u043b\u0438\u043d\u0438, \u0430 \u043d\u0435 \u043a\u043e\u0436\u043d\u0456 32 \u0445\u0432\u0438\u043b\u0438\u043d\u0438."
|
||||
}
|
||||
}
|
||||
},
|
||||
"system_health": {
|
||||
"info": {
|
||||
"can_reach_server": "\u0414\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 AccuWeather",
|
||||
|
@@ -22,6 +22,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"pressure_tendency": {
|
||||
"state": {
|
||||
"falling": "\u4e0b\u964d",
|
||||
"rising": "\u4e0a\u5347",
|
||||
"steady": "\u7a69\u5b9a"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"step": {
|
||||
"init": {
|
||||
@@ -29,12 +40,6 @@
|
||||
"forecast": "\u5929\u6c23\u9810\u5831"
|
||||
},
|
||||
"description": "\u7531\u65bc AccuWeather API \u91d1\u9470\u514d\u8cbb\u7248\u672c\u9650\u5236\uff0c\u7576\u958b\u555f\u5929\u6c23\u9810\u5831\u6642\u3001\u6578\u64da\u6703\u6bcf 80 \u5206\u9418\u66f4\u65b0\u4e00\u6b21\uff0c\u800c\u975e 40 \u5206\u9418\u3002"
|
||||
},
|
||||
"user": {
|
||||
"data": {
|
||||
"forecast": "\u5929\u6c23\u9810\u5831"
|
||||
},
|
||||
"description": "\u7531\u65bc AccuWeather API \u91d1\u9470\u514d\u8cbb\u7248\u672c\u9650\u5236\uff0c\u7576\u958b\u555f\u5929\u6c23\u9810\u5831\u6642\u3001\u6578\u64da\u6703\u6bcf 80 \u5206\u9418\u66f4\u65b0\u4e00\u6b21\uff0c\u800c\u975e 40 \u5206\u9418\u3002"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@@ -7,7 +7,8 @@
|
||||
"user": {
|
||||
"data": {
|
||||
"id": "ID hostite\u013ea"
|
||||
}
|
||||
},
|
||||
"title": "Vyberte hub, ktor\u00fd chcete prida\u0165"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -19,7 +19,7 @@ from homeassistant.const import (
|
||||
CONF_TOKEN,
|
||||
CONF_UNIQUE_ID,
|
||||
PRECISION_WHOLE,
|
||||
TEMP_CELSIUS,
|
||||
UnitOfTemperature,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
||||
@@ -69,7 +69,7 @@ class AdaxDevice(ClimateEntity):
|
||||
_attr_min_temp = 5
|
||||
_attr_supported_features = ClimateEntityFeature.TARGET_TEMPERATURE
|
||||
_attr_target_temperature_step = PRECISION_WHOLE
|
||||
_attr_temperature_unit = TEMP_CELSIUS
|
||||
_attr_temperature_unit = UnitOfTemperature.CELSIUS
|
||||
|
||||
def __init__(self, heater_data: dict[str, Any], adax_data_handler: Adax) -> None:
|
||||
"""Initialize the heater."""
|
||||
@@ -132,7 +132,7 @@ class LocalAdaxDevice(ClimateEntity):
|
||||
_attr_min_temp = 5
|
||||
_attr_supported_features = ClimateEntityFeature.TARGET_TEMPERATURE
|
||||
_attr_target_temperature_step = PRECISION_WHOLE
|
||||
_attr_temperature_unit = TEMP_CELSIUS
|
||||
_attr_temperature_unit = UnitOfTemperature.CELSIUS
|
||||
|
||||
def __init__(self, adax_data_handler, unique_id):
|
||||
"""Initialize the heater."""
|
||||
|
18
homeassistant/components/adax/translations/ko.json
Normal file
18
homeassistant/components/adax/translations/ko.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"config": {
|
||||
"abort": {
|
||||
"already_configured": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4",
|
||||
"invalid_auth": "\uc778\uc99d\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4"
|
||||
},
|
||||
"error": {
|
||||
"cannot_connect": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4"
|
||||
},
|
||||
"step": {
|
||||
"cloud": {
|
||||
"data": {
|
||||
"password": "\ube44\ubc00\ubc88\ud638"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,5 +1,8 @@
|
||||
{
|
||||
"config": {
|
||||
"abort": {
|
||||
"already_configured": "Ier\u012bce jau pievienota Home Assistant."
|
||||
},
|
||||
"step": {
|
||||
"cloud": {
|
||||
"data": {
|
||||
|
@@ -7,7 +7,7 @@
|
||||
"invalid_auth": "Autentica\u00e7\u00e3o inv\u00e1lida"
|
||||
},
|
||||
"error": {
|
||||
"cannot_connect": "Falha na liga\u00e7\u00e3o"
|
||||
"cannot_connect": "A liga\u00e7\u00e3o falhou"
|
||||
},
|
||||
"step": {
|
||||
"cloud": {
|
||||
|
@@ -20,7 +20,8 @@
|
||||
"data": {
|
||||
"wifi_pswd": "Heslo Wi-Fi",
|
||||
"wifi_ssid": "Wi-Fi SSID"
|
||||
}
|
||||
},
|
||||
"description": "Resetujte ohrieva\u010d stla\u010den\u00edm + a OK, dokia\u013e se nezobraz\u00ed \"Reset\". Potom stla\u010dte a podr\u017ete tla\u010didlo OK na ohrieva\u010di, dokia\u013e modr\u00e1 led di\u00f3da neza\u010dne blika\u0165, k\u00fdm stla\u010d\u00edte tla\u010didlo Odosla\u0165. Konfigur\u00e1cia ohrieva\u010da m\u00f4\u017ee trva\u0165 nieko\u013eko min\u00fat."
|
||||
},
|
||||
"user": {
|
||||
"data": {
|
||||
|
15
homeassistant/components/adax/translations/uk.json
Normal file
15
homeassistant/components/adax/translations/uk.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"config": {
|
||||
"abort": {
|
||||
"invalid_auth": "\u041d\u0435\u0434\u0456\u0439\u0441\u043d\u0430 \u0430\u0432\u0442\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0446\u0456\u044f"
|
||||
},
|
||||
"step": {
|
||||
"cloud": {
|
||||
"data": {
|
||||
"account_id": "ID \u041e\u0431\u043b\u0456\u043a\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0438\u0441\u0443",
|
||||
"password": "\u041f\u0430\u0440\u043e\u043b\u044c"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -58,7 +58,12 @@ class AdGuardHomeEntity(Entity):
|
||||
return DeviceInfo(
|
||||
entry_type=DeviceEntryType.SERVICE,
|
||||
identifiers={
|
||||
(DOMAIN, self.adguard.host, self.adguard.port, self.adguard.base_path) # type: ignore[arg-type]
|
||||
( # type: ignore[arg-type]
|
||||
DOMAIN,
|
||||
self.adguard.host,
|
||||
self.adguard.port,
|
||||
self.adguard.base_path,
|
||||
)
|
||||
},
|
||||
manufacturer="AdGuard Team",
|
||||
name="AdGuard Home",
|
||||
|
@@ -3,7 +3,7 @@
|
||||
"name": "AdGuard Home",
|
||||
"config_flow": true,
|
||||
"documentation": "https://www.home-assistant.io/integrations/adguard",
|
||||
"requirements": ["adguardhome==0.5.1"],
|
||||
"requirements": ["adguardhome==0.6.1"],
|
||||
"codeowners": ["@frenck"],
|
||||
"iot_class": "local_polling",
|
||||
"integration_type": "service",
|
||||
|
@@ -10,7 +10,7 @@ from adguardhome import AdGuardHome, AdGuardHomeConnectionError
|
||||
|
||||
from homeassistant.components.sensor import SensorEntity, SensorEntityDescription
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import PERCENTAGE, TIME_MILLISECONDS
|
||||
from homeassistant.const import PERCENTAGE, UnitOfTime
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import PlatformNotReady
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
@@ -83,7 +83,7 @@ SENSORS: tuple[AdGuardHomeEntityDescription, ...] = (
|
||||
key="average_speed",
|
||||
name="Average processing speed",
|
||||
icon="mdi:speedometer",
|
||||
native_unit_of_measurement=TIME_MILLISECONDS,
|
||||
native_unit_of_measurement=UnitOfTime.MILLISECONDS,
|
||||
value_fn=lambda adguard: adguard.stats.avg_processing_time(),
|
||||
),
|
||||
AdGuardHomeEntityDescription(
|
||||
|
11
homeassistant/components/adguard/translations/lt.json
Normal file
11
homeassistant/components/adguard/translations/lt.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"config": {
|
||||
"step": {
|
||||
"user": {
|
||||
"data": {
|
||||
"password": "Slapta\u017eodis"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -4,7 +4,7 @@
|
||||
"already_configured": "O servi\u00e7o j\u00e1 est\u00e1 configurado"
|
||||
},
|
||||
"error": {
|
||||
"cannot_connect": "Falha na liga\u00e7\u00e3o"
|
||||
"cannot_connect": "A liga\u00e7\u00e3o falhou"
|
||||
},
|
||||
"step": {
|
||||
"hassio_confirm": {
|
||||
@@ -13,7 +13,7 @@
|
||||
},
|
||||
"user": {
|
||||
"data": {
|
||||
"host": "Servidor",
|
||||
"host": "Endere\u00e7o",
|
||||
"password": "Palavra-passe",
|
||||
"port": "Porta",
|
||||
"ssl": "Utiliza um certificado SSL",
|
||||
|
@@ -20,7 +20,8 @@
|
||||
"ssl": "Pou\u017e\u00edva SSL certifik\u00e1t",
|
||||
"username": "Pou\u017e\u00edvate\u013esk\u00e9 meno",
|
||||
"verify_ssl": "Overi\u0165 SSL certifik\u00e1t"
|
||||
}
|
||||
},
|
||||
"description": "Nastavte svoju in\u0161tanciu AdGuard Home pre monitorovanie a riadenie."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -14,7 +14,7 @@ from homeassistant.components.climate import (
|
||||
HVACMode,
|
||||
)
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import ATTR_TEMPERATURE, PRECISION_WHOLE, TEMP_CELSIUS
|
||||
from homeassistant.const import ATTR_TEMPERATURE, PRECISION_WHOLE, UnitOfTemperature
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
|
||||
@@ -83,7 +83,7 @@ async def async_setup_entry(
|
||||
class AdvantageAirAC(AdvantageAirAcEntity, ClimateEntity):
|
||||
"""AdvantageAir AC unit."""
|
||||
|
||||
_attr_temperature_unit = TEMP_CELSIUS
|
||||
_attr_temperature_unit = UnitOfTemperature.CELSIUS
|
||||
_attr_target_temperature_step = PRECISION_WHOLE
|
||||
_attr_max_temp = 32
|
||||
_attr_min_temp = 16
|
||||
@@ -149,7 +149,7 @@ class AdvantageAirAC(AdvantageAirAcEntity, ClimateEntity):
|
||||
class AdvantageAirZone(AdvantageAirZoneEntity, ClimateEntity):
|
||||
"""AdvantageAir Zone control."""
|
||||
|
||||
_attr_temperature_unit = TEMP_CELSIUS
|
||||
_attr_temperature_unit = UnitOfTemperature.CELSIUS
|
||||
_attr_target_temperature_step = PRECISION_WHOLE
|
||||
_attr_max_temp = 32
|
||||
_attr_min_temp = 16
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user