mirror of
https://github.com/home-assistant/core.git
synced 2025-10-05 01:39:29 +00:00
Compare commits
2284 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
394966e979 | ||
![]() |
aac7cf129d | ||
![]() |
e2c9af42e8 | ||
![]() |
c9c8e8160f | ||
![]() |
c5972690ac | ||
![]() |
c2a261370e | ||
![]() |
4c139076ef | ||
![]() |
4bccb6e72b | ||
![]() |
f05288b597 | ||
![]() |
818b45384d | ||
![]() |
1bbd05dee7 | ||
![]() |
d6f7a984b2 | ||
![]() |
01756011ff | ||
![]() |
d7ad974244 | ||
![]() |
a69938afa2 | ||
![]() |
94c3d9bac0 | ||
![]() |
fb7af0384f | ||
![]() |
5a9a95abe4 | ||
![]() |
e1ad108b6d | ||
![]() |
a76620b76f | ||
![]() |
13fd80affa | ||
![]() |
d576749530 | ||
![]() |
111a00aeeb | ||
![]() |
b3d5717df8 | ||
![]() |
a84378bb79 | ||
![]() |
53ba45cc8f | ||
![]() |
5d77eb1839 | ||
![]() |
517159dc4e | ||
![]() |
a9287b7117 | ||
![]() |
0b7bcc87df | ||
![]() |
482661f82c | ||
![]() |
865d65c380 | ||
![]() |
609d202c4d | ||
![]() |
e43a0087e4 | ||
![]() |
b9bc147339 | ||
![]() |
dd3b0df22d | ||
![]() |
c987ca735e | ||
![]() |
4b1761ccb5 | ||
![]() |
76b5017df1 | ||
![]() |
401b0dce68 | ||
![]() |
7520aa5b25 | ||
![]() |
85ee0a1a3a | ||
![]() |
a1b2dcc5a8 | ||
![]() |
d1c083eed9 | ||
![]() |
33ec314091 | ||
![]() |
1646113b69 | ||
![]() |
1831b3bfb7 | ||
![]() |
e053f75a08 | ||
![]() |
ca511cb06c | ||
![]() |
cdf4588fb0 | ||
![]() |
2cf987bfc2 | ||
![]() |
3cdcd5d223 | ||
![]() |
882359d784 | ||
![]() |
0a779ac64c | ||
![]() |
0840092b29 | ||
![]() |
36207e56b9 | ||
![]() |
1b5a601417 | ||
![]() |
c7da4d77ce | ||
![]() |
84bd2067e4 | ||
![]() |
4cd04e3f99 | ||
![]() |
3aa4bb5469 | ||
![]() |
2c49311ee4 | ||
![]() |
ccdf5d13bd | ||
![]() |
dcb04acc65 | ||
![]() |
eba5b50e58 | ||
![]() |
d155a67687 | ||
![]() |
9871efd52f | ||
![]() |
2b5bb8dac0 | ||
![]() |
1510d5625a | ||
![]() |
98a056f7a9 | ||
![]() |
1186c2c48c | ||
![]() |
9aac8482d5 | ||
![]() |
3b606504a8 | ||
![]() |
eb95c5cd2e | ||
![]() |
660265fe50 | ||
![]() |
b8f8b6fa50 | ||
![]() |
0950ab0dd8 | ||
![]() |
355d655542 | ||
![]() |
35b95f77e9 | ||
![]() |
465b98513b | ||
![]() |
95563e04e8 | ||
![]() |
fcef259021 | ||
![]() |
8ccdaf2927 | ||
![]() |
d14112748c | ||
![]() |
37832d5e81 | ||
![]() |
5e2b87866e | ||
![]() |
a8e7bf6cf7 | ||
![]() |
94d8e77f8c | ||
![]() |
e80fac36d8 | ||
![]() |
0e2e39a5f2 | ||
![]() |
a7a58b9eac | ||
![]() |
8cd640867c | ||
![]() |
209f9a812e | ||
![]() |
7e2872bab3 | ||
![]() |
b5f12bd9c1 | ||
![]() |
544094af21 | ||
![]() |
2f6ffe7068 | ||
![]() |
e94228fddf | ||
![]() |
a5d520b603 | ||
![]() |
d2e6b863b7 | ||
![]() |
94a9b364b0 | ||
![]() |
763ab79e6c | ||
![]() |
69531593f2 | ||
![]() |
eedbb86b67 | ||
![]() |
5ba610859d | ||
![]() |
4180106125 | ||
![]() |
e347f3770c | ||
![]() |
5d6a563ac7 | ||
![]() |
f94bbdab61 | ||
![]() |
5f4fdaa171 | ||
![]() |
bfc5aa90b1 | ||
![]() |
44d7169642 | ||
![]() |
00387bf870 | ||
![]() |
5cf93e3639 | ||
![]() |
acfd907c50 | ||
![]() |
61c08e792d | ||
![]() |
1771fbbd34 | ||
![]() |
7722e417ad | ||
![]() |
578d4a9b6a | ||
![]() |
7338feb659 | ||
![]() |
770b622a6e | ||
![]() |
db8d4053d6 | ||
![]() |
08566f84cd | ||
![]() |
dfc3a24522 | ||
![]() |
c68e0a1d46 | ||
![]() |
26cbca101a | ||
![]() |
5d780ded29 | ||
![]() |
e86bedb223 | ||
![]() |
37f7d262d7 | ||
![]() |
bde94d187c | ||
![]() |
da6a99b333 | ||
![]() |
0629b30ade | ||
![]() |
a3865fb383 | ||
![]() |
cc4326276e | ||
![]() |
e6fe34e64d | ||
![]() |
a4d4e26fe5 | ||
![]() |
2b42d77f58 | ||
![]() |
a6e9a312a3 | ||
![]() |
1883b1d2a2 | ||
![]() |
07469127ce | ||
![]() |
391983a0cf | ||
![]() |
acbffb511d | ||
![]() |
cf6043fc2d | ||
![]() |
47706dac1a | ||
![]() |
a333417ddf | ||
![]() |
e5d81aeb2a | ||
![]() |
1c663dc179 | ||
![]() |
141c4c2f33 | ||
![]() |
dcbe2136cf | ||
![]() |
e4aca9d73c | ||
![]() |
5827a26dfc | ||
![]() |
aa1b32ad36 | ||
![]() |
d0fedad000 | ||
![]() |
5d7720832b | ||
![]() |
7da15378b1 | ||
![]() |
691ec21ba4 | ||
![]() |
e30893ed80 | ||
![]() |
276f3afb00 | ||
![]() |
d488c779fc | ||
![]() |
01d9366299 | ||
![]() |
6ed68d8ced | ||
![]() |
7197ef76a6 | ||
![]() |
0ae23fa166 | ||
![]() |
cd054a9579 | ||
![]() |
2a86d52dba | ||
![]() |
5920f3379c | ||
![]() |
39f2d4cb5a | ||
![]() |
db9900cf50 | ||
![]() |
fb754186bd | ||
![]() |
a062da05b4 | ||
![]() |
22a1452946 | ||
![]() |
1855c91988 | ||
![]() |
b6407f77da | ||
![]() |
efec62d98e | ||
![]() |
e1c6f01047 | ||
![]() |
86582ad1ba | ||
![]() |
940249f45e | ||
![]() |
f4a518edcc | ||
![]() |
fa00f3e49b | ||
![]() |
67f7a4bb57 | ||
![]() |
35c00fed6d | ||
![]() |
ff9de687c0 | ||
![]() |
26fae7c629 | ||
![]() |
ed014e3c96 | ||
![]() |
08f2714e57 | ||
![]() |
6f9770c067 | ||
![]() |
dcea238661 | ||
![]() |
fbe7b4ddfa | ||
![]() |
9c45115468 | ||
![]() |
7194b74580 | ||
![]() |
564fb1d1e5 | ||
![]() |
5183c40b23 | ||
![]() |
e1fd14e00a | ||
![]() |
f9aff4fc41 | ||
![]() |
b928d5d4b6 | ||
![]() |
33f645aba9 | ||
![]() |
093d797c3b | ||
![]() |
8426bdc9ae | ||
![]() |
ca0149c635 | ||
![]() |
e967c93b7b | ||
![]() |
3a80cb1d1d | ||
![]() |
61d8efae5f | ||
![]() |
c710f9994c | ||
![]() |
0865791116 | ||
![]() |
d4f7fe16ca | ||
![]() |
e6e7d0651d | ||
![]() |
4df8e51edd | ||
![]() |
2df1c90e6a | ||
![]() |
dc00fa9c27 | ||
![]() |
d1be3c8268 | ||
![]() |
f1af5b71e2 | ||
![]() |
31250eafe8 | ||
![]() |
7e693afcf3 | ||
![]() |
5c516ad013 | ||
![]() |
03f4202796 | ||
![]() |
3d02b3afc3 | ||
![]() |
c18ba6aec0 | ||
![]() |
7571fdc957 | ||
![]() |
4e74fae615 | ||
![]() |
1e9ec917f6 | ||
![]() |
f14a4935df | ||
![]() |
a7842b6301 | ||
![]() |
3ac376ebca | ||
![]() |
6609bd94e5 | ||
![]() |
f626129e2b | ||
![]() |
6fbc3b54bd | ||
![]() |
6f4829c390 | ||
![]() |
c7e97f0cf8 | ||
![]() |
a55c6c5f47 | ||
![]() |
ad6e21182e | ||
![]() |
879e2d1afd | ||
![]() |
cfaa851b5b | ||
![]() |
cb2821b512 | ||
![]() |
0a6deeb49b | ||
![]() |
6a06d648d7 | ||
![]() |
ca1e643bdc | ||
![]() |
59c112a3f2 | ||
![]() |
6507951bb1 | ||
![]() |
9a53240759 | ||
![]() |
8de863ecf1 | ||
![]() |
514c64619a | ||
![]() |
f8416484f8 | ||
![]() |
bc1dac80b6 | ||
![]() |
369745c4cf | ||
![]() |
4054b1744f | ||
![]() |
dc2fe66f29 | ||
![]() |
cf585babbe | ||
![]() |
73aca24f30 | ||
![]() |
701f906898 | ||
![]() |
4c21adfd88 | ||
![]() |
ef3019f922 | ||
![]() |
79ed8b03dc | ||
![]() |
a1eb513bbc | ||
![]() |
a656a40fd7 | ||
![]() |
53c2227b1d | ||
![]() |
3d921cec04 | ||
![]() |
249c00d08f | ||
![]() |
0f7ea290ca | ||
![]() |
7e90d4dd7b | ||
![]() |
b6c519e5df | ||
![]() |
179e601966 | ||
![]() |
fad79046a8 | ||
![]() |
1eeba0531e | ||
![]() |
011e0a0fcc | ||
![]() |
26fdb8eb1e | ||
![]() |
50b7d24e32 | ||
![]() |
97a523e854 | ||
![]() |
599d3ae930 | ||
![]() |
67a9622209 | ||
![]() |
7e67b6b568 | ||
![]() |
e61280095e | ||
![]() |
b15bac595d | ||
![]() |
3a97d96dc0 | ||
![]() |
8cbee76929 | ||
![]() |
15539536ad | ||
![]() |
3dfeec5033 | ||
![]() |
6fbc3c4a51 | ||
![]() |
376e0e0e93 | ||
![]() |
db92ffdf89 | ||
![]() |
05cbb3f0e4 | ||
![]() |
fa55f01c8c | ||
![]() |
2793e6cdd8 | ||
![]() |
654195454b | ||
![]() |
751428fe2b | ||
![]() |
ed62fe03b0 | ||
![]() |
a22a86e4d2 | ||
![]() |
d2a92ce4f3 | ||
![]() |
ba120d4220 | ||
![]() |
4313d4b26b | ||
![]() |
73fa617c1d | ||
![]() |
1f3d3c3e5b | ||
![]() |
71ebf8738f | ||
![]() |
2375e00029 | ||
![]() |
77eab66e0f | ||
![]() |
22a2c386e9 | ||
![]() |
5dfae0eb7c | ||
![]() |
b0012bd5a6 | ||
![]() |
12fb6a85d5 | ||
![]() |
59fe5458d0 | ||
![]() |
d4f3bb8ce0 | ||
![]() |
cc1951c13d | ||
![]() |
bd8848e57a | ||
![]() |
ed7ac3c1f7 | ||
![]() |
fe45935f38 | ||
![]() |
f897264c7f | ||
![]() |
9212d1c2dc | ||
![]() |
ab741535f7 | ||
![]() |
e6065569ae | ||
![]() |
fb3394f74b | ||
![]() |
ed4b1d7c9f | ||
![]() |
a90d1b531c | ||
![]() |
bd32a1fabb | ||
![]() |
88ebc6a08b | ||
![]() |
375f170da8 | ||
![]() |
cf6cc6c07c | ||
![]() |
22a12cea5c | ||
![]() |
1feb8ada6c | ||
![]() |
47995edd10 | ||
![]() |
5ffee336d5 | ||
![]() |
39f9981914 | ||
![]() |
9e1c35cfd7 | ||
![]() |
f4f031e703 | ||
![]() |
970bb346d0 | ||
![]() |
9401525464 | ||
![]() |
8a9ba7e72d | ||
![]() |
f452e26269 | ||
![]() |
d299a92cd3 | ||
![]() |
8d008d31bd | ||
![]() |
43ec35ee17 | ||
![]() |
534fcefae1 | ||
![]() |
19f36eb5a1 | ||
![]() |
f4c5b9f8f8 | ||
![]() |
eaa16fa818 | ||
![]() |
4dcff294c9 | ||
![]() |
f3411fee41 | ||
![]() |
a5caf8576b | ||
![]() |
be854b7363 | ||
![]() |
6e3bba07da | ||
![]() |
99e345d6e4 | ||
![]() |
e9a729a46c | ||
![]() |
b136390647 | ||
![]() |
2c7eee6722 | ||
![]() |
d21cfd869e | ||
![]() |
b0578018cb | ||
![]() |
cda2da62cf | ||
![]() |
04cfd36d06 | ||
![]() |
3d253fa52a | ||
![]() |
88ebdf3a53 | ||
![]() |
275c8b6982 | ||
![]() |
765bf760b4 | ||
![]() |
919f3243de | ||
![]() |
f1b91b050c | ||
![]() |
8b8aa198fa | ||
![]() |
0514960bda | ||
![]() |
80de233276 | ||
![]() |
56efc341dd | ||
![]() |
0e83cfade1 | ||
![]() |
cc369cd461 | ||
![]() |
6dfc362f98 | ||
![]() |
f74e2f8abb | ||
![]() |
7043d1e163 | ||
![]() |
8cd905487e | ||
![]() |
be416d9fc6 | ||
![]() |
7035a6da9f | ||
![]() |
8d5cf1a72c | ||
![]() |
973f66a974 | ||
![]() |
0dea4f2ad1 | ||
![]() |
7c784b6963 | ||
![]() |
5bef1c223d | ||
![]() |
f5a326c51e | ||
![]() |
b266d3aaae | ||
![]() |
e170e6563b | ||
![]() |
ddee8b68c6 | ||
![]() |
c88c011df9 | ||
![]() |
ae66f4250c | ||
![]() |
c7008eb761 | ||
![]() |
b9ab6d1e10 | ||
![]() |
1c38bcaeb5 | ||
![]() |
813203a38f | ||
![]() |
2d76e12c21 | ||
![]() |
e979b54413 | ||
![]() |
1958d132a9 | ||
![]() |
b57cabfce7 | ||
![]() |
6d03496372 | ||
![]() |
4805723a3f | ||
![]() |
78b57678d8 | ||
![]() |
b19223cb37 | ||
![]() |
c2f8e0bf66 | ||
![]() |
a82900ae27 | ||
![]() |
ed2a43ba5b | ||
![]() |
b32ec950ac | ||
![]() |
19573a9cbe | ||
![]() |
1593bdf2e9 | ||
![]() |
9907e95c34 | ||
![]() |
b3459d9190 | ||
![]() |
53a9d39a81 | ||
![]() |
4f317353e0 | ||
![]() |
2b3cf97979 | ||
![]() |
1502701e2b | ||
![]() |
70b14518d0 | ||
![]() |
f3e5d03384 | ||
![]() |
57bcb4743d | ||
![]() |
ee92d64088 | ||
![]() |
b452db8b67 | ||
![]() |
c10aa13d0b | ||
![]() |
37f9b24a85 | ||
![]() |
648df6d984 | ||
![]() |
d81a19b5a2 | ||
![]() |
39ce063500 | ||
![]() |
af34d130b6 | ||
![]() |
0cb5ccd492 | ||
![]() |
7433fa9265 | ||
![]() |
d629a55134 | ||
![]() |
28db0cebf0 | ||
![]() |
6c4a6568f5 | ||
![]() |
8970fd8a56 | ||
![]() |
2da718d7e8 | ||
![]() |
8c8feb95a9 | ||
![]() |
a51372f7b3 | ||
![]() |
2b38df2766 | ||
![]() |
12ec476821 | ||
![]() |
188255bd81 | ||
![]() |
d6a5cb6083 | ||
![]() |
ebed1de581 | ||
![]() |
aeae4edb74 | ||
![]() |
ef6b1f9302 | ||
![]() |
7a72ada8b2 | ||
![]() |
a28646bc24 | ||
![]() |
ca4433bd70 | ||
![]() |
c61bcbf982 | ||
![]() |
e9f398ac28 | ||
![]() |
7417b3be66 | ||
![]() |
99afc17b3f | ||
![]() |
cc5fc2baa4 | ||
![]() |
e2f0520028 | ||
![]() |
5cb1924290 | ||
![]() |
aa176aab07 | ||
![]() |
5695a63e59 | ||
![]() |
93fddbed2b | ||
![]() |
8258fa515d | ||
![]() |
a8fb627abc | ||
![]() |
b464d276e2 | ||
![]() |
6885d72180 | ||
![]() |
aec68a9c2d | ||
![]() |
d0e8880e48 | ||
![]() |
50105eed74 | ||
![]() |
affd11b372 | ||
![]() |
796e6141ac | ||
![]() |
52a7a7175b | ||
![]() |
2e0c0ded51 | ||
![]() |
312080de08 | ||
![]() |
902eb187ef | ||
![]() |
a03cb93f87 | ||
![]() |
03b14c9aae | ||
![]() |
f085fb1499 | ||
![]() |
3815d7d74f | ||
![]() |
8eb7777561 | ||
![]() |
5104b79b4b | ||
![]() |
b42a197293 | ||
![]() |
dbd821a564 | ||
![]() |
47801e7350 | ||
![]() |
71d41cbb71 | ||
![]() |
d98bd418b1 | ||
![]() |
06d32baea4 | ||
![]() |
1297a09344 | ||
![]() |
65e509ed8f | ||
![]() |
eec1b3e7a7 | ||
![]() |
e2551b4e21 | ||
![]() |
62aa16e6e3 | ||
![]() |
df830a50e7 | ||
![]() |
51eebb3906 | ||
![]() |
d02bb70f0c | ||
![]() |
e94f44f294 | ||
![]() |
fca96799a0 | ||
![]() |
98523fbb61 | ||
![]() |
cd68f7dc14 | ||
![]() |
11b786a4fc | ||
![]() |
6e0359efa6 | ||
![]() |
73616520c0 | ||
![]() |
d3ae8a938c | ||
![]() |
4a9a004de0 | ||
![]() |
c270d5edcf | ||
![]() |
cf034ee729 | ||
![]() |
316d44cf33 | ||
![]() |
dbd30d571d | ||
![]() |
78c9411dde | ||
![]() |
2f999dd77e | ||
![]() |
e8ee3c7d4d | ||
![]() |
aaf515ef67 | ||
![]() |
ab631a51bd | ||
![]() |
299a4fa1c0 | ||
![]() |
f3bb370b3a | ||
![]() |
bdd99024b1 | ||
![]() |
714047f789 | ||
![]() |
890013cecf | ||
![]() |
064321c21e | ||
![]() |
3a3f39b642 | ||
![]() |
7e56f2cc0e | ||
![]() |
92756f9b12 | ||
![]() |
ddb5ed9dc8 | ||
![]() |
e74e0d1710 | ||
![]() |
6d0909134c | ||
![]() |
5496a8ca05 | ||
![]() |
3928fe9578 | ||
![]() |
592ecd479f | ||
![]() |
d8c7a10fd7 | ||
![]() |
9586e9ebef | ||
![]() |
047f3d6061 | ||
![]() |
20188a36de | ||
![]() |
d66856dd17 | ||
![]() |
9adc48c0b0 | ||
![]() |
bcf068f66f | ||
![]() |
618ce2ff0a | ||
![]() |
05778ad307 | ||
![]() |
bc0109256f | ||
![]() |
fa487c7c2f | ||
![]() |
b3a0270acd | ||
![]() |
a930175c55 | ||
![]() |
45d3bb7da2 | ||
![]() |
b83adad417 | ||
![]() |
856c0e6a15 | ||
![]() |
eeaef5731f | ||
![]() |
cc431b9f14 | ||
![]() |
506dd1d423 | ||
![]() |
0e79b47b43 | ||
![]() |
5c0d237c2d | ||
![]() |
37cabe5562 | ||
![]() |
d0d9b4df78 | ||
![]() |
0be20ec6ab | ||
![]() |
626f72b97a | ||
![]() |
fca09b2615 | ||
![]() |
7e1c836acb | ||
![]() |
8cf354c042 | ||
![]() |
9fd6db4b5f | ||
![]() |
cb7b8d94c0 | ||
![]() |
a42a654590 | ||
![]() |
b7ab07c987 | ||
![]() |
4b00dedff5 | ||
![]() |
7d02b15437 | ||
![]() |
d480cb7b2c | ||
![]() |
256370afa8 | ||
![]() |
c67d035366 | ||
![]() |
55b444cccf | ||
![]() |
c9b702c4c2 | ||
![]() |
e6c58c9795 | ||
![]() |
cf50ccb919 | ||
![]() |
efb0593473 | ||
![]() |
7ab19bdfcc | ||
![]() |
99d3046a5b | ||
![]() |
710f226778 | ||
![]() |
e2b45915a6 | ||
![]() |
d6d94473e4 | ||
![]() |
638f37167f | ||
![]() |
2308b94702 | ||
![]() |
0efeefe3b2 | ||
![]() |
d447a8347b | ||
![]() |
6d8b8ecfa9 | ||
![]() |
85726b67b7 | ||
![]() |
0a94d9b284 | ||
![]() |
ce99fa8c02 | ||
![]() |
7147c5306d | ||
![]() |
c41fb2a21f | ||
![]() |
c12f8bed43 | ||
![]() |
ee96ff2846 | ||
![]() |
6464c94990 | ||
![]() |
2a120d9045 | ||
![]() |
2f6da20065 | ||
![]() |
36ad9a25e3 | ||
![]() |
785b8d2bd1 | ||
![]() |
eddb5c6c3f | ||
![]() |
306f15723d | ||
![]() |
3936cbebbb | ||
![]() |
8f76f59b8b | ||
![]() |
3fcd7866cc | ||
![]() |
16cc4aed06 | ||
![]() |
f6b6e2f7d1 | ||
![]() |
79a313d505 | ||
![]() |
13ff5862d1 | ||
![]() |
1351ddd11e | ||
![]() |
dd32324e01 | ||
![]() |
1f71bdedab | ||
![]() |
befda9a78b | ||
![]() |
68179e2672 | ||
![]() |
1bb01dccf5 | ||
![]() |
de22bb1df6 | ||
![]() |
1e157a4f41 | ||
![]() |
2984b9fd18 | ||
![]() |
15e8f4614c | ||
![]() |
53771bd576 | ||
![]() |
4099815a08 | ||
![]() |
86b984b0bd | ||
![]() |
e4afb949d7 | ||
![]() |
2748dcaaf1 | ||
![]() |
ea9c103fe1 | ||
![]() |
b1d59679e5 | ||
![]() |
2f73361381 | ||
![]() |
71b797faf2 | ||
![]() |
c5c1c2e298 | ||
![]() |
2d43698958 | ||
![]() |
3315c4c6c3 | ||
![]() |
dd22200a69 | ||
![]() |
751529feca | ||
![]() |
48899c7a1c | ||
![]() |
d2502f649f | ||
![]() |
93f8d21bc0 | ||
![]() |
3de4bc56b5 | ||
![]() |
132bb4e890 | ||
![]() |
9eb1505aa1 | ||
![]() |
0a9b373edb | ||
![]() |
6d9f561853 | ||
![]() |
31ee54c133 | ||
![]() |
f4e4ea10e5 | ||
![]() |
c401949af8 | ||
![]() |
f4ab5ee54f | ||
![]() |
5d8e6d5432 | ||
![]() |
823a44cd23 | ||
![]() |
717c55d1f5 | ||
![]() |
1e00fc2af7 | ||
![]() |
d072091926 | ||
![]() |
9d83059f14 | ||
![]() |
8b9bd67da7 | ||
![]() |
742e36ba26 | ||
![]() |
2e018ad841 | ||
![]() |
87e0f04515 | ||
![]() |
a6d587b6cd | ||
![]() |
facb115f14 | ||
![]() |
b3ee54b124 | ||
![]() |
c69d4943a5 | ||
![]() |
497c01c651 | ||
![]() |
70b29dc823 | ||
![]() |
e4263afd64 | ||
![]() |
a73440ebe8 | ||
![]() |
f4168a0e07 | ||
![]() |
4430b50fd7 | ||
![]() |
f09a20b66d | ||
![]() |
8f285c15d3 | ||
![]() |
c71b6c8a71 | ||
![]() |
4395fe9298 | ||
![]() |
799cdbe64d | ||
![]() |
f302c6fd65 | ||
![]() |
8050d8555e | ||
![]() |
08087b0f99 | ||
![]() |
9e3a8899c8 | ||
![]() |
b4142fc7ee | ||
![]() |
02a36a9b68 | ||
![]() |
8947ce5053 | ||
![]() |
a97460d1ab | ||
![]() |
8994931ec4 | ||
![]() |
3af3900581 | ||
![]() |
da0ff8d8c4 | ||
![]() |
cf30895460 | ||
![]() |
e2b622fb78 | ||
![]() |
0cf1ca7736 | ||
![]() |
0fabd73ad4 | ||
![]() |
42fc332123 | ||
![]() |
a17ab612ad | ||
![]() |
96d2b8cdf6 | ||
![]() |
06ddda8c95 | ||
![]() |
2148f63d89 | ||
![]() |
c20a9a1ff4 | ||
![]() |
2f5c4b81ba | ||
![]() |
c8cce7607c | ||
![]() |
d7f736ed6c | ||
![]() |
d61bde6ae6 | ||
![]() |
85f129492a | ||
![]() |
b4404b071f | ||
![]() |
c37100299a | ||
![]() |
e78ceab560 | ||
![]() |
7da41a6e86 | ||
![]() |
9353169203 | ||
![]() |
e90feb1d59 | ||
![]() |
b62c7abc5d | ||
![]() |
953adc105e | ||
![]() |
e65f72f2ed | ||
![]() |
4cf186a47e | ||
![]() |
3feb55a8e4 | ||
![]() |
54584e970c | ||
![]() |
c8deae6445 | ||
![]() |
efb52961f0 | ||
![]() |
e3e3a113e9 | ||
![]() |
62f2520ee1 | ||
![]() |
0ac95fbed3 | ||
![]() |
12caf17848 | ||
![]() |
b844d09797 | ||
![]() |
c19b222d5a | ||
![]() |
ad419911bc | ||
![]() |
c16a18b2bd | ||
![]() |
e56dd8ed50 | ||
![]() |
1be41b9de8 | ||
![]() |
3a0d5126ae | ||
![]() |
272ca3de35 | ||
![]() |
03ac82d440 | ||
![]() |
d03d90a955 | ||
![]() |
ddd6b9cff1 | ||
![]() |
4663845ebc | ||
![]() |
e696c08db0 | ||
![]() |
502afbe9c2 | ||
![]() |
4ec88b41dc | ||
![]() |
7ac547a6e0 | ||
![]() |
91730fe6a9 | ||
![]() |
2223592486 | ||
![]() |
7e4aa2409f | ||
![]() |
4d314ba4df | ||
![]() |
97d66c4eb2 | ||
![]() |
00282dab72 | ||
![]() |
f726908707 | ||
![]() |
fc7851a98c | ||
![]() |
efb0425602 | ||
![]() |
39fefa49cc | ||
![]() |
6146eaa350 | ||
![]() |
0ed25e9f4e | ||
![]() |
9d5704307a | ||
![]() |
a38bb5b33b | ||
![]() |
5e33842ce0 | ||
![]() |
53f64bae09 | ||
![]() |
ef489aad2a | ||
![]() |
dfe2a457c0 | ||
![]() |
00501019b4 | ||
![]() |
7f1793e6a9 | ||
![]() |
6518249470 | ||
![]() |
1a52632b68 | ||
![]() |
b42590c5a9 | ||
![]() |
4bf45cd2ea | ||
![]() |
36c3c624e7 | ||
![]() |
64ce8e970f | ||
![]() |
eb826e5956 | ||
![]() |
e3ca87bc5a | ||
![]() |
1d6a20228b | ||
![]() |
33077f0cdd | ||
![]() |
541b666a86 | ||
![]() |
5218b23fce | ||
![]() |
81651b0b25 | ||
![]() |
f1ecac92df | ||
![]() |
b35306052d | ||
![]() |
19734e7b2c | ||
![]() |
0b8f8db67b | ||
![]() |
3219c380c7 | ||
![]() |
35d8890f4e | ||
![]() |
1b3f9254bc | ||
![]() |
1b02410aa6 | ||
![]() |
d8222a8eb6 | ||
![]() |
c71a7b901f | ||
![]() |
2581b031d9 | ||
![]() |
1c5b4dbd97 | ||
![]() |
56beec1ce9 | ||
![]() |
14190bd497 | ||
![]() |
740d9c575e | ||
![]() |
a330eba61c | ||
![]() |
87d58a544b | ||
![]() |
9983c43697 | ||
![]() |
4ae31bc938 | ||
![]() |
2ac29cf1a4 | ||
![]() |
8e071b69f4 | ||
![]() |
86d410d863 | ||
![]() |
6b9eed5a70 | ||
![]() |
e45f2cf5a2 | ||
![]() |
710deb8316 | ||
![]() |
34e35f6aa3 | ||
![]() |
d2179e5321 | ||
![]() |
0e17f619c8 | ||
![]() |
de636cce6f | ||
![]() |
f5282bfcf3 | ||
![]() |
3f449e1d27 | ||
![]() |
d4200b5eb9 | ||
![]() |
222a8bb7be | ||
![]() |
96576a9775 | ||
![]() |
c03e3ce961 | ||
![]() |
45d934e64d | ||
![]() |
89cbbfc2e5 | ||
![]() |
0d8390b9df | ||
![]() |
ab2c3a2130 | ||
![]() |
d3b6255ffe | ||
![]() |
a3071571ac | ||
![]() |
f885e97a5b | ||
![]() |
53c1aba7df | ||
![]() |
96b84ff348 | ||
![]() |
4be1006b71 | ||
![]() |
dd715fcc3a | ||
![]() |
f9b420a5a5 | ||
![]() |
94b6130af6 | ||
![]() |
953228ebd2 | ||
![]() |
d8ebdda714 | ||
![]() |
8279efc164 | ||
![]() |
e54e9279e3 | ||
![]() |
b3e637ca7a | ||
![]() |
ee07fac9bc | ||
![]() |
c5ce95ff06 | ||
![]() |
dbf383f713 | ||
![]() |
7f2c6b43d2 | ||
![]() |
de628602c2 | ||
![]() |
5e3555022f | ||
![]() |
ad94ccdd6c | ||
![]() |
7a73c6adf7 | ||
![]() |
49979d0a75 | ||
![]() |
96a998ad25 | ||
![]() |
7284f4e7ca | ||
![]() |
c5379a0f35 | ||
![]() |
73fb57fd32 | ||
![]() |
e4e89becc6 | ||
![]() |
7e36699aac | ||
![]() |
5b7daa9e0c | ||
![]() |
42750088b9 | ||
![]() |
e7b9cecec9 | ||
![]() |
540cb6ea5b | ||
![]() |
39431c0764 | ||
![]() |
b90cb09fd1 | ||
![]() |
6f6c670b3b | ||
![]() |
2af984917e | ||
![]() |
e7fc886992 | ||
![]() |
90fbb150e7 | ||
![]() |
5a2528b0f1 | ||
![]() |
d644b610b7 | ||
![]() |
e0bcd0049c | ||
![]() |
a44724fdcc | ||
![]() |
de7f82e18e | ||
![]() |
661656e373 | ||
![]() |
f37f488cc3 | ||
![]() |
6afb42bf7a | ||
![]() |
aeb891649e | ||
![]() |
984a2769db | ||
![]() |
9efca0079c | ||
![]() |
78f846d532 | ||
![]() |
5f267be1db | ||
![]() |
cf2e71a530 | ||
![]() |
ec63ab0639 | ||
![]() |
bd882fa4e4 | ||
![]() |
752679c55d | ||
![]() |
a083eb334e | ||
![]() |
4c65c51ede | ||
![]() |
b0dc1fdfad | ||
![]() |
69b8032a5a | ||
![]() |
2f374abc58 | ||
![]() |
f445a81a4d | ||
![]() |
002a8f4900 | ||
![]() |
93631341a5 | ||
![]() |
6a5f9d74f5 | ||
![]() |
ed4441a1c2 | ||
![]() |
0c5b24a1f5 | ||
![]() |
43d63d0fe5 | ||
![]() |
5450cda3a5 | ||
![]() |
a2048b4c7a | ||
![]() |
221b07595f | ||
![]() |
4de30ca2ce | ||
![]() |
ab08c1bef8 | ||
![]() |
88b7aba1c8 | ||
![]() |
37f3613704 | ||
![]() |
9b59ef4fc9 | ||
![]() |
e602de55ac | ||
![]() |
2f31b8576e | ||
![]() |
8c84e47c94 | ||
![]() |
5a7d38b28c | ||
![]() |
0519b96bec | ||
![]() |
d9b9a004d2 | ||
![]() |
963236916c | ||
![]() |
187392deec | ||
![]() |
842e09923a | ||
![]() |
f4f2aff5b6 | ||
![]() |
dff2ee2156 | ||
![]() |
ecdcfb835d | ||
![]() |
e1ae455f1d | ||
![]() |
b3201523aa | ||
![]() |
9436645648 | ||
![]() |
a65e656c03 | ||
![]() |
8661cf463a | ||
![]() |
e6be297fba | ||
![]() |
2b13a8cde4 | ||
![]() |
ea70d71e8f | ||
![]() |
8c65062271 | ||
![]() |
f3d79104a7 | ||
![]() |
1cfa46d80b | ||
![]() |
be58c4f71a | ||
![]() |
66d3832be9 | ||
![]() |
02cca1a4da | ||
![]() |
8ec5e53cf4 | ||
![]() |
a2896b4764 | ||
![]() |
421ebb087b | ||
![]() |
850b5cb02b | ||
![]() |
7e47481676 | ||
![]() |
837b1384af | ||
![]() |
af5cdc1f65 | ||
![]() |
bc9125666f | ||
![]() |
b01131ab9d | ||
![]() |
b8070567bf | ||
![]() |
77d89d13b6 | ||
![]() |
12119f89e5 | ||
![]() |
3a4b8625bd | ||
![]() |
42dd3ba748 | ||
![]() |
de18207ca3 | ||
![]() |
b68228c7e8 | ||
![]() |
9ccd56c019 | ||
![]() |
4d49fe6b93 | ||
![]() |
e7157f2164 | ||
![]() |
af62660b14 | ||
![]() |
82a478e2fb | ||
![]() |
72e7beeb76 | ||
![]() |
03bb2a68b3 | ||
![]() |
8f9467492d | ||
![]() |
225059f8ea | ||
![]() |
bb08959131 | ||
![]() |
1f66821256 | ||
![]() |
7b90cbd2b2 | ||
![]() |
3e06e6b4b3 | ||
![]() |
793592b2b8 | ||
![]() |
5699cb8a09 | ||
![]() |
a2efc079f1 | ||
![]() |
cfc0edff6b | ||
![]() |
208fa84a27 | ||
![]() |
4e55fa6c5c | ||
![]() |
bd72ddda3c | ||
![]() |
6056753a9c | ||
![]() |
76f392476b | ||
![]() |
ba7391528f | ||
![]() |
799d98eaf0 | ||
![]() |
928d9ec117 | ||
![]() |
6fe00497d6 | ||
![]() |
ec47216388 | ||
![]() |
6b16c34fd0 | ||
![]() |
d4b66717a4 | ||
![]() |
435a88636a | ||
![]() |
bf5cc22bef | ||
![]() |
d43617c41d | ||
![]() |
55bf5514ad | ||
![]() |
29a05a6a65 | ||
![]() |
a65edc8dc1 | ||
![]() |
15b1a9ecea | ||
![]() |
becc120ad9 | ||
![]() |
ade4e36da7 | ||
![]() |
b4083dc14f | ||
![]() |
38f9559348 | ||
![]() |
d974e64a8b | ||
![]() |
6f20a4a181 | ||
![]() |
6b2a006fea | ||
![]() |
88c755518f | ||
![]() |
e2475e67c6 | ||
![]() |
d891810e95 | ||
![]() |
98bff965f5 | ||
![]() |
d391b87227 | ||
![]() |
5f7711e7a6 | ||
![]() |
3bf1cf4f85 | ||
![]() |
6d9aafd3b0 | ||
![]() |
81a2fb9615 | ||
![]() |
f3c6f665af | ||
![]() |
e01ceb1a57 | ||
![]() |
fcd58b7c9b | ||
![]() |
574d8d30a7 | ||
![]() |
8467b91390 | ||
![]() |
5d37eb8eeb | ||
![]() |
7d71a2c979 | ||
![]() |
58d9c96b5f | ||
![]() |
b9f74f3d25 | ||
![]() |
6c18a2cae2 | ||
![]() |
6ae7f31947 | ||
![]() |
97c82089b4 | ||
![]() |
6ce0819287 | ||
![]() |
5516063f46 | ||
![]() |
b8a5597d3e | ||
![]() |
481b2035db | ||
![]() |
f656f352a3 | ||
![]() |
a6ee2995bc | ||
![]() |
58bff0a183 | ||
![]() |
405062d2df | ||
![]() |
50144e883e | ||
![]() |
e7e0f049d1 | ||
![]() |
15569f1e7f | ||
![]() |
dad0109eca | ||
![]() |
1e23019df8 | ||
![]() |
2788de9b10 | ||
![]() |
6e0d61e5e8 | ||
![]() |
0bb83e5b7c | ||
![]() |
aca1c5a5f8 | ||
![]() |
24fd395d09 | ||
![]() |
13f4393042 | ||
![]() |
a3d048e9c0 | ||
![]() |
66d938fcea | ||
![]() |
72d805d458 | ||
![]() |
1a2e6eae8e | ||
![]() |
d634ed0bbb | ||
![]() |
bdbeb1d68f | ||
![]() |
e8314e1d86 | ||
![]() |
bf424caf4a | ||
![]() |
996af94bb8 | ||
![]() |
f47055a1b0 | ||
![]() |
e416e0a9e9 | ||
![]() |
fd690db01f | ||
![]() |
e03df37417 | ||
![]() |
3f232f3dbd | ||
![]() |
942cd7caa5 | ||
![]() |
5a93a6eec4 | ||
![]() |
c56391e972 | ||
![]() |
de062bc2a6 | ||
![]() |
976457ccef | ||
![]() |
f64c35c3f9 | ||
![]() |
592f316b3f | ||
![]() |
c82ece2721 | ||
![]() |
c695b6f6a5 | ||
![]() |
3debb7cdf3 | ||
![]() |
79c3148fc0 | ||
![]() |
7faba60e83 | ||
![]() |
b9bd757df1 | ||
![]() |
5825cd7868 | ||
![]() |
e46f1b69ba | ||
![]() |
26241980d7 | ||
![]() |
ed7cacbf92 | ||
![]() |
a217630fdd | ||
![]() |
2f3bd80de4 | ||
![]() |
0246761f94 | ||
![]() |
87801d8aca | ||
![]() |
28f6e79385 | ||
![]() |
893f796df2 | ||
![]() |
c97ce05b09 | ||
![]() |
454c5d824a | ||
![]() |
c29c0e7e13 | ||
![]() |
e13f78dfc5 | ||
![]() |
b768c9cc64 | ||
![]() |
8237ccfa03 | ||
![]() |
28a4af89d9 | ||
![]() |
77cec174b8 | ||
![]() |
511366f329 | ||
![]() |
e4d320d5f5 | ||
![]() |
b8ebb94bc6 | ||
![]() |
d74ece92f9 | ||
![]() |
360ac7e71f | ||
![]() |
ed925f9ef5 | ||
![]() |
b876f7f11a | ||
![]() |
097b1d112b | ||
![]() |
961327f76b | ||
![]() |
d7fbb8ed8e | ||
![]() |
79135f59fd | ||
![]() |
96ef92659f | ||
![]() |
5e249aac5f | ||
![]() |
be57d45653 | ||
![]() |
e4590539e1 | ||
![]() |
bec8781558 | ||
![]() |
2cae17deb7 | ||
![]() |
cc14dfa31c | ||
![]() |
a643d6cd3e | ||
![]() |
4b998ea6af | ||
![]() |
aa2bfbb541 | ||
![]() |
13c8c2e841 | ||
![]() |
de3f0c788c | ||
![]() |
22fdccba02 | ||
![]() |
b85bd2cb99 | ||
![]() |
b6292d7c77 | ||
![]() |
1c84905bcd | ||
![]() |
ca6243c18a | ||
![]() |
066e921a8b | ||
![]() |
e4333a7a44 | ||
![]() |
8402363568 | ||
![]() |
8ff1fc6f8b | ||
![]() |
0c066a0944 | ||
![]() |
86ae02e5c5 | ||
![]() |
17c31ed640 | ||
![]() |
7fa3950001 | ||
![]() |
9def9464e9 | ||
![]() |
f474631ac0 | ||
![]() |
f436e29a0d | ||
![]() |
aa60d362fd | ||
![]() |
d3ed80cf53 | ||
![]() |
90e0a1af8a | ||
![]() |
9ca2ad53f9 | ||
![]() |
e7f8d6bbf7 | ||
![]() |
5760fb94fe | ||
![]() |
147dfa06af | ||
![]() |
b44464e0fa | ||
![]() |
fd339be458 | ||
![]() |
29383f98b5 | ||
![]() |
c4c2b4f9da | ||
![]() |
0d700f6a63 | ||
![]() |
d53cb951e7 | ||
![]() |
8c5c963b96 | ||
![]() |
6f7f5b4034 | ||
![]() |
29bc93ea98 | ||
![]() |
b30d117e7d | ||
![]() |
62bc02fdda | ||
![]() |
56f7c3b55c | ||
![]() |
5f775c1427 | ||
![]() |
9a4a83cb91 | ||
![]() |
e757c47bc8 | ||
![]() |
2452f3504c | ||
![]() |
e3b91f4ce7 | ||
![]() |
214d6f5cf5 | ||
![]() |
f3f2aa807b | ||
![]() |
a65bb6d804 | ||
![]() |
1063594bf0 | ||
![]() |
a7f4b4d248 | ||
![]() |
5b4cfc6b25 | ||
![]() |
93aa47851a | ||
![]() |
513f33f454 | ||
![]() |
7b35f5d66d | ||
![]() |
40d3d64027 | ||
![]() |
77443b3d09 | ||
![]() |
b741199ed3 | ||
![]() |
9994554c56 | ||
![]() |
79fdac6674 | ||
![]() |
86d3321d59 | ||
![]() |
1d22936a82 | ||
![]() |
73535200c2 | ||
![]() |
f3de26444e | ||
![]() |
a2fab264c4 | ||
![]() |
c93c6a66e8 | ||
![]() |
6404882ec4 | ||
![]() |
4afa2a2651 | ||
![]() |
71617e8e8b | ||
![]() |
175204a65e | ||
![]() |
d416029e82 | ||
![]() |
d3bbd9ec65 | ||
![]() |
813e945d86 | ||
![]() |
c582911879 | ||
![]() |
f94329dbbd | ||
![]() |
5ba0ccd43b | ||
![]() |
5b7a4434c4 | ||
![]() |
637ff5698c | ||
![]() |
afe15a2e6b | ||
![]() |
7bfc1d2840 | ||
![]() |
e9c5f3e74a | ||
![]() |
7ff196d043 | ||
![]() |
cc28150253 | ||
![]() |
5a9ee9bd6c | ||
![]() |
f02475fede | ||
![]() |
73cb06c6af | ||
![]() |
dd6322593a | ||
![]() |
b783927039 | ||
![]() |
7c54cd5583 | ||
![]() |
370838ea7b | ||
![]() |
3560081efd | ||
![]() |
38342b2f25 | ||
![]() |
e851fc13dc | ||
![]() |
eb983018ad | ||
![]() |
6651844d41 | ||
![]() |
eca9710845 | ||
![]() |
03d72ff2ec | ||
![]() |
1595ed1228 | ||
![]() |
b022e08db9 | ||
![]() |
0b64f49e3a | ||
![]() |
f922128a14 | ||
![]() |
4fa268ecb4 | ||
![]() |
36413e112f | ||
![]() |
0869d209d7 | ||
![]() |
b578a76efa | ||
![]() |
5f1855abf5 | ||
![]() |
a7e8446454 | ||
![]() |
3ce89409d2 | ||
![]() |
828f368323 | ||
![]() |
4a5cf5cd2b | ||
![]() |
c3689d7416 | ||
![]() |
a0fbf9ba47 | ||
![]() |
116f7934d3 | ||
![]() |
561b033ebb | ||
![]() |
da87ec8499 | ||
![]() |
4d292c2723 | ||
![]() |
4448eb94a1 | ||
![]() |
d6ab36bf8e | ||
![]() |
a8cd7203df | ||
![]() |
6631bbc6f5 | ||
![]() |
116012680a | ||
![]() |
dbd1ca45c4 | ||
![]() |
224c874673 | ||
![]() |
4431dd278c | ||
![]() |
dcf51e5a14 | ||
![]() |
08cacb9f51 | ||
![]() |
fc8d41d024 | ||
![]() |
50e7b4dc10 | ||
![]() |
ccc3ce81f9 | ||
![]() |
4a08c65205 | ||
![]() |
e002c84eba | ||
![]() |
ab7bd302f6 | ||
![]() |
276c79aa85 | ||
![]() |
9a4a3204d6 | ||
![]() |
dd03fcbeb3 | ||
![]() |
2c5079ebb6 | ||
![]() |
123a1baead | ||
![]() |
6dd836589c | ||
![]() |
7f77e99e4d | ||
![]() |
6c3ea2a904 | ||
![]() |
193e9bec97 | ||
![]() |
a5b98b40ac | ||
![]() |
e9ff1940d6 | ||
![]() |
96649a7e27 | ||
![]() |
9b757e4c22 | ||
![]() |
46920e9be6 | ||
![]() |
877eb0c3ad | ||
![]() |
61620dec30 | ||
![]() |
12e92d504d | ||
![]() |
16e1b3772c | ||
![]() |
59686274d7 | ||
![]() |
945567150d | ||
![]() |
eedfca6623 | ||
![]() |
41e4dc4336 | ||
![]() |
730a257f3c | ||
![]() |
d06fce6997 | ||
![]() |
ca08b70984 | ||
![]() |
867138ebb8 | ||
![]() |
e004cd029a | ||
![]() |
b73c774b07 | ||
![]() |
5635cdb77c | ||
![]() |
0d598dd6d6 | ||
![]() |
ef9d9b17bd | ||
![]() |
fbde040f59 | ||
![]() |
220baed33a | ||
![]() |
5f2a9ed965 | ||
![]() |
08e74352ec | ||
![]() |
60f79c848a | ||
![]() |
2584a07452 | ||
![]() |
6a4c25b668 | ||
![]() |
d305247485 | ||
![]() |
782d2d0b75 | ||
![]() |
8e150ff1f5 | ||
![]() |
f12bd7ad99 | ||
![]() |
bc5a2da7b7 | ||
![]() |
19be31d13a | ||
![]() |
95357dfc55 | ||
![]() |
d560e8245a | ||
![]() |
095d2718f3 | ||
![]() |
9de57382cd | ||
![]() |
6fc517fdbe | ||
![]() |
214aa3de08 | ||
![]() |
01581ff92e | ||
![]() |
a5af746013 | ||
![]() |
4a788b62d1 | ||
![]() |
ccc818266b | ||
![]() |
c9fba5db5e | ||
![]() |
f0d553514d | ||
![]() |
d144228272 | ||
![]() |
9062d6e5e6 | ||
![]() |
c87ecf0ff6 | ||
![]() |
2123f6f133 | ||
![]() |
c5d2e44baf | ||
![]() |
2a6948e696 | ||
![]() |
1b4851f2e0 | ||
![]() |
b4282fca84 | ||
![]() |
4720a7a891 | ||
![]() |
75e5f085d3 | ||
![]() |
675525f47c | ||
![]() |
6d7fb9f46a | ||
![]() |
0abcf2d176 | ||
![]() |
bd46a6130a | ||
![]() |
26f78132ae | ||
![]() |
f492a7678d | ||
![]() |
e6a2507b50 | ||
![]() |
d10f5a48d4 | ||
![]() |
e5a861dc90 | ||
![]() |
a80ce60e75 | ||
![]() |
3259ba6116 | ||
![]() |
e8e9500a30 | ||
![]() |
75608ce378 | ||
![]() |
4e095e9fff | ||
![]() |
7f06a939ac | ||
![]() |
2686869f88 | ||
![]() |
7a8d1c00a4 | ||
![]() |
a6b407d706 | ||
![]() |
966cb14a38 | ||
![]() |
21e85ba9c5 | ||
![]() |
608a7578fc | ||
![]() |
98f1548f2d | ||
![]() |
d1b3ed717e | ||
![]() |
a365f456fc | ||
![]() |
37463d655a | ||
![]() |
61a5793073 | ||
![]() |
b3eba49a2f | ||
![]() |
3b12fd22a4 | ||
![]() |
a9bbc42981 | ||
![]() |
b78b705e32 | ||
![]() |
71c8fcee20 | ||
![]() |
44b4f14375 | ||
![]() |
64cd38d96f | ||
![]() |
01599d44f5 | ||
![]() |
42b6ec2fb5 | ||
![]() |
dd4a350bd5 | ||
![]() |
82784a320c | ||
![]() |
2faa3af51f | ||
![]() |
5007a9e702 | ||
![]() |
30744bea9c | ||
![]() |
4484afc0d6 | ||
![]() |
3776a06281 | ||
![]() |
618538aeff | ||
![]() |
3aa2de5fa5 | ||
![]() |
591845ce23 | ||
![]() |
54542ee90c | ||
![]() |
6a1f3f1117 | ||
![]() |
1c6e92c45b | ||
![]() |
267d98b5eb | ||
![]() |
f04be61f6f | ||
![]() |
1637a49442 | ||
![]() |
23f278e090 | ||
![]() |
813f8dd63f | ||
![]() |
55af2ab4dc | ||
![]() |
660b1dc1e4 | ||
![]() |
d672eed331 | ||
![]() |
ced59e599f | ||
![]() |
1259979204 | ||
![]() |
a2b280f342 | ||
![]() |
8277ebcbe1 | ||
![]() |
9aee91b98c | ||
![]() |
465eeab553 | ||
![]() |
6e86cbf947 | ||
![]() |
2326a2941e | ||
![]() |
334fecdf6f | ||
![]() |
317d08b6c1 | ||
![]() |
059df5e3e2 | ||
![]() |
de440cf579 | ||
![]() |
81d006499e | ||
![]() |
0a1e33b7e1 | ||
![]() |
5157c2d10c | ||
![]() |
8a8cbeb4c0 | ||
![]() |
de6fc53ca5 | ||
![]() |
b9e882fd5e | ||
![]() |
eaa73ef0c7 | ||
![]() |
a6e9933236 | ||
![]() |
f757ca6b11 | ||
![]() |
ff469cb592 | ||
![]() |
c9cc024e9b | ||
![]() |
b87b618c94 | ||
![]() |
97609576cb | ||
![]() |
cd3fc7c76d | ||
![]() |
6e2cf9663a | ||
![]() |
374fe47809 | ||
![]() |
abae48c287 | ||
![]() |
8bd0fca751 | ||
![]() |
ca67fd9faa | ||
![]() |
8825561a99 | ||
![]() |
5dcac36b78 | ||
![]() |
9d794b820a | ||
![]() |
ede432ba71 | ||
![]() |
ab352c3bc9 | ||
![]() |
0d60d40512 | ||
![]() |
55dfca7467 | ||
![]() |
6119e79023 | ||
![]() |
2f415b0db1 | ||
![]() |
e20bfdd19c | ||
![]() |
0d999649c0 | ||
![]() |
371bea03d6 | ||
![]() |
94a3cec4bf | ||
![]() |
3d9ae1b8bd | ||
![]() |
5a2eddb32c | ||
![]() |
6d812bd957 | ||
![]() |
5617e6913b | ||
![]() |
19a0a7029f | ||
![]() |
77655cad0d | ||
![]() |
5e3e4bda28 | ||
![]() |
e8710002b1 | ||
![]() |
d6a47cb3e0 | ||
![]() |
188f3e35fd | ||
![]() |
1f4cdda234 | ||
![]() |
446c7349ff | ||
![]() |
0d8c75d9ce | ||
![]() |
1ffc3a00e7 | ||
![]() |
d011b46985 | ||
![]() |
5bfc1f3d4d | ||
![]() |
72cc656b7e | ||
![]() |
9f1bffe3be | ||
![]() |
e41753556c | ||
![]() |
86f09a42a2 | ||
![]() |
f06aeea385 | ||
![]() |
970fe3f3da | ||
![]() |
607b09ccdd | ||
![]() |
d36204a968 | ||
![]() |
76b65c5779 | ||
![]() |
632d44c7b7 | ||
![]() |
1b36a34ae4 | ||
![]() |
0afb849e7f | ||
![]() |
5f97937ba0 | ||
![]() |
ca48148150 | ||
![]() |
9142fa1aa6 | ||
![]() |
1ac8442c63 | ||
![]() |
e47b548192 | ||
![]() |
337cc6e79f | ||
![]() |
d842dacfd6 | ||
![]() |
1ea7229f32 | ||
![]() |
5faa9795b0 | ||
![]() |
0b90ebf91e | ||
![]() |
0db1fcca0f | ||
![]() |
55bec20b02 | ||
![]() |
6dc6f2d099 | ||
![]() |
075030f15a | ||
![]() |
bf33169627 | ||
![]() |
c30600a044 | ||
![]() |
f3b702db5a | ||
![]() |
f516b24dfb | ||
![]() |
e2af216bcd | ||
![]() |
96aaa25aad | ||
![]() |
e268c5b873 | ||
![]() |
e0a7ea52fd | ||
![]() |
18478ebd05 | ||
![]() |
ba394fd2aa | ||
![]() |
535ce8726d | ||
![]() |
5fc0e00ead | ||
![]() |
994e83811f | ||
![]() |
52fe19ca31 | ||
![]() |
6fa29d6e2e | ||
![]() |
91d35c7c5c | ||
![]() |
f87c44e544 | ||
![]() |
600db816a2 | ||
![]() |
a9908f0a94 | ||
![]() |
c555ab1a84 | ||
![]() |
d93c09327a | ||
![]() |
45beb3c6e4 | ||
![]() |
bea354b82a | ||
![]() |
615a346a39 | ||
![]() |
dbcc294d67 | ||
![]() |
5a9970e63c | ||
![]() |
89fe488b7c | ||
![]() |
d6e1bc3e75 | ||
![]() |
5ddcc22583 | ||
![]() |
e1d66f6fdd | ||
![]() |
4e3414fc8a | ||
![]() |
2553b0d1e0 | ||
![]() |
2d8bb8e6d2 | ||
![]() |
e365f807c1 | ||
![]() |
87504806b1 | ||
![]() |
e742711a76 | ||
![]() |
667a87988d | ||
![]() |
4337dd6864 | ||
![]() |
fc286900d3 | ||
![]() |
908e044db1 | ||
![]() |
bb60286ed9 | ||
![]() |
983b1e1e9d | ||
![]() |
29f50ddc9c | ||
![]() |
028e08c7f6 | ||
![]() |
b0bb125860 | ||
![]() |
59d707df54 | ||
![]() |
fb33667c5a | ||
![]() |
6924192523 | ||
![]() |
7bd6f5413d | ||
![]() |
2239f2f732 | ||
![]() |
6d24a65313 | ||
![]() |
4bcceb4078 | ||
![]() |
f49831c03b | ||
![]() |
328cfe86b1 | ||
![]() |
c5adcab195 | ||
![]() |
c7ab5de07c | ||
![]() |
ab1eda7412 | ||
![]() |
fffda27385 | ||
![]() |
5d649b2541 | ||
![]() |
173d7fa060 | ||
![]() |
c75d3ce8c7 | ||
![]() |
e6a6c3ceb6 | ||
![]() |
ad5a396c10 | ||
![]() |
ec2c7ea932 | ||
![]() |
200e140e80 | ||
![]() |
19dd797dfe | ||
![]() |
00b6409b76 | ||
![]() |
538bb60022 | ||
![]() |
44afffcfbf | ||
![]() |
138470d86c | ||
![]() |
4b1626a748 | ||
![]() |
f8f8dddca7 | ||
![]() |
d454c6a43d | ||
![]() |
b160f1c813 | ||
![]() |
ab493eba96 | ||
![]() |
c25cf82668 | ||
![]() |
95e7c98c91 | ||
![]() |
b2af1de273 | ||
![]() |
5aca16ef01 | ||
![]() |
fc670e46d9 | ||
![]() |
f965fb6350 | ||
![]() |
20aa089243 | ||
![]() |
4f519a2fe1 | ||
![]() |
1e8281fb06 | ||
![]() |
ee47becd00 | ||
![]() |
8407321cfd | ||
![]() |
e273ff5e5e | ||
![]() |
24c45bfd84 | ||
![]() |
e3f47beda4 | ||
![]() |
8901508df6 | ||
![]() |
9f713dac7f | ||
![]() |
4f50b858d0 | ||
![]() |
123ae941a9 | ||
![]() |
ea9f1376a6 | ||
![]() |
6e6ebb9495 | ||
![]() |
946b77e2ec | ||
![]() |
8c4a139aeb | ||
![]() |
d5f73378f0 | ||
![]() |
b893150154 | ||
![]() |
c18a6d5ea3 | ||
![]() |
f839ba00eb | ||
![]() |
2ab79115d1 | ||
![]() |
9aa0e76d65 | ||
![]() |
e88af54016 | ||
![]() |
df121c2e88 | ||
![]() |
91e7bcbfac | ||
![]() |
2af9f4fffe | ||
![]() |
11ee01424d | ||
![]() |
52e154f881 | ||
![]() |
c6a86edd36 | ||
![]() |
2dc6ba0ab4 | ||
![]() |
19ce367f88 | ||
![]() |
671e324f48 | ||
![]() |
c3542f8bb2 | ||
![]() |
569057c215 | ||
![]() |
c1962a4895 | ||
![]() |
44f8dab0b0 | ||
![]() |
5ea4a68aae | ||
![]() |
328cadbaa2 | ||
![]() |
04c4501455 | ||
![]() |
32e87fc4c7 | ||
![]() |
1db6e9fcb2 | ||
![]() |
c8aa55439f | ||
![]() |
5b5a232695 | ||
![]() |
10799952af | ||
![]() |
dfc66b2018 | ||
![]() |
f00f3d6b0c | ||
![]() |
de3f5e8d69 | ||
![]() |
302e631984 | ||
![]() |
d4dc7f806c | ||
![]() |
8e6e8dfbe0 | ||
![]() |
c254b71559 | ||
![]() |
d90a3b6c42 | ||
![]() |
da3ee0aa61 | ||
![]() |
eb17b68ad3 | ||
![]() |
2243855209 | ||
![]() |
82df4a3a4d | ||
![]() |
bc2ac65b1e | ||
![]() |
9bc04d7b5c | ||
![]() |
b620c53662 | ||
![]() |
ab35ceab5a | ||
![]() |
294a2d2460 | ||
![]() |
13dda7bd98 | ||
![]() |
14c35c9223 | ||
![]() |
8198970af9 | ||
![]() |
cfef8ee961 | ||
![]() |
25198242c1 | ||
![]() |
02c9e47db8 | ||
![]() |
c3c4752fa5 | ||
![]() |
6d3046cb42 | ||
![]() |
496da8823d | ||
![]() |
78d87dc40f | ||
![]() |
ca0648afe8 | ||
![]() |
7b9585cd8e | ||
![]() |
a0b3a9e50b | ||
![]() |
bc036351f6 | ||
![]() |
8e188d7e75 | ||
![]() |
9b7e31eca3 | ||
![]() |
0727c7b9e8 | ||
![]() |
e9e1ec5312 | ||
![]() |
e9c412bac6 | ||
![]() |
3331b81b64 | ||
![]() |
8259a5a71f | ||
![]() |
2edfa82237 | ||
![]() |
3100e852ce | ||
![]() |
1b0ccf10e5 | ||
![]() |
f38ff3b622 | ||
![]() |
3ad9052b5c | ||
![]() |
e0595ce518 | ||
![]() |
54bf83855c | ||
![]() |
2713469651 | ||
![]() |
64bdf2d35b | ||
![]() |
c3ac8869b0 | ||
![]() |
ecb37d0bdf | ||
![]() |
b2083a7bee | ||
![]() |
2ff255dedc | ||
![]() |
995f5db913 | ||
![]() |
9efbf2f880 | ||
![]() |
34fdf5a36f | ||
![]() |
f70a2ba1f7 | ||
![]() |
a000af5c03 | ||
![]() |
c2d1db61b6 | ||
![]() |
127cc744a4 | ||
![]() |
42ca566e05 | ||
![]() |
30c6ace0f3 | ||
![]() |
6b2baae0de | ||
![]() |
425c97626a | ||
![]() |
9535dd87b0 | ||
![]() |
4c38e6cfa5 | ||
![]() |
d510384c0d | ||
![]() |
f2fbe657c4 | ||
![]() |
c651ce06c5 | ||
![]() |
32499dc8fe | ||
![]() |
bc26be3c11 | ||
![]() |
70ee9d7f26 | ||
![]() |
a4c9446b8d | ||
![]() |
90f7cd2d44 | ||
![]() |
45b28b8b00 | ||
![]() |
dd7fbef948 | ||
![]() |
3845539577 | ||
![]() |
87e7e7fe8a | ||
![]() |
1adb45f74e | ||
![]() |
21dfee831f | ||
![]() |
eb718bffe0 | ||
![]() |
70f14600d1 | ||
![]() |
05289216c4 | ||
![]() |
c1814201be | ||
![]() |
dceb0d9bf7 | ||
![]() |
df768cab7d | ||
![]() |
9b8d1b88c5 | ||
![]() |
885cf20afa | ||
![]() |
663c994dfb | ||
![]() |
7eba08f385 | ||
![]() |
da8ce07216 | ||
![]() |
442499b452 | ||
![]() |
49db0a3720 | ||
![]() |
ebac7b7aad | ||
![]() |
b46eee04e4 | ||
![]() |
daf941e771 | ||
![]() |
d494da271a | ||
![]() |
ff936302d7 | ||
![]() |
8be7cb4539 | ||
![]() |
bdb998bdb3 | ||
![]() |
7cc683658b | ||
![]() |
9a40d5b7ed | ||
![]() |
ac9429988b | ||
![]() |
fb8f8133a0 | ||
![]() |
15ab63a4c2 | ||
![]() |
2d1002d40d | ||
![]() |
7dd42bc32d | ||
![]() |
b09b5729a3 | ||
![]() |
0b715b751d | ||
![]() |
ceb171974d | ||
![]() |
588409c784 | ||
![]() |
d03248962d | ||
![]() |
df744c5944 | ||
![]() |
292dcb7e37 | ||
![]() |
173c276c5c | ||
![]() |
ea709d0630 | ||
![]() |
cec3b57390 | ||
![]() |
3b246fb40a | ||
![]() |
5ff50e8b4f | ||
![]() |
10d25c798e | ||
![]() |
c3decc6531 | ||
![]() |
8d61893c39 | ||
![]() |
7383e81609 | ||
![]() |
db9b6aba31 | ||
![]() |
1c4b563e54 | ||
![]() |
57bbbbcf26 | ||
![]() |
a3e84791c6 | ||
![]() |
f5b7deda72 | ||
![]() |
38158376b3 | ||
![]() |
245eae89eb | ||
![]() |
837f7638cf | ||
![]() |
9675cc5ed2 | ||
![]() |
b0978f064f | ||
![]() |
14f035a39b | ||
![]() |
035b28045c | ||
![]() |
c6c7dd10f5 | ||
![]() |
ba8ae17487 | ||
![]() |
ad619817c6 | ||
![]() |
8b5ab3221f | ||
![]() |
eae21be5b9 | ||
![]() |
d7e3b0b755 | ||
![]() |
d95ffb3aa3 | ||
![]() |
46bbe816f6 | ||
![]() |
d54ee77375 | ||
![]() |
265666b75a | ||
![]() |
4901fa24ec | ||
![]() |
d92d74a14f | ||
![]() |
b9336272d4 | ||
![]() |
1bd1b8339d | ||
![]() |
078ce6766e | ||
![]() |
abdee3fcb7 | ||
![]() |
3873b23704 | ||
![]() |
81569f10c0 | ||
![]() |
8fb89854d3 | ||
![]() |
9d38413e7c | ||
![]() |
ddef681dd2 | ||
![]() |
3697ea7b27 | ||
![]() |
bb8bbc9c54 | ||
![]() |
bee742994e | ||
![]() |
60bc517d01 | ||
![]() |
1f7803c541 | ||
![]() |
60eb488d0c | ||
![]() |
2304a76979 | ||
![]() |
5cfae3f177 | ||
![]() |
a61224c578 | ||
![]() |
325e5416ef | ||
![]() |
894aac1b45 | ||
![]() |
b3286a4a01 | ||
![]() |
c19a1bf26d | ||
![]() |
93f7f78263 | ||
![]() |
cb98d62968 | ||
![]() |
643848cac4 | ||
![]() |
0ba04ec1ef | ||
![]() |
a33e5728de | ||
![]() |
087ddcb682 | ||
![]() |
e8da7f333b | ||
![]() |
33849a15a8 | ||
![]() |
e3d90f53cc | ||
![]() |
e1e768fa65 | ||
![]() |
b48dcca05d | ||
![]() |
648b340e8c | ||
![]() |
98e7865457 | ||
![]() |
cc1564da4a | ||
![]() |
cf563df42a | ||
![]() |
6ca2c4da3a | ||
![]() |
b3b770476d | ||
![]() |
2dbd8cf72c | ||
![]() |
db2110f0c6 | ||
![]() |
34ecc803b3 | ||
![]() |
de2eab30fa | ||
![]() |
69b98def5c | ||
![]() |
0d2de919a6 | ||
![]() |
8a68b1a3a9 | ||
![]() |
8392406476 | ||
![]() |
565b54d852 | ||
![]() |
49dc7ffb5b | ||
![]() |
5fd8763c3c | ||
![]() |
f3b6575272 | ||
![]() |
66ac5d5b76 | ||
![]() |
c39fe36a1c | ||
![]() |
476072927a | ||
![]() |
c2a90a4f0d | ||
![]() |
6dfffb23c4 | ||
![]() |
cedf7e3945 | ||
![]() |
98a2efcbab | ||
![]() |
b31284b855 | ||
![]() |
a1aebe904e | ||
![]() |
ffa111deb9 | ||
![]() |
f53dfc4308 | ||
![]() |
e4ee4cf302 | ||
![]() |
f7b822d000 | ||
![]() |
529656cf64 | ||
![]() |
738ef38ddc | ||
![]() |
d99e228983 | ||
![]() |
e3e2e817e5 | ||
![]() |
2e6108365e | ||
![]() |
67c3a4c970 | ||
![]() |
15f41c84f9 | ||
![]() |
d28b477f9a | ||
![]() |
a16e742107 | ||
![]() |
5711c0882f | ||
![]() |
18e4493ca3 | ||
![]() |
60dd2213cf | ||
![]() |
00e67fb2c7 | ||
![]() |
40ce8f8c9c | ||
![]() |
983ed8b8b4 | ||
![]() |
b1326928df | ||
![]() |
171c1b20f7 | ||
![]() |
0793b5ac62 | ||
![]() |
c8df5fb8ad | ||
![]() |
d33cf28936 | ||
![]() |
f89c73d79d | ||
![]() |
3f0936f068 | ||
![]() |
fca90a8ddc | ||
![]() |
39336d3ea3 | ||
![]() |
e3bcfb88e7 | ||
![]() |
b855177fe6 | ||
![]() |
de317fb2f6 | ||
![]() |
f38011560f | ||
![]() |
5bf7e0fcc0 | ||
![]() |
24840b54ac | ||
![]() |
7653dc947a | ||
![]() |
0f39296251 | ||
![]() |
dd0fd36049 | ||
![]() |
30a391b88b | ||
![]() |
71803cbdef | ||
![]() |
f5eafbe760 | ||
![]() |
52f710528f | ||
![]() |
38b729b00a | ||
![]() |
5dae7f8451 | ||
![]() |
6a297b3758 | ||
![]() |
ab7afbdaf7 | ||
![]() |
0763503151 | ||
![]() |
000ad256fb | ||
![]() |
d3a4270312 | ||
![]() |
8d3a415d07 | ||
![]() |
927c2314c4 | ||
![]() |
528c7f4871 | ||
![]() |
61b4d1e8de | ||
![]() |
b00b8ea0c1 | ||
![]() |
59f1a1be93 | ||
![]() |
262b01d632 | ||
![]() |
03dd92d51b | ||
![]() |
d267d674b9 | ||
![]() |
c20a965eda | ||
![]() |
bf1b408038 | ||
![]() |
d7e9959442 | ||
![]() |
906385172a | ||
![]() |
1c25468b21 | ||
![]() |
c3c7b68cac | ||
![]() |
0a3ec6fea1 | ||
![]() |
feed139ae7 | ||
![]() |
db72039b8f | ||
![]() |
dde93304d3 | ||
![]() |
d2e70eb967 | ||
![]() |
22ae498f3a | ||
![]() |
fddaea797e | ||
![]() |
0d95eff21d | ||
![]() |
541e30d155 | ||
![]() |
6f1900c6f4 | ||
![]() |
03cae17992 | ||
![]() |
886308a953 | ||
![]() |
ed71683488 | ||
![]() |
71a47fc80c | ||
![]() |
187b6525b4 | ||
![]() |
7d3c974747 | ||
![]() |
d85222ad80 | ||
![]() |
39a01fcdc6 | ||
![]() |
29d06e8faf | ||
![]() |
e8a0abd107 | ||
![]() |
025cce3445 | ||
![]() |
b9b1cee403 | ||
![]() |
9dfcae3dc2 | ||
![]() |
29df8e546f | ||
![]() |
f71125092f | ||
![]() |
b112be3556 | ||
![]() |
211ed3d596 | ||
![]() |
46fa20411e | ||
![]() |
debc1f78d4 | ||
![]() |
05192b7164 | ||
![]() |
4a9f4f585d | ||
![]() |
0d05bd309a | ||
![]() |
b60527c986 | ||
![]() |
c628c2cef2 | ||
![]() |
c6ba607c8c | ||
![]() |
07ae3f9ee9 | ||
![]() |
42353282d4 | ||
![]() |
1041dbe23c | ||
![]() |
8a8ee95336 | ||
![]() |
851c1711d4 | ||
![]() |
f1d3c0d19b | ||
![]() |
cd300f54a8 | ||
![]() |
dc7127aacf | ||
![]() |
4ead87270e | ||
![]() |
d1663f2733 | ||
![]() |
1634592d90 | ||
![]() |
ddddd8566d | ||
![]() |
5cf2043c04 | ||
![]() |
43777ace20 | ||
![]() |
a7e5cc31c3 | ||
![]() |
aa6520cac1 | ||
![]() |
af10cd315e | ||
![]() |
ef28bcaa9c | ||
![]() |
ff3bfade31 | ||
![]() |
4eafd8adf7 | ||
![]() |
cb5de0e090 | ||
![]() |
254394ecab | ||
![]() |
e4e0c37a8c | ||
![]() |
6f7bd673fb | ||
![]() |
3a74066529 | ||
![]() |
b8e9e3af2f | ||
![]() |
4e6fd19624 | ||
![]() |
a813847f6e | ||
![]() |
066254afdf | ||
![]() |
912eb321d9 | ||
![]() |
c0315e32bd | ||
![]() |
dd37c3f447 | ||
![]() |
54dd77fe88 | ||
![]() |
c8e0daee24 | ||
![]() |
b7dd8cdf50 | ||
![]() |
62835f0536 | ||
![]() |
730d90fb8c | ||
![]() |
eccab375a2 | ||
![]() |
b5c89b4ef4 | ||
![]() |
2d751c1edd | ||
![]() |
d1c1aa518d | ||
![]() |
ae22b5187a | ||
![]() |
aef06a3544 | ||
![]() |
83cc871edf | ||
![]() |
d2cd557523 | ||
![]() |
d98171ed05 | ||
![]() |
2065039f65 | ||
![]() |
081b822d25 | ||
![]() |
f25321e010 | ||
![]() |
e27d5cd9fb | ||
![]() |
6f449cd383 | ||
![]() |
d47cef4ba2 | ||
![]() |
a8da03912e | ||
![]() |
8f233b822f | ||
![]() |
060c6c89e3 | ||
![]() |
96dc0319d8 | ||
![]() |
08b0c1178b | ||
![]() |
252c724602 | ||
![]() |
c529bcca9b | ||
![]() |
9b94d128ad | ||
![]() |
9c224e0515 | ||
![]() |
899e7bfb5a | ||
![]() |
ef5f4b2aca | ||
![]() |
2b0bdd580c | ||
![]() |
08c9ceb752 | ||
![]() |
e64104300f | ||
![]() |
cb058ff6c0 | ||
![]() |
55870aec31 | ||
![]() |
3df46cd70a | ||
![]() |
9165ea5fbd | ||
![]() |
a30e217bb5 | ||
![]() |
f2dad7905d | ||
![]() |
3db9d6a6aa | ||
![]() |
8fbdc703e0 | ||
![]() |
201e958854 | ||
![]() |
36a606f81d | ||
![]() |
b719a77503 | ||
![]() |
6afe6acb6c | ||
![]() |
4b2c45e668 | ||
![]() |
4caf65dc97 | ||
![]() |
39408ab240 | ||
![]() |
1d89d22a38 | ||
![]() |
8b0a0ee521 | ||
![]() |
9fd0192441 | ||
![]() |
30fd9950e2 | ||
![]() |
b10319f69e | ||
![]() |
1d2713b0ea | ||
![]() |
457d439e24 | ||
![]() |
590e714021 | ||
![]() |
4ebbabcdd1 | ||
![]() |
314bc07cee | ||
![]() |
23e091696e | ||
![]() |
f8f05c4d0d | ||
![]() |
5a55d50879 | ||
![]() |
58ae117bb4 | ||
![]() |
be3cf52613 | ||
![]() |
e28bcb52d9 | ||
![]() |
4a4496b21d | ||
![]() |
7ae802bb0d | ||
![]() |
aaa1d06809 | ||
![]() |
4e043b3123 | ||
![]() |
775010f160 | ||
![]() |
e86fb3fc5c | ||
![]() |
fbd197146a | ||
![]() |
c63ec698a1 | ||
![]() |
71aaf2d809 | ||
![]() |
400602a8b3 | ||
![]() |
4a32a0f1da | ||
![]() |
0cf9268ca8 | ||
![]() |
fb93b79b12 | ||
![]() |
eff9b2a1a0 | ||
![]() |
4dbbf93af9 | ||
![]() |
3d73f166be | ||
![]() |
0e6aacb440 | ||
![]() |
cc443ff37a | ||
![]() |
2cfa0af532 | ||
![]() |
83fb5e5071 | ||
![]() |
955c94e313 | ||
![]() |
b892dbc6ea | ||
![]() |
3566803d2e | ||
![]() |
774b1d1663 | ||
![]() |
90dd796644 | ||
![]() |
a473ae6711 | ||
![]() |
be99f3bf32 | ||
![]() |
5047635224 | ||
![]() |
e6ed2f0377 | ||
![]() |
b88f56cbfb | ||
![]() |
06216a8a45 | ||
![]() |
f085a0c54a | ||
![]() |
b783aab41b | ||
![]() |
12b408219e | ||
![]() |
6cafc9aaef | ||
![]() |
f5cbc9d208 | ||
![]() |
dd1608db0d | ||
![]() |
f2f03cf552 | ||
![]() |
977f1a6916 | ||
![]() |
ffefdcfe22 | ||
![]() |
f4eb1f0652 | ||
![]() |
23668f3c5e | ||
![]() |
6208d8c911 | ||
![]() |
d0dad4bfd6 | ||
![]() |
7330e30fd3 | ||
![]() |
a9cbd355ca | ||
![]() |
3e0eaa3c87 | ||
![]() |
98f68f4798 | ||
![]() |
0e3c1dc031 | ||
![]() |
9508c51403 | ||
![]() |
531207e005 | ||
![]() |
952aa02e37 | ||
![]() |
3e0ccd2e86 | ||
![]() |
bcd1eb952c | ||
![]() |
01bf4daf37 | ||
![]() |
0186ce7896 | ||
![]() |
f42804805c | ||
![]() |
eee0a6e9f4 | ||
![]() |
0e6b905cdf | ||
![]() |
d59209ff47 | ||
![]() |
ad8cf2d0d0 | ||
![]() |
fe0db80fb8 | ||
![]() |
ef61118d49 | ||
![]() |
de54659097 | ||
![]() |
ad3c5240c2 | ||
![]() |
0f9790f5f1 | ||
![]() |
68e86c5e3a | ||
![]() |
1cd0e764b6 | ||
![]() |
d45c386149 | ||
![]() |
dd3cd95954 | ||
![]() |
188ca630de | ||
![]() |
ffafcf27a8 | ||
![]() |
21098bc3e5 | ||
![]() |
1f9f5bfaa8 | ||
![]() |
312af53935 | ||
![]() |
3c2df7f8f2 | ||
![]() |
42cb5a5239 | ||
![]() |
d832ce0b26 | ||
![]() |
f32ae95ef4 | ||
![]() |
de2f506585 | ||
![]() |
f7ae78f78e | ||
![]() |
5bedc4ede2 | ||
![]() |
03a090e384 | ||
![]() |
dd232a3507 | ||
![]() |
03a9e3284c | ||
![]() |
c08ca8a439 | ||
![]() |
bf16b50679 | ||
![]() |
5a1b0edd96 | ||
![]() |
1477087c71 | ||
![]() |
4a2236fe85 | ||
![]() |
95cefd1acc | ||
![]() |
5ce31cb383 | ||
![]() |
ff391e538a | ||
![]() |
28a2c9c653 | ||
![]() |
369ffe2288 | ||
![]() |
5f72ad8da6 | ||
![]() |
00c38c5f70 | ||
![]() |
18a4829314 | ||
![]() |
c629e7dc0e | ||
![]() |
73c52e668e | ||
![]() |
6cafc45d2b | ||
![]() |
4f767dd3ef | ||
![]() |
c89975adf6 | ||
![]() |
867630a4a7 | ||
![]() |
a6d5ed0160 | ||
![]() |
f93e4e3de7 | ||
![]() |
f5a6c3484d | ||
![]() |
b8afb9277a | ||
![]() |
262ed9ed2a | ||
![]() |
f1e58d0784 | ||
![]() |
6c6318d18f | ||
![]() |
3dc6612cd9 | ||
![]() |
a38db1f677 | ||
![]() |
558cccc68c | ||
![]() |
b598ff94d1 | ||
![]() |
c267946284 | ||
![]() |
07ce284acd | ||
![]() |
6c4b4ad1e0 | ||
![]() |
815d153e55 | ||
![]() |
eac03ef4be | ||
![]() |
a38e075bda | ||
![]() |
cced74740f | ||
![]() |
1236c2b91e | ||
![]() |
d54d7c6958 | ||
![]() |
9365ba3fcf | ||
![]() |
5650b390b9 | ||
![]() |
8f4d3146c1 | ||
![]() |
2647296475 | ||
![]() |
6d311a31dd | ||
![]() |
4bbc0a03ca | ||
![]() |
16670a38a4 | ||
![]() |
eb8e8d00a6 | ||
![]() |
d5f4dfdd6b | ||
![]() |
4a0a56ebdc | ||
![]() |
6990c70123 | ||
![]() |
bb68e7a532 | ||
![]() |
bb3592baa0 | ||
![]() |
1fa996ed68 | ||
![]() |
2a3c94bad0 | ||
![]() |
3ee05ad4bb | ||
![]() |
44425a184e | ||
![]() |
28c2f9caa9 | ||
![]() |
2a36adae46 | ||
![]() |
46985bba0d | ||
![]() |
3f4a7ec396 | ||
![]() |
ad9f4db983 | ||
![]() |
0e2fa7700d | ||
![]() |
109f083c5d | ||
![]() |
fb22f6c301 | ||
![]() |
aec2fe86e4 | ||
![]() |
763ed0dc7b | ||
![]() |
f150c9c65c | ||
![]() |
d979648c01 | ||
![]() |
9226589bcd | ||
![]() |
e616ab5fb2 | ||
![]() |
3c59791b2e | ||
![]() |
b50281a917 | ||
![]() |
2d002f3ef6 | ||
![]() |
6180f7bd64 | ||
![]() |
45241e57ca | ||
![]() |
cd57b764ce | ||
![]() |
c2a9aba467 | ||
![]() |
5c2bd8b743 | ||
![]() |
513abcb7e5 | ||
![]() |
1ff245d9c2 | ||
![]() |
2360fd4141 | ||
![]() |
ea23ffedfe | ||
![]() |
bf4b099f11 | ||
![]() |
b8fdebd05c | ||
![]() |
0e3dc7976c | ||
![]() |
c8d4cf08d9 | ||
![]() |
df67ab995f | ||
![]() |
c21a2eab22 | ||
![]() |
df2351b920 | ||
![]() |
4332cbe112 | ||
![]() |
f9a7c64106 | ||
![]() |
49ebea2be3 | ||
![]() |
b09a9fc81a | ||
![]() |
fa60e9b03b | ||
![]() |
0b2a8bf79a | ||
![]() |
087b672449 | ||
![]() |
d3f9408650 | ||
![]() |
6e6ad94df6 | ||
![]() |
e344c2ea64 | ||
![]() |
ab8c50895e | ||
![]() |
f0472f2dc2 | ||
![]() |
0249daef2e | ||
![]() |
8d2e72cdf6 | ||
![]() |
52ac7285a7 | ||
![]() |
2a3d688923 | ||
![]() |
ca3a22b5a3 | ||
![]() |
912cda4e6f | ||
![]() |
c79b3df73f | ||
![]() |
8423d18d8d | ||
![]() |
9d87c1ab1a | ||
![]() |
f95c3e265d | ||
![]() |
66402b9b38 | ||
![]() |
99877c32b1 | ||
![]() |
4510e83150 | ||
![]() |
252d934caa | ||
![]() |
e8bd1b9216 | ||
![]() |
99d732b974 | ||
![]() |
05e7238c45 | ||
![]() |
991afccbd4 | ||
![]() |
d5e606640c | ||
![]() |
6d4fa76107 | ||
![]() |
ba2558790d | ||
![]() |
79f6d55fe8 | ||
![]() |
403b4a2e0b | ||
![]() |
8272c71811 | ||
![]() |
699ca44260 | ||
![]() |
5893f6b14b | ||
![]() |
a7b08c48f3 | ||
![]() |
0148708613 | ||
![]() |
81cef9a281 | ||
![]() |
2bb29485be | ||
![]() |
57820be92a | ||
![]() |
e18bea0215 | ||
![]() |
49c2a4a4e3 | ||
![]() |
ebc4804e04 | ||
![]() |
ffc9bcb4d7 | ||
![]() |
e87fab6b5f | ||
![]() |
b6d9454b54 | ||
![]() |
85328399e0 | ||
![]() |
836413a4a8 | ||
![]() |
d16d44d3e7 | ||
![]() |
c2ac8e813a | ||
![]() |
37687561c0 | ||
![]() |
acf41d03db | ||
![]() |
92d373055f | ||
![]() |
c00f04221f | ||
![]() |
414559f018 | ||
![]() |
661101df08 | ||
![]() |
ecbcdee934 | ||
![]() |
eb77b94315 | ||
![]() |
6ab14a3729 | ||
![]() |
f81464161a | ||
![]() |
3461f3a1ed | ||
![]() |
0ed7bc3b8e | ||
![]() |
d8e3e9abaa | ||
![]() |
c3c5cc9ae7 | ||
![]() |
5db1a67c20 | ||
![]() |
1a4199c485 | ||
![]() |
8cb1d630c8 | ||
![]() |
f275b7e5ed | ||
![]() |
c9592c1447 | ||
![]() |
ff2367fffb | ||
![]() |
4c9303bbd5 | ||
![]() |
84712d2f40 | ||
![]() |
5a2aabea9c | ||
![]() |
23045af4a7 | ||
![]() |
9451920ab5 | ||
![]() |
62f2ee5f60 | ||
![]() |
c8c81d493d | ||
![]() |
d33a3ca90f | ||
![]() |
5b4d2aed64 | ||
![]() |
242aff9269 | ||
![]() |
445ef861c0 | ||
![]() |
03c906a2f1 | ||
![]() |
e0d2e5dcb0 | ||
![]() |
5c1dc60505 | ||
![]() |
f6ce5f2d05 | ||
![]() |
08aa4b098c | ||
![]() |
5123baba3f | ||
![]() |
ede0cfaeb8 | ||
![]() |
34e44e7f3a | ||
![]() |
0cb27ff236 | ||
![]() |
cb450dcebd | ||
![]() |
661570dfad | ||
![]() |
05abf37046 | ||
![]() |
7c79adad8f | ||
![]() |
e0769f9ad4 | ||
![]() |
7d23a734fc | ||
![]() |
4e4fd90455 | ||
![]() |
4517f0d59a | ||
![]() |
c1ceab09e5 | ||
![]() |
609263e1bb | ||
![]() |
f02c5f66d6 | ||
![]() |
82c8f18bc7 | ||
![]() |
a9d16d4276 | ||
![]() |
505de3dce3 | ||
![]() |
52a4c16980 | ||
![]() |
a2ac335222 | ||
![]() |
cd79720a14 | ||
![]() |
576970d1ad | ||
![]() |
9146f76b01 | ||
![]() |
e97d21aec0 | ||
![]() |
097b056324 | ||
![]() |
aece76f6cd | ||
![]() |
7bbffa6e6d | ||
![]() |
ff582721dd | ||
![]() |
3910ab6cab | ||
![]() |
5c83367bb0 | ||
![]() |
433b89de50 | ||
![]() |
4c32fd12fc | ||
![]() |
a3e2504470 | ||
![]() |
d98432c328 | ||
![]() |
1da35e2939 | ||
![]() |
0c49c8578b | ||
![]() |
abd1909e2b | ||
![]() |
86d48c608e | ||
![]() |
a278cf3db2 | ||
![]() |
2cda7bf1e7 | ||
![]() |
7ac014744c | ||
![]() |
51b9afe3c1 | ||
![]() |
397238372e | ||
![]() |
682fcec99e | ||
![]() |
41cd3ba532 | ||
![]() |
426f546c2f | ||
![]() |
2f1824774f | ||
![]() |
999c5443c1 | ||
![]() |
7ec7306ea8 | ||
![]() |
8d68f34650 | ||
![]() |
c1908d16b5 | ||
![]() |
40356b4fc5 | ||
![]() |
f4b3760a1a | ||
![]() |
fa63dc1e25 | ||
![]() |
b9ad40ed38 | ||
![]() |
77b3f31e9b | ||
![]() |
451c6c25cd | ||
![]() |
af021b1c81 | ||
![]() |
4e3b079a29 | ||
![]() |
9a099bdf0a | ||
![]() |
cf8dfdae47 | ||
![]() |
6e95b90f42 | ||
![]() |
d36259f067 | ||
![]() |
d62bb9ed47 | ||
![]() |
ef54f33af7 | ||
![]() |
1391f90a30 | ||
![]() |
2889067ece | ||
![]() |
f4bf66aecd | ||
![]() |
2f80489428 | ||
![]() |
b6e69cd370 | ||
![]() |
f9634f0232 | ||
![]() |
6affb27711 | ||
![]() |
5ec76af875 | ||
![]() |
5b41680506 | ||
![]() |
4f81109304 | ||
![]() |
04763c5bfb | ||
![]() |
e5e38edcb2 | ||
![]() |
e86919a997 | ||
![]() |
d04479044c | ||
![]() |
7737387efe | ||
![]() |
743166d284 | ||
![]() |
5dd031af17 | ||
![]() |
750ed2facd | ||
![]() |
aa972b0005 | ||
![]() |
628f77f8f2 | ||
![]() |
9db3900cff | ||
![]() |
fd5895118e | ||
![]() |
607cdfdd32 | ||
![]() |
460857a765 | ||
![]() |
6bd55011a8 | ||
![]() |
e2a113a2de | ||
![]() |
86f61b8e55 | ||
![]() |
f3fed5647e | ||
![]() |
992daa4a44 | ||
![]() |
26d7b2164e | ||
![]() |
31d150794d | ||
![]() |
7e6e36db15 | ||
![]() |
4f0997f6e9 | ||
![]() |
94b6ab2862 | ||
![]() |
11a25157c1 | ||
![]() |
ff92a8b260 | ||
![]() |
1fe26c77e0 | ||
![]() |
00d5e5cfb2 | ||
![]() |
c968e455a9 | ||
![]() |
a3dd9979d2 | ||
![]() |
6e97975ff8 | ||
![]() |
af7c01f957 | ||
![]() |
29533d8d4d | ||
![]() |
374a8157e7 | ||
![]() |
40fc72aac2 | ||
![]() |
b8fab33e69 | ||
![]() |
221d5205e4 | ||
![]() |
77ebda0c20 | ||
![]() |
ac30e5799c | ||
![]() |
f9a0b4b3cf | ||
![]() |
233568ac29 | ||
![]() |
76b0302c7f | ||
![]() |
8bc542776b | ||
![]() |
5f5cb8bea8 | ||
![]() |
da761fdd39 | ||
![]() |
22415ce49a | ||
![]() |
19be4a5d6d |
163
.coveragerc
163
.coveragerc
@@ -8,32 +8,35 @@ omit =
|
|||||||
homeassistant/scripts/*.py
|
homeassistant/scripts/*.py
|
||||||
|
|
||||||
# omit pieces of code that rely on external devices being present
|
# omit pieces of code that rely on external devices being present
|
||||||
homeassistant/components/abode/__init__.py
|
|
||||||
homeassistant/components/abode/alarm_control_panel.py
|
|
||||||
homeassistant/components/abode/binary_sensor.py
|
|
||||||
homeassistant/components/abode/camera.py
|
|
||||||
homeassistant/components/abode/cover.py
|
|
||||||
homeassistant/components/abode/light.py
|
|
||||||
homeassistant/components/abode/lock.py
|
|
||||||
homeassistant/components/abode/sensor.py
|
|
||||||
homeassistant/components/abode/switch.py
|
|
||||||
homeassistant/components/acer_projector/switch.py
|
homeassistant/components/acer_projector/switch.py
|
||||||
homeassistant/components/actiontec/device_tracker.py
|
homeassistant/components/actiontec/device_tracker.py
|
||||||
|
homeassistant/components/acmeda/__init__.py
|
||||||
|
homeassistant/components/acmeda/base.py
|
||||||
|
homeassistant/components/acmeda/const.py
|
||||||
|
homeassistant/components/acmeda/cover.py
|
||||||
|
homeassistant/components/acmeda/errors.py
|
||||||
|
homeassistant/components/acmeda/helpers.py
|
||||||
|
homeassistant/components/acmeda/hub.py
|
||||||
|
homeassistant/components/acmeda/sensor.py
|
||||||
homeassistant/components/adguard/__init__.py
|
homeassistant/components/adguard/__init__.py
|
||||||
homeassistant/components/adguard/const.py
|
homeassistant/components/adguard/const.py
|
||||||
homeassistant/components/adguard/sensor.py
|
homeassistant/components/adguard/sensor.py
|
||||||
homeassistant/components/adguard/switch.py
|
homeassistant/components/adguard/switch.py
|
||||||
homeassistant/components/ads/*
|
homeassistant/components/ads/*
|
||||||
homeassistant/components/aftership/sensor.py
|
homeassistant/components/aftership/sensor.py
|
||||||
|
homeassistant/components/agent_dvr/__init__.py
|
||||||
|
homeassistant/components/agent_dvr/camera.py
|
||||||
|
homeassistant/components/agent_dvr/const.py
|
||||||
|
homeassistant/components/agent_dvr/helpers.py
|
||||||
homeassistant/components/airly/__init__.py
|
homeassistant/components/airly/__init__.py
|
||||||
homeassistant/components/airly/air_quality.py
|
homeassistant/components/airly/air_quality.py
|
||||||
homeassistant/components/airly/sensor.py
|
homeassistant/components/airly/sensor.py
|
||||||
homeassistant/components/airly/const.py
|
homeassistant/components/airly/const.py
|
||||||
homeassistant/components/airvisual/__init__.py
|
homeassistant/components/airvisual/__init__.py
|
||||||
|
homeassistant/components/airvisual/air_quality.py
|
||||||
homeassistant/components/airvisual/sensor.py
|
homeassistant/components/airvisual/sensor.py
|
||||||
homeassistant/components/aladdin_connect/cover.py
|
homeassistant/components/aladdin_connect/cover.py
|
||||||
homeassistant/components/alarmdecoder/*
|
homeassistant/components/alarmdecoder/*
|
||||||
homeassistant/components/alarmdotcom/alarm_control_panel.py
|
|
||||||
homeassistant/components/alpha_vantage/sensor.py
|
homeassistant/components/alpha_vantage/sensor.py
|
||||||
homeassistant/components/amazon_polly/tts.py
|
homeassistant/components/amazon_polly/tts.py
|
||||||
homeassistant/components/ambiclimate/climate.py
|
homeassistant/components/ambiclimate/climate.py
|
||||||
@@ -55,6 +58,7 @@ omit =
|
|||||||
homeassistant/components/arest/sensor.py
|
homeassistant/components/arest/sensor.py
|
||||||
homeassistant/components/arest/switch.py
|
homeassistant/components/arest/switch.py
|
||||||
homeassistant/components/arlo/*
|
homeassistant/components/arlo/*
|
||||||
|
homeassistant/components/arris_tg2492lg/*
|
||||||
homeassistant/components/aruba/device_tracker.py
|
homeassistant/components/aruba/device_tracker.py
|
||||||
homeassistant/components/arwn/sensor.py
|
homeassistant/components/arwn/sensor.py
|
||||||
homeassistant/components/asterisk_cdr/mailbox.py
|
homeassistant/components/asterisk_cdr/mailbox.py
|
||||||
@@ -62,7 +66,6 @@ omit =
|
|||||||
homeassistant/components/aten_pe/*
|
homeassistant/components/aten_pe/*
|
||||||
homeassistant/components/atome/*
|
homeassistant/components/atome/*
|
||||||
homeassistant/components/aurora_abb_powerone/sensor.py
|
homeassistant/components/aurora_abb_powerone/sensor.py
|
||||||
homeassistant/components/automatic/device_tracker.py
|
|
||||||
homeassistant/components/avea/light.py
|
homeassistant/components/avea/light.py
|
||||||
homeassistant/components/avion/light.py
|
homeassistant/components/avion/light.py
|
||||||
homeassistant/components/avri/sensor.py
|
homeassistant/components/avri/sensor.py
|
||||||
@@ -85,20 +88,25 @@ omit =
|
|||||||
homeassistant/components/bluetooth_tracker/*
|
homeassistant/components/bluetooth_tracker/*
|
||||||
homeassistant/components/bme280/sensor.py
|
homeassistant/components/bme280/sensor.py
|
||||||
homeassistant/components/bme680/sensor.py
|
homeassistant/components/bme680/sensor.py
|
||||||
|
homeassistant/components/bmp280/sensor.py
|
||||||
homeassistant/components/bmw_connected_drive/*
|
homeassistant/components/bmw_connected_drive/*
|
||||||
homeassistant/components/bom/camera.py
|
homeassistant/components/bom/camera.py
|
||||||
homeassistant/components/bom/sensor.py
|
homeassistant/components/bom/sensor.py
|
||||||
homeassistant/components/bom/weather.py
|
homeassistant/components/bom/weather.py
|
||||||
|
homeassistant/components/braviatv/__init__.py
|
||||||
|
homeassistant/components/braviatv/const.py
|
||||||
homeassistant/components/braviatv/media_player.py
|
homeassistant/components/braviatv/media_player.py
|
||||||
|
homeassistant/components/broadlink/const.py
|
||||||
|
homeassistant/components/broadlink/device.py
|
||||||
homeassistant/components/broadlink/remote.py
|
homeassistant/components/broadlink/remote.py
|
||||||
homeassistant/components/broadlink/sensor.py
|
homeassistant/components/broadlink/sensor.py
|
||||||
homeassistant/components/broadlink/switch.py
|
homeassistant/components/broadlink/switch.py
|
||||||
homeassistant/components/brother/__init__.py
|
|
||||||
homeassistant/components/brother/sensor.py
|
|
||||||
homeassistant/components/brother/const.py
|
|
||||||
homeassistant/components/brottsplatskartan/sensor.py
|
homeassistant/components/brottsplatskartan/sensor.py
|
||||||
homeassistant/components/browser/*
|
homeassistant/components/browser/*
|
||||||
homeassistant/components/brunt/cover.py
|
homeassistant/components/brunt/cover.py
|
||||||
|
homeassistant/components/bsblan/__init__.py
|
||||||
|
homeassistant/components/bsblan/climate.py
|
||||||
|
homeassistant/components/bsblan/const.py
|
||||||
homeassistant/components/bt_home_hub_5/device_tracker.py
|
homeassistant/components/bt_home_hub_5/device_tracker.py
|
||||||
homeassistant/components/bt_smarthub/device_tracker.py
|
homeassistant/components/bt_smarthub/device_tracker.py
|
||||||
homeassistant/components/buienradar/sensor.py
|
homeassistant/components/buienradar/sensor.py
|
||||||
@@ -110,6 +118,7 @@ omit =
|
|||||||
homeassistant/components/cast/*
|
homeassistant/components/cast/*
|
||||||
homeassistant/components/cert_expiry/helper.py
|
homeassistant/components/cert_expiry/helper.py
|
||||||
homeassistant/components/channels/*
|
homeassistant/components/channels/*
|
||||||
|
homeassistant/components/circuit/*
|
||||||
homeassistant/components/cisco_ios/device_tracker.py
|
homeassistant/components/cisco_ios/device_tracker.py
|
||||||
homeassistant/components/cisco_mobility_express/device_tracker.py
|
homeassistant/components/cisco_mobility_express/device_tracker.py
|
||||||
homeassistant/components/cisco_webex_teams/notify.py
|
homeassistant/components/cisco_webex_teams/notify.py
|
||||||
@@ -146,6 +155,9 @@ omit =
|
|||||||
homeassistant/components/denon/media_player.py
|
homeassistant/components/denon/media_player.py
|
||||||
homeassistant/components/denonavr/media_player.py
|
homeassistant/components/denonavr/media_player.py
|
||||||
homeassistant/components/deutsche_bahn/sensor.py
|
homeassistant/components/deutsche_bahn/sensor.py
|
||||||
|
homeassistant/components/devolo_home_control/__init__.py
|
||||||
|
homeassistant/components/devolo_home_control/const.py
|
||||||
|
homeassistant/components/devolo_home_control/switch.py
|
||||||
homeassistant/components/dht/sensor.py
|
homeassistant/components/dht/sensor.py
|
||||||
homeassistant/components/digital_ocean/*
|
homeassistant/components/digital_ocean/*
|
||||||
homeassistant/components/digitalloggers/switch.py
|
homeassistant/components/digitalloggers/switch.py
|
||||||
@@ -164,6 +176,8 @@ omit =
|
|||||||
homeassistant/components/dsmr_reader/*
|
homeassistant/components/dsmr_reader/*
|
||||||
homeassistant/components/dte_energy_bridge/sensor.py
|
homeassistant/components/dte_energy_bridge/sensor.py
|
||||||
homeassistant/components/dublin_bus_transport/sensor.py
|
homeassistant/components/dublin_bus_transport/sensor.py
|
||||||
|
homeassistant/components/dunehd/__init__.py
|
||||||
|
homeassistant/components/dunehd/const.py
|
||||||
homeassistant/components/dunehd/media_player.py
|
homeassistant/components/dunehd/media_player.py
|
||||||
homeassistant/components/dwd_weather_warnings/sensor.py
|
homeassistant/components/dwd_weather_warnings/sensor.py
|
||||||
homeassistant/components/dweet/*
|
homeassistant/components/dweet/*
|
||||||
@@ -229,8 +243,12 @@ omit =
|
|||||||
homeassistant/components/fleetgo/device_tracker.py
|
homeassistant/components/fleetgo/device_tracker.py
|
||||||
homeassistant/components/flexit/climate.py
|
homeassistant/components/flexit/climate.py
|
||||||
homeassistant/components/flic/binary_sensor.py
|
homeassistant/components/flic/binary_sensor.py
|
||||||
|
homeassistant/components/flick_electric/__init__.py
|
||||||
|
homeassistant/components/flick_electric/const.py
|
||||||
|
homeassistant/components/flick_electric/sensor.py
|
||||||
homeassistant/components/flock/notify.py
|
homeassistant/components/flock/notify.py
|
||||||
homeassistant/components/flume/*
|
homeassistant/components/flume/*
|
||||||
|
homeassistant/components/flunearyou/__init__.py
|
||||||
homeassistant/components/flunearyou/sensor.py
|
homeassistant/components/flunearyou/sensor.py
|
||||||
homeassistant/components/flux_led/light.py
|
homeassistant/components/flux_led/light.py
|
||||||
homeassistant/components/folder/sensor.py
|
homeassistant/components/folder/sensor.py
|
||||||
@@ -242,9 +260,12 @@ omit =
|
|||||||
homeassistant/components/foscam/const.py
|
homeassistant/components/foscam/const.py
|
||||||
homeassistant/components/foursquare/*
|
homeassistant/components/foursquare/*
|
||||||
homeassistant/components/free_mobile/notify.py
|
homeassistant/components/free_mobile/notify.py
|
||||||
homeassistant/components/freebox/*
|
homeassistant/components/freebox/__init__.py
|
||||||
|
homeassistant/components/freebox/device_tracker.py
|
||||||
|
homeassistant/components/freebox/router.py
|
||||||
|
homeassistant/components/freebox/sensor.py
|
||||||
|
homeassistant/components/freebox/switch.py
|
||||||
homeassistant/components/fritz/device_tracker.py
|
homeassistant/components/fritz/device_tracker.py
|
||||||
homeassistant/components/fritzbox/*
|
|
||||||
homeassistant/components/fritzbox_callmonitor/sensor.py
|
homeassistant/components/fritzbox_callmonitor/sensor.py
|
||||||
homeassistant/components/fritzbox_netmonitor/sensor.py
|
homeassistant/components/fritzbox_netmonitor/sensor.py
|
||||||
homeassistant/components/fronius/sensor.py
|
homeassistant/components/fronius/sensor.py
|
||||||
@@ -256,7 +277,6 @@ omit =
|
|||||||
homeassistant/components/garmin_connect/sensor.py
|
homeassistant/components/garmin_connect/sensor.py
|
||||||
homeassistant/components/gc100/*
|
homeassistant/components/gc100/*
|
||||||
homeassistant/components/geniushub/*
|
homeassistant/components/geniushub/*
|
||||||
homeassistant/components/gearbest/sensor.py
|
|
||||||
homeassistant/components/geizhals/sensor.py
|
homeassistant/components/geizhals/sensor.py
|
||||||
homeassistant/components/gios/__init__.py
|
homeassistant/components/gios/__init__.py
|
||||||
homeassistant/components/gios/air_quality.py
|
homeassistant/components/gios/air_quality.py
|
||||||
@@ -267,7 +287,6 @@ omit =
|
|||||||
homeassistant/components/glances/sensor.py
|
homeassistant/components/glances/sensor.py
|
||||||
homeassistant/components/gntp/notify.py
|
homeassistant/components/gntp/notify.py
|
||||||
homeassistant/components/goalfeed/*
|
homeassistant/components/goalfeed/*
|
||||||
homeassistant/components/gogogate2/cover.py
|
|
||||||
homeassistant/components/google/*
|
homeassistant/components/google/*
|
||||||
homeassistant/components/google_cloud/tts.py
|
homeassistant/components/google_cloud/tts.py
|
||||||
homeassistant/components/google_maps/device_tracker.py
|
homeassistant/components/google_maps/device_tracker.py
|
||||||
@@ -281,6 +300,10 @@ omit =
|
|||||||
homeassistant/components/growatt_server/sensor.py
|
homeassistant/components/growatt_server/sensor.py
|
||||||
homeassistant/components/gstreamer/media_player.py
|
homeassistant/components/gstreamer/media_player.py
|
||||||
homeassistant/components/gtfs/sensor.py
|
homeassistant/components/gtfs/sensor.py
|
||||||
|
homeassistant/components/guardian/__init__.py
|
||||||
|
homeassistant/components/guardian/binary_sensor.py
|
||||||
|
homeassistant/components/guardian/sensor.py
|
||||||
|
homeassistant/components/guardian/switch.py
|
||||||
homeassistant/components/habitica/*
|
homeassistant/components/habitica/*
|
||||||
homeassistant/components/hangouts/*
|
homeassistant/components/hangouts/*
|
||||||
homeassistant/components/hangouts/__init__.py
|
homeassistant/components/hangouts/__init__.py
|
||||||
@@ -298,6 +321,7 @@ omit =
|
|||||||
homeassistant/components/hitron_coda/device_tracker.py
|
homeassistant/components/hitron_coda/device_tracker.py
|
||||||
homeassistant/components/hive/*
|
homeassistant/components/hive/*
|
||||||
homeassistant/components/hlk_sw16/*
|
homeassistant/components/hlk_sw16/*
|
||||||
|
homeassistant/components/home_connect/*
|
||||||
homeassistant/components/homematic/*
|
homeassistant/components/homematic/*
|
||||||
homeassistant/components/homematic/climate.py
|
homeassistant/components/homematic/climate.py
|
||||||
homeassistant/components/homematic/cover.py
|
homeassistant/components/homematic/cover.py
|
||||||
@@ -310,7 +334,11 @@ omit =
|
|||||||
homeassistant/components/huawei_lte/*
|
homeassistant/components/huawei_lte/*
|
||||||
homeassistant/components/huawei_router/device_tracker.py
|
homeassistant/components/huawei_router/device_tracker.py
|
||||||
homeassistant/components/hue/light.py
|
homeassistant/components/hue/light.py
|
||||||
|
homeassistant/components/hunterdouglas_powerview/__init__.py
|
||||||
homeassistant/components/hunterdouglas_powerview/scene.py
|
homeassistant/components/hunterdouglas_powerview/scene.py
|
||||||
|
homeassistant/components/hunterdouglas_powerview/sensor.py
|
||||||
|
homeassistant/components/hunterdouglas_powerview/cover.py
|
||||||
|
homeassistant/components/hunterdouglas_powerview/entity.py
|
||||||
homeassistant/components/hydrawise/*
|
homeassistant/components/hydrawise/*
|
||||||
homeassistant/components/hyperion/light.py
|
homeassistant/components/hyperion/light.py
|
||||||
homeassistant/components/ialarm/alarm_control_panel.py
|
homeassistant/components/ialarm/alarm_control_panel.py
|
||||||
@@ -343,11 +371,27 @@ omit =
|
|||||||
homeassistant/components/iqvia/*
|
homeassistant/components/iqvia/*
|
||||||
homeassistant/components/irish_rail_transport/sensor.py
|
homeassistant/components/irish_rail_transport/sensor.py
|
||||||
homeassistant/components/iss/binary_sensor.py
|
homeassistant/components/iss/binary_sensor.py
|
||||||
homeassistant/components/isy994/*
|
homeassistant/components/isy994/__init__.py
|
||||||
|
homeassistant/components/isy994/binary_sensor.py
|
||||||
|
homeassistant/components/isy994/climate.py
|
||||||
|
homeassistant/components/isy994/cover.py
|
||||||
|
homeassistant/components/isy994/entity.py
|
||||||
|
homeassistant/components/isy994/fan.py
|
||||||
|
homeassistant/components/isy994/helpers.py
|
||||||
|
homeassistant/components/isy994/light.py
|
||||||
|
homeassistant/components/isy994/lock.py
|
||||||
|
homeassistant/components/isy994/sensor.py
|
||||||
|
homeassistant/components/isy994/services.py
|
||||||
|
homeassistant/components/isy994/switch.py
|
||||||
homeassistant/components/itach/remote.py
|
homeassistant/components/itach/remote.py
|
||||||
homeassistant/components/itunes/media_player.py
|
homeassistant/components/itunes/media_player.py
|
||||||
homeassistant/components/joaoapps_join/*
|
homeassistant/components/joaoapps_join/*
|
||||||
homeassistant/components/juicenet/*
|
homeassistant/components/juicenet/__init__.py
|
||||||
|
homeassistant/components/juicenet/const.py
|
||||||
|
homeassistant/components/juicenet/device.py
|
||||||
|
homeassistant/components/juicenet/entity.py
|
||||||
|
homeassistant/components/juicenet/sensor.py
|
||||||
|
homeassistant/components/juicenet/switch.py
|
||||||
homeassistant/components/kaiterra/*
|
homeassistant/components/kaiterra/*
|
||||||
homeassistant/components/kankun/switch.py
|
homeassistant/components/kankun/switch.py
|
||||||
homeassistant/components/keba/*
|
homeassistant/components/keba/*
|
||||||
@@ -398,7 +442,13 @@ omit =
|
|||||||
homeassistant/components/luftdaten/*
|
homeassistant/components/luftdaten/*
|
||||||
homeassistant/components/lupusec/*
|
homeassistant/components/lupusec/*
|
||||||
homeassistant/components/lutron/*
|
homeassistant/components/lutron/*
|
||||||
homeassistant/components/lutron_caseta/*
|
homeassistant/components/lutron_caseta/__init__.py
|
||||||
|
homeassistant/components/lutron_caseta/binary_sensor.py
|
||||||
|
homeassistant/components/lutron_caseta/cover.py
|
||||||
|
homeassistant/components/lutron_caseta/fan.py
|
||||||
|
homeassistant/components/lutron_caseta/light.py
|
||||||
|
homeassistant/components/lutron_caseta/scene.py
|
||||||
|
homeassistant/components/lutron_caseta/switch.py
|
||||||
homeassistant/components/lw12wifi/light.py
|
homeassistant/components/lw12wifi/light.py
|
||||||
homeassistant/components/lyft/sensor.py
|
homeassistant/components/lyft/sensor.py
|
||||||
homeassistant/components/magicseaweed/sensor.py
|
homeassistant/components/magicseaweed/sensor.py
|
||||||
@@ -428,11 +478,13 @@ omit =
|
|||||||
homeassistant/components/miflora/sensor.py
|
homeassistant/components/miflora/sensor.py
|
||||||
homeassistant/components/mikrotik/hub.py
|
homeassistant/components/mikrotik/hub.py
|
||||||
homeassistant/components/mikrotik/device_tracker.py
|
homeassistant/components/mikrotik/device_tracker.py
|
||||||
|
homeassistant/components/mill/__init__.py
|
||||||
homeassistant/components/mill/climate.py
|
homeassistant/components/mill/climate.py
|
||||||
homeassistant/components/mill/const.py
|
homeassistant/components/mill/const.py
|
||||||
homeassistant/components/minecraft_server/__init__.py
|
homeassistant/components/minecraft_server/__init__.py
|
||||||
homeassistant/components/minecraft_server/binary_sensor.py
|
homeassistant/components/minecraft_server/binary_sensor.py
|
||||||
homeassistant/components/minecraft_server/const.py
|
homeassistant/components/minecraft_server/const.py
|
||||||
|
homeassistant/components/minecraft_server/helpers.py
|
||||||
homeassistant/components/minecraft_server/sensor.py
|
homeassistant/components/minecraft_server/sensor.py
|
||||||
homeassistant/components/minio/*
|
homeassistant/components/minio/*
|
||||||
homeassistant/components/mitemp_bt/sensor.py
|
homeassistant/components/mitemp_bt/sensor.py
|
||||||
@@ -441,7 +493,6 @@ omit =
|
|||||||
homeassistant/components/mochad/*
|
homeassistant/components/mochad/*
|
||||||
homeassistant/components/modbus/*
|
homeassistant/components/modbus/*
|
||||||
homeassistant/components/modem_callerid/sensor.py
|
homeassistant/components/modem_callerid/sensor.py
|
||||||
homeassistant/components/mopar/*
|
|
||||||
homeassistant/components/mpchc/media_player.py
|
homeassistant/components/mpchc/media_player.py
|
||||||
homeassistant/components/mpd/media_player.py
|
homeassistant/components/mpd/media_player.py
|
||||||
homeassistant/components/mqtt_room/sensor.py
|
homeassistant/components/mqtt_room/sensor.py
|
||||||
@@ -450,7 +501,6 @@ omit =
|
|||||||
homeassistant/components/mychevy/*
|
homeassistant/components/mychevy/*
|
||||||
homeassistant/components/mycroft/*
|
homeassistant/components/mycroft/*
|
||||||
homeassistant/components/mycroft/notify.py
|
homeassistant/components/mycroft/notify.py
|
||||||
homeassistant/components/myq/cover.py
|
|
||||||
homeassistant/components/mysensors/*
|
homeassistant/components/mysensors/*
|
||||||
homeassistant/components/mystrom/binary_sensor.py
|
homeassistant/components/mystrom/binary_sensor.py
|
||||||
homeassistant/components/mystrom/light.py
|
homeassistant/components/mystrom/light.py
|
||||||
@@ -476,6 +526,7 @@ omit =
|
|||||||
homeassistant/components/netgear_lte/*
|
homeassistant/components/netgear_lte/*
|
||||||
homeassistant/components/netio/switch.py
|
homeassistant/components/netio/switch.py
|
||||||
homeassistant/components/neurio_energy/sensor.py
|
homeassistant/components/neurio_energy/sensor.py
|
||||||
|
homeassistant/components/nextcloud/*
|
||||||
homeassistant/components/nfandroidtv/notify.py
|
homeassistant/components/nfandroidtv/notify.py
|
||||||
homeassistant/components/niko_home_control/light.py
|
homeassistant/components/niko_home_control/light.py
|
||||||
homeassistant/components/nilu/air_quality.py
|
homeassistant/components/nilu/air_quality.py
|
||||||
@@ -502,12 +553,21 @@ omit =
|
|||||||
homeassistant/components/ombi/*
|
homeassistant/components/ombi/*
|
||||||
homeassistant/components/onewire/sensor.py
|
homeassistant/components/onewire/sensor.py
|
||||||
homeassistant/components/onkyo/media_player.py
|
homeassistant/components/onkyo/media_player.py
|
||||||
|
homeassistant/components/onvif/__init__.py
|
||||||
|
homeassistant/components/onvif/base.py
|
||||||
|
homeassistant/components/onvif/binary_sensor.py
|
||||||
homeassistant/components/onvif/camera.py
|
homeassistant/components/onvif/camera.py
|
||||||
|
homeassistant/components/onvif/device.py
|
||||||
|
homeassistant/components/onvif/event.py
|
||||||
|
homeassistant/components/onvif/parsers.py
|
||||||
|
homeassistant/components/onvif/sensor.py
|
||||||
homeassistant/components/opencv/*
|
homeassistant/components/opencv/*
|
||||||
homeassistant/components/openevse/sensor.py
|
homeassistant/components/openevse/sensor.py
|
||||||
homeassistant/components/openexchangerates/sensor.py
|
homeassistant/components/openexchangerates/sensor.py
|
||||||
homeassistant/components/opengarage/cover.py
|
homeassistant/components/opengarage/cover.py
|
||||||
|
homeassistant/components/openhome/__init__.py
|
||||||
homeassistant/components/openhome/media_player.py
|
homeassistant/components/openhome/media_player.py
|
||||||
|
homeassistant/components/openhome/const.py
|
||||||
homeassistant/components/opensensemap/air_quality.py
|
homeassistant/components/opensensemap/air_quality.py
|
||||||
homeassistant/components/opensky/sensor.py
|
homeassistant/components/opensky/sensor.py
|
||||||
homeassistant/components/opentherm_gw/__init__.py
|
homeassistant/components/opentherm_gw/__init__.py
|
||||||
@@ -533,6 +593,8 @@ omit =
|
|||||||
homeassistant/components/pencom/switch.py
|
homeassistant/components/pencom/switch.py
|
||||||
homeassistant/components/philips_js/media_player.py
|
homeassistant/components/philips_js/media_player.py
|
||||||
homeassistant/components/pi_hole/sensor.py
|
homeassistant/components/pi_hole/sensor.py
|
||||||
|
homeassistant/components/pi4ioe5v9xxxx/binary_sensor.py
|
||||||
|
homeassistant/components/pi4ioe5v9xxxx/switch.py
|
||||||
homeassistant/components/picotts/tts.py
|
homeassistant/components/picotts/tts.py
|
||||||
homeassistant/components/piglow/light.py
|
homeassistant/components/piglow/light.py
|
||||||
homeassistant/components/pilight/*
|
homeassistant/components/pilight/*
|
||||||
@@ -543,7 +605,11 @@ omit =
|
|||||||
homeassistant/components/plaato/*
|
homeassistant/components/plaato/*
|
||||||
homeassistant/components/plex/media_player.py
|
homeassistant/components/plex/media_player.py
|
||||||
homeassistant/components/plex/sensor.py
|
homeassistant/components/plex/sensor.py
|
||||||
homeassistant/components/plugwise/*
|
homeassistant/components/plugwise/__init__.py
|
||||||
|
homeassistant/components/plugwise/binary_sensor.py
|
||||||
|
homeassistant/components/plugwise/climate.py
|
||||||
|
homeassistant/components/plugwise/sensor.py
|
||||||
|
homeassistant/components/plugwise/switch.py
|
||||||
homeassistant/components/plum_lightpad/*
|
homeassistant/components/plum_lightpad/*
|
||||||
homeassistant/components/pocketcasts/sensor.py
|
homeassistant/components/pocketcasts/sensor.py
|
||||||
homeassistant/components/point/*
|
homeassistant/components/point/*
|
||||||
@@ -557,7 +623,6 @@ omit =
|
|||||||
homeassistant/components/pulseaudio_loopback/switch.py
|
homeassistant/components/pulseaudio_loopback/switch.py
|
||||||
homeassistant/components/pushbullet/notify.py
|
homeassistant/components/pushbullet/notify.py
|
||||||
homeassistant/components/pushbullet/sensor.py
|
homeassistant/components/pushbullet/sensor.py
|
||||||
homeassistant/components/pushetta/notify.py
|
|
||||||
homeassistant/components/pushover/notify.py
|
homeassistant/components/pushover/notify.py
|
||||||
homeassistant/components/pushsafer/notify.py
|
homeassistant/components/pushsafer/notify.py
|
||||||
homeassistant/components/pvoutput/sensor.py
|
homeassistant/components/pvoutput/sensor.py
|
||||||
@@ -567,7 +632,6 @@ omit =
|
|||||||
homeassistant/components/qrcode/image_processing.py
|
homeassistant/components/qrcode/image_processing.py
|
||||||
homeassistant/components/quantum_gateway/device_tracker.py
|
homeassistant/components/quantum_gateway/device_tracker.py
|
||||||
homeassistant/components/qvr_pro/*
|
homeassistant/components/qvr_pro/*
|
||||||
homeassistant/components/qwikswitch/*
|
|
||||||
homeassistant/components/rachio/*
|
homeassistant/components/rachio/*
|
||||||
homeassistant/components/radarr/sensor.py
|
homeassistant/components/radarr/sensor.py
|
||||||
homeassistant/components/radiotherm/climate.py
|
homeassistant/components/radiotherm/climate.py
|
||||||
@@ -597,11 +661,15 @@ omit =
|
|||||||
homeassistant/components/ring/camera.py
|
homeassistant/components/ring/camera.py
|
||||||
homeassistant/components/ripple/sensor.py
|
homeassistant/components/ripple/sensor.py
|
||||||
homeassistant/components/rocketchat/notify.py
|
homeassistant/components/rocketchat/notify.py
|
||||||
homeassistant/components/roku/*
|
homeassistant/components/roomba/binary_sensor.py
|
||||||
|
homeassistant/components/roomba/braava.py
|
||||||
|
homeassistant/components/roomba/irobot_base.py
|
||||||
|
homeassistant/components/roomba/roomba.py
|
||||||
|
homeassistant/components/roomba/sensor.py
|
||||||
homeassistant/components/roomba/vacuum.py
|
homeassistant/components/roomba/vacuum.py
|
||||||
homeassistant/components/route53/*
|
homeassistant/components/route53/*
|
||||||
homeassistant/components/rova/sensor.py
|
homeassistant/components/rova/sensor.py
|
||||||
homeassistant/components/rpi_camera/camera.py
|
homeassistant/components/rpi_camera/*
|
||||||
homeassistant/components/rpi_gpio/*
|
homeassistant/components/rpi_gpio/*
|
||||||
homeassistant/components/rpi_gpio/cover.py
|
homeassistant/components/rpi_gpio/cover.py
|
||||||
homeassistant/components/rpi_gpio_pwm/light.py
|
homeassistant/components/rpi_gpio_pwm/light.py
|
||||||
@@ -614,6 +682,7 @@ omit =
|
|||||||
homeassistant/components/saj/sensor.py
|
homeassistant/components/saj/sensor.py
|
||||||
homeassistant/components/salt/device_tracker.py
|
homeassistant/components/salt/device_tracker.py
|
||||||
homeassistant/components/satel_integra/*
|
homeassistant/components/satel_integra/*
|
||||||
|
homeassistant/components/schluter/*
|
||||||
homeassistant/components/scrape/sensor.py
|
homeassistant/components/scrape/sensor.py
|
||||||
homeassistant/components/scsgate/*
|
homeassistant/components/scsgate/*
|
||||||
homeassistant/components/scsgate/cover.py
|
homeassistant/components/scsgate/cover.py
|
||||||
@@ -650,7 +719,7 @@ omit =
|
|||||||
homeassistant/components/smarthab/*
|
homeassistant/components/smarthab/*
|
||||||
homeassistant/components/sms/*
|
homeassistant/components/sms/*
|
||||||
homeassistant/components/smtp/notify.py
|
homeassistant/components/smtp/notify.py
|
||||||
homeassistant/components/snapcast/media_player.py
|
homeassistant/components/snapcast/*
|
||||||
homeassistant/components/snmp/*
|
homeassistant/components/snmp/*
|
||||||
homeassistant/components/sochain/sensor.py
|
homeassistant/components/sochain/sensor.py
|
||||||
homeassistant/components/socialblade/sensor.py
|
homeassistant/components/socialblade/sensor.py
|
||||||
@@ -663,8 +732,6 @@ omit =
|
|||||||
homeassistant/components/soma/__init__.py
|
homeassistant/components/soma/__init__.py
|
||||||
homeassistant/components/somfy/*
|
homeassistant/components/somfy/*
|
||||||
homeassistant/components/somfy_mylink/*
|
homeassistant/components/somfy_mylink/*
|
||||||
homeassistant/components/sonarr/sensor.py
|
|
||||||
homeassistant/components/songpal/*
|
|
||||||
homeassistant/components/sonos/*
|
homeassistant/components/sonos/*
|
||||||
homeassistant/components/sony_projector/switch.py
|
homeassistant/components/sony_projector/switch.py
|
||||||
homeassistant/components/spc/*
|
homeassistant/components/spc/*
|
||||||
@@ -679,6 +746,7 @@ omit =
|
|||||||
homeassistant/components/steam_online/sensor.py
|
homeassistant/components/steam_online/sensor.py
|
||||||
homeassistant/components/stiebel_eltron/*
|
homeassistant/components/stiebel_eltron/*
|
||||||
homeassistant/components/stookalert/*
|
homeassistant/components/stookalert/*
|
||||||
|
homeassistant/components/stream/*
|
||||||
homeassistant/components/streamlabswater/*
|
homeassistant/components/streamlabswater/*
|
||||||
homeassistant/components/suez_water/*
|
homeassistant/components/suez_water/*
|
||||||
homeassistant/components/supervisord/sensor.py
|
homeassistant/components/supervisord/sensor.py
|
||||||
@@ -692,8 +760,10 @@ omit =
|
|||||||
homeassistant/components/syncthru/sensor.py
|
homeassistant/components/syncthru/sensor.py
|
||||||
homeassistant/components/synology/camera.py
|
homeassistant/components/synology/camera.py
|
||||||
homeassistant/components/synology_chat/notify.py
|
homeassistant/components/synology_chat/notify.py
|
||||||
|
homeassistant/components/synology_dsm/__init__.py
|
||||||
|
homeassistant/components/synology_dsm/binary_sensor.py
|
||||||
|
homeassistant/components/synology_dsm/sensor.py
|
||||||
homeassistant/components/synology_srm/device_tracker.py
|
homeassistant/components/synology_srm/device_tracker.py
|
||||||
homeassistant/components/synologydsm/sensor.py
|
|
||||||
homeassistant/components/syslog/notify.py
|
homeassistant/components/syslog/notify.py
|
||||||
homeassistant/components/systemmonitor/sensor.py
|
homeassistant/components/systemmonitor/sensor.py
|
||||||
homeassistant/components/tado/*
|
homeassistant/components/tado/*
|
||||||
@@ -764,6 +834,10 @@ omit =
|
|||||||
homeassistant/components/ubus/device_tracker.py
|
homeassistant/components/ubus/device_tracker.py
|
||||||
homeassistant/components/ue_smart_radio/media_player.py
|
homeassistant/components/ue_smart_radio/media_player.py
|
||||||
homeassistant/components/unifiled/*
|
homeassistant/components/unifiled/*
|
||||||
|
homeassistant/components/upb/__init__.py
|
||||||
|
homeassistant/components/upb/const.py
|
||||||
|
homeassistant/components/upb/light.py
|
||||||
|
homeassistant/components/upb/scene.py
|
||||||
homeassistant/components/upcloud/*
|
homeassistant/components/upcloud/*
|
||||||
homeassistant/components/upnp/*
|
homeassistant/components/upnp/*
|
||||||
homeassistant/components/upc_connect/*
|
homeassistant/components/upc_connect/*
|
||||||
@@ -807,20 +881,28 @@ omit =
|
|||||||
homeassistant/components/webostv/*
|
homeassistant/components/webostv/*
|
||||||
homeassistant/components/wemo/*
|
homeassistant/components/wemo/*
|
||||||
homeassistant/components/whois/sensor.py
|
homeassistant/components/whois/sensor.py
|
||||||
|
homeassistant/components/wiffi/*
|
||||||
homeassistant/components/wink/*
|
homeassistant/components/wink/*
|
||||||
homeassistant/components/wirelesstag/*
|
homeassistant/components/wirelesstag/*
|
||||||
homeassistant/components/worldtidesinfo/sensor.py
|
homeassistant/components/worldtidesinfo/sensor.py
|
||||||
homeassistant/components/worxlandroid/sensor.py
|
homeassistant/components/worxlandroid/sensor.py
|
||||||
homeassistant/components/wunderlist/*
|
|
||||||
homeassistant/components/wwlln/__init__.py
|
|
||||||
homeassistant/components/wwlln/geo_location.py
|
|
||||||
homeassistant/components/x10/light.py
|
homeassistant/components/x10/light.py
|
||||||
homeassistant/components/xbox_live/sensor.py
|
homeassistant/components/xbox_live/sensor.py
|
||||||
homeassistant/components/xeoma/camera.py
|
homeassistant/components/xeoma/camera.py
|
||||||
homeassistant/components/xfinity/device_tracker.py
|
homeassistant/components/xfinity/device_tracker.py
|
||||||
homeassistant/components/xiaomi/camera.py
|
homeassistant/components/xiaomi/camera.py
|
||||||
homeassistant/components/xiaomi_aqara/*
|
homeassistant/components/xiaomi_aqara/*
|
||||||
homeassistant/components/xiaomi_miio/*
|
homeassistant/components/xiaomi_miio/__init__.py
|
||||||
|
homeassistant/components/xiaomi_miio/air_quality.py
|
||||||
|
homeassistant/components/xiaomi_miio/alarm_control_panel.py
|
||||||
|
homeassistant/components/xiaomi_miio/device_tracker.py
|
||||||
|
homeassistant/components/xiaomi_miio/fan.py
|
||||||
|
homeassistant/components/xiaomi_miio/gateway.py
|
||||||
|
homeassistant/components/xiaomi_miio/light.py
|
||||||
|
homeassistant/components/xiaomi_miio/remote.py
|
||||||
|
homeassistant/components/xiaomi_miio/sensor.py
|
||||||
|
homeassistant/components/xiaomi_miio/switch.py
|
||||||
|
homeassistant/components/xiaomi_miio/vacuum.py
|
||||||
homeassistant/components/xiaomi_tv/media_player.py
|
homeassistant/components/xiaomi_tv/media_player.py
|
||||||
homeassistant/components/xmpp/notify.py
|
homeassistant/components/xmpp/notify.py
|
||||||
homeassistant/components/xs1/*
|
homeassistant/components/xs1/*
|
||||||
@@ -835,8 +917,9 @@ omit =
|
|||||||
homeassistant/components/zamg/weather.py
|
homeassistant/components/zamg/weather.py
|
||||||
homeassistant/components/zengge/light.py
|
homeassistant/components/zengge/light.py
|
||||||
homeassistant/components/zeroconf/*
|
homeassistant/components/zeroconf/*
|
||||||
|
homeassistant/components/zerproc/__init__.py
|
||||||
|
homeassistant/components/zerproc/const.py
|
||||||
homeassistant/components/zestimate/sensor.py
|
homeassistant/components/zestimate/sensor.py
|
||||||
homeassistant/components/zha/__init__.py
|
|
||||||
homeassistant/components/zha/api.py
|
homeassistant/components/zha/api.py
|
||||||
homeassistant/components/zha/core/channels/*
|
homeassistant/components/zha/core/channels/*
|
||||||
homeassistant/components/zha/core/const.py
|
homeassistant/components/zha/core/const.py
|
||||||
@@ -850,11 +933,15 @@ omit =
|
|||||||
homeassistant/components/zha/light.py
|
homeassistant/components/zha/light.py
|
||||||
homeassistant/components/zha/sensor.py
|
homeassistant/components/zha/sensor.py
|
||||||
homeassistant/components/zhong_hong/climate.py
|
homeassistant/components/zhong_hong/climate.py
|
||||||
homeassistant/components/zigbee/*
|
homeassistant/components/xbee/*
|
||||||
homeassistant/components/ziggo_mediabox_xl/media_player.py
|
homeassistant/components/ziggo_mediabox_xl/media_player.py
|
||||||
homeassistant/components/zoneminder/*
|
homeassistant/components/zoneminder/*
|
||||||
homeassistant/components/supla/*
|
homeassistant/components/supla/*
|
||||||
homeassistant/components/zwave/util.py
|
homeassistant/components/zwave/util.py
|
||||||
|
homeassistant/components/ozw/__init__.py
|
||||||
|
homeassistant/components/ozw/discovery.py
|
||||||
|
homeassistant/components/ozw/entity.py
|
||||||
|
homeassistant/components/ozw/services.py
|
||||||
|
|
||||||
[report]
|
[report]
|
||||||
# Regexes for lines to exclude from consideration
|
# Regexes for lines to exclude from consideration
|
||||||
|
49
.github/ISSUE_TEMPLATE.md
vendored
Normal file
49
.github/ISSUE_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
<!-- READ THIS FIRST:
|
||||||
|
- If you need additional help with this template, please refer to https://www.home-assistant.io/help/reporting_issues/
|
||||||
|
- Make sure you are running the latest version of Home Assistant before reporting an issue: https://github.com/home-assistant/core/releases
|
||||||
|
- Do not report issues for integrations if you are using custom components or integrations.
|
||||||
|
- Provide as many details as possible. Paste logs, configuration samples and code into the backticks.
|
||||||
|
DO NOT DELETE ANY TEXT from this template! Otherwise, your issue may be closed without comment.
|
||||||
|
-->
|
||||||
|
## The problem
|
||||||
|
<!--
|
||||||
|
Describe the issue you are experiencing here to communicate to the
|
||||||
|
maintainers. Tell us what you were trying to do and what happened.
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
## Environment
|
||||||
|
<!--
|
||||||
|
Provide details about the versions you are using, which helps us to reproduce
|
||||||
|
and find the issue quicker. Version information is found in the
|
||||||
|
Home Assistant frontend: Developer tools -> Info.
|
||||||
|
-->
|
||||||
|
|
||||||
|
- Home Assistant Core release with the issue:
|
||||||
|
- Last working Home Assistant Core release (if known):
|
||||||
|
- Operating environment (Home Assistant/Supervised/Docker/venv):
|
||||||
|
- Integration causing this issue:
|
||||||
|
- Link to integration documentation on our website:
|
||||||
|
|
||||||
|
## Problem-relevant `configuration.yaml`
|
||||||
|
<!--
|
||||||
|
An example configuration that caused the problem for you. Fill this out even
|
||||||
|
if it seems unimportant to you. Please be sure to remove personal information
|
||||||
|
like passwords, private URLs and other credentials.
|
||||||
|
-->
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Traceback/Error logs
|
||||||
|
<!--
|
||||||
|
If you come across any trace or error logs, please provide them.
|
||||||
|
-->
|
||||||
|
|
||||||
|
```txt
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Additional information
|
||||||
|
|
14
.github/ISSUE_TEMPLATE/BUG_REPORT.md
vendored
14
.github/ISSUE_TEMPLATE/BUG_REPORT.md
vendored
@@ -1,10 +1,10 @@
|
|||||||
---
|
---
|
||||||
name: Report a bug with Home Assistant
|
name: Report a bug with Home Assistant Core
|
||||||
about: Report an issue with Home Assistant
|
about: Report an issue with Home Assistant Core
|
||||||
---
|
---
|
||||||
<!-- READ THIS FIRST:
|
<!-- READ THIS FIRST:
|
||||||
- If you need additional help with this template, please refer to https://www.home-assistant.io/help/reporting_issues/
|
- If you need additional help with this template, please refer to https://www.home-assistant.io/help/reporting_issues/
|
||||||
- Make sure you are running the latest version of Home Assistant before reporting an issue: https://github.com/home-assistant/home-assistant/releases
|
- Make sure you are running the latest version of Home Assistant before reporting an issue: https://github.com/home-assistant/core/releases
|
||||||
- Do not report issues for integrations if you are using custom components or integrations.
|
- Do not report issues for integrations if you are using custom components or integrations.
|
||||||
- Provide as many details as possible. Paste logs, configuration samples and code into the backticks.
|
- Provide as many details as possible. Paste logs, configuration samples and code into the backticks.
|
||||||
DO NOT DELETE ANY TEXT from this template! Otherwise, your issue may be closed without comment.
|
DO NOT DELETE ANY TEXT from this template! Otherwise, your issue may be closed without comment.
|
||||||
@@ -12,7 +12,7 @@ about: Report an issue with Home Assistant
|
|||||||
## The problem
|
## The problem
|
||||||
<!--
|
<!--
|
||||||
Describe the issue you are experiencing here to communicate to the
|
Describe the issue you are experiencing here to communicate to the
|
||||||
maintainers. Tell us what you were trying to do and what happened instead.
|
maintainers. Tell us what you were trying to do and what happened.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
|
||||||
@@ -23,9 +23,9 @@ about: Report an issue with Home Assistant
|
|||||||
Home Assistant frontend: Developer tools -> Info.
|
Home Assistant frontend: Developer tools -> Info.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
- Home Assistant release with the issue:
|
- Home Assistant Core release with the issue:
|
||||||
- Last working Home Assistant release (if known):
|
- Last working Home Assistant Core release (if known):
|
||||||
- Operating environment (Hass.io/Docker/Windows/etc.):
|
- Operating environment (Home Assistant/Supervised/Docker/venv):
|
||||||
- Integration causing this issue:
|
- Integration causing this issue:
|
||||||
- Link to integration documentation on our website:
|
- Link to integration documentation on our website:
|
||||||
|
|
||||||
|
1
.github/stale.yml
vendored
1
.github/stale.yml
vendored
@@ -57,6 +57,7 @@ limitPerRun: 30
|
|||||||
# Handle pull requests a little bit faster and with an adjusted comment.
|
# Handle pull requests a little bit faster and with an adjusted comment.
|
||||||
pulls:
|
pulls:
|
||||||
daysUntilStale: 30
|
daysUntilStale: 30
|
||||||
|
exemptProjects: false
|
||||||
markComment: >
|
markComment: >
|
||||||
There hasn't been any activity on this pull request recently. This pull
|
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
|
request has been automatically marked as stale because of that and will
|
||||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -106,6 +106,7 @@ virtualization/vagrant/config
|
|||||||
!.vscode/cSpell.json
|
!.vscode/cSpell.json
|
||||||
!.vscode/extensions.json
|
!.vscode/extensions.json
|
||||||
!.vscode/tasks.json
|
!.vscode/tasks.json
|
||||||
|
.env
|
||||||
|
|
||||||
# Built docs
|
# Built docs
|
||||||
docs/build
|
docs/build
|
||||||
|
5
.hadolint.yaml
Normal file
5
.hadolint.yaml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
ignored:
|
||||||
|
- DL3006
|
||||||
|
- DL3008
|
||||||
|
- DL3013
|
||||||
|
- DL3018
|
@@ -1,4 +1,9 @@
|
|||||||
repos:
|
repos:
|
||||||
|
- repo: https://github.com/asottile/pyupgrade
|
||||||
|
rev: v2.3.0
|
||||||
|
hooks:
|
||||||
|
- id: pyupgrade
|
||||||
|
args: [--py37-plus]
|
||||||
- repo: https://github.com/psf/black
|
- repo: https://github.com/psf/black
|
||||||
rev: 19.10b0
|
rev: 19.10b0
|
||||||
hooks:
|
hooks:
|
||||||
@@ -13,11 +18,11 @@ repos:
|
|||||||
- id: codespell
|
- id: codespell
|
||||||
args:
|
args:
|
||||||
- --ignore-words-list=hass,alot,datas,dof,dur,farenheit,hist,iff,ines,ist,lightsensor,mut,nd,pres,referer,ser,serie,te,technik,ue,uint,visability,wan,wanna,withing
|
- --ignore-words-list=hass,alot,datas,dof,dur,farenheit,hist,iff,ines,ist,lightsensor,mut,nd,pres,referer,ser,serie,te,technik,ue,uint,visability,wan,wanna,withing
|
||||||
- --skip="./.*,*.json"
|
- --skip="./.*,*.csv,*.json"
|
||||||
- --quiet-level=2
|
- --quiet-level=2
|
||||||
exclude_types: [json]
|
exclude_types: [csv, json]
|
||||||
- repo: https://gitlab.com/pycqa/flake8
|
- repo: https://gitlab.com/pycqa/flake8
|
||||||
rev: 3.7.9
|
rev: 3.8.1
|
||||||
hooks:
|
hooks:
|
||||||
- id: flake8
|
- id: flake8
|
||||||
additional_dependencies:
|
additional_dependencies:
|
||||||
@@ -40,12 +45,23 @@ repos:
|
|||||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
rev: v2.4.0
|
rev: v2.4.0
|
||||||
hooks:
|
hooks:
|
||||||
|
- id: check-executables-have-shebangs
|
||||||
|
stages: [manual]
|
||||||
- id: check-json
|
- id: check-json
|
||||||
- id: no-commit-to-branch
|
- id: no-commit-to-branch
|
||||||
args:
|
args:
|
||||||
- --branch=dev
|
- --branch=dev
|
||||||
- --branch=master
|
- --branch=master
|
||||||
- --branch=rc
|
- --branch=rc
|
||||||
|
- repo: https://github.com/adrienverge/yamllint.git
|
||||||
|
rev: v1.23.0
|
||||||
|
hooks:
|
||||||
|
- id: yamllint
|
||||||
|
- repo: https://github.com/prettier/prettier
|
||||||
|
rev: 2.0.4
|
||||||
|
hooks:
|
||||||
|
- id: prettier
|
||||||
|
stages: [manual]
|
||||||
- repo: local
|
- repo: local
|
||||||
hooks:
|
hooks:
|
||||||
# Run mypy through our wrapper script in order to get the possible
|
# Run mypy through our wrapper script in order to get the possible
|
||||||
@@ -59,3 +75,17 @@ repos:
|
|||||||
types: [python]
|
types: [python]
|
||||||
require_serial: true
|
require_serial: true
|
||||||
files: ^homeassistant/.+\.py$
|
files: ^homeassistant/.+\.py$
|
||||||
|
- id: gen_requirements_all
|
||||||
|
name: gen_requirements_all
|
||||||
|
entry: script/run-in-env.sh python3 -m script.gen_requirements_all
|
||||||
|
pass_filenames: false
|
||||||
|
language: script
|
||||||
|
types: [text]
|
||||||
|
files: ^(homeassistant/.+/manifest\.json|\.pre-commit-config\.yaml)$
|
||||||
|
- id: hassfest
|
||||||
|
name: hassfest
|
||||||
|
entry: script/run-in-env.sh python3 -m script.hassfest
|
||||||
|
pass_filenames: false
|
||||||
|
language: script
|
||||||
|
types: [json]
|
||||||
|
files: ^homeassistant/.+/(manifest|strings)\.json$
|
||||||
|
5
.prettierignore
Normal file
5
.prettierignore
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
*.md
|
||||||
|
azure-*.yml
|
||||||
|
docs/source/_templates/*
|
||||||
|
homeassistant/components/*/translations/*.json
|
||||||
|
tests/fixtures/*
|
@@ -11,6 +11,9 @@ addons:
|
|||||||
- libswscale-dev
|
- libswscale-dev
|
||||||
- libswresample-dev
|
- libswresample-dev
|
||||||
- libavfilter-dev
|
- libavfilter-dev
|
||||||
|
sources:
|
||||||
|
- sourceline: ppa:savoury1/ffmpeg4
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
fast_finish: true
|
fast_finish: true
|
||||||
include:
|
include:
|
||||||
|
3
.vscode/extensions.json
vendored
Normal file
3
.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"recommendations": ["esbenp.prettier-vscode", "ms-python.python"]
|
||||||
|
}
|
61
.yamllint
Normal file
61
.yamllint
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
ignore: |
|
||||||
|
azure-*.yml
|
||||||
|
rules:
|
||||||
|
braces:
|
||||||
|
level: error
|
||||||
|
min-spaces-inside: 0
|
||||||
|
max-spaces-inside: 1
|
||||||
|
min-spaces-inside-empty: -1
|
||||||
|
max-spaces-inside-empty: -1
|
||||||
|
brackets:
|
||||||
|
level: error
|
||||||
|
min-spaces-inside: 0
|
||||||
|
max-spaces-inside: 0
|
||||||
|
min-spaces-inside-empty: -1
|
||||||
|
max-spaces-inside-empty: -1
|
||||||
|
colons:
|
||||||
|
level: error
|
||||||
|
max-spaces-before: 0
|
||||||
|
max-spaces-after: 1
|
||||||
|
commas:
|
||||||
|
level: error
|
||||||
|
max-spaces-before: 0
|
||||||
|
min-spaces-after: 1
|
||||||
|
max-spaces-after: 1
|
||||||
|
comments:
|
||||||
|
level: error
|
||||||
|
require-starting-space: true
|
||||||
|
min-spaces-from-content: 2
|
||||||
|
comments-indentation:
|
||||||
|
level: error
|
||||||
|
document-end:
|
||||||
|
level: error
|
||||||
|
present: false
|
||||||
|
document-start:
|
||||||
|
level: error
|
||||||
|
present: false
|
||||||
|
empty-lines:
|
||||||
|
level: error
|
||||||
|
max: 1
|
||||||
|
max-start: 0
|
||||||
|
max-end: 1
|
||||||
|
hyphens:
|
||||||
|
level: error
|
||||||
|
max-spaces-after: 1
|
||||||
|
indentation:
|
||||||
|
level: error
|
||||||
|
spaces: 2
|
||||||
|
indent-sequences: true
|
||||||
|
check-multi-line-strings: false
|
||||||
|
key-duplicates:
|
||||||
|
level: error
|
||||||
|
line-length: disable
|
||||||
|
new-line-at-end-of-file:
|
||||||
|
level: error
|
||||||
|
new-lines:
|
||||||
|
level: error
|
||||||
|
type: unix
|
||||||
|
trailing-spaces:
|
||||||
|
level: error
|
||||||
|
truthy:
|
||||||
|
level: error
|
95
CODEOWNERS
95
CODEOWNERS
@@ -14,9 +14,12 @@ homeassistant/scripts/check_config.py @kellerza
|
|||||||
|
|
||||||
# Integrations
|
# Integrations
|
||||||
homeassistant/components/abode/* @shred86
|
homeassistant/components/abode/* @shred86
|
||||||
|
homeassistant/components/acmeda/* @atmurray
|
||||||
homeassistant/components/adguard/* @frenck
|
homeassistant/components/adguard/* @frenck
|
||||||
|
homeassistant/components/agent_dvr/* @ispysoftware
|
||||||
homeassistant/components/airly/* @bieniu
|
homeassistant/components/airly/* @bieniu
|
||||||
homeassistant/components/airvisual/* @bachya
|
homeassistant/components/airvisual/* @bachya
|
||||||
|
homeassistant/components/alarmdecoder/* @ajschmidt8
|
||||||
homeassistant/components/alexa/* @home-assistant/cloud @ochlocracy
|
homeassistant/components/alexa/* @home-assistant/cloud @ochlocracy
|
||||||
homeassistant/components/almond/* @gcampax @balloob
|
homeassistant/components/almond/* @gcampax @balloob
|
||||||
homeassistant/components/alpha_vantage/* @fabaff
|
homeassistant/components/alpha_vantage/* @fabaff
|
||||||
@@ -32,34 +35,40 @@ homeassistant/components/aprs/* @PhilRW
|
|||||||
homeassistant/components/arcam_fmj/* @elupus
|
homeassistant/components/arcam_fmj/* @elupus
|
||||||
homeassistant/components/arduino/* @fabaff
|
homeassistant/components/arduino/* @fabaff
|
||||||
homeassistant/components/arest/* @fabaff
|
homeassistant/components/arest/* @fabaff
|
||||||
|
homeassistant/components/arris_tg2492lg/* @vanbalken
|
||||||
homeassistant/components/asuswrt/* @kennedyshead
|
homeassistant/components/asuswrt/* @kennedyshead
|
||||||
|
homeassistant/components/atag/* @MatsNL
|
||||||
homeassistant/components/aten_pe/* @mtdcr
|
homeassistant/components/aten_pe/* @mtdcr
|
||||||
homeassistant/components/atome/* @baqs
|
homeassistant/components/atome/* @baqs
|
||||||
homeassistant/components/august/* @bdraco
|
homeassistant/components/august/* @bdraco
|
||||||
homeassistant/components/aurora_abb_powerone/* @davet2001
|
homeassistant/components/aurora_abb_powerone/* @davet2001
|
||||||
homeassistant/components/auth/* @home-assistant/core
|
homeassistant/components/auth/* @home-assistant/core
|
||||||
homeassistant/components/automatic/* @armills
|
|
||||||
homeassistant/components/automation/* @home-assistant/core
|
homeassistant/components/automation/* @home-assistant/core
|
||||||
homeassistant/components/avea/* @pattyland
|
homeassistant/components/avea/* @pattyland
|
||||||
homeassistant/components/avri/* @timvancann
|
homeassistant/components/avri/* @timvancann
|
||||||
homeassistant/components/awair/* @danielsjf
|
homeassistant/components/awair/* @danielsjf
|
||||||
homeassistant/components/aws/* @awarecan @robbiet480
|
homeassistant/components/aws/* @awarecan @robbiet480
|
||||||
homeassistant/components/axis/* @kane610
|
homeassistant/components/axis/* @Kane610
|
||||||
homeassistant/components/azure_event_hub/* @eavanvalkenburg
|
homeassistant/components/azure_event_hub/* @eavanvalkenburg
|
||||||
homeassistant/components/azure_service_bus/* @hfurubotten
|
homeassistant/components/azure_service_bus/* @hfurubotten
|
||||||
homeassistant/components/beewi_smartclim/* @alemuro
|
homeassistant/components/beewi_smartclim/* @alemuro
|
||||||
homeassistant/components/bitcoin/* @fabaff
|
homeassistant/components/bitcoin/* @fabaff
|
||||||
homeassistant/components/bizkaibus/* @UgaitzEtxebarria
|
homeassistant/components/bizkaibus/* @UgaitzEtxebarria
|
||||||
|
homeassistant/components/blebox/* @gadgetmobile
|
||||||
homeassistant/components/blink/* @fronzbot
|
homeassistant/components/blink/* @fronzbot
|
||||||
|
homeassistant/components/bmp280/* @belidzs
|
||||||
homeassistant/components/bmw_connected_drive/* @gerard33
|
homeassistant/components/bmw_connected_drive/* @gerard33
|
||||||
homeassistant/components/bom/* @maddenp
|
homeassistant/components/bom/* @maddenp
|
||||||
homeassistant/components/braviatv/* @robbiet480
|
homeassistant/components/braviatv/* @robbiet480 @bieniu
|
||||||
homeassistant/components/broadlink/* @danielhiversen @felipediel
|
homeassistant/components/broadlink/* @danielhiversen @felipediel
|
||||||
homeassistant/components/brother/* @bieniu
|
homeassistant/components/brother/* @bieniu
|
||||||
homeassistant/components/brunt/* @eavanvalkenburg
|
homeassistant/components/brunt/* @eavanvalkenburg
|
||||||
|
homeassistant/components/bsblan/* @liudger
|
||||||
homeassistant/components/bt_smarthub/* @jxwolstenholme
|
homeassistant/components/bt_smarthub/* @jxwolstenholme
|
||||||
homeassistant/components/buienradar/* @mjj4791 @ties
|
homeassistant/components/buienradar/* @mjj4791 @ties
|
||||||
|
homeassistant/components/cast/* @emontnemery
|
||||||
homeassistant/components/cert_expiry/* @Cereal2nd @jjlawren
|
homeassistant/components/cert_expiry/* @Cereal2nd @jjlawren
|
||||||
|
homeassistant/components/circuit/* @braam
|
||||||
homeassistant/components/cisco_ios/* @fbradyirl
|
homeassistant/components/cisco_ios/* @fbradyirl
|
||||||
homeassistant/components/cisco_mobility_express/* @fbradyirl
|
homeassistant/components/cisco_mobility_express/* @fbradyirl
|
||||||
homeassistant/components/cisco_webex_teams/* @fbradyirl
|
homeassistant/components/cisco_webex_teams/* @fbradyirl
|
||||||
@@ -75,18 +84,21 @@ homeassistant/components/counter/* @fabaff
|
|||||||
homeassistant/components/cover/* @home-assistant/core
|
homeassistant/components/cover/* @home-assistant/core
|
||||||
homeassistant/components/cpuspeed/* @fabaff
|
homeassistant/components/cpuspeed/* @fabaff
|
||||||
homeassistant/components/cups/* @fabaff
|
homeassistant/components/cups/* @fabaff
|
||||||
homeassistant/components/daikin/* @fredrike @rofrantz
|
homeassistant/components/daikin/* @fredrike
|
||||||
homeassistant/components/darksky/* @fabaff
|
homeassistant/components/darksky/* @fabaff
|
||||||
homeassistant/components/deconz/* @kane610
|
homeassistant/components/deconz/* @Kane610
|
||||||
homeassistant/components/delijn/* @bollewolle
|
homeassistant/components/delijn/* @bollewolle @Emilv2
|
||||||
homeassistant/components/demo/* @home-assistant/core
|
homeassistant/components/demo/* @home-assistant/core
|
||||||
|
homeassistant/components/denonavr/* @scarface-4711 @starkillerOG
|
||||||
homeassistant/components/derivative/* @afaucogney
|
homeassistant/components/derivative/* @afaucogney
|
||||||
homeassistant/components/device_automation/* @home-assistant/core
|
homeassistant/components/device_automation/* @home-assistant/core
|
||||||
|
homeassistant/components/devolo_home_control/* @2Fake @Shutgun
|
||||||
homeassistant/components/digital_ocean/* @fabaff
|
homeassistant/components/digital_ocean/* @fabaff
|
||||||
homeassistant/components/directv/* @ctalkington
|
homeassistant/components/directv/* @ctalkington
|
||||||
homeassistant/components/discogs/* @thibmaek
|
homeassistant/components/discogs/* @thibmaek
|
||||||
homeassistant/components/doorbird/* @oblogic7
|
homeassistant/components/doorbird/* @oblogic7 @bdraco
|
||||||
homeassistant/components/dsmr_reader/* @depl0y
|
homeassistant/components/dsmr_reader/* @depl0y
|
||||||
|
homeassistant/components/dunehd/* @bieniu
|
||||||
homeassistant/components/dweet/* @fabaff
|
homeassistant/components/dweet/* @fabaff
|
||||||
homeassistant/components/dynalite/* @ziv1234
|
homeassistant/components/dynalite/* @ziv1234
|
||||||
homeassistant/components/dyson/* @etheralm
|
homeassistant/components/dyson/* @etheralm
|
||||||
@@ -96,6 +108,7 @@ homeassistant/components/edl21/* @mtdcr
|
|||||||
homeassistant/components/egardia/* @jeroenterheerdt
|
homeassistant/components/egardia/* @jeroenterheerdt
|
||||||
homeassistant/components/eight_sleep/* @mezz64
|
homeassistant/components/eight_sleep/* @mezz64
|
||||||
homeassistant/components/elgato/* @frenck
|
homeassistant/components/elgato/* @frenck
|
||||||
|
homeassistant/components/elkm1/* @bdraco
|
||||||
homeassistant/components/elv/* @majuss
|
homeassistant/components/elv/* @majuss
|
||||||
homeassistant/components/emby/* @mezz64
|
homeassistant/components/emby/* @mezz64
|
||||||
homeassistant/components/emoncms/* @borpin
|
homeassistant/components/emoncms/* @borpin
|
||||||
@@ -115,19 +128,20 @@ homeassistant/components/file/* @fabaff
|
|||||||
homeassistant/components/filter/* @dgomes
|
homeassistant/components/filter/* @dgomes
|
||||||
homeassistant/components/fitbit/* @robbiet480
|
homeassistant/components/fitbit/* @robbiet480
|
||||||
homeassistant/components/fixer/* @fabaff
|
homeassistant/components/fixer/* @fabaff
|
||||||
|
homeassistant/components/flick_electric/* @ZephireNZ
|
||||||
homeassistant/components/flock/* @fabaff
|
homeassistant/components/flock/* @fabaff
|
||||||
homeassistant/components/flume/* @ChrisMandich
|
homeassistant/components/flume/* @ChrisMandich @bdraco
|
||||||
homeassistant/components/flunearyou/* @bachya
|
homeassistant/components/flunearyou/* @bachya
|
||||||
|
homeassistant/components/forked_daapd/* @uvjustin
|
||||||
homeassistant/components/fortigate/* @kifeo
|
homeassistant/components/fortigate/* @kifeo
|
||||||
homeassistant/components/fortios/* @kimfrellsen
|
homeassistant/components/fortios/* @kimfrellsen
|
||||||
homeassistant/components/foscam/* @skgsergio
|
homeassistant/components/foscam/* @skgsergio
|
||||||
homeassistant/components/foursquare/* @robbiet480
|
homeassistant/components/foursquare/* @robbiet480
|
||||||
homeassistant/components/freebox/* @snoof85
|
homeassistant/components/freebox/* @snoof85 @Quentame
|
||||||
homeassistant/components/fronius/* @nielstron
|
homeassistant/components/fronius/* @nielstron
|
||||||
homeassistant/components/frontend/* @home-assistant/frontend
|
homeassistant/components/frontend/* @home-assistant/frontend
|
||||||
homeassistant/components/garmin_connect/* @cyberjunky
|
homeassistant/components/garmin_connect/* @cyberjunky
|
||||||
homeassistant/components/gdacs/* @exxamalte
|
homeassistant/components/gdacs/* @exxamalte
|
||||||
homeassistant/components/gearbest/* @HerrHofrat
|
|
||||||
homeassistant/components/geniushub/* @zxdavb
|
homeassistant/components/geniushub/* @zxdavb
|
||||||
homeassistant/components/geo_rss_events/* @exxamalte
|
homeassistant/components/geo_rss_events/* @exxamalte
|
||||||
homeassistant/components/geonetnz_quakes/* @exxamalte
|
homeassistant/components/geonetnz_quakes/* @exxamalte
|
||||||
@@ -136,6 +150,7 @@ homeassistant/components/gios/* @bieniu
|
|||||||
homeassistant/components/gitter/* @fabaff
|
homeassistant/components/gitter/* @fabaff
|
||||||
homeassistant/components/glances/* @fabaff @engrbm87
|
homeassistant/components/glances/* @fabaff @engrbm87
|
||||||
homeassistant/components/gntp/* @robbiet480
|
homeassistant/components/gntp/* @robbiet480
|
||||||
|
homeassistant/components/gogogate2/* @vangorra
|
||||||
homeassistant/components/google_assistant/* @home-assistant/cloud
|
homeassistant/components/google_assistant/* @home-assistant/cloud
|
||||||
homeassistant/components/google_cloud/* @lufton
|
homeassistant/components/google_cloud/* @lufton
|
||||||
homeassistant/components/google_translate/* @awarecan
|
homeassistant/components/google_translate/* @awarecan
|
||||||
@@ -146,7 +161,8 @@ homeassistant/components/griddy/* @bdraco
|
|||||||
homeassistant/components/group/* @home-assistant/core
|
homeassistant/components/group/* @home-assistant/core
|
||||||
homeassistant/components/growatt_server/* @indykoning
|
homeassistant/components/growatt_server/* @indykoning
|
||||||
homeassistant/components/gtfs/* @robbiet480
|
homeassistant/components/gtfs/* @robbiet480
|
||||||
homeassistant/components/harmony/* @ehendrix23
|
homeassistant/components/guardian/* @bachya
|
||||||
|
homeassistant/components/harmony/* @ehendrix23 @bramkragten @bdraco
|
||||||
homeassistant/components/hassio/* @home-assistant/hass-io
|
homeassistant/components/hassio/* @home-assistant/hass-io
|
||||||
homeassistant/components/heatmiser/* @andylockran
|
homeassistant/components/heatmiser/* @andylockran
|
||||||
homeassistant/components/heos/* @andrewsayre
|
homeassistant/components/heos/* @andrewsayre
|
||||||
@@ -156,16 +172,19 @@ homeassistant/components/hikvisioncam/* @fbradyirl
|
|||||||
homeassistant/components/hisense_aehw4a1/* @bannhead
|
homeassistant/components/hisense_aehw4a1/* @bannhead
|
||||||
homeassistant/components/history/* @home-assistant/core
|
homeassistant/components/history/* @home-assistant/core
|
||||||
homeassistant/components/hive/* @Rendili @KJonline
|
homeassistant/components/hive/* @Rendili @KJonline
|
||||||
|
homeassistant/components/home_connect/* @DavidMStraub
|
||||||
homeassistant/components/homeassistant/* @home-assistant/core
|
homeassistant/components/homeassistant/* @home-assistant/core
|
||||||
|
homeassistant/components/homekit/* @bdraco
|
||||||
homeassistant/components/homekit_controller/* @Jc2k
|
homeassistant/components/homekit_controller/* @Jc2k
|
||||||
homeassistant/components/homematic/* @pvizeli @danielperna84
|
homeassistant/components/homematic/* @pvizeli @danielperna84
|
||||||
homeassistant/components/homematicip_cloud/* @SukramJ
|
homeassistant/components/homematicip_cloud/* @SukramJ
|
||||||
homeassistant/components/honeywell/* @zxdavb
|
homeassistant/components/honeywell/* @zxdavb
|
||||||
homeassistant/components/html5/* @robbiet480
|
homeassistant/components/html5/* @robbiet480
|
||||||
homeassistant/components/http/* @home-assistant/core
|
homeassistant/components/http/* @home-assistant/core
|
||||||
homeassistant/components/huawei_lte/* @scop
|
homeassistant/components/huawei_lte/* @scop @fphammerle
|
||||||
homeassistant/components/huawei_router/* @abmantis
|
homeassistant/components/huawei_router/* @abmantis
|
||||||
homeassistant/components/hue/* @balloob
|
homeassistant/components/hue/* @balloob
|
||||||
|
homeassistant/components/hunterdouglas_powerview/* @bdraco
|
||||||
homeassistant/components/iammeter/* @lewei50
|
homeassistant/components/iammeter/* @lewei50
|
||||||
homeassistant/components/iaqualink/* @flz
|
homeassistant/components/iaqualink/* @flz
|
||||||
homeassistant/components/icloud/* @Quentame
|
homeassistant/components/icloud/* @Quentame
|
||||||
@@ -177,14 +196,18 @@ homeassistant/components/input_datetime/* @home-assistant/core
|
|||||||
homeassistant/components/input_number/* @home-assistant/core
|
homeassistant/components/input_number/* @home-assistant/core
|
||||||
homeassistant/components/input_select/* @home-assistant/core
|
homeassistant/components/input_select/* @home-assistant/core
|
||||||
homeassistant/components/input_text/* @home-assistant/core
|
homeassistant/components/input_text/* @home-assistant/core
|
||||||
|
homeassistant/components/insteon/* @teharris1
|
||||||
homeassistant/components/integration/* @dgomes
|
homeassistant/components/integration/* @dgomes
|
||||||
homeassistant/components/intent/* @home-assistant/core
|
homeassistant/components/intent/* @home-assistant/core
|
||||||
homeassistant/components/intesishome/* @jnimmo
|
homeassistant/components/intesishome/* @jnimmo
|
||||||
homeassistant/components/ios/* @robbiet480
|
homeassistant/components/ios/* @robbiet480
|
||||||
homeassistant/components/iperf3/* @rohankapoorcom
|
homeassistant/components/iperf3/* @rohankapoorcom
|
||||||
homeassistant/components/ipma/* @dgomes @abmantis
|
homeassistant/components/ipma/* @dgomes @abmantis
|
||||||
|
homeassistant/components/ipp/* @ctalkington
|
||||||
homeassistant/components/iqvia/* @bachya
|
homeassistant/components/iqvia/* @bachya
|
||||||
homeassistant/components/irish_rail_transport/* @ttroy50
|
homeassistant/components/irish_rail_transport/* @ttroy50
|
||||||
|
homeassistant/components/islamic_prayer_times/* @engrbm87
|
||||||
|
homeassistant/components/isy994/* @bdraco @shbatm
|
||||||
homeassistant/components/izone/* @Swamp-Ig
|
homeassistant/components/izone/* @Swamp-Ig
|
||||||
homeassistant/components/jewish_calendar/* @tsvi
|
homeassistant/components/jewish_calendar/* @tsvi
|
||||||
homeassistant/components/juicenet/* @jesserockz
|
homeassistant/components/juicenet/* @jesserockz
|
||||||
@@ -210,6 +233,7 @@ homeassistant/components/luci/* @fbradyirl @mzdrale
|
|||||||
homeassistant/components/luftdaten/* @fabaff
|
homeassistant/components/luftdaten/* @fabaff
|
||||||
homeassistant/components/lupusec/* @majuss
|
homeassistant/components/lupusec/* @majuss
|
||||||
homeassistant/components/lutron/* @JonGilmore
|
homeassistant/components/lutron/* @JonGilmore
|
||||||
|
homeassistant/components/lutron_caseta/* @swails
|
||||||
homeassistant/components/mastodon/* @fabaff
|
homeassistant/components/mastodon/* @fabaff
|
||||||
homeassistant/components/matrix/* @tinloaf
|
homeassistant/components/matrix/* @tinloaf
|
||||||
homeassistant/components/mcp23017/* @jardiamj
|
homeassistant/components/mcp23017/* @jardiamj
|
||||||
@@ -226,12 +250,13 @@ homeassistant/components/min_max/* @fabaff
|
|||||||
homeassistant/components/minecraft_server/* @elmurato
|
homeassistant/components/minecraft_server/* @elmurato
|
||||||
homeassistant/components/minio/* @tkislan
|
homeassistant/components/minio/* @tkislan
|
||||||
homeassistant/components/mobile_app/* @robbiet480
|
homeassistant/components/mobile_app/* @robbiet480
|
||||||
homeassistant/components/modbus/* @adamchengtkc
|
homeassistant/components/modbus/* @adamchengtkc @janiversen
|
||||||
homeassistant/components/monoprice/* @etsinko
|
homeassistant/components/monoprice/* @etsinko @OnFreund
|
||||||
homeassistant/components/moon/* @fabaff
|
homeassistant/components/moon/* @fabaff
|
||||||
homeassistant/components/mpd/* @fabaff
|
homeassistant/components/mpd/* @fabaff
|
||||||
homeassistant/components/mqtt/* @home-assistant/core
|
homeassistant/components/mqtt/* @home-assistant/core @emontnemery
|
||||||
homeassistant/components/msteams/* @peroyvind
|
homeassistant/components/msteams/* @peroyvind
|
||||||
|
homeassistant/components/myq/* @bdraco
|
||||||
homeassistant/components/mysensors/* @MartinHjelmare
|
homeassistant/components/mysensors/* @MartinHjelmare
|
||||||
homeassistant/components/mystrom/* @fabaff
|
homeassistant/components/mystrom/* @fabaff
|
||||||
homeassistant/components/neato/* @dshokouhi @Santobert
|
homeassistant/components/neato/* @dshokouhi @Santobert
|
||||||
@@ -241,7 +266,9 @@ homeassistant/components/ness_alarm/* @nickw444
|
|||||||
homeassistant/components/nest/* @awarecan
|
homeassistant/components/nest/* @awarecan
|
||||||
homeassistant/components/netatmo/* @cgtobi
|
homeassistant/components/netatmo/* @cgtobi
|
||||||
homeassistant/components/netdata/* @fabaff
|
homeassistant/components/netdata/* @fabaff
|
||||||
|
homeassistant/components/nexia/* @ryannazaretian @bdraco
|
||||||
homeassistant/components/nextbus/* @vividboarder
|
homeassistant/components/nextbus/* @vividboarder
|
||||||
|
homeassistant/components/nextcloud/* @meichthys
|
||||||
homeassistant/components/nilu/* @hfurubotten
|
homeassistant/components/nilu/* @hfurubotten
|
||||||
homeassistant/components/nissan_leaf/* @filcole
|
homeassistant/components/nissan_leaf/* @filcole
|
||||||
homeassistant/components/nmbs/* @thibmaek
|
homeassistant/components/nmbs/* @thibmaek
|
||||||
@@ -250,7 +277,10 @@ homeassistant/components/notify/* @home-assistant/core
|
|||||||
homeassistant/components/notion/* @bachya
|
homeassistant/components/notion/* @bachya
|
||||||
homeassistant/components/nsw_fuel_station/* @nickw444
|
homeassistant/components/nsw_fuel_station/* @nickw444
|
||||||
homeassistant/components/nsw_rural_fire_service_feed/* @exxamalte
|
homeassistant/components/nsw_rural_fire_service_feed/* @exxamalte
|
||||||
|
homeassistant/components/nuheat/* @bdraco
|
||||||
homeassistant/components/nuki/* @pvizeli
|
homeassistant/components/nuki/* @pvizeli
|
||||||
|
homeassistant/components/numato/* @clssn
|
||||||
|
homeassistant/components/nut/* @bdraco
|
||||||
homeassistant/components/nws/* @MatthewFlamm
|
homeassistant/components/nws/* @MatthewFlamm
|
||||||
homeassistant/components/nzbget/* @chriscla
|
homeassistant/components/nzbget/* @chriscla
|
||||||
homeassistant/components/obihai/* @dshokouhi
|
homeassistant/components/obihai/* @dshokouhi
|
||||||
@@ -258,34 +288,44 @@ homeassistant/components/ohmconnect/* @robbiet480
|
|||||||
homeassistant/components/ombi/* @larssont
|
homeassistant/components/ombi/* @larssont
|
||||||
homeassistant/components/onboarding/* @home-assistant/core
|
homeassistant/components/onboarding/* @home-assistant/core
|
||||||
homeassistant/components/onewire/* @garbled1
|
homeassistant/components/onewire/* @garbled1
|
||||||
|
homeassistant/components/onvif/* @hunterjm
|
||||||
|
homeassistant/components/openerz/* @misialq
|
||||||
|
homeassistant/components/opengarage/* @danielhiversen
|
||||||
homeassistant/components/opentherm_gw/* @mvn23
|
homeassistant/components/opentherm_gw/* @mvn23
|
||||||
homeassistant/components/openuv/* @bachya
|
homeassistant/components/openuv/* @bachya
|
||||||
homeassistant/components/openweathermap/* @fabaff
|
homeassistant/components/openweathermap/* @fabaff
|
||||||
homeassistant/components/opnsense/* @mtreinish
|
homeassistant/components/opnsense/* @mtreinish
|
||||||
homeassistant/components/orangepi_gpio/* @pascallj
|
homeassistant/components/orangepi_gpio/* @pascallj
|
||||||
homeassistant/components/oru/* @bvlaicu
|
homeassistant/components/oru/* @bvlaicu
|
||||||
|
homeassistant/components/ozw/* @cgarwood @marcelveldt @MartinHjelmare
|
||||||
|
homeassistant/components/panasonic_viera/* @joogps
|
||||||
homeassistant/components/panel_custom/* @home-assistant/frontend
|
homeassistant/components/panel_custom/* @home-assistant/frontend
|
||||||
homeassistant/components/panel_iframe/* @home-assistant/frontend
|
homeassistant/components/panel_iframe/* @home-assistant/frontend
|
||||||
homeassistant/components/pcal9535a/* @Shulyaka
|
homeassistant/components/pcal9535a/* @Shulyaka
|
||||||
homeassistant/components/persistent_notification/* @home-assistant/core
|
homeassistant/components/persistent_notification/* @home-assistant/core
|
||||||
homeassistant/components/philips_js/* @elupus
|
homeassistant/components/philips_js/* @elupus
|
||||||
homeassistant/components/pi_hole/* @fabaff @johnluetke
|
homeassistant/components/pi4ioe5v9xxxx/* @antonverburg
|
||||||
|
homeassistant/components/pi_hole/* @fabaff @johnluetke @shenxn
|
||||||
homeassistant/components/pilight/* @trekky12
|
homeassistant/components/pilight/* @trekky12
|
||||||
homeassistant/components/plaato/* @JohNan
|
homeassistant/components/plaato/* @JohNan
|
||||||
homeassistant/components/plant/* @ChristianKuehnel
|
homeassistant/components/plant/* @ChristianKuehnel
|
||||||
homeassistant/components/plex/* @jjlawren
|
homeassistant/components/plex/* @jjlawren
|
||||||
homeassistant/components/plugwise/* @laetificat @CoMPaTech @bouwew
|
homeassistant/components/plugwise/* @CoMPaTech @bouwew
|
||||||
|
homeassistant/components/plum_lightpad/* @ColinHarrington
|
||||||
homeassistant/components/point/* @fredrike
|
homeassistant/components/point/* @fredrike
|
||||||
homeassistant/components/proxmoxve/* @k4ds3
|
homeassistant/components/powerwall/* @bdraco @jrester
|
||||||
|
homeassistant/components/proxmoxve/* @k4ds3 @jhollowe
|
||||||
homeassistant/components/ps4/* @ktnrg45
|
homeassistant/components/ps4/* @ktnrg45
|
||||||
homeassistant/components/ptvsd/* @swamp-ig
|
homeassistant/components/ptvsd/* @swamp-ig
|
||||||
homeassistant/components/push/* @dgomes
|
homeassistant/components/push/* @dgomes
|
||||||
homeassistant/components/pvoutput/* @fabaff
|
homeassistant/components/pvoutput/* @fabaff
|
||||||
|
homeassistant/components/pvpc_hourly_pricing/* @azogue
|
||||||
homeassistant/components/qld_bushfire/* @exxamalte
|
homeassistant/components/qld_bushfire/* @exxamalte
|
||||||
homeassistant/components/qnap/* @colinodell
|
homeassistant/components/qnap/* @colinodell
|
||||||
homeassistant/components/quantum_gateway/* @cisasteelersfan
|
homeassistant/components/quantum_gateway/* @cisasteelersfan
|
||||||
homeassistant/components/qvr_pro/* @oblogic7
|
homeassistant/components/qvr_pro/* @oblogic7
|
||||||
homeassistant/components/qwikswitch/* @kellerza
|
homeassistant/components/qwikswitch/* @kellerza
|
||||||
|
homeassistant/components/rachio/* @bdraco
|
||||||
homeassistant/components/rainbird/* @konikvranik
|
homeassistant/components/rainbird/* @konikvranik
|
||||||
homeassistant/components/raincloud/* @vanstinator
|
homeassistant/components/raincloud/* @vanstinator
|
||||||
homeassistant/components/rainforest_eagle/* @gtdiehl @jcalbert
|
homeassistant/components/rainforest_eagle/* @gtdiehl @jcalbert
|
||||||
@@ -296,12 +336,13 @@ homeassistant/components/rfxtrx/* @danielhiversen
|
|||||||
homeassistant/components/ring/* @balloob
|
homeassistant/components/ring/* @balloob
|
||||||
homeassistant/components/rmvtransport/* @cgtobi
|
homeassistant/components/rmvtransport/* @cgtobi
|
||||||
homeassistant/components/roku/* @ctalkington
|
homeassistant/components/roku/* @ctalkington
|
||||||
homeassistant/components/roomba/* @pschmitt
|
homeassistant/components/roomba/* @pschmitt @cyr-ius @shenxn
|
||||||
homeassistant/components/safe_mode/* @home-assistant/core
|
homeassistant/components/safe_mode/* @home-assistant/core
|
||||||
homeassistant/components/saj/* @fredericvl
|
homeassistant/components/saj/* @fredericvl
|
||||||
homeassistant/components/salt/* @bjornorri
|
homeassistant/components/salt/* @bjornorri
|
||||||
homeassistant/components/samsungtv/* @escoand
|
homeassistant/components/samsungtv/* @escoand
|
||||||
homeassistant/components/scene/* @home-assistant/core
|
homeassistant/components/scene/* @home-assistant/core
|
||||||
|
homeassistant/components/schluter/* @prairieapps
|
||||||
homeassistant/components/scrape/* @fabaff
|
homeassistant/components/scrape/* @fabaff
|
||||||
homeassistant/components/script/* @home-assistant/core
|
homeassistant/components/script/* @home-assistant/core
|
||||||
homeassistant/components/search/* @home-assistant/core
|
homeassistant/components/search/* @home-assistant/core
|
||||||
@@ -309,6 +350,7 @@ homeassistant/components/sense/* @kbickar
|
|||||||
homeassistant/components/sensibo/* @andrey-git
|
homeassistant/components/sensibo/* @andrey-git
|
||||||
homeassistant/components/sentry/* @dcramer
|
homeassistant/components/sentry/* @dcramer
|
||||||
homeassistant/components/serial/* @fabaff
|
homeassistant/components/serial/* @fabaff
|
||||||
|
homeassistant/components/seven_segments/* @fabaff
|
||||||
homeassistant/components/seventeentrack/* @bachya
|
homeassistant/components/seventeentrack/* @bachya
|
||||||
homeassistant/components/shell_command/* @home-assistant/core
|
homeassistant/components/shell_command/* @home-assistant/core
|
||||||
homeassistant/components/shiftr/* @fabaff
|
homeassistant/components/shiftr/* @fabaff
|
||||||
@@ -330,12 +372,14 @@ homeassistant/components/solarlog/* @Ernst79
|
|||||||
homeassistant/components/solax/* @squishykid
|
homeassistant/components/solax/* @squishykid
|
||||||
homeassistant/components/soma/* @ratsept
|
homeassistant/components/soma/* @ratsept
|
||||||
homeassistant/components/somfy/* @tetienne
|
homeassistant/components/somfy/* @tetienne
|
||||||
homeassistant/components/songpal/* @rytilahti
|
homeassistant/components/sonarr/* @ctalkington
|
||||||
|
homeassistant/components/songpal/* @rytilahti @shenxn
|
||||||
homeassistant/components/spaceapi/* @fabaff
|
homeassistant/components/spaceapi/* @fabaff
|
||||||
homeassistant/components/speedtestdotnet/* @rohankapoorcom
|
homeassistant/components/speedtestdotnet/* @rohankapoorcom
|
||||||
homeassistant/components/spider/* @peternijssen
|
homeassistant/components/spider/* @peternijssen
|
||||||
homeassistant/components/spotify/* @frenck
|
homeassistant/components/spotify/* @frenck
|
||||||
homeassistant/components/sql/* @dgomes
|
homeassistant/components/sql/* @dgomes
|
||||||
|
homeassistant/components/squeezebox/* @rajlaud
|
||||||
homeassistant/components/starline/* @anonym-tsk
|
homeassistant/components/starline/* @anonym-tsk
|
||||||
homeassistant/components/statistics/* @fabaff
|
homeassistant/components/statistics/* @fabaff
|
||||||
homeassistant/components/stiebel_eltron/* @fucm
|
homeassistant/components/stiebel_eltron/* @fucm
|
||||||
@@ -352,9 +396,10 @@ homeassistant/components/switchbot/* @danielhiversen
|
|||||||
homeassistant/components/switcher_kis/* @tomerfi
|
homeassistant/components/switcher_kis/* @tomerfi
|
||||||
homeassistant/components/switchmate/* @danielhiversen
|
homeassistant/components/switchmate/* @danielhiversen
|
||||||
homeassistant/components/syncthru/* @nielstron
|
homeassistant/components/syncthru/* @nielstron
|
||||||
|
homeassistant/components/synology_dsm/* @ProtoThis @Quentame
|
||||||
homeassistant/components/synology_srm/* @aerialls
|
homeassistant/components/synology_srm/* @aerialls
|
||||||
homeassistant/components/syslog/* @fabaff
|
homeassistant/components/syslog/* @fabaff
|
||||||
homeassistant/components/tado/* @michaelarnauts
|
homeassistant/components/tado/* @michaelarnauts @bdraco
|
||||||
homeassistant/components/tahoma/* @philklei
|
homeassistant/components/tahoma/* @philklei
|
||||||
homeassistant/components/tankerkoenig/* @guillempages
|
homeassistant/components/tankerkoenig/* @guillempages
|
||||||
homeassistant/components/tautulli/* @ludeeus
|
homeassistant/components/tautulli/* @ludeeus
|
||||||
@@ -377,12 +422,14 @@ homeassistant/components/tradfri/* @ggravlingen
|
|||||||
homeassistant/components/trafikverket_train/* @endor-force
|
homeassistant/components/trafikverket_train/* @endor-force
|
||||||
homeassistant/components/transmission/* @engrbm87 @JPHutchins
|
homeassistant/components/transmission/* @engrbm87 @JPHutchins
|
||||||
homeassistant/components/tts/* @pvizeli
|
homeassistant/components/tts/* @pvizeli
|
||||||
|
homeassistant/components/tuya/* @ollo69
|
||||||
homeassistant/components/twentemilieu/* @frenck
|
homeassistant/components/twentemilieu/* @frenck
|
||||||
homeassistant/components/twilio_call/* @robbiet480
|
homeassistant/components/twilio_call/* @robbiet480
|
||||||
homeassistant/components/twilio_sms/* @robbiet480
|
homeassistant/components/twilio_sms/* @robbiet480
|
||||||
homeassistant/components/ubee/* @mzdrale
|
homeassistant/components/ubee/* @mzdrale
|
||||||
homeassistant/components/unifi/* @kane610
|
homeassistant/components/unifi/* @Kane610
|
||||||
homeassistant/components/unifiled/* @florisvdk
|
homeassistant/components/unifiled/* @florisvdk
|
||||||
|
homeassistant/components/upb/* @gwww
|
||||||
homeassistant/components/upc_connect/* @pvizeli
|
homeassistant/components/upc_connect/* @pvizeli
|
||||||
homeassistant/components/upcloud/* @scop
|
homeassistant/components/upcloud/* @scop
|
||||||
homeassistant/components/updater/* @home-assistant/core
|
homeassistant/components/updater/* @home-assistant/core
|
||||||
@@ -392,6 +439,7 @@ homeassistant/components/usgs_earthquakes_feed/* @exxamalte
|
|||||||
homeassistant/components/utility_meter/* @dgomes
|
homeassistant/components/utility_meter/* @dgomes
|
||||||
homeassistant/components/velbus/* @Cereal2nd @brefra
|
homeassistant/components/velbus/* @Cereal2nd @brefra
|
||||||
homeassistant/components/velux/* @Julius2342
|
homeassistant/components/velux/* @Julius2342
|
||||||
|
homeassistant/components/vera/* @vangorra
|
||||||
homeassistant/components/versasense/* @flamm3blemuff1n
|
homeassistant/components/versasense/* @flamm3blemuff1n
|
||||||
homeassistant/components/version/* @fabaff
|
homeassistant/components/version/* @fabaff
|
||||||
homeassistant/components/vesync/* @markperdue @webdjoe
|
homeassistant/components/vesync/* @markperdue @webdjoe
|
||||||
@@ -406,11 +454,11 @@ homeassistant/components/weather/* @fabaff
|
|||||||
homeassistant/components/webostv/* @bendavid
|
homeassistant/components/webostv/* @bendavid
|
||||||
homeassistant/components/websocket_api/* @home-assistant/core
|
homeassistant/components/websocket_api/* @home-assistant/core
|
||||||
homeassistant/components/wemo/* @sqldiablo
|
homeassistant/components/wemo/* @sqldiablo
|
||||||
|
homeassistant/components/wiffi/* @mampfes
|
||||||
homeassistant/components/withings/* @vangorra
|
homeassistant/components/withings/* @vangorra
|
||||||
homeassistant/components/wled/* @frenck
|
homeassistant/components/wled/* @frenck
|
||||||
homeassistant/components/workday/* @fabaff
|
homeassistant/components/workday/* @fabaff
|
||||||
homeassistant/components/worldclock/* @fabaff
|
homeassistant/components/worldclock/* @fabaff
|
||||||
homeassistant/components/wwlln/* @bachya
|
|
||||||
homeassistant/components/xbox_live/* @MartinHjelmare
|
homeassistant/components/xbox_live/* @MartinHjelmare
|
||||||
homeassistant/components/xfinity/* @cisasteelersfan
|
homeassistant/components/xfinity/* @cisasteelersfan
|
||||||
homeassistant/components/xiaomi_aqara/* @danielhiversen @syssi
|
homeassistant/components/xiaomi_aqara/* @danielhiversen @syssi
|
||||||
@@ -425,6 +473,7 @@ homeassistant/components/yessssms/* @flowolf
|
|||||||
homeassistant/components/yi/* @bachya
|
homeassistant/components/yi/* @bachya
|
||||||
homeassistant/components/yr/* @danielhiversen
|
homeassistant/components/yr/* @danielhiversen
|
||||||
homeassistant/components/zeroconf/* @robbiet480 @Kane610
|
homeassistant/components/zeroconf/* @robbiet480 @Kane610
|
||||||
|
homeassistant/components/zerproc/* @emlove
|
||||||
homeassistant/components/zha/* @dmulcahey @adminiuga
|
homeassistant/components/zha/* @dmulcahey @adminiuga
|
||||||
homeassistant/components/zone/* @home-assistant/core
|
homeassistant/components/zone/* @home-assistant/core
|
||||||
homeassistant/components/zoneminder/* @rohankapoorcom
|
homeassistant/components/zoneminder/* @rohankapoorcom
|
||||||
|
@@ -2,79 +2,139 @@
|
|||||||
|
|
||||||
## Our Pledge
|
## Our Pledge
|
||||||
|
|
||||||
In the interest of fostering an open and welcoming environment, we as
|
We as members, contributors, and leaders pledge to make participation in our
|
||||||
contributors and maintainers pledge to making participation in our project and
|
community a harassment-free experience for everyone, regardless of age, body
|
||||||
our community a harassment-free experience for everyone, regardless of age, body
|
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||||
size, disability, ethnicity, gender identity and expression, level of experience,
|
identity and expression, level of experience, education, socio-economic status,
|
||||||
nationality, personal appearance, race, religion, or sexual identity and
|
nationality, personal appearance, race, religion, or sexual identity
|
||||||
orientation.
|
and orientation.
|
||||||
|
|
||||||
|
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||||
|
diverse, inclusive, and healthy community.
|
||||||
|
|
||||||
## Our Standards
|
## Our Standards
|
||||||
|
|
||||||
Examples of behavior that contributes to creating a positive environment
|
Examples of behavior that contributes to a positive environment for our
|
||||||
include:
|
community include:
|
||||||
|
|
||||||
* Using welcoming and inclusive language
|
* Demonstrating empathy and kindness toward other people
|
||||||
* Being respectful of differing viewpoints and experiences
|
* Being respectful of differing opinions, viewpoints, and experiences
|
||||||
* Gracefully accepting constructive criticism
|
* Giving and gracefully accepting constructive feedback
|
||||||
* Focusing on what is best for the community
|
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||||
* Showing empathy towards other community members
|
and learning from the experience
|
||||||
|
* Focusing on what is best not just for us as individuals, but for the
|
||||||
|
overall community
|
||||||
|
|
||||||
Examples of unacceptable behavior by participants include:
|
Examples of unacceptable behavior include:
|
||||||
|
|
||||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
* The use of sexualized language or imagery, and sexual attention or
|
||||||
advances
|
advances of any kind
|
||||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||||
* Public or private harassment
|
* Public or private harassment
|
||||||
* Publishing others' private information, such as a physical or electronic
|
* Publishing others' private information, such as a physical or email
|
||||||
address, without explicit permission
|
address, without their explicit permission
|
||||||
* Other conduct which could reasonably be considered inappropriate in a
|
* Other conduct which could reasonably be considered inappropriate in a
|
||||||
professional setting
|
professional setting
|
||||||
|
|
||||||
## Our Responsibilities
|
## Enforcement Responsibilities
|
||||||
|
|
||||||
Project maintainers are responsible for clarifying the standards of acceptable
|
Community leaders are responsible for clarifying and enforcing our standards of
|
||||||
behavior and are expected to take appropriate and fair corrective action in
|
acceptable behavior and will take appropriate and fair corrective action in
|
||||||
response to any instances of unacceptable behavior.
|
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||||
|
or harmful.
|
||||||
|
|
||||||
Project maintainers have the right and responsibility to remove, edit, or
|
Community leaders have the right and responsibility to remove, edit, or reject
|
||||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||||
permanently any contributor for other behaviors that they deem inappropriate,
|
decisions when appropriate.
|
||||||
threatening, offensive, or harmful.
|
|
||||||
|
|
||||||
## Scope
|
## Scope
|
||||||
|
|
||||||
This Code of Conduct applies both within project spaces and in public spaces
|
This Code of Conduct applies within all community spaces, and also applies when
|
||||||
when an individual is representing the project or its community. Examples of
|
an individual is officially representing the community in public spaces.
|
||||||
representing a project or community include using an official project e-mail
|
Examples of representing our community include using an official e-mail address,
|
||||||
address, posting via an official social media account, or acting as an appointed
|
posting via an official social media account, or acting as an appointed
|
||||||
representative at an online or offline event. Representation of a project may be
|
representative at an online or offline event.
|
||||||
further defined and clarified by project maintainers.
|
|
||||||
|
|
||||||
## Enforcement
|
## Enforcement
|
||||||
|
|
||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
reported by contacting the project team at [safety@home-assistant.io][email]. All
|
reported to the community leaders responsible for enforcement at
|
||||||
complaints will be reviewed and investigated and will result in a response that
|
[safety@home-assistant.io][email] or by using the report/flag feature of
|
||||||
is deemed necessary and appropriate to the circumstances. The project team is
|
the medium used. All complaints will be reviewed and investigated promptly and
|
||||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
fairly.
|
||||||
Further details of specific enforcement policies may be posted separately.
|
|
||||||
|
|
||||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
All community leaders are obligated to respect the privacy and security of the
|
||||||
faith may face temporary or permanent repercussions as determined by other
|
reporter of any incident.
|
||||||
members of the project's leadership.
|
|
||||||
|
## Enforcement Guidelines
|
||||||
|
|
||||||
|
Community leaders will follow these Community Impact Guidelines in determining
|
||||||
|
the consequences for any action they deem in violation of this Code of Conduct:
|
||||||
|
|
||||||
|
### 1. Correction
|
||||||
|
|
||||||
|
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||||
|
unprofessional or unwelcome in the community.
|
||||||
|
|
||||||
|
**Consequence**: A private, written warning from community leaders, providing
|
||||||
|
clarity around the nature of the violation and an explanation of why the
|
||||||
|
behavior was inappropriate. A public apology may be requested.
|
||||||
|
|
||||||
|
### 2. Warning
|
||||||
|
|
||||||
|
**Community Impact**: A violation through a single incident or series
|
||||||
|
of actions.
|
||||||
|
|
||||||
|
**Consequence**: A warning with consequences for continued behavior. No
|
||||||
|
interaction with the people involved, including unsolicited interaction with
|
||||||
|
those enforcing the Code of Conduct, for a specified period of time. This
|
||||||
|
includes avoiding interactions in community spaces as well as external channels
|
||||||
|
like social media. Violating these terms may lead to a temporary or
|
||||||
|
permanent ban.
|
||||||
|
|
||||||
|
### 3. Temporary Ban
|
||||||
|
|
||||||
|
**Community Impact**: A serious violation of community standards, including
|
||||||
|
sustained inappropriate behavior.
|
||||||
|
|
||||||
|
**Consequence**: A temporary ban from any sort of interaction or public
|
||||||
|
communication with the community for a specified period of time. No public or
|
||||||
|
private interaction with the people involved, including unsolicited interaction
|
||||||
|
with those enforcing the Code of Conduct, is allowed during this period.
|
||||||
|
Violating these terms may lead to a permanent ban.
|
||||||
|
|
||||||
|
### 4. Permanent Ban
|
||||||
|
|
||||||
|
**Community Impact**: Demonstrating a pattern of violation of community
|
||||||
|
standards, including sustained inappropriate behavior, harassment of an
|
||||||
|
individual, or aggression toward or disparagement of classes of individuals.
|
||||||
|
|
||||||
|
**Consequence**: A permanent ban from any sort of public interaction within
|
||||||
|
the community.
|
||||||
|
|
||||||
## Attribution
|
## Attribution
|
||||||
|
|
||||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||||
available [here][version].
|
version 2.0, available [here][version].
|
||||||
|
|
||||||
|
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||||
|
enforcement ladder][mozilla].
|
||||||
|
|
||||||
## Adoption
|
## Adoption
|
||||||
|
|
||||||
This Code of Conduct was first adopted January 21st, 2017 and announced in [this][coc-blog] blog post.
|
This Code of Conduct was first adopted January 21st, 2017 and announced in
|
||||||
|
[this][coc-blog] blog post and has been updated on May 25th, 2020 to version
|
||||||
|
2.0 of the [Contributor Covenant][homepage] as announced in [this][coc2-blog]
|
||||||
|
blog post.
|
||||||
|
|
||||||
[homepage]: http://contributor-covenant.org
|
For answers to common questions about this code of conduct, see the FAQ at
|
||||||
[version]: http://contributor-covenant.org/version/1/4/
|
<https://www.contributor-covenant.org/faq>. Translations are available at
|
||||||
|
<https://www.contributor-covenant.org/translations>.
|
||||||
|
|
||||||
|
[coc-blog]: /blog/2017/01/21/home-assistant-governance/
|
||||||
|
[coc2-blog]: /blog/2020/05/25/code-of-conduct-updated/
|
||||||
[email]: mailto:safety@home-assistant.io
|
[email]: mailto:safety@home-assistant.io
|
||||||
[coc-blog]: https://home-assistant.io/blog/2017/01/21/home-assistant-governance/
|
[homepage]: http://contributor-covenant.org
|
||||||
|
[mozilla]: https://github.com/mozilla/diversity
|
||||||
|
[version]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
|
||||||
|
@@ -1,11 +1,15 @@
|
|||||||
ARG BUILD_FROM
|
ARG BUILD_FROM
|
||||||
FROM ${BUILD_FROM}
|
FROM ${BUILD_FROM}
|
||||||
|
|
||||||
|
ENV \
|
||||||
|
S6_SERVICES_GRACETIME=60000
|
||||||
|
|
||||||
WORKDIR /usr/src
|
WORKDIR /usr/src
|
||||||
|
|
||||||
## Setup Home Assistant
|
## Setup Home Assistant
|
||||||
COPY . homeassistant/
|
COPY . homeassistant/
|
||||||
RUN pip3 install --no-cache-dir --no-index --only-binary=:all: --find-links "${WHEELS_LINKS}" \
|
RUN \
|
||||||
|
pip3 install --no-cache-dir --no-index --only-binary=:all: --find-links "${WHEELS_LINKS}" \
|
||||||
-r homeassistant/requirements_all.txt -c homeassistant/homeassistant/package_constraints.txt \
|
-r homeassistant/requirements_all.txt -c homeassistant/homeassistant/package_constraints.txt \
|
||||||
&& pip3 install --no-cache-dir --no-index --only-binary=:all: --find-links "${WHEELS_LINKS}" \
|
&& pip3 install --no-cache-dir --no-index --only-binary=:all: --find-links "${WHEELS_LINKS}" \
|
||||||
-e ./homeassistant \
|
-e ./homeassistant \
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
FROM python:3.7
|
FROM mcr.microsoft.com/vscode/devcontainers/python:0-3.8
|
||||||
|
|
||||||
RUN apt-get update \
|
RUN \
|
||||||
&& apt-get install -y --no-install-recommends \
|
apt-get update && apt-get install -y --no-install-recommends \
|
||||||
libudev-dev \
|
libudev-dev \
|
||||||
libavformat-dev \
|
libavformat-dev \
|
||||||
libavcodec-dev \
|
libavcodec-dev \
|
||||||
@@ -18,8 +18,7 @@ WORKDIR /usr/src
|
|||||||
|
|
||||||
# Setup hass-release
|
# Setup hass-release
|
||||||
RUN git clone --depth 1 https://github.com/home-assistant/hass-release \
|
RUN git clone --depth 1 https://github.com/home-assistant/hass-release \
|
||||||
&& cd hass-release \
|
&& pip3 install -e hass-release/
|
||||||
&& pip3 install -e .
|
|
||||||
|
|
||||||
WORKDIR /workspaces
|
WORKDIR /workspaces
|
||||||
|
|
||||||
|
@@ -16,62 +16,82 @@ resources:
|
|||||||
containers:
|
containers:
|
||||||
- container: 37
|
- container: 37
|
||||||
image: homeassistant/ci-azure:3.7
|
image: homeassistant/ci-azure:3.7
|
||||||
|
- container: 38
|
||||||
|
image: homeassistant/ci-azure:3.8
|
||||||
repositories:
|
repositories:
|
||||||
- repository: azure
|
- repository: azure
|
||||||
type: github
|
type: github
|
||||||
name: 'home-assistant/ci-azure'
|
name: "home-assistant/ci-azure"
|
||||||
endpoint: 'home-assistant'
|
endpoint: "home-assistant"
|
||||||
variables:
|
variables:
|
||||||
- name: PythonMain
|
- name: PythonMain
|
||||||
value: '37'
|
value: "37"
|
||||||
- group: codecov
|
- name: versionHadolint
|
||||||
|
value: "v1.17.6"
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
|
- stage: "Overview"
|
||||||
- stage: 'Overview'
|
|
||||||
jobs:
|
jobs:
|
||||||
- job: 'Lint'
|
- job: "Lint"
|
||||||
pool:
|
pool:
|
||||||
vmImage: 'ubuntu-latest'
|
vmImage: "ubuntu-latest"
|
||||||
container: $[ variables['PythonMain'] ]
|
container: $[ variables['PythonMain'] ]
|
||||||
steps:
|
steps:
|
||||||
- template: templates/azp-step-cache.yaml@azure
|
- template: templates/azp-step-cache.yaml@azure
|
||||||
parameters:
|
parameters:
|
||||||
keyfile: 'requirements_test.txt | homeassistant/package_constraints.txt'
|
keyfile: "requirements_test.txt | homeassistant/package_constraints.txt"
|
||||||
build: |
|
build: |
|
||||||
python -m venv venv
|
python -m venv venv
|
||||||
|
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
pip install -r requirements_test.txt -c homeassistant/package_constraints.txt
|
pip install -r requirements_test.txt -c homeassistant/package_constraints.txt
|
||||||
pre-commit install-hooks
|
pre-commit install-hooks
|
||||||
|
- script: |
|
||||||
|
. venv/bin/activate
|
||||||
|
pre-commit run --hook-stage manual check-executables-have-shebangs --all-files
|
||||||
|
displayName: "Run executables check"
|
||||||
- script: |
|
- script: |
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
pre-commit run codespell --all-files
|
pre-commit run codespell --all-files
|
||||||
displayName: 'Run codespell'
|
displayName: "Run codespell"
|
||||||
- script: |
|
- script: |
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
pre-commit run flake8 --all-files
|
pre-commit run flake8 --all-files
|
||||||
displayName: 'Run flake8'
|
displayName: "Run flake8"
|
||||||
- script: |
|
- script: |
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
pre-commit run bandit --all-files
|
pre-commit run bandit --all-files
|
||||||
displayName: 'Run bandit'
|
displayName: "Run bandit"
|
||||||
- script: |
|
- script: |
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
pre-commit run isort --all-files --show-diff-on-failure
|
pre-commit run isort --all-files --show-diff-on-failure
|
||||||
displayName: 'Run isort'
|
displayName: "Run isort"
|
||||||
- script: |
|
- script: |
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
pre-commit run check-json --all-files
|
pre-commit run check-json --all-files
|
||||||
displayName: 'Run check-json'
|
displayName: "Run check-json"
|
||||||
- job: 'Validate'
|
- script: |
|
||||||
|
. venv/bin/activate
|
||||||
|
pre-commit run yamllint --all-files
|
||||||
|
displayName: "Run yamllint"
|
||||||
|
- script: |
|
||||||
|
. venv/bin/activate
|
||||||
|
pre-commit run pyupgrade --all-files --show-diff-on-failure
|
||||||
|
displayName: "Run pyupgrade"
|
||||||
|
# Prettier seems to hang on Azure, unknown why yet.
|
||||||
|
# Temporarily disable the check to no block PRs
|
||||||
|
# - script: |
|
||||||
|
# . venv/bin/activate
|
||||||
|
# pre-commit run prettier --all-files --show-diff-on-failure
|
||||||
|
# displayName: 'Run prettier'
|
||||||
|
- job: "Validate"
|
||||||
pool:
|
pool:
|
||||||
vmImage: 'ubuntu-latest'
|
vmImage: "ubuntu-latest"
|
||||||
container: $[ variables['PythonMain'] ]
|
container: $[ variables['PythonMain'] ]
|
||||||
steps:
|
steps:
|
||||||
- template: templates/azp-step-cache.yaml@azure
|
- template: templates/azp-step-cache.yaml@azure
|
||||||
parameters:
|
parameters:
|
||||||
keyfile: 'homeassistant/package_constraints.txt'
|
keyfile: "homeassistant/package_constraints.txt"
|
||||||
build: |
|
build: |
|
||||||
python -m venv venv
|
python -m venv venv
|
||||||
|
|
||||||
@@ -79,20 +99,20 @@ stages:
|
|||||||
pip install -e .
|
pip install -e .
|
||||||
- script: |
|
- script: |
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
python -m script.hassfest validate
|
python -m script.hassfest --action validate
|
||||||
displayName: 'Validate manifests'
|
displayName: "Validate manifests"
|
||||||
- script: |
|
- script: |
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
./script/gen_requirements_all.py validate
|
./script/gen_requirements_all.py validate
|
||||||
displayName: 'requirements_all validate'
|
displayName: "requirements_all validate"
|
||||||
- job: 'CheckFormat'
|
- job: "CheckFormat"
|
||||||
pool:
|
pool:
|
||||||
vmImage: 'ubuntu-latest'
|
vmImage: "ubuntu-latest"
|
||||||
container: $[ variables['PythonMain'] ]
|
container: $[ variables['PythonMain'] ]
|
||||||
steps:
|
steps:
|
||||||
- template: templates/azp-step-cache.yaml@azure
|
- template: templates/azp-step-cache.yaml@azure
|
||||||
parameters:
|
parameters:
|
||||||
keyfile: 'requirements_test.txt | homeassistant/package_constraints.txt'
|
keyfile: "requirements_test.txt | homeassistant/package_constraints.txt"
|
||||||
build: |
|
build: |
|
||||||
python -m venv venv
|
python -m venv venv
|
||||||
|
|
||||||
@@ -102,25 +122,43 @@ stages:
|
|||||||
- script: |
|
- script: |
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
pre-commit run black --all-files --show-diff-on-failure
|
pre-commit run black --all-files --show-diff-on-failure
|
||||||
displayName: 'Check Black formatting'
|
displayName: "Check Black formatting"
|
||||||
|
- job: "Docker"
|
||||||
- stage: 'Tests'
|
|
||||||
dependsOn:
|
|
||||||
- 'Overview'
|
|
||||||
jobs:
|
|
||||||
- job: 'PyTest'
|
|
||||||
pool:
|
pool:
|
||||||
vmImage: 'ubuntu-latest'
|
vmImage: "ubuntu-latest"
|
||||||
|
steps:
|
||||||
|
- script: sudo docker pull hadolint/hadolint:$(versionHadolint)
|
||||||
|
displayName: "Install Hadolint"
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
for dockerfile in Dockerfile Dockerfile.dev
|
||||||
|
do
|
||||||
|
echo "Linting: $dockerfile"
|
||||||
|
docker run --rm -i \
|
||||||
|
-v "$(pwd)/.hadolint.yaml:/.hadolint.yaml:ro" \
|
||||||
|
hadolint/hadolint:$(versionHadolint) < "$dockerfile"
|
||||||
|
done
|
||||||
|
displayName: "Run Hadolint"
|
||||||
|
|
||||||
|
- stage: "Tests"
|
||||||
|
dependsOn:
|
||||||
|
- "Overview"
|
||||||
|
jobs:
|
||||||
|
- job: "PyTest"
|
||||||
|
pool:
|
||||||
|
vmImage: "ubuntu-latest"
|
||||||
strategy:
|
strategy:
|
||||||
maxParallel: 3
|
maxParallel: 3
|
||||||
matrix:
|
matrix:
|
||||||
Python37:
|
Python37:
|
||||||
python.container: '37'
|
python.container: "37"
|
||||||
|
Python38:
|
||||||
|
python.container: "38"
|
||||||
container: $[ variables['python.container'] ]
|
container: $[ variables['python.container'] ]
|
||||||
steps:
|
steps:
|
||||||
- template: templates/azp-step-cache.yaml@azure
|
- template: templates/azp-step-cache.yaml@azure
|
||||||
parameters:
|
parameters:
|
||||||
keyfile: 'requirements_test_all.txt | homeassistant/package_constraints.txt'
|
keyfile: "requirements_test_all.txt | requirements_test.txt | homeassistant/package_constraints.txt"
|
||||||
build: |
|
build: |
|
||||||
set -e
|
set -e
|
||||||
python -m venv venv
|
python -m venv venv
|
||||||
@@ -134,37 +172,37 @@ stages:
|
|||||||
- script: |
|
- script: |
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
pip install -e .
|
pip install -e .
|
||||||
displayName: 'Install Home Assistant'
|
displayName: "Install Home Assistant"
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
pytest --timeout=9 --durations=10 -n auto --dist=loadfile -qq -o console_output_style=count -p no:sugar tests
|
pytest --timeout=9 --durations=10 -n auto --dist=loadfile -qq -o console_output_style=count -p no:sugar tests
|
||||||
script/check_dirty
|
script/check_dirty
|
||||||
displayName: 'Run pytest for python $(python.container)'
|
displayName: "Run pytest for python $(python.container)"
|
||||||
condition: and(succeeded(), ne(variables['python.container'], variables['PythonMain']))
|
condition: and(succeeded(), ne(variables['python.container'], variables['PythonMain']))
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
pytest --timeout=9 --durations=10 -n auto --dist=loadfile --cov homeassistant --cov-report html -qq -o console_output_style=count -p no:sugar tests
|
pytest --timeout=9 --durations=10 -n auto --dist=loadfile --cov homeassistant --cov-report html -qq -o console_output_style=count -p no:sugar tests
|
||||||
#codecov --token $(codecovToken)
|
codecov --token $(codecovToken)
|
||||||
script/check_dirty
|
script/check_dirty
|
||||||
displayName: 'Run pytest for python $(python.container) / coverage'
|
displayName: "Run pytest for python $(python.container) / coverage"
|
||||||
condition: and(succeeded(), eq(variables['python.container'], variables['PythonMain']))
|
condition: and(succeeded(), eq(variables['python.container'], variables['PythonMain']))
|
||||||
|
|
||||||
- stage: 'FullCheck'
|
- stage: "FullCheck"
|
||||||
dependsOn:
|
dependsOn:
|
||||||
- 'Overview'
|
- "Overview"
|
||||||
jobs:
|
jobs:
|
||||||
- job: 'Pylint'
|
- job: "Pylint"
|
||||||
pool:
|
pool:
|
||||||
vmImage: 'ubuntu-latest'
|
vmImage: "ubuntu-latest"
|
||||||
container: $[ variables['PythonMain'] ]
|
container: $[ variables['PythonMain'] ]
|
||||||
steps:
|
steps:
|
||||||
- template: templates/azp-step-cache.yaml@azure
|
- template: templates/azp-step-cache.yaml@azure
|
||||||
parameters:
|
parameters:
|
||||||
keyfile: 'requirements_all.txt | requirements_test.txt | homeassistant/package_constraints.txt'
|
keyfile: "requirements_all.txt | requirements_test.txt | homeassistant/package_constraints.txt"
|
||||||
build: |
|
build: |
|
||||||
set -e
|
set -e
|
||||||
python -m venv venv
|
python -m venv venv
|
||||||
@@ -173,22 +211,25 @@ stages:
|
|||||||
pip install -U pip setuptools wheel
|
pip install -U pip setuptools wheel
|
||||||
pip install -r requirements_all.txt -c homeassistant/package_constraints.txt
|
pip install -r requirements_all.txt -c homeassistant/package_constraints.txt
|
||||||
pip install -r requirements_test.txt -c homeassistant/package_constraints.txt
|
pip install -r requirements_test.txt -c homeassistant/package_constraints.txt
|
||||||
|
# This is a TEMP. Eventually we should make sure our 4 dependencies drop typing.
|
||||||
|
# Find offending deps with `pipdeptree -r -p typing`
|
||||||
|
pip uninstall -y typing
|
||||||
- script: |
|
- script: |
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
pip install -e .
|
pip install -e .
|
||||||
displayName: 'Install Home Assistant'
|
displayName: "Install Home Assistant"
|
||||||
- script: |
|
- script: |
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
pylint homeassistant
|
pylint homeassistant
|
||||||
displayName: 'Run pylint'
|
displayName: "Run pylint"
|
||||||
- job: 'Mypy'
|
- job: "Mypy"
|
||||||
pool:
|
pool:
|
||||||
vmImage: 'ubuntu-latest'
|
vmImage: "ubuntu-latest"
|
||||||
container: $[ variables['PythonMain'] ]
|
container: $[ variables['PythonMain'] ]
|
||||||
steps:
|
steps:
|
||||||
- template: templates/azp-step-cache.yaml@azure
|
- template: templates/azp-step-cache.yaml@azure
|
||||||
parameters:
|
parameters:
|
||||||
keyfile: 'requirements_test.txt | setup.py | homeassistant/package_constraints.txt'
|
keyfile: "requirements_test.txt | setup.py | homeassistant/package_constraints.txt"
|
||||||
build: |
|
build: |
|
||||||
python -m venv venv
|
python -m venv venv
|
||||||
|
|
||||||
@@ -198,4 +239,4 @@ stages:
|
|||||||
- script: |
|
- script: |
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
pre-commit run mypy --all-files
|
pre-commit run mypy --all-files
|
||||||
displayName: 'Run mypy'
|
displayName: "Run mypy"
|
||||||
|
@@ -7,7 +7,7 @@ trigger:
|
|||||||
- dev
|
- dev
|
||||||
pr: none
|
pr: none
|
||||||
schedules:
|
schedules:
|
||||||
- cron: "30 0 * * *"
|
- cron: "0 0 * * *"
|
||||||
displayName: "translation update"
|
displayName: "translation update"
|
||||||
branches:
|
branches:
|
||||||
include:
|
include:
|
||||||
@@ -37,7 +37,7 @@ jobs:
|
|||||||
export LOKALISE_TOKEN="$(lokaliseToken)"
|
export LOKALISE_TOKEN="$(lokaliseToken)"
|
||||||
export AZURE_BRANCH="$(Build.SourceBranchName)"
|
export AZURE_BRANCH="$(Build.SourceBranchName)"
|
||||||
|
|
||||||
./script/translations_upload
|
python3 -m script.translations upload
|
||||||
displayName: 'Upload Translation'
|
displayName: 'Upload Translation'
|
||||||
|
|
||||||
- job: 'Download'
|
- job: 'Download'
|
||||||
@@ -54,9 +54,8 @@ jobs:
|
|||||||
- template: templates/azp-step-git-init.yaml@azure
|
- template: templates/azp-step-git-init.yaml@azure
|
||||||
- script: |
|
- script: |
|
||||||
export LOKALISE_TOKEN="$(lokaliseToken)"
|
export LOKALISE_TOKEN="$(lokaliseToken)"
|
||||||
export AZURE_BRANCH="$(Build.SourceBranchName)"
|
|
||||||
|
|
||||||
./script/translations_download
|
python3 -m script.translations download
|
||||||
displayName: 'Download Translation'
|
displayName: 'Download Translation'
|
||||||
- script: |
|
- script: |
|
||||||
git checkout dev
|
git checkout dev
|
||||||
|
@@ -1,7 +1,6 @@
|
|||||||
# https://dev.azure.com/home-assistant
|
# https://dev.azure.com/home-assistant
|
||||||
|
|
||||||
trigger:
|
trigger:
|
||||||
batch: true
|
|
||||||
branches:
|
branches:
|
||||||
include:
|
include:
|
||||||
- dev
|
- dev
|
||||||
@@ -16,7 +15,6 @@ schedules:
|
|||||||
branches:
|
branches:
|
||||||
include:
|
include:
|
||||||
- dev
|
- dev
|
||||||
always: true
|
|
||||||
variables:
|
variables:
|
||||||
- name: versionWheels
|
- name: versionWheels
|
||||||
value: '1.10.1-3.7-alpine3.11'
|
value: '1.10.1-3.7-alpine3.11'
|
||||||
@@ -73,4 +71,4 @@ jobs:
|
|||||||
sed -i "s|# bme680|bme680|g" ${requirement_file}
|
sed -i "s|# bme680|bme680|g" ${requirement_file}
|
||||||
sed -i "s|# python-gammu|python-gammu|g" ${requirement_file}
|
sed -i "s|# python-gammu|python-gammu|g" ${requirement_file}
|
||||||
done
|
done
|
||||||
displayName: 'Prepare requirements files for Hass.io'
|
displayName: 'Prepare requirements files for Home Assistant wheels'
|
||||||
|
10
build.json
10
build.json
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"image": "homeassistant/{arch}-homeassistant",
|
"image": "homeassistant/{arch}-homeassistant",
|
||||||
"build_from": {
|
"build_from": {
|
||||||
"aarch64": "homeassistant/aarch64-homeassistant-base:7.0.1",
|
"aarch64": "homeassistant/aarch64-homeassistant-base:7.2.0",
|
||||||
"armhf": "homeassistant/armhf-homeassistant-base:7.0.1",
|
"armhf": "homeassistant/armhf-homeassistant-base:7.2.0",
|
||||||
"armv7": "homeassistant/armv7-homeassistant-base:7.0.1",
|
"armv7": "homeassistant/armv7-homeassistant-base:7.2.0",
|
||||||
"amd64": "homeassistant/amd64-homeassistant-base:7.0.1",
|
"amd64": "homeassistant/amd64-homeassistant-base:7.2.0",
|
||||||
"i386": "homeassistant/i386-homeassistant-base:7.0.1"
|
"i386": "homeassistant/i386-homeassistant-base:7.2.0"
|
||||||
},
|
},
|
||||||
"labels": {
|
"labels": {
|
||||||
"io.hass.type": "core"
|
"io.hass.type": "core"
|
||||||
|
12
codecov.yml
12
codecov.yml
@@ -6,14 +6,4 @@ coverage:
|
|||||||
default:
|
default:
|
||||||
target: 90
|
target: 90
|
||||||
threshold: 0.09
|
threshold: 0.09
|
||||||
notify:
|
comment: false
|
||||||
# Notify codecov room in Discord. The webhook URL (encrypted below) ends in /slack which is why we configure a Slack notification.
|
|
||||||
slack:
|
|
||||||
default:
|
|
||||||
url: "secret:TgWDUM4Jw0w7wMJxuxNF/yhSOHglIo1fGwInJnRLEVPy2P2aLimkoK1mtKCowH5TFw+baUXVXT3eAqefbdvIuM8BjRR4aRji95C6CYyD0QHy4N8i7nn1SQkWDPpS8IthYTg07rUDF7s5guurkKv2RrgoCdnnqjAMSzHoExMOF7xUmblMdhBTWJgBpWEhASJy85w/xxjlsE1xoTkzeJu9Q67pTXtRcn+5kb5/vIzPSYg="
|
|
||||||
comment:
|
|
||||||
require_changes: yes
|
|
||||||
layout: reach
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- !dev
|
|
||||||
|
@@ -8,19 +8,19 @@ Loosely based on https://github.com/astropy/astropy/pull/347
|
|||||||
import os
|
import os
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
__licence__ = 'BSD (3 clause)'
|
__licence__ = "BSD (3 clause)"
|
||||||
|
|
||||||
|
|
||||||
def get_github_url(app, view, path):
|
def get_github_url(app, view, path):
|
||||||
github_fmt = 'https://github.com/{}/{}/{}/{}{}'
|
|
||||||
return (
|
return (
|
||||||
github_fmt.format(app.config.edit_on_github_project, view,
|
f"https://github.com/{app.config.edit_on_github_project}/"
|
||||||
app.config.edit_on_github_branch,
|
f"{view}/{app.config.edit_on_github_branch}/"
|
||||||
app.config.edit_on_github_src_path, path))
|
f"{app.config.edit_on_github_src_path}{path}"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def html_page_context(app, pagename, templatename, context, doctree):
|
def html_page_context(app, pagename, templatename, context, doctree):
|
||||||
if templatename != 'page.html':
|
if templatename != "page.html":
|
||||||
return
|
return
|
||||||
|
|
||||||
if not app.config.edit_on_github_project:
|
if not app.config.edit_on_github_project:
|
||||||
@@ -29,16 +29,16 @@ def html_page_context(app, pagename, templatename, context, doctree):
|
|||||||
if not doctree:
|
if not doctree:
|
||||||
warnings.warn("doctree is None")
|
warnings.warn("doctree is None")
|
||||||
return
|
return
|
||||||
path = os.path.relpath(doctree.get('source'), app.builder.srcdir)
|
path = os.path.relpath(doctree.get("source"), app.builder.srcdir)
|
||||||
show_url = get_github_url(app, 'blob', path)
|
show_url = get_github_url(app, "blob", path)
|
||||||
edit_url = get_github_url(app, 'edit', path)
|
edit_url = get_github_url(app, "edit", path)
|
||||||
|
|
||||||
context['show_on_github_url'] = show_url
|
context["show_on_github_url"] = show_url
|
||||||
context['edit_on_github_url'] = edit_url
|
context["edit_on_github_url"] = edit_url
|
||||||
|
|
||||||
|
|
||||||
def setup(app):
|
def setup(app):
|
||||||
app.add_config_value('edit_on_github_project', '', True)
|
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_branch", "master", True)
|
||||||
app.add_config_value('edit_on_github_src_path', '', True) # 'eg' "docs/"
|
app.add_config_value("edit_on_github_src_path", "", True) # 'eg' "docs/"
|
||||||
app.connect('html-page-context', html_page_context)
|
app.connect("html-page-context", html_page_context)
|
||||||
|
29
docs/source/api/auth.rst
Normal file
29
docs/source/api/auth.rst
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
:mod:`homeassistant.auth`
|
||||||
|
=========================
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.auth
|
||||||
|
:members:
|
||||||
|
|
||||||
|
homeassistant.auth.auth\_store
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.auth.auth_store
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.auth.const
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.auth.const
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.auth.models
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.auth.models
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
@@ -1,7 +1,7 @@
|
|||||||
.. _bootstrap_module:
|
.. _bootstrap_module:
|
||||||
|
|
||||||
:mod:`homeassistant.bootstrap`
|
:mod:`homeassistant.bootstrap`
|
||||||
-------------------------
|
------------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.bootstrap
|
.. automodule:: homeassistant.bootstrap
|
||||||
:members:
|
:members:
|
||||||
|
170
docs/source/api/components.rst
Normal file
170
docs/source/api/components.rst
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
:mod:`homeassistant.components`
|
||||||
|
===============================
|
||||||
|
|
||||||
|
air\_quality
|
||||||
|
--------------------------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.components.air_quality
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
alarm\_control\_panel
|
||||||
|
--------------------------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.components.alarm_control_panel
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
binary\_sensor
|
||||||
|
--------------------------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.components.binary_sensor
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
camera
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.components.camera
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
calendar
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.components.calendar
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
climate
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.components.climate
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
conversation
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.components.conversation
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
cover
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.components.cover
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
device\_tracker
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.components.device_tracker
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
fan
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.components.fan
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
light
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.components.light
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
lock
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.components.lock
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
media\_player
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.components.media_player
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
notify
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.components.notify
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
remote
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.components.remote
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
switch
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.components.switch
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
sensor
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.components.sensor
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
vacuum
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.components.vacuum
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
water\_heater
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.components.water_heater
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
weather
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.components.weather
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
webhook
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.components.webhook
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
7
docs/source/api/config_entries.rst
Normal file
7
docs/source/api/config_entries.rst
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
.. _config_entries_module:
|
||||||
|
|
||||||
|
:mod:`homeassistant.config_entries`
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.config_entries
|
||||||
|
:members:
|
@@ -4,35 +4,4 @@
|
|||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.core
|
.. automodule:: homeassistant.core
|
||||||
|
|
||||||
.. autoclass:: Config
|
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
.. autoclass:: Event
|
|
||||||
:members:
|
|
||||||
|
|
||||||
.. autoclass:: EventBus
|
|
||||||
:members:
|
|
||||||
|
|
||||||
.. autoclass:: HomeAssistant
|
|
||||||
:members:
|
|
||||||
|
|
||||||
.. autoclass:: State
|
|
||||||
:members:
|
|
||||||
|
|
||||||
.. autoclass:: StateMachine
|
|
||||||
:members:
|
|
||||||
|
|
||||||
.. autoclass:: ServiceCall
|
|
||||||
:members:
|
|
||||||
|
|
||||||
.. autoclass:: ServiceRegistry
|
|
||||||
:members:
|
|
||||||
|
|
||||||
Module contents
|
|
||||||
---------------
|
|
||||||
|
|
||||||
.. automodule:: homeassistant.core
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
|
7
docs/source/api/data_entry_flow.rst
Normal file
7
docs/source/api/data_entry_flow.rst
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
.. _data_entry_flow_module:
|
||||||
|
|
||||||
|
:mod:`homeassistant.data_entry_flow`
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.data_entry_flow
|
||||||
|
:members:
|
@@ -1,10 +0,0 @@
|
|||||||
.. _components_device_tracker_module:
|
|
||||||
|
|
||||||
:mod:`homeassistant.components.device_tracker`
|
|
||||||
----------------------------------------------
|
|
||||||
|
|
||||||
.. automodule:: homeassistant.components.device_tracker
|
|
||||||
:members:
|
|
||||||
|
|
||||||
.. autoclass:: Device
|
|
||||||
:members:
|
|
@@ -1,12 +0,0 @@
|
|||||||
.. _helpers_entity_module:
|
|
||||||
|
|
||||||
:mod:`homeassistant.helpers.entity`
|
|
||||||
-----------------------------------
|
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.entity
|
|
||||||
|
|
||||||
.. autoclass:: Entity
|
|
||||||
:members:
|
|
||||||
|
|
||||||
.. autoclass:: ToggleEntity
|
|
||||||
:members:
|
|
@@ -1,20 +0,0 @@
|
|||||||
.. _helpers_event_module:
|
|
||||||
|
|
||||||
:mod:`homeassistant.helpers.event`
|
|
||||||
----------------------------------
|
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.event
|
|
||||||
|
|
||||||
.. autofunction:: track_state_change
|
|
||||||
|
|
||||||
.. autofunction:: track_point_in_time
|
|
||||||
|
|
||||||
.. autofunction:: track_point_in_utc_time
|
|
||||||
|
|
||||||
.. autofunction:: track_sunrise
|
|
||||||
|
|
||||||
.. autofunction:: track_sunset
|
|
||||||
|
|
||||||
.. autofunction:: track_utc_time_change
|
|
||||||
|
|
||||||
.. autofunction:: track_time_change
|
|
7
docs/source/api/exceptions.rst
Normal file
7
docs/source/api/exceptions.rst
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
.. _exceptions_module:
|
||||||
|
|
||||||
|
:mod:`homeassistant.exceptions`
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.exceptions
|
||||||
|
:members:
|
@@ -1,287 +1,335 @@
|
|||||||
homeassistant.helpers package
|
:mod:`homeassistant.helpers`
|
||||||
=============================
|
============================
|
||||||
|
|
||||||
Submodules
|
.. automodule:: homeassistant.helpers
|
||||||
----------
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.aiohttp_client module
|
homeassistant.helpers.aiohttp\_client
|
||||||
-------------------------------------------
|
-------------------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.aiohttp_client
|
.. automodule:: homeassistant.helpers.aiohttp_client
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.helpers.area\_registry
|
||||||
homeassistant.helpers.area_registry module
|
------------------------------------
|
||||||
------------------------------------------
|
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.area_registry
|
.. automodule:: homeassistant.helpers.area_registry
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.condition module
|
homeassistant.helpers.check\_config
|
||||||
--------------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.helpers.check_config
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.helpers.collection
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.helpers.collection
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.helpers.condition
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.condition
|
.. automodule:: homeassistant.helpers.condition
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.config_entry_flow module
|
homeassistant.helpers.config\_entry\_flow
|
||||||
----------------------------------------------
|
-----------------------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.config_entry_flow
|
.. automodule:: homeassistant.helpers.config_entry_flow
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.config_validation module
|
homeassistant.helpers.config\_entry\_oauth2\_flow
|
||||||
----------------------------------------------
|
-------------------------------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.helpers.config_entry_oauth2_flow
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.helpers.config\_validation
|
||||||
|
----------------------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.config_validation
|
.. automodule:: homeassistant.helpers.config_validation
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.data_entry_flow module
|
homeassistant.helpers.data\_entry\_flow
|
||||||
--------------------------------------------
|
---------------------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.data_entry_flow
|
.. automodule:: homeassistant.helpers.data_entry_flow
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.deprecation module
|
homeassistant.helpers.debounce
|
||||||
----------------------------------------
|
------------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.helpers.debounce
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.helpers.deprecation
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.deprecation
|
.. automodule:: homeassistant.helpers.deprecation
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.device_registry module
|
homeassistant.helpers.device\_registry
|
||||||
--------------------------------------------
|
--------------------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.device_registry
|
.. automodule:: homeassistant.helpers.device_registry
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.discovery module
|
homeassistant.helpers.discovery
|
||||||
--------------------------------------
|
-------------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.discovery
|
.. automodule:: homeassistant.helpers.discovery
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.dispatcher module
|
homeassistant.helpers.dispatcher
|
||||||
---------------------------------------
|
--------------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.dispatcher
|
.. automodule:: homeassistant.helpers.dispatcher
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.entity module
|
homeassistant.helpers.entity
|
||||||
-----------------------------------
|
----------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.entity
|
.. automodule:: homeassistant.helpers.entity
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.entity_component module
|
homeassistant.helpers.entity\_component
|
||||||
---------------------------------------------
|
---------------------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.entity_component
|
.. automodule:: homeassistant.helpers.entity_component
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.entity_platform module
|
homeassistant.helpers.entity\_platform
|
||||||
--------------------------------------------
|
--------------------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.entity_platform
|
.. automodule:: homeassistant.helpers.entity_platform
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.entity_registry module
|
homeassistant.helpers.entity\_registry
|
||||||
--------------------------------------------
|
--------------------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.entity_registry
|
.. automodule:: homeassistant.helpers.entity_registry
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.entity_values module
|
homeassistant.helpers.entity\_values
|
||||||
------------------------------------------
|
------------------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.entity_values
|
.. automodule:: homeassistant.helpers.entity_values
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.entityfilter module
|
homeassistant.helpers.entityfilter
|
||||||
-----------------------------------------
|
----------------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.entityfilter
|
.. automodule:: homeassistant.helpers.entityfilter
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.event module
|
homeassistant.helpers.event
|
||||||
----------------------------------
|
---------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.event
|
.. automodule:: homeassistant.helpers.event
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.icon module
|
homeassistant.helpers.icon
|
||||||
---------------------------------
|
--------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.icon
|
.. automodule:: homeassistant.helpers.icon
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.intent module
|
homeassistant.helpers.integration\_platform
|
||||||
-----------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.helpers.integration_platform
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.helpers.intent
|
||||||
|
----------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.intent
|
.. automodule:: homeassistant.helpers.intent
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.json module
|
homeassistant.helpers.json
|
||||||
---------------------------------
|
--------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.json
|
.. automodule:: homeassistant.helpers.json
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.location module
|
homeassistant.helpers.location
|
||||||
-------------------------------------
|
------------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.location
|
.. automodule:: homeassistant.helpers.location
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.logging module
|
homeassistant.helpers.logging
|
||||||
------------------------------------
|
-----------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.logging
|
.. automodule:: homeassistant.helpers.logging
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.restore_state module
|
homeassistant.helpers.network
|
||||||
------------------------------------------
|
-----------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.helpers.network
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.helpers.restore\_state
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.restore_state
|
.. automodule:: homeassistant.helpers.restore_state
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.script module
|
homeassistant.helpers.script
|
||||||
-----------------------------------
|
----------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.script
|
.. automodule:: homeassistant.helpers.script
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.service module
|
homeassistant.helpers.service
|
||||||
------------------------------------
|
-----------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.service
|
.. automodule:: homeassistant.helpers.service
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.signal module
|
homeassistant.helpers.signal
|
||||||
-----------------------------------
|
-----------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.signal
|
.. automodule:: homeassistant.helpers.signal
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.state module
|
homeassistant.helpers.state
|
||||||
----------------------------------
|
---------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.state
|
.. automodule:: homeassistant.helpers.state
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.storage module
|
homeassistant.helpers.storage
|
||||||
------------------------------------
|
-----------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.storage
|
.. automodule:: homeassistant.helpers.storage
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.sun module
|
homeassistant.helpers.sun
|
||||||
--------------------------------
|
-------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.sun
|
.. automodule:: homeassistant.helpers.sun
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.system_info module
|
homeassistant.helpers.system\_info
|
||||||
----------------------------------------
|
----------------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.system_info
|
.. automodule:: homeassistant.helpers.system_info
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.temperature module
|
homeassistant.helpers.temperature
|
||||||
----------------------------------------
|
---------------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.temperature
|
.. automodule:: homeassistant.helpers.temperature
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.template module
|
homeassistant.helpers.template
|
||||||
-------------------------------------
|
------------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.template
|
.. automodule:: homeassistant.helpers.template
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.translation module
|
homeassistant.helpers.translation
|
||||||
-----------------------------------------
|
---------------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.translation
|
.. automodule:: homeassistant.helpers.translation
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.helpers.typing module
|
homeassistant.helpers.typing
|
||||||
-----------------------------------
|
----------------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers.typing
|
.. automodule:: homeassistant.helpers.typing
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.helpers.update\_coordinator
|
||||||
|
-----------------------------------------
|
||||||
|
|
||||||
Module contents
|
.. automodule:: homeassistant.helpers.update_coordinator
|
||||||
---------------
|
|
||||||
|
|
||||||
.. automodule:: homeassistant.helpers
|
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
@@ -1,70 +0,0 @@
|
|||||||
homeassistant package
|
|
||||||
=====================
|
|
||||||
|
|
||||||
Subpackages
|
|
||||||
-----------
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
|
|
||||||
helpers
|
|
||||||
util
|
|
||||||
|
|
||||||
Submodules
|
|
||||||
----------
|
|
||||||
|
|
||||||
bootstrap module
|
|
||||||
------------------------------
|
|
||||||
|
|
||||||
.. automodule:: homeassistant.bootstrap
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
|
|
||||||
config module
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
.. automodule:: homeassistant.config
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
|
|
||||||
const module
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
.. automodule:: homeassistant.const
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
|
|
||||||
core module
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
.. automodule:: homeassistant.core
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
|
|
||||||
exceptions module
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
.. automodule:: homeassistant.exceptions
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
|
|
||||||
loader module
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
.. automodule:: homeassistant.loader
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
|
|
||||||
|
|
||||||
Module contents
|
|
||||||
---------------
|
|
||||||
|
|
||||||
.. automodule:: homeassistant
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
7
docs/source/api/loader.rst
Normal file
7
docs/source/api/loader.rst
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
.. _loader_module:
|
||||||
|
|
||||||
|
:mod:`homeassistant.loader`
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.loader
|
||||||
|
:members:
|
@@ -1,86 +1,159 @@
|
|||||||
homeassistant.util package
|
:mod:`homeassistant.util`
|
||||||
==========================
|
=========================
|
||||||
|
|
||||||
Submodules
|
.. automodule:: homeassistant.util
|
||||||
----------
|
|
||||||
|
|
||||||
homeassistant.util.async_ module
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
.. automodule:: homeassistant.util.async_
|
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
homeassistant.util.color module
|
homeassistant.util.yaml
|
||||||
-------------------------------
|
-----------------------
|
||||||
|
|
||||||
.. automodule:: homeassistant.util.color
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
|
|
||||||
homeassistant.util.distance module
|
|
||||||
----------------------------------
|
|
||||||
|
|
||||||
.. automodule:: homeassistant.util.distance
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
|
|
||||||
homeassistant.util.dt module
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
.. automodule:: homeassistant.util.dt
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
|
|
||||||
homeassistant.util.location module
|
|
||||||
----------------------------------
|
|
||||||
|
|
||||||
.. automodule:: homeassistant.util.location
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
|
|
||||||
homeassistant.util.package module
|
|
||||||
---------------------------------
|
|
||||||
|
|
||||||
.. automodule:: homeassistant.util.package
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
|
|
||||||
homeassistant.util.temperature module
|
|
||||||
-------------------------------------
|
|
||||||
|
|
||||||
.. automodule:: homeassistant.util.temperature
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
|
|
||||||
homeassistant.util.unit_system module
|
|
||||||
-------------------------------------
|
|
||||||
|
|
||||||
.. automodule:: homeassistant.util.unit_system
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
|
|
||||||
homeassistant.util.yaml module
|
|
||||||
------------------------------
|
|
||||||
|
|
||||||
.. automodule:: homeassistant.util.yaml
|
.. automodule:: homeassistant.util.yaml
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.util.aiohttp
|
||||||
|
--------------------------
|
||||||
|
|
||||||
Module contents
|
.. automodule:: homeassistant.util.aiohttp
|
||||||
---------------
|
:members:
|
||||||
|
:undoc-members:
|
||||||
.. automodule:: homeassistant.util
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.util.async\_
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.util.async_
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.util.color
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.util.color
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.util.decorator
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.util.decorator
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.util.distance
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.util.distance
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.util.dt
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.util.dt
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.util.json
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.util.json
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.util.location
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.util.location
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.util.logging
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.util.logging
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.util.network
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.util.network
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.util.package
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.util.package
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.util.pil
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.util.pil
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.util.pressure
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.util.pressure
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.util.ruamel\_yaml
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.util.ruamel_yaml
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.util.ssl
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.util.ssl
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.util.temperature
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.util.temperature
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.util.unit\_system
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.util.unit_system
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
homeassistant.util.volume
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
.. automodule:: homeassistant.util.volume
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
@@ -1,5 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
#
|
#
|
||||||
# Home-Assistant documentation build configuration file, created by
|
# Home-Assistant documentation build configuration file, created by
|
||||||
# sphinx-quickstart on Sun Aug 28 13:13:10 2016.
|
# sphinx-quickstart on Sun Aug 28 13:13:10 2016.
|
||||||
@@ -23,25 +22,26 @@ import sys
|
|||||||
|
|
||||||
from homeassistant.const import __short_version__, __version__
|
from homeassistant.const import __short_version__, __version__
|
||||||
|
|
||||||
PROJECT_NAME = 'Home Assistant'
|
PROJECT_NAME = "Home Assistant"
|
||||||
PROJECT_PACKAGE_NAME = 'homeassistant'
|
PROJECT_PACKAGE_NAME = "homeassistant"
|
||||||
PROJECT_AUTHOR = 'The Home Assistant Authors'
|
PROJECT_AUTHOR = "The Home Assistant Authors"
|
||||||
PROJECT_COPYRIGHT = ' 2013-2018, {}'.format(PROJECT_AUTHOR)
|
PROJECT_COPYRIGHT = f" 2013-2020, {PROJECT_AUTHOR}"
|
||||||
PROJECT_LONG_DESCRIPTION = ('Home Assistant is an open-source '
|
PROJECT_LONG_DESCRIPTION = (
|
||||||
'home automation platform running on Python 3. '
|
"Home Assistant is an open-source "
|
||||||
'Track and control all devices at home and '
|
"home automation platform running on Python 3. "
|
||||||
'automate control. '
|
"Track and control all devices at home and "
|
||||||
'Installation in less than a minute.')
|
"automate control. "
|
||||||
PROJECT_GITHUB_USERNAME = 'home-assistant'
|
"Installation in less than a minute."
|
||||||
PROJECT_GITHUB_REPOSITORY = 'home-assistant'
|
)
|
||||||
|
PROJECT_GITHUB_USERNAME = "home-assistant"
|
||||||
|
PROJECT_GITHUB_REPOSITORY = "home-assistant"
|
||||||
|
|
||||||
GITHUB_PATH = '{}/{}'.format(
|
GITHUB_PATH = f"{PROJECT_GITHUB_USERNAME}/{PROJECT_GITHUB_REPOSITORY}"
|
||||||
PROJECT_GITHUB_USERNAME, PROJECT_GITHUB_REPOSITORY)
|
GITHUB_URL = f"https://github.com/{GITHUB_PATH}"
|
||||||
GITHUB_URL = 'https://github.com/{}'.format(GITHUB_PATH)
|
|
||||||
|
|
||||||
|
|
||||||
sys.path.insert(0, os.path.abspath('_ext'))
|
sys.path.insert(0, os.path.abspath("_ext"))
|
||||||
sys.path.insert(0, os.path.abspath('../homeassistant'))
|
sys.path.insert(0, os.path.abspath("../homeassistant"))
|
||||||
|
|
||||||
# -- General configuration ------------------------------------------------
|
# -- General configuration ------------------------------------------------
|
||||||
|
|
||||||
@@ -53,27 +53,27 @@ sys.path.insert(0, os.path.abspath('../homeassistant'))
|
|||||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||||
# ones.
|
# ones.
|
||||||
extensions = [
|
extensions = [
|
||||||
'sphinx.ext.autodoc',
|
"sphinx.ext.autodoc",
|
||||||
'sphinx.ext.linkcode',
|
"sphinx.ext.linkcode",
|
||||||
'sphinx_autodoc_annotation',
|
"sphinx_autodoc_annotation",
|
||||||
'edit_on_github'
|
"edit_on_github",
|
||||||
]
|
]
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
templates_path = ['_templates']
|
templates_path = ["_templates"]
|
||||||
|
|
||||||
# The suffix(es) of source filenames.
|
# The suffix(es) of source filenames.
|
||||||
# You can specify multiple suffix as a list of string:
|
# You can specify multiple suffix as a list of string:
|
||||||
#
|
#
|
||||||
# source_suffix = ['.rst', '.md']
|
# source_suffix = ['.rst', '.md']
|
||||||
source_suffix = '.rst'
|
source_suffix = ".rst"
|
||||||
|
|
||||||
# The encoding of source files.
|
# The encoding of source files.
|
||||||
#
|
#
|
||||||
# source_encoding = 'utf-8-sig'
|
# source_encoding = 'utf-8-sig'
|
||||||
|
|
||||||
# The master toctree document.
|
# The master toctree document.
|
||||||
master_doc = 'index'
|
master_doc = "index"
|
||||||
|
|
||||||
# General information about the project.
|
# General information about the project.
|
||||||
project = PROJECT_NAME
|
project = PROJECT_NAME
|
||||||
@@ -89,25 +89,25 @@ version = __short_version__
|
|||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = __version__
|
release = __version__
|
||||||
|
|
||||||
code_branch = 'dev' if 'dev' in __version__ else 'master'
|
code_branch = "dev" if "dev" in __version__ else "master"
|
||||||
|
|
||||||
# Edit on Github config
|
# Edit on Github config
|
||||||
edit_on_github_project = GITHUB_PATH
|
edit_on_github_project = GITHUB_PATH
|
||||||
edit_on_github_branch = code_branch
|
edit_on_github_branch = code_branch
|
||||||
edit_on_github_src_path = 'docs/source/'
|
edit_on_github_src_path = "docs/source/"
|
||||||
|
|
||||||
|
|
||||||
def linkcode_resolve(domain, info):
|
def linkcode_resolve(domain, info):
|
||||||
"""Determine the URL corresponding to Python object."""
|
"""Determine the URL corresponding to Python object."""
|
||||||
if domain != 'py':
|
if domain != "py":
|
||||||
return None
|
return None
|
||||||
modname = info['module']
|
modname = info["module"]
|
||||||
fullname = info['fullname']
|
fullname = info["fullname"]
|
||||||
submod = sys.modules.get(modname)
|
submod = sys.modules.get(modname)
|
||||||
if submod is None:
|
if submod is None:
|
||||||
return None
|
return None
|
||||||
obj = submod
|
obj = submod
|
||||||
for part in fullname.split('.'):
|
for part in fullname.split("."):
|
||||||
try:
|
try:
|
||||||
obj = getattr(obj, part)
|
obj = getattr(obj, part)
|
||||||
except:
|
except:
|
||||||
@@ -132,7 +132,8 @@ def linkcode_resolve(domain, info):
|
|||||||
|
|
||||||
fn = fn[index:]
|
fn = fn[index:]
|
||||||
|
|
||||||
return '{}/blob/{}/{}{}'.format(GITHUB_URL, code_branch, fn, linespec)
|
return f"{GITHUB_URL}/blob/{code_branch}/{fn}{linespec}"
|
||||||
|
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
@@ -175,7 +176,7 @@ exclude_patterns = []
|
|||||||
# show_authors = False
|
# show_authors = False
|
||||||
|
|
||||||
# The name of the Pygments (syntax highlighting) style to use.
|
# The name of the Pygments (syntax highlighting) style to use.
|
||||||
pygments_style = 'sphinx'
|
pygments_style = "sphinx"
|
||||||
|
|
||||||
# A list of ignored prefixes for module index sorting.
|
# A list of ignored prefixes for module index sorting.
|
||||||
# modindex_common_prefix = []
|
# modindex_common_prefix = []
|
||||||
@@ -192,22 +193,22 @@ todo_include_todos = False
|
|||||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||||
# a list of builtin themes.
|
# a list of builtin themes.
|
||||||
#
|
#
|
||||||
html_theme = 'alabaster'
|
html_theme = "alabaster"
|
||||||
|
|
||||||
# Theme options are theme-specific and customize the look and feel of a theme
|
# Theme options are theme-specific and customize the look and feel of a theme
|
||||||
# further. For a list of options available for each theme, see the
|
# further. For a list of options available for each theme, see the
|
||||||
# documentation.
|
# documentation.
|
||||||
#
|
#
|
||||||
html_theme_options = {
|
html_theme_options = {
|
||||||
'logo': 'logo.png',
|
"logo": "logo.png",
|
||||||
'logo_name': PROJECT_NAME,
|
"logo_name": PROJECT_NAME,
|
||||||
'description': PROJECT_LONG_DESCRIPTION,
|
"description": PROJECT_LONG_DESCRIPTION,
|
||||||
'github_user': PROJECT_GITHUB_USERNAME,
|
"github_user": PROJECT_GITHUB_USERNAME,
|
||||||
'github_repo': PROJECT_GITHUB_REPOSITORY,
|
"github_repo": PROJECT_GITHUB_REPOSITORY,
|
||||||
'github_type': 'star',
|
"github_type": "star",
|
||||||
'github_banner': True,
|
"github_banner": True,
|
||||||
'travis_button': True,
|
"travis_button": True,
|
||||||
'touch_icon': 'logo-apple.png',
|
"touch_icon": "logo-apple.png",
|
||||||
# 'fixed_sidebar': True, # Re-enable when we have more content
|
# 'fixed_sidebar': True, # Re-enable when we have more content
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -233,12 +234,12 @@ html_theme_options = {
|
|||||||
# This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
# This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||||
# pixels large.
|
# pixels large.
|
||||||
#
|
#
|
||||||
html_favicon = '_static/favicon.ico'
|
html_favicon = "_static/favicon.ico"
|
||||||
|
|
||||||
# Add any paths that contain custom static files (such as style sheets) here,
|
# Add any paths that contain custom static files (such as style sheets) here,
|
||||||
# relative to this directory. They are copied after the builtin static files,
|
# relative to this directory. They are copied after the builtin static files,
|
||||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||||
html_static_path = ['_static']
|
html_static_path = ["_static"]
|
||||||
|
|
||||||
# Add any extra paths that contain custom files (such as robots.txt or
|
# Add any extra paths that contain custom files (such as robots.txt or
|
||||||
# .htaccess) here, relative to this directory. These files are copied
|
# .htaccess) here, relative to this directory. These files are copied
|
||||||
@@ -250,7 +251,7 @@ html_static_path = ['_static']
|
|||||||
# bottom, using the given strftime format.
|
# bottom, using the given strftime format.
|
||||||
# The empty string is equivalent to '%b %d, %Y'.
|
# The empty string is equivalent to '%b %d, %Y'.
|
||||||
#
|
#
|
||||||
html_last_updated_fmt = '%b %d, %Y'
|
html_last_updated_fmt = "%b %d, %Y"
|
||||||
|
|
||||||
# If true, SmartyPants will be used to convert quotes and dashes to
|
# If true, SmartyPants will be used to convert quotes and dashes to
|
||||||
# typographically correct entities.
|
# typographically correct entities.
|
||||||
@@ -260,13 +261,13 @@ html_use_smartypants = True
|
|||||||
# Custom sidebar templates, maps document names to template names.
|
# Custom sidebar templates, maps document names to template names.
|
||||||
#
|
#
|
||||||
html_sidebars = {
|
html_sidebars = {
|
||||||
'**': [
|
"**": [
|
||||||
'about.html',
|
"about.html",
|
||||||
'links.html',
|
"links.html",
|
||||||
'searchbox.html',
|
"searchbox.html",
|
||||||
'sourcelink.html',
|
"sourcelink.html",
|
||||||
'navigation.html',
|
"navigation.html",
|
||||||
'relations.html'
|
"relations.html",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -327,7 +328,7 @@ html_sidebars = {
|
|||||||
# html_search_scorer = 'scorer.js'
|
# html_search_scorer = 'scorer.js'
|
||||||
|
|
||||||
# Output file base name for HTML help builder.
|
# Output file base name for HTML help builder.
|
||||||
htmlhelp_basename = 'Home-Assistantdoc'
|
htmlhelp_basename = "Home-Assistantdoc"
|
||||||
|
|
||||||
# -- Options for LaTeX output ---------------------------------------------
|
# -- Options for LaTeX output ---------------------------------------------
|
||||||
|
|
||||||
@@ -335,15 +336,12 @@ latex_elements = {
|
|||||||
# The paper size ('letterpaper' or 'a4paper').
|
# The paper size ('letterpaper' or 'a4paper').
|
||||||
#
|
#
|
||||||
# 'papersize': 'letterpaper',
|
# 'papersize': 'letterpaper',
|
||||||
|
|
||||||
# The font size ('10pt', '11pt' or '12pt').
|
# The font size ('10pt', '11pt' or '12pt').
|
||||||
#
|
#
|
||||||
# 'pointsize': '10pt',
|
# 'pointsize': '10pt',
|
||||||
|
|
||||||
# Additional stuff for the LaTeX preamble.
|
# Additional stuff for the LaTeX preamble.
|
||||||
#
|
#
|
||||||
# 'preamble': '',
|
# 'preamble': '',
|
||||||
|
|
||||||
# Latex figure (float) alignment
|
# Latex figure (float) alignment
|
||||||
#
|
#
|
||||||
# 'figure_align': 'htbp',
|
# 'figure_align': 'htbp',
|
||||||
@@ -353,8 +351,13 @@ latex_elements = {
|
|||||||
# (source start file, target name, title,
|
# (source start file, target name, title,
|
||||||
# author, documentclass [howto, manual, or own class]).
|
# author, documentclass [howto, manual, or own class]).
|
||||||
latex_documents = [
|
latex_documents = [
|
||||||
(master_doc, 'home-assistant.tex', 'Home Assistant Documentation',
|
(
|
||||||
'Home Assistant Team', 'manual'),
|
master_doc,
|
||||||
|
"home-assistant.tex",
|
||||||
|
"Home Assistant Documentation",
|
||||||
|
"Home Assistant Team",
|
||||||
|
"manual",
|
||||||
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top of
|
# The name of an image file (relative to this directory) to place at the top of
|
||||||
@@ -395,8 +398,7 @@ latex_documents = [
|
|||||||
# One entry per manual page. List of tuples
|
# One entry per manual page. List of tuples
|
||||||
# (source start file, name, description, authors, manual section).
|
# (source start file, name, description, authors, manual section).
|
||||||
man_pages = [
|
man_pages = [
|
||||||
(master_doc, 'home-assistant', 'Home Assistant Documentation',
|
(master_doc, "home-assistant", "Home Assistant Documentation", [author], 1)
|
||||||
[author], 1)
|
|
||||||
]
|
]
|
||||||
|
|
||||||
# If true, show URL addresses after external links.
|
# If true, show URL addresses after external links.
|
||||||
@@ -410,9 +412,15 @@ man_pages = [
|
|||||||
# (source start file, target name, title, author,
|
# (source start file, target name, title, author,
|
||||||
# dir menu entry, description, category)
|
# dir menu entry, description, category)
|
||||||
texinfo_documents = [
|
texinfo_documents = [
|
||||||
(master_doc, 'Home-Assistant', 'Home Assistant Documentation',
|
(
|
||||||
author, 'Home Assistant', 'Open-source home automation platform.',
|
master_doc,
|
||||||
'Miscellaneous'),
|
"Home-Assistant",
|
||||||
|
"Home Assistant Documentation",
|
||||||
|
author,
|
||||||
|
"Home Assistant",
|
||||||
|
"Open-source home automation platform.",
|
||||||
|
"Miscellaneous",
|
||||||
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
# Documents to append as an appendix to all manuals.
|
# Documents to append as an appendix to all manuals.
|
||||||
|
@@ -8,11 +8,14 @@ import sys
|
|||||||
import threading
|
import threading
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
|
import yarl
|
||||||
|
|
||||||
from homeassistant.const import REQUIRED_PYTHON_VER, RESTART_EXIT_CODE, __version__
|
from homeassistant.const import REQUIRED_PYTHON_VER, RESTART_EXIT_CODE, __version__
|
||||||
|
|
||||||
|
|
||||||
def set_loop() -> None:
|
def set_loop() -> None:
|
||||||
"""Attempt to use different loop."""
|
"""Attempt to use different loop."""
|
||||||
|
# pylint: disable=import-outside-toplevel
|
||||||
from asyncio.events import BaseDefaultEventLoopPolicy
|
from asyncio.events import BaseDefaultEventLoopPolicy
|
||||||
|
|
||||||
if sys.platform == "win32":
|
if sys.platform == "win32":
|
||||||
@@ -35,15 +38,15 @@ def validate_python() -> None:
|
|||||||
"""Validate that the right Python version is running."""
|
"""Validate that the right Python version is running."""
|
||||||
if sys.version_info[:3] < REQUIRED_PYTHON_VER:
|
if sys.version_info[:3] < REQUIRED_PYTHON_VER:
|
||||||
print(
|
print(
|
||||||
"Home Assistant requires at least Python {}.{}.{}".format(
|
"Home Assistant requires at least Python "
|
||||||
*REQUIRED_PYTHON_VER
|
f"{REQUIRED_PYTHON_VER[0]}.{REQUIRED_PYTHON_VER[1]}.{REQUIRED_PYTHON_VER[2]}"
|
||||||
)
|
|
||||||
)
|
)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
def ensure_config_path(config_dir: str) -> None:
|
def ensure_config_path(config_dir: str) -> None:
|
||||||
"""Validate the configuration directory."""
|
"""Validate the configuration directory."""
|
||||||
|
# pylint: disable=import-outside-toplevel
|
||||||
import homeassistant.config as config_util
|
import homeassistant.config as config_util
|
||||||
|
|
||||||
lib_dir = os.path.join(config_dir, "deps")
|
lib_dir = os.path.join(config_dir, "deps")
|
||||||
@@ -77,6 +80,7 @@ def ensure_config_path(config_dir: str) -> None:
|
|||||||
|
|
||||||
def get_arguments() -> argparse.Namespace:
|
def get_arguments() -> argparse.Namespace:
|
||||||
"""Get parsed passed in arguments."""
|
"""Get parsed passed in arguments."""
|
||||||
|
# pylint: disable=import-outside-toplevel
|
||||||
import homeassistant.config as config_util
|
import homeassistant.config as config_util
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
@@ -164,7 +168,7 @@ def daemonize() -> None:
|
|||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
# redirect standard file descriptors to devnull
|
# redirect standard file descriptors to devnull
|
||||||
infd = open(os.devnull, "r")
|
infd = open(os.devnull)
|
||||||
outfd = open(os.devnull, "a+")
|
outfd = open(os.devnull, "a+")
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
sys.stderr.flush()
|
sys.stderr.flush()
|
||||||
@@ -177,7 +181,7 @@ def check_pid(pid_file: str) -> None:
|
|||||||
"""Check that Home Assistant is not already running."""
|
"""Check that Home Assistant is not already running."""
|
||||||
# Check pid file
|
# Check pid file
|
||||||
try:
|
try:
|
||||||
with open(pid_file, "r") as file:
|
with open(pid_file) as file:
|
||||||
pid = int(file.readline())
|
pid = int(file.readline())
|
||||||
except OSError:
|
except OSError:
|
||||||
# PID File does not exist
|
# PID File does not exist
|
||||||
@@ -214,6 +218,7 @@ def closefds_osx(min_fd: int, max_fd: int) -> None:
|
|||||||
are guarded. But we can set the close-on-exec flag on everything we want to
|
are guarded. But we can set the close-on-exec flag on everything we want to
|
||||||
get rid of.
|
get rid of.
|
||||||
"""
|
"""
|
||||||
|
# pylint: disable=import-outside-toplevel
|
||||||
from fcntl import fcntl, F_GETFD, F_SETFD, FD_CLOEXEC
|
from fcntl import fcntl, F_GETFD, F_SETFD, FD_CLOEXEC
|
||||||
|
|
||||||
for _fd in range(min_fd, max_fd):
|
for _fd in range(min_fd, max_fd):
|
||||||
@@ -237,6 +242,7 @@ def cmdline() -> List[str]:
|
|||||||
|
|
||||||
async def setup_and_run_hass(config_dir: str, args: argparse.Namespace) -> int:
|
async def setup_and_run_hass(config_dir: str, args: argparse.Namespace) -> int:
|
||||||
"""Set up Home Assistant and run."""
|
"""Set up Home Assistant and run."""
|
||||||
|
# pylint: disable=import-outside-toplevel
|
||||||
from homeassistant import bootstrap
|
from homeassistant import bootstrap
|
||||||
|
|
||||||
hass = await bootstrap.async_setup_hass(
|
hass = await bootstrap.async_setup_hass(
|
||||||
@@ -252,10 +258,17 @@ async def setup_and_run_hass(config_dir: str, args: argparse.Namespace) -> int:
|
|||||||
if hass is None:
|
if hass is None:
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
if args.open_ui and hass.config.api is not None:
|
if args.open_ui:
|
||||||
import webbrowser
|
import webbrowser # pylint: disable=import-outside-toplevel
|
||||||
|
|
||||||
hass.add_job(webbrowser.open, hass.config.api.base_url)
|
if hass.config.api is not None:
|
||||||
|
scheme = "https" if hass.config.api.use_ssl else "http"
|
||||||
|
url = str(
|
||||||
|
yarl.URL.build(
|
||||||
|
scheme=scheme, host="127.0.0.1", port=hass.config.api.port
|
||||||
|
)
|
||||||
|
)
|
||||||
|
hass.add_job(webbrowser.open, url)
|
||||||
|
|
||||||
return await hass.async_run()
|
return await hass.async_run()
|
||||||
|
|
||||||
@@ -324,6 +337,7 @@ def main() -> int:
|
|||||||
args = get_arguments()
|
args = get_arguments()
|
||||||
|
|
||||||
if args.script is not None:
|
if args.script is not None:
|
||||||
|
# pylint: disable=import-outside-toplevel
|
||||||
from homeassistant import scripts
|
from homeassistant import scripts
|
||||||
|
|
||||||
return scripts.run(args.script)
|
return scripts.run(args.script)
|
||||||
@@ -339,7 +353,7 @@ def main() -> int:
|
|||||||
if args.pid_file:
|
if args.pid_file:
|
||||||
write_pid(args.pid_file)
|
write_pid(args.pid_file)
|
||||||
|
|
||||||
exit_code = asyncio.run(setup_and_run_hass(config_dir, args))
|
exit_code = asyncio.run(setup_and_run_hass(config_dir, args), debug=args.debug)
|
||||||
if exit_code == RESTART_EXIT_CODE and not args.runner:
|
if exit_code == RESTART_EXIT_CODE and not args.runner:
|
||||||
try_to_restart()
|
try_to_restart()
|
||||||
|
|
||||||
|
@@ -215,12 +215,14 @@ class AuthManager:
|
|||||||
|
|
||||||
return user
|
return user
|
||||||
|
|
||||||
async def async_create_user(self, name: str) -> models.User:
|
async def async_create_user(
|
||||||
|
self, name: str, group_ids: Optional[List[str]] = None
|
||||||
|
) -> models.User:
|
||||||
"""Create a user."""
|
"""Create a user."""
|
||||||
kwargs: Dict[str, Any] = {
|
kwargs: Dict[str, Any] = {
|
||||||
"name": name,
|
"name": name,
|
||||||
"is_active": True,
|
"is_active": True,
|
||||||
"group_ids": [GROUP_ID_ADMIN],
|
"group_ids": group_ids or [],
|
||||||
}
|
}
|
||||||
|
|
||||||
if await self._user_should_be_owner():
|
if await self._user_should_be_owner():
|
||||||
|
@@ -47,28 +47,28 @@ _LOGGER = logging.getLogger(__name__)
|
|||||||
|
|
||||||
def _generate_secret() -> str:
|
def _generate_secret() -> str:
|
||||||
"""Generate a secret."""
|
"""Generate a secret."""
|
||||||
import pyotp
|
import pyotp # pylint: disable=import-outside-toplevel
|
||||||
|
|
||||||
return str(pyotp.random_base32())
|
return str(pyotp.random_base32())
|
||||||
|
|
||||||
|
|
||||||
def _generate_random() -> int:
|
def _generate_random() -> int:
|
||||||
"""Generate a 8 digit number."""
|
"""Generate a 8 digit number."""
|
||||||
import pyotp
|
import pyotp # pylint: disable=import-outside-toplevel
|
||||||
|
|
||||||
return int(pyotp.random_base32(length=8, chars=list("1234567890")))
|
return int(pyotp.random_base32(length=8, chars=list("1234567890")))
|
||||||
|
|
||||||
|
|
||||||
def _generate_otp(secret: str, count: int) -> str:
|
def _generate_otp(secret: str, count: int) -> str:
|
||||||
"""Generate one time password."""
|
"""Generate one time password."""
|
||||||
import pyotp
|
import pyotp # pylint: disable=import-outside-toplevel
|
||||||
|
|
||||||
return str(pyotp.HOTP(secret).at(count))
|
return str(pyotp.HOTP(secret).at(count))
|
||||||
|
|
||||||
|
|
||||||
def _verify_otp(secret: str, otp: str, count: int) -> bool:
|
def _verify_otp(secret: str, otp: str, count: int) -> bool:
|
||||||
"""Verify one time password."""
|
"""Verify one time password."""
|
||||||
import pyotp
|
import pyotp # pylint: disable=import-outside-toplevel
|
||||||
|
|
||||||
return bool(pyotp.HOTP(secret).verify(otp, count))
|
return bool(pyotp.HOTP(secret).verify(otp, count))
|
||||||
|
|
||||||
@@ -204,7 +204,7 @@ class NotifyAuthModule(MultiFactorAuthModule):
|
|||||||
await self._async_load()
|
await self._async_load()
|
||||||
assert self._user_settings is not None
|
assert self._user_settings is not None
|
||||||
|
|
||||||
notify_setting = self._user_settings.get(user_id, None)
|
notify_setting = self._user_settings.get(user_id)
|
||||||
if notify_setting is None:
|
if notify_setting is None:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@@ -222,7 +222,7 @@ class NotifyAuthModule(MultiFactorAuthModule):
|
|||||||
await self._async_load()
|
await self._async_load()
|
||||||
assert self._user_settings is not None
|
assert self._user_settings is not None
|
||||||
|
|
||||||
notify_setting = self._user_settings.get(user_id, None)
|
notify_setting = self._user_settings.get(user_id)
|
||||||
if notify_setting is None:
|
if notify_setting is None:
|
||||||
raise ValueError("Cannot find user_id")
|
raise ValueError("Cannot find user_id")
|
||||||
|
|
||||||
@@ -246,7 +246,7 @@ class NotifyAuthModule(MultiFactorAuthModule):
|
|||||||
await self._async_load()
|
await self._async_load()
|
||||||
assert self._user_settings is not None
|
assert self._user_settings is not None
|
||||||
|
|
||||||
notify_setting = self._user_settings.get(user_id, None)
|
notify_setting = self._user_settings.get(user_id)
|
||||||
if notify_setting is None:
|
if notify_setting is None:
|
||||||
_LOGGER.error("Cannot find user %s", user_id)
|
_LOGGER.error("Cannot find user %s", user_id)
|
||||||
return
|
return
|
||||||
|
@@ -35,13 +35,13 @@ _LOGGER = logging.getLogger(__name__)
|
|||||||
|
|
||||||
def _generate_qr_code(data: str) -> str:
|
def _generate_qr_code(data: str) -> str:
|
||||||
"""Generate a base64 PNG string represent QR Code image of data."""
|
"""Generate a base64 PNG string represent QR Code image of data."""
|
||||||
import pyqrcode
|
import pyqrcode # pylint: disable=import-outside-toplevel
|
||||||
|
|
||||||
qr_code = pyqrcode.create(data)
|
qr_code = pyqrcode.create(data)
|
||||||
|
|
||||||
with BytesIO() as buffer:
|
with BytesIO() as buffer:
|
||||||
qr_code.svg(file=buffer, scale=4)
|
qr_code.svg(file=buffer, scale=4)
|
||||||
return "{}".format(
|
return str(
|
||||||
buffer.getvalue()
|
buffer.getvalue()
|
||||||
.decode("ascii")
|
.decode("ascii")
|
||||||
.replace("\n", "")
|
.replace("\n", "")
|
||||||
@@ -55,7 +55,7 @@ def _generate_qr_code(data: str) -> str:
|
|||||||
|
|
||||||
def _generate_secret_and_qr_code(username: str) -> Tuple[str, str, str]:
|
def _generate_secret_and_qr_code(username: str) -> Tuple[str, str, str]:
|
||||||
"""Generate a secret, url, and QR code."""
|
"""Generate a secret, url, and QR code."""
|
||||||
import pyotp
|
import pyotp # pylint: disable=import-outside-toplevel
|
||||||
|
|
||||||
ota_secret = pyotp.random_base32()
|
ota_secret = pyotp.random_base32()
|
||||||
url = pyotp.totp.TOTP(ota_secret).provisioning_uri(
|
url = pyotp.totp.TOTP(ota_secret).provisioning_uri(
|
||||||
@@ -105,7 +105,7 @@ class TotpAuthModule(MultiFactorAuthModule):
|
|||||||
|
|
||||||
def _add_ota_secret(self, user_id: str, secret: Optional[str] = None) -> str:
|
def _add_ota_secret(self, user_id: str, secret: Optional[str] = None) -> str:
|
||||||
"""Create a ota_secret for user."""
|
"""Create a ota_secret for user."""
|
||||||
import pyotp
|
import pyotp # pylint: disable=import-outside-toplevel
|
||||||
|
|
||||||
ota_secret: str = secret or pyotp.random_base32()
|
ota_secret: str = secret or pyotp.random_base32()
|
||||||
|
|
||||||
@@ -160,7 +160,7 @@ class TotpAuthModule(MultiFactorAuthModule):
|
|||||||
|
|
||||||
def _validate_2fa(self, user_id: str, code: str) -> bool:
|
def _validate_2fa(self, user_id: str, code: str) -> bool:
|
||||||
"""Validate two factor authentication code."""
|
"""Validate two factor authentication code."""
|
||||||
import pyotp
|
import pyotp # pylint: disable=import-outside-toplevel
|
||||||
|
|
||||||
ota_secret = self._users.get(user_id) # type: ignore
|
ota_secret = self._users.get(user_id) # type: ignore
|
||||||
if ota_secret is None:
|
if ota_secret is None:
|
||||||
@@ -195,7 +195,7 @@ class TotpSetupFlow(SetupFlow):
|
|||||||
Return self.async_show_form(step_id='init') if user_input is None.
|
Return self.async_show_form(step_id='init') if user_input is None.
|
||||||
Return self.async_create_entry(data={'result': result}) if finish.
|
Return self.async_create_entry(data={'result': result}) if finish.
|
||||||
"""
|
"""
|
||||||
import pyotp
|
import pyotp # pylint: disable=import-outside-toplevel
|
||||||
|
|
||||||
errors: Dict[str, str] = {}
|
errors: Dict[str, str] = {}
|
||||||
|
|
||||||
|
@@ -123,4 +123,8 @@ class Credentials:
|
|||||||
is_new = attr.ib(type=bool, default=True)
|
is_new = attr.ib(type=bool, default=True)
|
||||||
|
|
||||||
|
|
||||||
UserMeta = NamedTuple("UserMeta", [("name", Optional[str]), ("is_active", bool)])
|
class UserMeta(NamedTuple):
|
||||||
|
"""User metadata."""
|
||||||
|
|
||||||
|
name: Optional[str]
|
||||||
|
is_active: bool
|
||||||
|
@@ -116,7 +116,6 @@ class AuthProvider:
|
|||||||
|
|
||||||
async def async_initialize(self) -> None:
|
async def async_initialize(self) -> None:
|
||||||
"""Initialize the auth provider."""
|
"""Initialize the auth provider."""
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
async def auth_provider_from_config(
|
async def auth_provider_from_config(
|
||||||
|
@@ -61,8 +61,7 @@ class CommandLineAuthProvider(AuthProvider):
|
|||||||
"""Validate a username and password."""
|
"""Validate a username and password."""
|
||||||
env = {"username": username, "password": password}
|
env = {"username": username, "password": password}
|
||||||
try:
|
try:
|
||||||
# pylint: disable=no-member
|
process = await asyncio.subprocess.create_subprocess_exec( # pylint: disable=no-member
|
||||||
process = await asyncio.subprocess.create_subprocess_exec(
|
|
||||||
self.config[CONF_COMMAND],
|
self.config[CONF_COMMAND],
|
||||||
*self.config[CONF_ARGS],
|
*self.config[CONF_ARGS],
|
||||||
env=env,
|
env=env,
|
||||||
|
@@ -138,8 +138,9 @@ class Data:
|
|||||||
if not bcrypt.checkpw(password.encode(), user_hash):
|
if not bcrypt.checkpw(password.encode(), user_hash):
|
||||||
raise InvalidAuth
|
raise InvalidAuth
|
||||||
|
|
||||||
# pylint: disable=no-self-use
|
def hash_password( # pylint: disable=no-self-use
|
||||||
def hash_password(self, password: str, for_storage: bool = False) -> bytes:
|
self, password: str, for_storage: bool = False
|
||||||
|
) -> bytes:
|
||||||
"""Encode a password."""
|
"""Encode a password."""
|
||||||
hashed: bytes = bcrypt.hashpw(password.encode(), bcrypt.gensalt(rounds=12))
|
hashed: bytes = bcrypt.hashpw(password.encode(), bcrypt.gensalt(rounds=12))
|
||||||
|
|
||||||
|
14
homeassistant/block_async_io.py
Normal file
14
homeassistant/block_async_io.py
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
"""Block I/O being done in asyncio."""
|
||||||
|
from http.client import HTTPConnection
|
||||||
|
|
||||||
|
from homeassistant.util.async_ import protect_loop
|
||||||
|
|
||||||
|
|
||||||
|
def enable() -> None:
|
||||||
|
"""Enable the detection of I/O in the event loop."""
|
||||||
|
# Prevent urllib3 and requests doing I/O in event loop
|
||||||
|
HTTPConnection.putrequest = protect_loop(HTTPConnection.putrequest)
|
||||||
|
|
||||||
|
# Currently disabled. pytz doing I/O when getting timezone.
|
||||||
|
# Prevent files being opened inside the event loop
|
||||||
|
# builtins.open = protect_loop(builtins.open)
|
@@ -14,14 +14,14 @@ import voluptuous as vol
|
|||||||
from homeassistant import config as conf_util, config_entries, core, loader
|
from homeassistant import config as conf_util, config_entries, core, loader
|
||||||
from homeassistant.components import http
|
from homeassistant.components import http
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
EVENT_HOMEASSISTANT_CLOSE,
|
|
||||||
EVENT_HOMEASSISTANT_STOP,
|
EVENT_HOMEASSISTANT_STOP,
|
||||||
REQUIRED_NEXT_PYTHON_DATE,
|
REQUIRED_NEXT_PYTHON_DATE,
|
||||||
REQUIRED_NEXT_PYTHON_VER,
|
REQUIRED_NEXT_PYTHON_VER,
|
||||||
)
|
)
|
||||||
from homeassistant.exceptions import HomeAssistantError
|
from homeassistant.exceptions import HomeAssistantError
|
||||||
from homeassistant.setup import DATA_SETUP, async_setup_component
|
from homeassistant.helpers.typing import ConfigType
|
||||||
from homeassistant.util.logging import AsyncHandler
|
from homeassistant.setup import DATA_SETUP, DATA_SETUP_STARTED, async_setup_component
|
||||||
|
from homeassistant.util.logging import async_activate_log_queue_handler
|
||||||
from homeassistant.util.package import async_get_user_site, is_virtual_env
|
from homeassistant.util.package import async_get_user_site, is_virtual_env
|
||||||
from homeassistant.util.yaml import clear_secret_cache
|
from homeassistant.util.yaml import clear_secret_cache
|
||||||
|
|
||||||
@@ -32,6 +32,8 @@ ERROR_LOG_FILENAME = "home-assistant.log"
|
|||||||
# hass.data key for logging information.
|
# hass.data key for logging information.
|
||||||
DATA_LOGGING = "logging"
|
DATA_LOGGING = "logging"
|
||||||
|
|
||||||
|
LOG_SLOW_STARTUP_INTERVAL = 60
|
||||||
|
|
||||||
DEBUGGER_INTEGRATIONS = {"ptvsd"}
|
DEBUGGER_INTEGRATIONS = {"ptvsd"}
|
||||||
CORE_INTEGRATIONS = ("homeassistant", "persistent_notification")
|
CORE_INTEGRATIONS = ("homeassistant", "persistent_notification")
|
||||||
LOGGING_INTEGRATIONS = {"logger", "system_log", "sentry"}
|
LOGGING_INTEGRATIONS = {"logger", "system_log", "sentry"}
|
||||||
@@ -42,6 +44,13 @@ STAGE_1_INTEGRATIONS = {
|
|||||||
"mqtt_eventstream",
|
"mqtt_eventstream",
|
||||||
# To provide account link implementations
|
# To provide account link implementations
|
||||||
"cloud",
|
"cloud",
|
||||||
|
# Ensure supervisor is available
|
||||||
|
"hassio",
|
||||||
|
# Get the frontend up and running as soon
|
||||||
|
# as possible so problem integrations can
|
||||||
|
# be removed
|
||||||
|
"frontend",
|
||||||
|
"config",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -133,7 +142,7 @@ async def async_setup_hass(
|
|||||||
|
|
||||||
|
|
||||||
async def async_from_config_dict(
|
async def async_from_config_dict(
|
||||||
config: Dict[str, Any], hass: core.HomeAssistant
|
config: ConfigType, hass: core.HomeAssistant
|
||||||
) -> Optional[core.HomeAssistant]:
|
) -> Optional[core.HomeAssistant]:
|
||||||
"""Try to configure Home Assistant from a configuration dictionary.
|
"""Try to configure Home Assistant from a configuration dictionary.
|
||||||
|
|
||||||
@@ -214,6 +223,7 @@ def async_enable_logging(
|
|||||||
|
|
||||||
if not log_no_color:
|
if not log_no_color:
|
||||||
try:
|
try:
|
||||||
|
# pylint: disable=import-outside-toplevel
|
||||||
from colorlog import ColoredFormatter
|
from colorlog import ColoredFormatter
|
||||||
|
|
||||||
# basicConfig must be called after importing colorlog in order to
|
# basicConfig must be called after importing colorlog in order to
|
||||||
@@ -247,6 +257,10 @@ def async_enable_logging(
|
|||||||
logging.getLogger("urllib3").setLevel(logging.WARNING)
|
logging.getLogger("urllib3").setLevel(logging.WARNING)
|
||||||
logging.getLogger("aiohttp.access").setLevel(logging.WARNING)
|
logging.getLogger("aiohttp.access").setLevel(logging.WARNING)
|
||||||
|
|
||||||
|
sys.excepthook = lambda *args: logging.getLogger(None).exception(
|
||||||
|
"Uncaught exception", exc_info=args # type: ignore
|
||||||
|
)
|
||||||
|
|
||||||
# Log errors to a file if we have write access to file or config dir
|
# Log errors to a file if we have write access to file or config dir
|
||||||
if log_file is None:
|
if log_file is None:
|
||||||
err_log_path = hass.config.path(ERROR_LOG_FILENAME)
|
err_log_path = hass.config.path(ERROR_LOG_FILENAME)
|
||||||
@@ -272,24 +286,17 @@ def async_enable_logging(
|
|||||||
err_handler.setLevel(logging.INFO if verbose else logging.WARNING)
|
err_handler.setLevel(logging.INFO if verbose else logging.WARNING)
|
||||||
err_handler.setFormatter(logging.Formatter(fmt, datefmt=datefmt))
|
err_handler.setFormatter(logging.Formatter(fmt, datefmt=datefmt))
|
||||||
|
|
||||||
async_handler = AsyncHandler(hass.loop, err_handler)
|
|
||||||
|
|
||||||
async def async_stop_async_handler(_: Any) -> None:
|
|
||||||
"""Cleanup async handler."""
|
|
||||||
logging.getLogger("").removeHandler(async_handler) # type: ignore
|
|
||||||
await async_handler.async_close(blocking=True)
|
|
||||||
|
|
||||||
hass.bus.async_listen_once(EVENT_HOMEASSISTANT_CLOSE, async_stop_async_handler)
|
|
||||||
|
|
||||||
logger = logging.getLogger("")
|
logger = logging.getLogger("")
|
||||||
logger.addHandler(async_handler) # type: ignore
|
logger.addHandler(err_handler)
|
||||||
logger.setLevel(logging.INFO)
|
logger.setLevel(logging.INFO if verbose else logging.WARNING)
|
||||||
|
|
||||||
# Save the log file location for access by other components.
|
# Save the log file location for access by other components.
|
||||||
hass.data[DATA_LOGGING] = err_log_path
|
hass.data[DATA_LOGGING] = err_log_path
|
||||||
else:
|
else:
|
||||||
_LOGGER.error("Unable to set up error log %s (access denied)", err_log_path)
|
_LOGGER.error("Unable to set up error log %s (access denied)", err_log_path)
|
||||||
|
|
||||||
|
async_activate_log_queue_handler(hass)
|
||||||
|
|
||||||
|
|
||||||
async def async_mount_local_lib_path(config_dir: str) -> str:
|
async def async_mount_local_lib_path(config_dir: str) -> str:
|
||||||
"""Add local library to Python Path.
|
"""Add local library to Python Path.
|
||||||
@@ -307,7 +314,7 @@ async def async_mount_local_lib_path(config_dir: str) -> str:
|
|||||||
def _get_domains(hass: core.HomeAssistant, config: Dict[str, Any]) -> Set[str]:
|
def _get_domains(hass: core.HomeAssistant, config: Dict[str, Any]) -> Set[str]:
|
||||||
"""Get domains of components to set up."""
|
"""Get domains of components to set up."""
|
||||||
# Filter out the repeating and common config section [homeassistant]
|
# Filter out the repeating and common config section [homeassistant]
|
||||||
domains = set(key.split(" ")[0] for key in config.keys() if key != core.DOMAIN)
|
domains = {key.split(" ")[0] for key in config.keys() if key != core.DOMAIN}
|
||||||
|
|
||||||
# Add config entry domains
|
# Add config entry domains
|
||||||
if not hass.config.safe_mode:
|
if not hass.config.safe_mode:
|
||||||
@@ -324,15 +331,47 @@ async def _async_set_up_integrations(
|
|||||||
hass: core.HomeAssistant, config: Dict[str, Any]
|
hass: core.HomeAssistant, config: Dict[str, Any]
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up all the integrations."""
|
"""Set up all the integrations."""
|
||||||
|
|
||||||
|
setup_started = hass.data[DATA_SETUP_STARTED] = {}
|
||||||
|
|
||||||
|
async def async_setup_multi_components(domains: Set[str]) -> None:
|
||||||
|
"""Set up multiple domains. Log on failure."""
|
||||||
|
|
||||||
|
async def _async_log_pending_setups() -> None:
|
||||||
|
"""Periodic log of setups that are pending for longer than LOG_SLOW_STARTUP_INTERVAL."""
|
||||||
|
while True:
|
||||||
|
await asyncio.sleep(LOG_SLOW_STARTUP_INTERVAL)
|
||||||
|
remaining = [domain for domain in domains if domain in setup_started]
|
||||||
|
|
||||||
|
if remaining:
|
||||||
|
_LOGGER.info(
|
||||||
|
"Waiting on integrations to complete setup: %s",
|
||||||
|
", ".join(remaining),
|
||||||
|
)
|
||||||
|
|
||||||
|
futures = {
|
||||||
|
domain: hass.async_create_task(async_setup_component(hass, domain, config))
|
||||||
|
for domain in domains
|
||||||
|
}
|
||||||
|
log_task = asyncio.create_task(_async_log_pending_setups())
|
||||||
|
await asyncio.wait(futures.values())
|
||||||
|
log_task.cancel()
|
||||||
|
errors = [domain for domain in domains if futures[domain].exception()]
|
||||||
|
for domain in errors:
|
||||||
|
exception = futures[domain].exception()
|
||||||
|
_LOGGER.error(
|
||||||
|
"Error setting up integration %s - received exception",
|
||||||
|
domain,
|
||||||
|
exc_info=(type(exception), exception, exception.__traceback__),
|
||||||
|
)
|
||||||
|
|
||||||
domains = _get_domains(hass, config)
|
domains = _get_domains(hass, config)
|
||||||
|
|
||||||
# Start up debuggers. Start these first in case they want to wait.
|
# Start up debuggers. Start these first in case they want to wait.
|
||||||
debuggers = domains & DEBUGGER_INTEGRATIONS
|
debuggers = domains & DEBUGGER_INTEGRATIONS
|
||||||
if debuggers:
|
if debuggers:
|
||||||
_LOGGER.debug("Starting up debuggers %s", debuggers)
|
_LOGGER.debug("Starting up debuggers %s", debuggers)
|
||||||
await asyncio.gather(
|
await async_setup_multi_components(debuggers)
|
||||||
*(async_setup_component(hass, domain, config) for domain in debuggers)
|
|
||||||
)
|
|
||||||
domains -= DEBUGGER_INTEGRATIONS
|
domains -= DEBUGGER_INTEGRATIONS
|
||||||
|
|
||||||
# Resolve all dependencies of all components so we can find the logging
|
# Resolve all dependencies of all components so we can find the logging
|
||||||
@@ -357,9 +396,7 @@ async def _async_set_up_integrations(
|
|||||||
if logging_domains:
|
if logging_domains:
|
||||||
_LOGGER.info("Setting up %s", logging_domains)
|
_LOGGER.info("Setting up %s", logging_domains)
|
||||||
|
|
||||||
await asyncio.gather(
|
await async_setup_multi_components(logging_domains)
|
||||||
*(async_setup_component(hass, domain, config) for domain in logging_domains)
|
|
||||||
)
|
|
||||||
|
|
||||||
# Kick off loading the registries. They don't need to be awaited.
|
# Kick off loading the registries. They don't need to be awaited.
|
||||||
asyncio.gather(
|
asyncio.gather(
|
||||||
@@ -369,9 +406,9 @@ async def _async_set_up_integrations(
|
|||||||
)
|
)
|
||||||
|
|
||||||
if stage_1_domains:
|
if stage_1_domains:
|
||||||
await asyncio.gather(
|
_LOGGER.info("Setting up %s", stage_1_domains)
|
||||||
*(async_setup_component(hass, domain, config) for domain in stage_1_domains)
|
|
||||||
)
|
await async_setup_multi_components(stage_1_domains)
|
||||||
|
|
||||||
# Load all integrations
|
# Load all integrations
|
||||||
after_dependencies: Dict[str, Set[str]] = {}
|
after_dependencies: Dict[str, Set[str]] = {}
|
||||||
@@ -400,9 +437,7 @@ async def _async_set_up_integrations(
|
|||||||
|
|
||||||
_LOGGER.debug("Setting up %s", domains_to_load)
|
_LOGGER.debug("Setting up %s", domains_to_load)
|
||||||
|
|
||||||
await asyncio.gather(
|
await async_setup_multi_components(domains_to_load)
|
||||||
*(async_setup_component(hass, domain, config) for domain in domains_to_load)
|
|
||||||
)
|
|
||||||
|
|
||||||
last_load = domains_to_load
|
last_load = domains_to_load
|
||||||
stage_2_domains -= domains_to_load
|
stage_2_domains -= domains_to_load
|
||||||
@@ -412,9 +447,8 @@ async def _async_set_up_integrations(
|
|||||||
if stage_2_domains:
|
if stage_2_domains:
|
||||||
_LOGGER.debug("Final set up: %s", stage_2_domains)
|
_LOGGER.debug("Final set up: %s", stage_2_domains)
|
||||||
|
|
||||||
await asyncio.gather(
|
await async_setup_multi_components(stage_2_domains)
|
||||||
*(async_setup_component(hass, domain, config) for domain in stage_2_domains)
|
|
||||||
)
|
|
||||||
|
|
||||||
# Wrap up startup
|
# Wrap up startup
|
||||||
|
_LOGGER.debug("Waiting for startup to wrap up")
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"abort": {
|
|
||||||
"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."
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"connection_error": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 Abode.",
|
|
||||||
"identifier_exists": "\u041f\u0440\u043e\u0444\u0438\u043b\u044a\u0442 \u0435 \u0432\u0435\u0447\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d.",
|
|
||||||
"invalid_credentials": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438."
|
|
||||||
},
|
|
||||||
"step": {
|
|
||||||
"user": {
|
|
||||||
"data": {
|
|
||||||
"password": "\u041f\u0430\u0440\u043e\u043b\u0430",
|
|
||||||
"username": "E-mail \u0430\u0434\u0440\u0435\u0441"
|
|
||||||
},
|
|
||||||
"title": "\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0412\u0430\u0448\u0430\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u0432\u0445\u043e\u0434 \u0432 Abode"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": "Abode"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"abort": {
|
|
||||||
"single_instance_allowed": "Nom\u00e9s es permet una \u00fanica configuraci\u00f3 d'Abode."
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"connection_error": "No es pot connectar amb Abode.",
|
|
||||||
"identifier_exists": "Compte ja registrat.",
|
|
||||||
"invalid_credentials": "Credencials inv\u00e0lides."
|
|
||||||
},
|
|
||||||
"step": {
|
|
||||||
"user": {
|
|
||||||
"data": {
|
|
||||||
"password": "Contrasenya",
|
|
||||||
"username": "Correu electr\u00f2nic"
|
|
||||||
},
|
|
||||||
"title": "Introducci\u00f3 de la informaci\u00f3 d'inici de sessi\u00f3 a Abode."
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": "Abode"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"abort": {
|
|
||||||
"single_instance_allowed": "Je povolena pouze jedna konfigurace Abode."
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"connection_error": "Nelze se p\u0159ipojit k Abode.",
|
|
||||||
"identifier_exists": "\u00da\u010det je ji\u017e zaregistrov\u00e1n.",
|
|
||||||
"invalid_credentials": "Neplatn\u00e9 p\u0159ihla\u0161ovac\u00ed \u00fadaje."
|
|
||||||
},
|
|
||||||
"step": {
|
|
||||||
"user": {
|
|
||||||
"data": {
|
|
||||||
"password": "Heslo",
|
|
||||||
"username": "E-mailov\u00e1 adresa"
|
|
||||||
},
|
|
||||||
"title": "Vypl\u0148te p\u0159ihla\u0161ovac\u00ed \u00fadaje Abode"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": "Abode"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"abort": {
|
|
||||||
"single_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning af Abode."
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"connection_error": "Kunne ikke oprette forbindelse til Abode.",
|
|
||||||
"identifier_exists": "Konto er allerede registreret.",
|
|
||||||
"invalid_credentials": "Ugyldige legitimationsoplysninger."
|
|
||||||
},
|
|
||||||
"step": {
|
|
||||||
"user": {
|
|
||||||
"data": {
|
|
||||||
"password": "Adgangskode",
|
|
||||||
"username": "Email-adresse"
|
|
||||||
},
|
|
||||||
"title": "Udfyld dine Abode-loginoplysninger"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": "Abode"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"abort": {
|
|
||||||
"single_instance_allowed": "Es ist nur eine einzige Konfiguration von Abode erlaubt."
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"connection_error": "Es kann keine Verbindung zu Abode hergestellt werden.",
|
|
||||||
"identifier_exists": "Das Konto ist bereits registriert.",
|
|
||||||
"invalid_credentials": "Ung\u00fcltige Anmeldeinformationen"
|
|
||||||
},
|
|
||||||
"step": {
|
|
||||||
"user": {
|
|
||||||
"data": {
|
|
||||||
"password": "Passwort",
|
|
||||||
"username": "E-Mail-Adresse"
|
|
||||||
},
|
|
||||||
"title": "Gib deine Abode-Anmeldeinformationen ein"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": "Abode"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"abort": {
|
|
||||||
"single_instance_allowed": "Only a single configuration of Abode is allowed."
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"connection_error": "Unable to connect to Abode.",
|
|
||||||
"identifier_exists": "Account already registered.",
|
|
||||||
"invalid_credentials": "Invalid credentials."
|
|
||||||
},
|
|
||||||
"step": {
|
|
||||||
"user": {
|
|
||||||
"data": {
|
|
||||||
"password": "Password",
|
|
||||||
"username": "Email Address"
|
|
||||||
},
|
|
||||||
"title": "Fill in your Abode login information"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": "Abode"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"abort": {
|
|
||||||
"single_instance_allowed": "Solo se permite una \u00fanica configuraci\u00f3n de Abode."
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"connection_error": "No se puede conectar a Abode.",
|
|
||||||
"identifier_exists": "Cuenta ya registrada.",
|
|
||||||
"invalid_credentials": "Credenciales inv\u00e1lidas."
|
|
||||||
},
|
|
||||||
"step": {
|
|
||||||
"user": {
|
|
||||||
"data": {
|
|
||||||
"password": "Contrase\u00f1a",
|
|
||||||
"username": "Direcci\u00f3n de correo electr\u00f3nico"
|
|
||||||
},
|
|
||||||
"title": "Complete su informaci\u00f3n de inicio de sesi\u00f3n de Abode"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": "Abode"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"abort": {
|
|
||||||
"single_instance_allowed": "Solo se permite una \u00fanica configuraci\u00f3n de Abode."
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"connection_error": "No se puede conectar a Abode.",
|
|
||||||
"identifier_exists": "Cuenta ya registrada.",
|
|
||||||
"invalid_credentials": "Credenciales inv\u00e1lidas."
|
|
||||||
},
|
|
||||||
"step": {
|
|
||||||
"user": {
|
|
||||||
"data": {
|
|
||||||
"password": "Contrase\u00f1a",
|
|
||||||
"username": "Direcci\u00f3n de correo electr\u00f3nico"
|
|
||||||
},
|
|
||||||
"title": "Rellene la informaci\u00f3n de acceso Abode"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": "Abode"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"abort": {
|
|
||||||
"single_instance_allowed": "Une seule configuration d'Abode est autoris\u00e9e."
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"connection_error": "Impossible de se connecter \u00e0 Abode.",
|
|
||||||
"identifier_exists": "Compte d\u00e9j\u00e0 enregistr\u00e9.",
|
|
||||||
"invalid_credentials": "Informations d'identification invalides."
|
|
||||||
},
|
|
||||||
"step": {
|
|
||||||
"user": {
|
|
||||||
"data": {
|
|
||||||
"password": "Mot de passe",
|
|
||||||
"username": "Adresse e-mail"
|
|
||||||
},
|
|
||||||
"title": "Remplissez vos informations de connexion Abode"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": "Abode"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"abort": {
|
|
||||||
"single_instance_allowed": "Csak egyetlen Abode konfigur\u00e1ci\u00f3 enged\u00e9lyezett."
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"connection_error": "Nem lehet csatlakozni az Abode-hez.",
|
|
||||||
"identifier_exists": "Fi\u00f3k m\u00e1r regisztr\u00e1lva van",
|
|
||||||
"invalid_credentials": "\u00c9rv\u00e9nytelen hiteles\u00edt\u0151 adatok"
|
|
||||||
},
|
|
||||||
"step": {
|
|
||||||
"user": {
|
|
||||||
"data": {
|
|
||||||
"password": "Jelsz\u00f3",
|
|
||||||
"username": "Email c\u00edm"
|
|
||||||
},
|
|
||||||
"title": "T\u00f6ltse ki az Abode bejelentkez\u00e9si adatait"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": "Abode"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"abort": {
|
|
||||||
"single_instance_allowed": "\u00c8 consentita una sola configurazione di Abode."
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"connection_error": "Impossibile connettersi ad Abode.",
|
|
||||||
"identifier_exists": "Account gi\u00e0 registrato",
|
|
||||||
"invalid_credentials": "Credenziali non valide"
|
|
||||||
},
|
|
||||||
"step": {
|
|
||||||
"user": {
|
|
||||||
"data": {
|
|
||||||
"password": "Password",
|
|
||||||
"username": "Indirizzo email"
|
|
||||||
},
|
|
||||||
"title": "Inserisci le tue informazioni di accesso Abode"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": "Abode"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"abort": {
|
|
||||||
"single_instance_allowed": "\ud558\ub098\uc758 Abode \ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"connection_error": "Abode \uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",
|
|
||||||
"identifier_exists": "\uacc4\uc815\uc774 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4",
|
|
||||||
"invalid_credentials": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ud639\uc740 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4"
|
|
||||||
},
|
|
||||||
"step": {
|
|
||||||
"user": {
|
|
||||||
"data": {
|
|
||||||
"password": "\ube44\ubc00\ubc88\ud638",
|
|
||||||
"username": "\uc774\uba54\uc77c \uc8fc\uc18c"
|
|
||||||
},
|
|
||||||
"title": "Abode \uc0ac\uc6a9\uc790 \uc815\ubcf4\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": "Abode"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"abort": {
|
|
||||||
"single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun ZHA ass erlaabt."
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"connection_error": "Kann sech net mat Abode verbannen.",
|
|
||||||
"identifier_exists": "Konto ass scho registr\u00e9iert",
|
|
||||||
"invalid_credentials": "Ong\u00eblteg Login Informatioune"
|
|
||||||
},
|
|
||||||
"step": {
|
|
||||||
"user": {
|
|
||||||
"data": {
|
|
||||||
"password": "Passwuert",
|
|
||||||
"username": "E-Mail Adress"
|
|
||||||
},
|
|
||||||
"title": "F\u00ebllt \u00e4r Abode Login Informatiounen aus."
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": "Abode"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"abort": {
|
|
||||||
"single_instance_allowed": "Slechts een enkele configuratie van Abode is toegestaan."
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"connection_error": "Kan geen verbinding maken met Abode.",
|
|
||||||
"identifier_exists": "Account is al geregistreerd.",
|
|
||||||
"invalid_credentials": "Ongeldige inloggegevens."
|
|
||||||
},
|
|
||||||
"step": {
|
|
||||||
"user": {
|
|
||||||
"data": {
|
|
||||||
"password": "Wachtwoord",
|
|
||||||
"username": "E-mailadres"
|
|
||||||
},
|
|
||||||
"title": "Vul uw Abode-inloggegevens in"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": "Abode"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"title": "Abode"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"abort": {
|
|
||||||
"single_instance_allowed": "Bare en enkelt konfigurasjon av Abode er tillatt."
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"connection_error": "Kan ikke koble til Abode.",
|
|
||||||
"identifier_exists": "Kontoen er allerede registrert.",
|
|
||||||
"invalid_credentials": "Ugyldig brukerinformasjon"
|
|
||||||
},
|
|
||||||
"step": {
|
|
||||||
"user": {
|
|
||||||
"data": {
|
|
||||||
"password": "Passord",
|
|
||||||
"username": "E-postadresse"
|
|
||||||
},
|
|
||||||
"title": "Fyll ut innloggingsinformasjonen for Abode"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": "Abode"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"abort": {
|
|
||||||
"single_instance_allowed": "Dozwolona jest tylko jedna konfiguracja Abode."
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"connection_error": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z Abode.",
|
|
||||||
"identifier_exists": "Konto jest ju\u017c zarejestrowane.",
|
|
||||||
"invalid_credentials": "Nieprawid\u0142owe dane uwierzytelniaj\u0105ce"
|
|
||||||
},
|
|
||||||
"step": {
|
|
||||||
"user": {
|
|
||||||
"data": {
|
|
||||||
"password": "Has\u0142o",
|
|
||||||
"username": "Adres e-mail"
|
|
||||||
},
|
|
||||||
"title": "Wprowad\u017a informacje logowania Abode"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": "Abode"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,21 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"abort": {
|
|
||||||
"single_instance_allowed": "Somente uma \u00fanica configura\u00e7\u00e3o de Abode \u00e9 permitida."
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"connection_error": "N\u00e3o foi poss\u00edvel conectar ao Abode.",
|
|
||||||
"identifier_exists": "Conta j\u00e1 cadastrada.",
|
|
||||||
"invalid_credentials": "Credenciais inv\u00e1lidas."
|
|
||||||
},
|
|
||||||
"step": {
|
|
||||||
"user": {
|
|
||||||
"data": {
|
|
||||||
"password": "Senha",
|
|
||||||
"username": "Endere\u00e7o de e-mail"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": ""
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,16 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"error": {
|
|
||||||
"identifier_exists": "Conta j\u00e1 registada"
|
|
||||||
},
|
|
||||||
"step": {
|
|
||||||
"user": {
|
|
||||||
"data": {
|
|
||||||
"password": "Palavra-passe",
|
|
||||||
"username": "Endere\u00e7o de e-mail"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": ""
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"abort": {
|
|
||||||
"single_instance_allowed": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430."
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"connection_error": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a Abode.",
|
|
||||||
"identifier_exists": "\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430.",
|
|
||||||
"invalid_credentials": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435."
|
|
||||||
},
|
|
||||||
"step": {
|
|
||||||
"user": {
|
|
||||||
"data": {
|
|
||||||
"password": "\u041f\u0430\u0440\u043e\u043b\u044c",
|
|
||||||
"username": "\u0410\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b"
|
|
||||||
},
|
|
||||||
"title": "Abode"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": "Abode"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"abort": {
|
|
||||||
"single_instance_allowed": "Dovoljena je samo ena konfiguracija Abode."
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"connection_error": "Ni mogo\u010de vzpostaviti povezave z Abode.",
|
|
||||||
"identifier_exists": "Ra\u010dun je \u017ee registriran.",
|
|
||||||
"invalid_credentials": "Neveljavne poverilnice."
|
|
||||||
},
|
|
||||||
"step": {
|
|
||||||
"user": {
|
|
||||||
"data": {
|
|
||||||
"password": "Geslo",
|
|
||||||
"username": "E-po\u0161tni naslov"
|
|
||||||
},
|
|
||||||
"title": "Izpolnite svoje podatke za prijavo v Abode"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": "Abode"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"abort": {
|
|
||||||
"single_instance_allowed": "Endast en enda konfiguration av Abode \u00e4r till\u00e5ten."
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"connection_error": "Det gick inte att ansluta till Abode.",
|
|
||||||
"identifier_exists": "Kontot \u00e4r redan registrerat.",
|
|
||||||
"invalid_credentials": "Ogiltiga autentiseringsuppgifter."
|
|
||||||
},
|
|
||||||
"step": {
|
|
||||||
"user": {
|
|
||||||
"data": {
|
|
||||||
"password": "L\u00f6senord",
|
|
||||||
"username": "E-postadress"
|
|
||||||
},
|
|
||||||
"title": "Fyll i din inloggningsinformation f\u00f6r Abode"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": "Abode"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"config": {
|
|
||||||
"abort": {
|
|
||||||
"single_instance_allowed": "\u50c5\u5141\u8a31\u8a2d\u5b9a\u4e00\u7d44 Abode\u3002"
|
|
||||||
},
|
|
||||||
"error": {
|
|
||||||
"connection_error": "\u7121\u6cd5\u9023\u7dda\u81f3 Abode\u3002",
|
|
||||||
"identifier_exists": "\u5e33\u865f\u5df2\u8a3b\u518a\u3002",
|
|
||||||
"invalid_credentials": "\u6191\u8b49\u7121\u6548\u3002"
|
|
||||||
},
|
|
||||||
"step": {
|
|
||||||
"user": {
|
|
||||||
"data": {
|
|
||||||
"password": "\u5bc6\u78bc",
|
|
||||||
"username": "\u96fb\u5b50\u90f5\u4ef6\u5730\u5740"
|
|
||||||
},
|
|
||||||
"title": "\u586b\u5beb Abode \u767b\u5165\u8cc7\u8a0a"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": "Abode"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -19,6 +19,7 @@ from homeassistant.const import (
|
|||||||
CONF_USERNAME,
|
CONF_USERNAME,
|
||||||
EVENT_HOMEASSISTANT_STOP,
|
EVENT_HOMEASSISTANT_STOP,
|
||||||
)
|
)
|
||||||
|
from homeassistant.exceptions import ConfigEntryNotReady
|
||||||
from homeassistant.helpers import config_validation as cv
|
from homeassistant.helpers import config_validation as cv
|
||||||
from homeassistant.helpers.dispatcher import dispatcher_send
|
from homeassistant.helpers.dispatcher import dispatcher_send
|
||||||
from homeassistant.helpers.entity import Entity
|
from homeassistant.helpers.entity import Entity
|
||||||
@@ -119,7 +120,7 @@ async def async_setup_entry(hass, config_entry):
|
|||||||
|
|
||||||
except (AbodeException, ConnectTimeout, HTTPError) as ex:
|
except (AbodeException, ConnectTimeout, HTTPError) as ex:
|
||||||
LOGGER.error("Unable to connect to Abode: %s", str(ex))
|
LOGGER.error("Unable to connect to Abode: %s", str(ex))
|
||||||
return False
|
raise ConfigEntryNotReady
|
||||||
|
|
||||||
for platform in ABODE_PLATFORMS:
|
for platform in ABODE_PLATFORMS:
|
||||||
hass.async_create_task(
|
hass.async_create_task(
|
||||||
@@ -186,7 +187,7 @@ def setup_hass_services(hass):
|
|||||||
|
|
||||||
def trigger_automation(call):
|
def trigger_automation(call):
|
||||||
"""Trigger an Abode automation."""
|
"""Trigger an Abode automation."""
|
||||||
entity_ids = call.data.get(ATTR_ENTITY_ID, None)
|
entity_ids = call.data.get(ATTR_ENTITY_ID)
|
||||||
|
|
||||||
target_entities = [
|
target_entities = [
|
||||||
entity_id
|
entity_id
|
||||||
@@ -263,7 +264,6 @@ def setup_abode_events(hass):
|
|||||||
TIMELINE.TEST_GROUP,
|
TIMELINE.TEST_GROUP,
|
||||||
TIMELINE.CAPTURE_GROUP,
|
TIMELINE.CAPTURE_GROUP,
|
||||||
TIMELINE.DEVICE_GROUP,
|
TIMELINE.DEVICE_GROUP,
|
||||||
TIMELINE.AUTOMATION_EDIT_GROUP,
|
|
||||||
]
|
]
|
||||||
|
|
||||||
for event in events:
|
for event in events:
|
||||||
@@ -272,36 +272,72 @@ def setup_abode_events(hass):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class AbodeDevice(Entity):
|
class AbodeEntity(Entity):
|
||||||
"""Representation of an Abode device."""
|
"""Representation of an Abode entity."""
|
||||||
|
|
||||||
def __init__(self, data, device):
|
def __init__(self, data):
|
||||||
"""Initialize Abode device."""
|
"""Initialize Abode entity."""
|
||||||
self._data = data
|
self._data = data
|
||||||
self._device = device
|
self._available = True
|
||||||
|
|
||||||
async def async_added_to_hass(self):
|
@property
|
||||||
"""Subscribe to device events."""
|
def available(self):
|
||||||
self.hass.async_add_job(
|
"""Return the available state."""
|
||||||
self._data.abode.events.add_device_callback,
|
return self._available
|
||||||
self._device.device_id,
|
|
||||||
self._update_callback,
|
|
||||||
)
|
|
||||||
self.hass.data[DOMAIN].entity_ids.add(self.entity_id)
|
|
||||||
|
|
||||||
async def async_will_remove_from_hass(self):
|
|
||||||
"""Unsubscribe from device events."""
|
|
||||||
self.hass.async_add_job(
|
|
||||||
self._data.abode.events.remove_all_device_callbacks, self._device.device_id
|
|
||||||
)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def should_poll(self):
|
def should_poll(self):
|
||||||
"""Return the polling state."""
|
"""Return the polling state."""
|
||||||
return self._data.polling
|
return self._data.polling
|
||||||
|
|
||||||
|
async def async_added_to_hass(self):
|
||||||
|
"""Subscribe to Abode connection status updates."""
|
||||||
|
await self.hass.async_add_executor_job(
|
||||||
|
self._data.abode.events.add_connection_status_callback,
|
||||||
|
self.unique_id,
|
||||||
|
self._update_connection_status,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.hass.data[DOMAIN].entity_ids.add(self.entity_id)
|
||||||
|
|
||||||
|
async def async_will_remove_from_hass(self):
|
||||||
|
"""Unsubscribe from Abode connection status updates."""
|
||||||
|
await self.hass.async_add_executor_job(
|
||||||
|
self._data.abode.events.remove_connection_status_callback, self.unique_id
|
||||||
|
)
|
||||||
|
|
||||||
|
def _update_connection_status(self):
|
||||||
|
"""Update the entity available property."""
|
||||||
|
self._available = self._data.abode.events.connected
|
||||||
|
self.schedule_update_ha_state()
|
||||||
|
|
||||||
|
|
||||||
|
class AbodeDevice(AbodeEntity):
|
||||||
|
"""Representation of an Abode device."""
|
||||||
|
|
||||||
|
def __init__(self, data, device):
|
||||||
|
"""Initialize Abode device."""
|
||||||
|
super().__init__(data)
|
||||||
|
self._device = device
|
||||||
|
|
||||||
|
async def async_added_to_hass(self):
|
||||||
|
"""Subscribe to device events."""
|
||||||
|
await super().async_added_to_hass()
|
||||||
|
await self.hass.async_add_executor_job(
|
||||||
|
self._data.abode.events.add_device_callback,
|
||||||
|
self._device.device_id,
|
||||||
|
self._update_callback,
|
||||||
|
)
|
||||||
|
|
||||||
|
async def async_will_remove_from_hass(self):
|
||||||
|
"""Unsubscribe from device events."""
|
||||||
|
await super().async_will_remove_from_hass()
|
||||||
|
await self.hass.async_add_executor_job(
|
||||||
|
self._data.abode.events.remove_all_device_callbacks, self._device.device_id
|
||||||
|
)
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
"""Update device and automation states."""
|
"""Update device state."""
|
||||||
self._device.refresh()
|
self._device.refresh()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@@ -340,29 +376,13 @@ class AbodeDevice(Entity):
|
|||||||
self.schedule_update_ha_state()
|
self.schedule_update_ha_state()
|
||||||
|
|
||||||
|
|
||||||
class AbodeAutomation(Entity):
|
class AbodeAutomation(AbodeEntity):
|
||||||
"""Representation of an Abode automation."""
|
"""Representation of an Abode automation."""
|
||||||
|
|
||||||
def __init__(self, data, automation, event=None):
|
def __init__(self, data, automation):
|
||||||
"""Initialize for Abode automation."""
|
"""Initialize for Abode automation."""
|
||||||
self._data = data
|
super().__init__(data)
|
||||||
self._automation = automation
|
self._automation = automation
|
||||||
self._event = event
|
|
||||||
|
|
||||||
async def async_added_to_hass(self):
|
|
||||||
"""Subscribe to a group of Abode timeline events."""
|
|
||||||
if self._event:
|
|
||||||
self.hass.async_add_job(
|
|
||||||
self._data.abode.events.add_event_callback,
|
|
||||||
self._event,
|
|
||||||
self._update_callback,
|
|
||||||
)
|
|
||||||
self.hass.data[DOMAIN].entity_ids.add(self.entity_id)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def should_poll(self):
|
|
||||||
"""Return the polling state."""
|
|
||||||
return self._data.polling
|
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
"""Update automation state."""
|
"""Update automation state."""
|
||||||
@@ -376,17 +396,9 @@ class AbodeAutomation(Entity):
|
|||||||
@property
|
@property
|
||||||
def device_state_attributes(self):
|
def device_state_attributes(self):
|
||||||
"""Return the state attributes."""
|
"""Return the state attributes."""
|
||||||
return {
|
return {ATTR_ATTRIBUTION: ATTRIBUTION, "type": "CUE automation"}
|
||||||
ATTR_ATTRIBUTION: ATTRIBUTION,
|
|
||||||
"type": "CUE automation",
|
|
||||||
}
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def unique_id(self):
|
def unique_id(self):
|
||||||
"""Return a unique ID to use for this automation."""
|
"""Return a unique ID to use for this automation."""
|
||||||
return self._automation.automation_id
|
return self._automation.automation_id
|
||||||
|
|
||||||
def _update_callback(self, device):
|
|
||||||
"""Update the automation state."""
|
|
||||||
self._automation.refresh()
|
|
||||||
self.schedule_update_ha_state()
|
|
||||||
|
@@ -25,7 +25,7 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class AbodeAlarm(AbodeDevice, alarm.AlarmControlPanel):
|
class AbodeAlarm(AbodeDevice, alarm.AlarmControlPanelEntity):
|
||||||
"""An alarm_control_panel implementation for Abode."""
|
"""An alarm_control_panel implementation for Abode."""
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@@ -1,7 +1,10 @@
|
|||||||
"""Support for Abode Security System binary sensors."""
|
"""Support for Abode Security System binary sensors."""
|
||||||
import abodepy.helpers.constants as CONST
|
import abodepy.helpers.constants as CONST
|
||||||
|
|
||||||
from homeassistant.components.binary_sensor import BinarySensorDevice
|
from homeassistant.components.binary_sensor import (
|
||||||
|
DEVICE_CLASS_WINDOW,
|
||||||
|
BinarySensorEntity,
|
||||||
|
)
|
||||||
|
|
||||||
from . import AbodeDevice
|
from . import AbodeDevice
|
||||||
from .const import DOMAIN
|
from .const import DOMAIN
|
||||||
@@ -27,7 +30,7 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
|
|||||||
async_add_entities(entities)
|
async_add_entities(entities)
|
||||||
|
|
||||||
|
|
||||||
class AbodeBinarySensor(AbodeDevice, BinarySensorDevice):
|
class AbodeBinarySensor(AbodeDevice, BinarySensorEntity):
|
||||||
"""A binary sensor implementation for Abode device."""
|
"""A binary sensor implementation for Abode device."""
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@@ -38,4 +41,6 @@ class AbodeBinarySensor(AbodeDevice, BinarySensorDevice):
|
|||||||
@property
|
@property
|
||||||
def device_class(self):
|
def device_class(self):
|
||||||
"""Return the class of the binary sensor."""
|
"""Return the class of the binary sensor."""
|
||||||
|
if self._device.get_value("is_window") == "1":
|
||||||
|
return DEVICE_CLASS_WINDOW
|
||||||
return self._device.generic_type
|
return self._device.generic_type
|
||||||
|
@@ -41,14 +41,14 @@ class AbodeCamera(AbodeDevice, Camera):
|
|||||||
"""Subscribe Abode events."""
|
"""Subscribe Abode events."""
|
||||||
await super().async_added_to_hass()
|
await super().async_added_to_hass()
|
||||||
|
|
||||||
self.hass.async_add_job(
|
self.hass.async_add_executor_job(
|
||||||
self._data.abode.events.add_timeline_callback,
|
self._data.abode.events.add_timeline_callback,
|
||||||
self._event,
|
self._event,
|
||||||
self._capture_callback,
|
self._capture_callback,
|
||||||
)
|
)
|
||||||
|
|
||||||
signal = f"abode_camera_capture_{self.entity_id}"
|
signal = f"abode_camera_capture_{self.entity_id}"
|
||||||
async_dispatcher_connect(self.hass, signal, self.capture)
|
self.async_on_remove(async_dispatcher_connect(self.hass, signal, self.capture))
|
||||||
|
|
||||||
def capture(self):
|
def capture(self):
|
||||||
"""Request a new image capture."""
|
"""Request a new image capture."""
|
||||||
|
@@ -5,7 +5,7 @@ from requests.exceptions import ConnectTimeout, HTTPError
|
|||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant import config_entries
|
from homeassistant import config_entries
|
||||||
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
|
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, HTTP_BAD_REQUEST
|
||||||
from homeassistant.core import callback
|
from homeassistant.core import callback
|
||||||
|
|
||||||
from .const import DEFAULT_CACHEDB, DOMAIN, LOGGER # pylint: disable=unused-import
|
from .const import DEFAULT_CACHEDB, DOMAIN, LOGGER # pylint: disable=unused-import
|
||||||
@@ -46,7 +46,7 @@ class AbodeFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
|||||||
|
|
||||||
except (AbodeException, ConnectTimeout, HTTPError) as ex:
|
except (AbodeException, ConnectTimeout, HTTPError) as ex:
|
||||||
LOGGER.error("Unable to connect to Abode: %s", str(ex))
|
LOGGER.error("Unable to connect to Abode: %s", str(ex))
|
||||||
if ex.errcode == 400:
|
if ex.errcode == HTTP_BAD_REQUEST:
|
||||||
return self._show_form({"base": "invalid_credentials"})
|
return self._show_form({"base": "invalid_credentials"})
|
||||||
return self._show_form({"base": "connection_error"})
|
return self._show_form({"base": "connection_error"})
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
"""Support for Abode Security System covers."""
|
"""Support for Abode Security System covers."""
|
||||||
import abodepy.helpers.constants as CONST
|
import abodepy.helpers.constants as CONST
|
||||||
|
|
||||||
from homeassistant.components.cover import CoverDevice
|
from homeassistant.components.cover import CoverEntity
|
||||||
|
|
||||||
from . import AbodeDevice
|
from . import AbodeDevice
|
||||||
from .const import DOMAIN
|
from .const import DOMAIN
|
||||||
@@ -19,7 +19,7 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
|
|||||||
async_add_entities(entities)
|
async_add_entities(entities)
|
||||||
|
|
||||||
|
|
||||||
class AbodeCover(AbodeDevice, CoverDevice):
|
class AbodeCover(AbodeDevice, CoverEntity):
|
||||||
"""Representation of an Abode cover."""
|
"""Representation of an Abode cover."""
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@@ -10,7 +10,7 @@ from homeassistant.components.light import (
|
|||||||
SUPPORT_BRIGHTNESS,
|
SUPPORT_BRIGHTNESS,
|
||||||
SUPPORT_COLOR,
|
SUPPORT_COLOR,
|
||||||
SUPPORT_COLOR_TEMP,
|
SUPPORT_COLOR_TEMP,
|
||||||
Light,
|
LightEntity,
|
||||||
)
|
)
|
||||||
from homeassistant.util.color import (
|
from homeassistant.util.color import (
|
||||||
color_temperature_kelvin_to_mired,
|
color_temperature_kelvin_to_mired,
|
||||||
@@ -33,7 +33,7 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
|
|||||||
async_add_entities(entities)
|
async_add_entities(entities)
|
||||||
|
|
||||||
|
|
||||||
class AbodeLight(AbodeDevice, Light):
|
class AbodeLight(AbodeDevice, LightEntity):
|
||||||
"""Representation of an Abode light."""
|
"""Representation of an Abode light."""
|
||||||
|
|
||||||
def turn_on(self, **kwargs):
|
def turn_on(self, **kwargs):
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
"""Support for the Abode Security System locks."""
|
"""Support for the Abode Security System locks."""
|
||||||
import abodepy.helpers.constants as CONST
|
import abodepy.helpers.constants as CONST
|
||||||
|
|
||||||
from homeassistant.components.lock import LockDevice
|
from homeassistant.components.lock import LockEntity
|
||||||
|
|
||||||
from . import AbodeDevice
|
from . import AbodeDevice
|
||||||
from .const import DOMAIN
|
from .const import DOMAIN
|
||||||
@@ -19,7 +19,7 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
|
|||||||
async_add_entities(entities)
|
async_add_entities(entities)
|
||||||
|
|
||||||
|
|
||||||
class AbodeLock(AbodeDevice, LockDevice):
|
class AbodeLock(AbodeDevice, LockEntity):
|
||||||
"""Representation of an Abode lock."""
|
"""Representation of an Abode lock."""
|
||||||
|
|
||||||
def lock(self, **kwargs):
|
def lock(self, **kwargs):
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
"name": "Abode",
|
"name": "Abode",
|
||||||
"config_flow": true,
|
"config_flow": true,
|
||||||
"documentation": "https://www.home-assistant.io/integrations/abode",
|
"documentation": "https://www.home-assistant.io/integrations/abode",
|
||||||
"requirements": ["abodepy==0.18.1"],
|
"requirements": ["abodepy==0.19.0"],
|
||||||
"dependencies": [],
|
|
||||||
"codeowners": ["@shred86"]
|
"codeowners": ["@shred86"]
|
||||||
}
|
}
|
||||||
|
@@ -1,13 +1,21 @@
|
|||||||
capture_image:
|
capture_image:
|
||||||
description: Request a new image capture from a camera device.
|
description: Request a new image capture from a camera device.
|
||||||
fields:
|
fields:
|
||||||
entity_id: {description: Entity id of the camera to request an image., example: camera.downstairs_motion_camera}
|
entity_id:
|
||||||
|
description: Entity id of the camera to request an image.
|
||||||
|
example: camera.downstairs_motion_camera
|
||||||
change_setting:
|
change_setting:
|
||||||
description: Change an Abode system setting.
|
description: Change an Abode system setting.
|
||||||
fields:
|
fields:
|
||||||
setting: {description: Setting to change., example: beeper_mute}
|
setting:
|
||||||
value: {description: Value of the setting., example: '1'}
|
description: Setting to change.
|
||||||
|
example: beeper_mute
|
||||||
|
value:
|
||||||
|
description: Value of the setting.
|
||||||
|
example: "1"
|
||||||
trigger_automation:
|
trigger_automation:
|
||||||
description: Trigger an Abode automation.
|
description: Trigger an Abode automation.
|
||||||
fields:
|
fields:
|
||||||
entity_id: {description: Entity id of the automation to trigger., example: switch.my_automation}
|
entity_id:
|
||||||
|
description: Entity id of the automation to trigger.
|
||||||
|
example: switch.my_automation
|
||||||
|
@@ -1,12 +1,11 @@
|
|||||||
{
|
{
|
||||||
"config": {
|
"config": {
|
||||||
"title": "Abode",
|
|
||||||
"step": {
|
"step": {
|
||||||
"user": {
|
"user": {
|
||||||
"title": "Fill in your Abode login information",
|
"title": "Fill in your Abode login information",
|
||||||
"data": {
|
"data": {
|
||||||
"username": "Email Address",
|
"username": "[%key:common::config_flow::data::email%]",
|
||||||
"password": "Password"
|
"password": "[%key:common::config_flow::data::password%]"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@@ -1,8 +1,7 @@
|
|||||||
"""Support for Abode Security System switches."""
|
"""Support for Abode Security System switches."""
|
||||||
import abodepy.helpers.constants as CONST
|
import abodepy.helpers.constants as CONST
|
||||||
import abodepy.helpers.timeline as TIMELINE
|
|
||||||
|
|
||||||
from homeassistant.components.switch import SwitchDevice
|
from homeassistant.components.switch import SwitchEntity
|
||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
|
|
||||||
from . import AbodeAutomation, AbodeDevice
|
from . import AbodeAutomation, AbodeDevice
|
||||||
@@ -24,14 +23,12 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
|
|||||||
entities.append(AbodeSwitch(data, device))
|
entities.append(AbodeSwitch(data, device))
|
||||||
|
|
||||||
for automation in data.abode.get_automations():
|
for automation in data.abode.get_automations():
|
||||||
entities.append(
|
entities.append(AbodeAutomationSwitch(data, automation))
|
||||||
AbodeAutomationSwitch(data, automation, TIMELINE.AUTOMATION_EDIT_GROUP)
|
|
||||||
)
|
|
||||||
|
|
||||||
async_add_entities(entities)
|
async_add_entities(entities)
|
||||||
|
|
||||||
|
|
||||||
class AbodeSwitch(AbodeDevice, SwitchDevice):
|
class AbodeSwitch(AbodeDevice, SwitchEntity):
|
||||||
"""Representation of an Abode switch."""
|
"""Representation of an Abode switch."""
|
||||||
|
|
||||||
def turn_on(self, **kwargs):
|
def turn_on(self, **kwargs):
|
||||||
@@ -48,15 +45,15 @@ class AbodeSwitch(AbodeDevice, SwitchDevice):
|
|||||||
return self._device.is_on
|
return self._device.is_on
|
||||||
|
|
||||||
|
|
||||||
class AbodeAutomationSwitch(AbodeAutomation, SwitchDevice):
|
class AbodeAutomationSwitch(AbodeAutomation, SwitchEntity):
|
||||||
"""A switch implementation for Abode automations."""
|
"""A switch implementation for Abode automations."""
|
||||||
|
|
||||||
async def async_added_to_hass(self):
|
async def async_added_to_hass(self):
|
||||||
"""Subscribe Abode events."""
|
"""Set up trigger automation service."""
|
||||||
await super().async_added_to_hass()
|
await super().async_added_to_hass()
|
||||||
|
|
||||||
signal = f"abode_trigger_automation_{self.entity_id}"
|
signal = f"abode_trigger_automation_{self.entity_id}"
|
||||||
async_dispatcher_connect(self.hass, signal, self.trigger)
|
self.async_on_remove(async_dispatcher_connect(self.hass, signal, self.trigger))
|
||||||
|
|
||||||
def turn_on(self, **kwargs):
|
def turn_on(self, **kwargs):
|
||||||
"""Enable the automation."""
|
"""Enable the automation."""
|
||||||
|
21
homeassistant/components/abode/translations/bg.json
Normal file
21
homeassistant/components/abode/translations/bg.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"abort": {
|
||||||
|
"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."
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"connection_error": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0441 Abode.",
|
||||||
|
"identifier_exists": "\u041f\u0440\u043e\u0444\u0438\u043b\u044a\u0442 \u0435 \u0432\u0435\u0447\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0430\u043d.",
|
||||||
|
"invalid_credentials": "\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0438 \u0434\u0430\u043d\u043d\u0438."
|
||||||
|
},
|
||||||
|
"step": {
|
||||||
|
"user": {
|
||||||
|
"data": {
|
||||||
|
"password": "\u041f\u0430\u0440\u043e\u043b\u0430",
|
||||||
|
"username": "E-mail \u0430\u0434\u0440\u0435\u0441"
|
||||||
|
},
|
||||||
|
"title": "\u041f\u043e\u043f\u044a\u043b\u043d\u0435\u0442\u0435 \u0412\u0430\u0448\u0430\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u0432\u0445\u043e\u0434 \u0432 Abode"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
homeassistant/components/abode/translations/ca.json
Normal file
21
homeassistant/components/abode/translations/ca.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"abort": {
|
||||||
|
"single_instance_allowed": "Nom\u00e9s es permet una \u00fanica configuraci\u00f3 d'Abode."
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"connection_error": "No es pot connectar amb Abode.",
|
||||||
|
"identifier_exists": "Compte ja registrat.",
|
||||||
|
"invalid_credentials": "Credencials inv\u00e0lides."
|
||||||
|
},
|
||||||
|
"step": {
|
||||||
|
"user": {
|
||||||
|
"data": {
|
||||||
|
"password": "Contrasenya",
|
||||||
|
"username": "Correu electr\u00f2nic"
|
||||||
|
},
|
||||||
|
"title": "Introducci\u00f3 de la informaci\u00f3 d'inici de sessi\u00f3 a Abode."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
homeassistant/components/abode/translations/cs.json
Normal file
21
homeassistant/components/abode/translations/cs.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"abort": {
|
||||||
|
"single_instance_allowed": "Je povolena pouze jedna konfigurace Abode."
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"connection_error": "Nelze se p\u0159ipojit k Abode.",
|
||||||
|
"identifier_exists": "\u00da\u010det je ji\u017e zaregistrov\u00e1n.",
|
||||||
|
"invalid_credentials": "Neplatn\u00e9 p\u0159ihla\u0161ovac\u00ed \u00fadaje."
|
||||||
|
},
|
||||||
|
"step": {
|
||||||
|
"user": {
|
||||||
|
"data": {
|
||||||
|
"password": "Heslo",
|
||||||
|
"username": "E-mailov\u00e1 adresa"
|
||||||
|
},
|
||||||
|
"title": "Vypl\u0148te p\u0159ihla\u0161ovac\u00ed \u00fadaje Abode"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
homeassistant/components/abode/translations/da.json
Normal file
21
homeassistant/components/abode/translations/da.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"abort": {
|
||||||
|
"single_instance_allowed": "Det er kun n\u00f8dvendigt med en ops\u00e6tning af Abode."
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"connection_error": "Kunne ikke oprette forbindelse til Abode.",
|
||||||
|
"identifier_exists": "Konto er allerede registreret.",
|
||||||
|
"invalid_credentials": "Ugyldige legitimationsoplysninger."
|
||||||
|
},
|
||||||
|
"step": {
|
||||||
|
"user": {
|
||||||
|
"data": {
|
||||||
|
"password": "Adgangskode",
|
||||||
|
"username": "Email-adresse"
|
||||||
|
},
|
||||||
|
"title": "Udfyld dine Abode-loginoplysninger"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
homeassistant/components/abode/translations/de.json
Normal file
21
homeassistant/components/abode/translations/de.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"abort": {
|
||||||
|
"single_instance_allowed": "Es ist nur eine einzige Konfiguration von Abode erlaubt."
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"connection_error": "Es kann keine Verbindung zu Abode hergestellt werden.",
|
||||||
|
"identifier_exists": "Das Konto ist bereits registriert.",
|
||||||
|
"invalid_credentials": "Ung\u00fcltige Anmeldeinformationen"
|
||||||
|
},
|
||||||
|
"step": {
|
||||||
|
"user": {
|
||||||
|
"data": {
|
||||||
|
"password": "Passwort",
|
||||||
|
"username": "E-Mail-Adresse"
|
||||||
|
},
|
||||||
|
"title": "Gib deine Abode-Anmeldeinformationen ein"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
homeassistant/components/abode/translations/en.json
Normal file
21
homeassistant/components/abode/translations/en.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"abort": {
|
||||||
|
"single_instance_allowed": "Only a single configuration of Abode is allowed."
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"connection_error": "Unable to connect to Abode.",
|
||||||
|
"identifier_exists": "Account already registered.",
|
||||||
|
"invalid_credentials": "Invalid credentials."
|
||||||
|
},
|
||||||
|
"step": {
|
||||||
|
"user": {
|
||||||
|
"data": {
|
||||||
|
"password": "Password",
|
||||||
|
"username": "Email"
|
||||||
|
},
|
||||||
|
"title": "Fill in your Abode login information"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
homeassistant/components/abode/translations/es-419.json
Normal file
21
homeassistant/components/abode/translations/es-419.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"abort": {
|
||||||
|
"single_instance_allowed": "Solo se permite una \u00fanica configuraci\u00f3n de Abode."
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"connection_error": "No se puede conectar a Abode.",
|
||||||
|
"identifier_exists": "Cuenta ya registrada.",
|
||||||
|
"invalid_credentials": "Credenciales inv\u00e1lidas."
|
||||||
|
},
|
||||||
|
"step": {
|
||||||
|
"user": {
|
||||||
|
"data": {
|
||||||
|
"password": "Contrase\u00f1a",
|
||||||
|
"username": "Direcci\u00f3n de correo electr\u00f3nico"
|
||||||
|
},
|
||||||
|
"title": "Complete su informaci\u00f3n de inicio de sesi\u00f3n de Abode"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
homeassistant/components/abode/translations/es.json
Normal file
21
homeassistant/components/abode/translations/es.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"abort": {
|
||||||
|
"single_instance_allowed": "Solo se permite una \u00fanica configuraci\u00f3n de Abode."
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"connection_error": "No se puede conectar a Abode.",
|
||||||
|
"identifier_exists": "Cuenta ya registrada.",
|
||||||
|
"invalid_credentials": "Credenciales inv\u00e1lidas."
|
||||||
|
},
|
||||||
|
"step": {
|
||||||
|
"user": {
|
||||||
|
"data": {
|
||||||
|
"password": "Contrase\u00f1a",
|
||||||
|
"username": "Direcci\u00f3n de correo electr\u00f3nico"
|
||||||
|
},
|
||||||
|
"title": "Rellene la informaci\u00f3n de acceso Abode"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
7
homeassistant/components/abode/translations/fi.json
Normal file
7
homeassistant/components/abode/translations/fi.json
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"error": {
|
||||||
|
"connection_error": "Yhteytt\u00e4 Abodeen ei voi muodostaa."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
homeassistant/components/abode/translations/fr.json
Normal file
21
homeassistant/components/abode/translations/fr.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"abort": {
|
||||||
|
"single_instance_allowed": "Une seule configuration d'Abode est autoris\u00e9e."
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"connection_error": "Impossible de se connecter \u00e0 Abode.",
|
||||||
|
"identifier_exists": "Compte d\u00e9j\u00e0 enregistr\u00e9.",
|
||||||
|
"invalid_credentials": "Informations d'identification invalides."
|
||||||
|
},
|
||||||
|
"step": {
|
||||||
|
"user": {
|
||||||
|
"data": {
|
||||||
|
"password": "Mot de passe",
|
||||||
|
"username": "Adresse e-mail"
|
||||||
|
},
|
||||||
|
"title": "Remplissez vos informations de connexion Abode"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
homeassistant/components/abode/translations/hu.json
Normal file
21
homeassistant/components/abode/translations/hu.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"abort": {
|
||||||
|
"single_instance_allowed": "Csak egyetlen Abode konfigur\u00e1ci\u00f3 enged\u00e9lyezett."
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"connection_error": "Nem lehet csatlakozni az Abode-hez.",
|
||||||
|
"identifier_exists": "Fi\u00f3k m\u00e1r regisztr\u00e1lva van",
|
||||||
|
"invalid_credentials": "\u00c9rv\u00e9nytelen hiteles\u00edt\u0151 adatok"
|
||||||
|
},
|
||||||
|
"step": {
|
||||||
|
"user": {
|
||||||
|
"data": {
|
||||||
|
"password": "Jelsz\u00f3",
|
||||||
|
"username": "E-mail"
|
||||||
|
},
|
||||||
|
"title": "T\u00f6ltse ki az Abode bejelentkez\u00e9si adatait"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
homeassistant/components/abode/translations/it.json
Normal file
21
homeassistant/components/abode/translations/it.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"abort": {
|
||||||
|
"single_instance_allowed": "\u00c8 consentita una sola configurazione di Abode."
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"connection_error": "Impossibile connettersi ad Abode.",
|
||||||
|
"identifier_exists": "Account gi\u00e0 registrato",
|
||||||
|
"invalid_credentials": "Credenziali non valide"
|
||||||
|
},
|
||||||
|
"step": {
|
||||||
|
"user": {
|
||||||
|
"data": {
|
||||||
|
"password": "Password",
|
||||||
|
"username": "E-mail"
|
||||||
|
},
|
||||||
|
"title": "Inserisci le tue informazioni di accesso Abode"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
homeassistant/components/abode/translations/ko.json
Normal file
21
homeassistant/components/abode/translations/ko.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"abort": {
|
||||||
|
"single_instance_allowed": "\ud558\ub098\uc758 Abode \ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"connection_error": "Abode \uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",
|
||||||
|
"identifier_exists": "\uacc4\uc815\uc774 \uc774\ubbf8 \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4",
|
||||||
|
"invalid_credentials": "\uc0ac\uc6a9\uc790 \uc774\ub984 \ud639\uc740 \ube44\ubc00\ubc88\ud638\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4"
|
||||||
|
},
|
||||||
|
"step": {
|
||||||
|
"user": {
|
||||||
|
"data": {
|
||||||
|
"password": "\ube44\ubc00\ubc88\ud638",
|
||||||
|
"username": "\uc774\uba54\uc77c"
|
||||||
|
},
|
||||||
|
"title": "Abode \uc0ac\uc6a9\uc790 \uc815\ubcf4 \uc785\ub825\ud558\uae30"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
homeassistant/components/abode/translations/lb.json
Normal file
21
homeassistant/components/abode/translations/lb.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"abort": {
|
||||||
|
"single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun ZHA ass erlaabt."
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"connection_error": "Kann sech net mat Abode verbannen.",
|
||||||
|
"identifier_exists": "Konto ass scho registr\u00e9iert",
|
||||||
|
"invalid_credentials": "Ong\u00eblteg Login Informatioune"
|
||||||
|
},
|
||||||
|
"step": {
|
||||||
|
"user": {
|
||||||
|
"data": {
|
||||||
|
"password": "Passwuert",
|
||||||
|
"username": "E-Mail"
|
||||||
|
},
|
||||||
|
"title": "F\u00ebllt \u00e4r Abode Login Informatiounen aus."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
homeassistant/components/abode/translations/nl.json
Normal file
21
homeassistant/components/abode/translations/nl.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"abort": {
|
||||||
|
"single_instance_allowed": "Slechts een enkele configuratie van Abode is toegestaan."
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"connection_error": "Kan geen verbinding maken met Abode.",
|
||||||
|
"identifier_exists": "Account is al geregistreerd.",
|
||||||
|
"invalid_credentials": "Ongeldige inloggegevens."
|
||||||
|
},
|
||||||
|
"step": {
|
||||||
|
"user": {
|
||||||
|
"data": {
|
||||||
|
"password": "Wachtwoord",
|
||||||
|
"username": "E-mailadres"
|
||||||
|
},
|
||||||
|
"title": "Vul uw Abode-inloggegevens in"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
3
homeassistant/components/abode/translations/nn.json
Normal file
3
homeassistant/components/abode/translations/nn.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"title": "Abode"
|
||||||
|
}
|
21
homeassistant/components/abode/translations/no.json
Normal file
21
homeassistant/components/abode/translations/no.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"abort": {
|
||||||
|
"single_instance_allowed": "Bare en enkelt konfigurasjon av Abode er tillatt."
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"connection_error": "Kan ikke koble til Abode.",
|
||||||
|
"identifier_exists": "Kontoen er allerede registrert.",
|
||||||
|
"invalid_credentials": "Ugyldig legitimasjon"
|
||||||
|
},
|
||||||
|
"step": {
|
||||||
|
"user": {
|
||||||
|
"data": {
|
||||||
|
"password": "Passord",
|
||||||
|
"username": "E-postadresse"
|
||||||
|
},
|
||||||
|
"title": "Fyll ut innloggingsinformasjonen for Abode"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
homeassistant/components/abode/translations/pl.json
Normal file
21
homeassistant/components/abode/translations/pl.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"abort": {
|
||||||
|
"single_instance_allowed": "Dozwolona jest tylko jedna konfiguracja Abode."
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"connection_error": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z Abode.",
|
||||||
|
"identifier_exists": "Konto jest ju\u017c zarejestrowane.",
|
||||||
|
"invalid_credentials": "Nieprawid\u0142owe dane uwierzytelniaj\u0105ce"
|
||||||
|
},
|
||||||
|
"step": {
|
||||||
|
"user": {
|
||||||
|
"data": {
|
||||||
|
"password": "Has\u0142o",
|
||||||
|
"username": "Adres e-mail"
|
||||||
|
},
|
||||||
|
"title": "Wprowad\u017a informacje logowania Abode"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user