Compare commits

..
495 Commits
Author SHA1 Message Date
github-actions[bot] 03a0966528 01b25f15bf 2026-08-28 19:22:07 +00:00
github-actions[bot] f0a00ad580 b441091f6f 2026-08-28 18:25:52 +00:00
github-actions[bot] 2fd44b6776 9473312667 2026-08-28 17:54:38 +00:00
github-actions[bot] e25d30ffe7 22de3f10d8 2026-08-26 10:17:17 +00:00
github-actions[bot] 6d7c40de77 dccf0a98c6 2026-08-26 10:11:00 +00:00
github-actions[bot] eeafbcf593 7fbbbc3b17 2026-08-26 10:10:39 +00:00
github-actions[bot] 39328222f2 cf11b1a188 2026-08-22 03:07:51 +00:00
github-actions[bot] c8fe986927 75bb5eed00 2026-08-18 20:09:26 +00:00
github-actions[bot] a4b14a1238 95d072a788 2026-08-18 19:24:21 +00:00
github-actions[bot] 61da16ef4d 07ae13ad2d 2026-08-14 19:20:06 +00:00
github-actions[bot] e58cf262fb c649d04b1c 2026-08-14 17:24:01 +00:00
github-actions[bot] 47b2b63f8d d3ba21828c 2026-08-13 19:21:33 +00:00
github-actions[bot] d72b6cf1e2 e7deca42bf 2026-08-12 19:53:50 +00:00
github-actions[bot] 828fb6b70f 07a4a0bc75 2026-08-12 19:48:51 +00:00
github-actions[bot] 5498eb2b51 368e31b1e3 2026-08-10 19:46:39 +00:00
github-actions[bot] dc4f780c6e 10611654c7 2026-08-10 18:30:50 +00:00
github-actions[bot] 63d4b4a8ac f06673506f 2026-08-08 19:52:11 +00:00
github-actions[bot] 8315e5dfd9 06290da5be 2026-08-08 19:45:49 +00:00
github-actions[bot] 76bc864311 86dfc90869 2026-08-08 19:41:45 +00:00
github-actions[bot] bd1ac17b97 3aaa8c1546 2026-08-08 19:38:32 +00:00
github-actions[bot] 87fd958507 046817624f 2026-08-05 20:19:45 +00:00
github-actions[bot] 80290f6452 a8171a5464 2026-08-03 19:26:36 +00:00
github-actions[bot] bf7d5e2ab2 2f976b7dca 2026-08-03 19:20:04 +00:00
github-actions[bot] c5abd4584c 29b041ce57 2026-08-03 19:16:30 +00:00
github-actions[bot] af71b37591 828038717f 2026-08-03 19:04:33 +00:00
github-actions[bot] ee489e846f 5fd4d6b37a 2026-08-01 06:14:57 +00:00
github-actions[bot] a511770677 fcbb7ff44b 2026-08-01 06:01:18 +00:00
github-actions[bot] 2157f53c49 e5e36ac79c 2026-08-01 05:30:19 +00:00
github-actions[bot] db717f6f7d 28e410bbf4 2026-07-30 19:06:52 +00:00
github-actions[bot] 990b2e5721 b29fc0e493 2026-07-30 19:03:14 +00:00
github-actions[bot] 70cf72350f 316413b31c 2026-07-30 18:46:34 +00:00
github-actions[bot] 63b4e7f7a3 fe96204f0b 2026-07-29 04:54:48 +00:00
github-actions[bot] acadfb2b3f 32506b4e8a 2026-07-28 16:16:06 +00:00
github-actions[bot] 77948bfc94 3bec9e87b1 2026-07-28 16:11:26 +00:00
github-actions[bot] c964536071 b46c77bff0 2026-07-28 15:30:48 +00:00
github-actions[bot] 7e0cdd1827 e6e0b6f8f2 2026-07-26 06:24:17 +00:00
github-actions[bot] 67f129489f 756a824488 2026-07-24 19:51:40 +00:00
github-actions[bot] 26105ec6a5 83ab5228ff 2026-07-24 19:51:02 +00:00
github-actions[bot] 0bde66abc6 4f18b4e38c 2026-07-24 18:51:05 +00:00
github-actions[bot] 65b7410b4b 5e56c454c3 2026-07-22 22:43:56 +00:00
github-actions[bot] ea4cda3f52 b8d388ca7a 2026-07-21 19:23:42 +00:00
github-actions[bot] 236bbae62c 4174e9cb78 2026-07-21 17:36:05 +00:00
github-actions[bot] 50fcab5b4f 752ab37302 2026-07-20 15:34:55 +00:00
github-actions[bot] e4dc92fd21 d6dea17961 2026-07-20 15:18:51 +00:00
github-actions[bot] 7968198ad3 e78b23f5eb 2026-07-18 18:59:39 +00:00
github-actions[bot] 806022ef65 22d85a6729 2026-07-16 17:53:28 +00:00
github-actions[bot] c8351c2654 a9ce4b2522 2026-07-16 17:17:15 +00:00
github-actions[bot] 5617643690 576e1954ef 2026-07-15 11:09:25 +00:00
github-actions[bot] 34be9016d5 fa12ebe27c 2026-07-12 06:38:48 +00:00
github-actions[bot] 5f633506d3 e475de15c9 2026-07-11 19:46:28 +00:00
github-actions[bot] 793eb0bd31 2ca80b8572 2026-07-11 19:24:16 +00:00
github-actions[bot] 172299ee3e 912fe4c250 2026-07-09 11:06:32 +00:00
github-actions[bot] 43c73e91ff 5591207dea 2026-07-07 20:49:26 +00:00
github-actions[bot] 8293a8944c 83ca2746a7 2026-07-07 20:39:44 +00:00
github-actions[bot] 828a39ea07 6e557162cb 2026-07-06 19:08:24 +00:00
github-actions[bot] f8510b42ab a2973f21f6 2026-07-06 19:03:02 +00:00
github-actions[bot] 87d411ff23 f88d99294b 2026-07-05 10:17:50 +00:00
github-actions[bot] bc4884fde3 4b0c3067ff 2026-07-02 05:50:01 +00:00
github-actions[bot] e34671deab 2cfdd807ed 2026-07-01 06:24:34 +00:00
github-actions[bot] e1c19d47f3 aa909a8a62 2026-07-01 06:13:51 +00:00
github-actions[bot] 04f77fd537 f867694831 2026-06-30 19:25:02 +00:00
github-actions[bot] ca2302dc04 740de2d363 2026-06-30 19:20:03 +00:00
github-actions[bot] a34031d65b e8a7e6f29d 2026-06-30 19:10:14 +00:00
github-actions[bot] 144cfcfac8 3760e63183 2026-06-29 18:39:34 +00:00
github-actions[bot] d4c742303a dcb16b8271 2026-06-28 14:33:43 +00:00
github-actions[bot] b9c9e0be85 31fb3a6e89 2026-06-27 20:09:49 +00:00
github-actions[bot] 16a4a810cd 2f26083ce1 2026-06-27 19:48:46 +00:00
github-actions[bot] 94d07acf03 0018ca8f80 2026-06-27 19:48:03 +00:00
github-actions[bot] 38d1cfd5ac 8d5fdada38 2026-06-25 19:39:11 +00:00
github-actions[bot] 8b51679981 6ab52df08a 2026-06-25 18:13:35 +00:00
github-actions[bot] 9e7984d504 0140708076 2026-06-25 18:06:35 +00:00
github-actions[bot] df8dbaab7f 7775ac5cd2 2026-06-25 17:40:46 +00:00
github-actions[bot] aea91a27c3 628f97f498 2026-06-23 18:22:18 +00:00
github-actions[bot] 38412501de b58503bb57 2026-06-23 18:16:02 +00:00
github-actions[bot] c5a184f107 98a0f94870 2026-06-23 17:49:22 +00:00
github-actions[bot] b9626ade8b 72be1d746b 2026-06-23 17:47:04 +00:00
github-actions[bot] c4ad959564 20ab0a2a4f 2026-06-23 17:22:04 +00:00
github-actions[bot] 8f0313cb8f 87689523ae 2026-06-22 19:13:15 +00:00
github-actions[bot] a3a41ba560 2cbf740f1b 2026-06-22 19:05:57 +00:00
github-actions[bot] fa70444e82 c6e7d2dd16 2026-06-21 06:10:49 +00:00
github-actions[bot] d7a0829881 29ee3a7552 2026-06-21 06:04:23 +00:00
github-actions[bot] bc86c64639 0377f965a3 2026-06-20 06:38:23 +00:00
github-actions[bot] 78fb5f32db 1de8609456 2026-06-18 19:33:01 +00:00
github-actions[bot] 4010a1f8f1 95c67c0e22 2026-06-17 19:29:24 +00:00
github-actions[bot] 8cfbeef775 2f44449953 2026-06-17 19:18:18 +00:00
github-actions[bot] 342031366c 299b9e64f5 2026-06-15 19:28:39 +00:00
github-actions[bot] b22b1fb200 f4f97d1920 2026-06-13 19:16:24 +00:00
github-actions[bot] c95de22d5b a68419f0f5 2026-06-11 20:09:51 +00:00
github-actions[bot] c11b3505ef ced6d93d20 2026-06-11 06:25:32 +00:00
github-actions[bot] 2c7c727316 0cc3b1e7f1 2026-06-09 19:27:04 +00:00
github-actions[bot] faa7a8bcb2 fd8bafc81d 2026-06-09 19:13:56 +00:00
github-actions[bot] 12f3b3d621 68daf4f1de 2026-06-09 19:07:30 +00:00
github-actions[bot] a7993f23a6 582f153896 2026-06-09 18:31:18 +00:00
github-actions[bot] 5dcd5a94b2 6c2c874641 2026-06-03 19:35:07 +00:00
github-actions[bot] 366efe196c 120f6ac779 2026-06-03 19:16:03 +00:00
github-actions[bot] 44b20937eb de58711e11 2026-06-03 19:12:00 +00:00
github-actions[bot] 8b4f32618b ea6ccac938 2026-06-03 19:08:45 +00:00
github-actions[bot] 807974afa0 babf7a17d4 2026-06-02 18:42:57 +00:00
github-actions[bot] 51231b9397 f9e1bac588 2026-06-02 18:36:43 +00:00
github-actions[bot] df3866aff4 6aac849452 2026-06-01 19:02:59 +00:00
github-actions[bot] e6f3d348fe 2b5a670ba2 2026-06-01 18:37:01 +00:00
github-actions[bot] c318e62636 58feb78362 2026-06-01 18:31:34 +00:00
github-actions[bot] 96d7e91439 c6e13ccb45 2026-05-31 19:18:12 +00:00
github-actions[bot] e8990c1bbb a8364ad67b 2026-05-29 19:05:30 +00:00
github-actions[bot] 5eeed1bc6e e2b49113c7 2026-05-28 19:53:34 +00:00
github-actions[bot] db33961a25 7a1c2d52f0 2026-05-28 18:50:59 +00:00
github-actions[bot] a464dcfea3 56aab4e59c 2026-05-23 18:47:20 +00:00
github-actions[bot] 45ec158d4d 7075b78a46 2026-05-21 19:57:15 +00:00
github-actions[bot] b85af0a771 b31e8c286e 2026-05-21 19:45:22 +00:00
github-actions[bot] 922cc90521 2c5b536134 2026-05-20 20:28:34 +00:00
github-actions[bot] a7979ce14e 52201c96bf 2026-05-19 18:22:42 +00:00
github-actions[bot] 5122559c35 1e114dee70 2026-05-18 19:44:46 +00:00
github-actions[bot] bd1f9fb098 bbcbed12d5 2026-05-18 19:31:58 +00:00
github-actions[bot] d441b03073 36c4db7f8f 2026-05-17 15:56:34 +00:00
github-actions[bot] 13555819b8 5458e5084d 2026-05-15 12:29:18 +00:00
github-actions[bot] 3a8e47a06c 744e4a6d5c 2026-05-13 19:16:46 +00:00
github-actions[bot] 6c8d1b8c2a 6ea21c383b 2026-05-12 18:28:55 +00:00
github-actions[bot] bf23ee6e70 32499d14d5 2026-05-11 19:36:04 +00:00
github-actions[bot] 0384a134aa 502030c016 2026-05-09 19:54:47 +00:00
github-actions[bot] f7dd995fc1 7a05464f03 2026-05-08 18:44:34 +00:00
github-actions[bot] ab6f7b7f86 15fd9b371e 2026-05-08 18:37:14 +00:00
github-actions[bot] e1dbd7d036 04a43652d6 2026-05-08 18:26:37 +00:00
github-actions[bot] 1c4cb6b1b6 7b37e97e00 2026-05-07 18:07:38 +00:00
github-actions[bot] b586f9fc0f 94751abaac 2026-05-07 17:54:54 +00:00
github-actions[bot] 8a263fc213 cc8456617a 2026-05-07 17:47:10 +00:00
github-actions[bot] f81b2fa286 8727abdefc 2026-05-06 20:15:07 +00:00
github-actions[bot] 89228e7250 845bdb7dba 2026-05-05 19:07:16 +00:00
github-actions[bot] cbc9e8d948 19eb05a0e0 2026-05-05 05:40:55 +00:00
github-actions[bot] 21bb4186f1 9f7ea9b7c7 2026-05-04 18:39:11 +00:00
github-actions[bot] 959440055f 0d7b8f189c 2026-05-01 17:51:44 +00:00
github-actions[bot] de01e26a37 4639243cf9 2026-05-01 17:38:39 +00:00
github-actions[bot] cda68c281f df26459b46 2026-05-01 15:39:59 +00:00
github-actions[bot] a748507aae c58162344f 2026-04-30 20:06:07 +00:00
github-actions[bot] 6037563712 5974286445 2026-04-28 20:26:09 +00:00
github-actions[bot] 7ce933384c 429c5aea58 2026-04-26 20:13:58 +00:00
github-actions[bot] dfff9f6bea e71507835b 2026-04-23 19:34:56 +00:00
github-actions[bot] 1c05883e0b 3bb3d56c05 2026-04-22 19:28:34 +00:00
github-actions[bot] d6ce05f2cb 305b7bcafa 2026-04-21 19:49:42 +00:00
github-actions[bot] 43d9726e52 78f440bada 2026-04-19 19:48:47 +00:00
github-actions[bot] 9f24fcec96 a54775dea1 2026-04-17 18:12:24 +00:00
github-actions[bot] 8c2311bfd9 041972669a 2026-04-17 17:25:24 +00:00
github-actions[bot] 557eee9cbc 0a7dfcef59 2026-04-14 19:19:56 +00:00
github-actions[bot] c741240526 55d8d1f4d0 2026-04-13 19:30:21 +00:00
github-actions[bot] c652a64d91 0c9ec722db 2026-04-11 12:30:11 +00:00
github-actions[bot] e9d703d635 a0204ad3f0 2026-04-11 11:41:36 +00:00
github-actions[bot] 97c6860a34 4a63e65981 2026-04-11 10:57:19 +00:00
github-actions[bot] 1d0386c236 4818cc4163 2026-04-09 19:29:13 +00:00
github-actions[bot] 33fa818802 a50065cbb4 2026-04-07 19:25:51 +00:00
github-actions[bot] 571caead21 aef3242319 2026-04-07 18:41:59 +00:00
github-actions[bot] d8cdfbd6b9 6b567c1286 2026-04-05 06:17:46 +00:00
github-actions[bot] 906996bc5b 23f9847994 2026-04-02 18:24:58 +00:00
github-actions[bot] e9caf9276f 08e4e9edeb 2026-04-01 20:18:32 +00:00
github-actions[bot] a9ce5b54df 673d81f51a 2026-04-01 19:50:43 +00:00
github-actions[bot] b84070cde7 2b485a98c5 2026-04-01 19:36:21 +00:00
github-actions[bot] cea5a2bf6e 62ab814d73 2026-03-31 19:11:52 +00:00
github-actions[bot] 3edfe80af6 fb3189b743 2026-03-31 19:07:58 +00:00
github-actions[bot] b966a5642b 969db9ae85 2026-03-25 19:30:46 +00:00
github-actions[bot] 3e31936510 66985a8ce8 2026-03-24 21:32:52 +00:00
github-actions[bot] 10bbb1320a dde637af2f 2026-03-22 20:17:10 +00:00
github-actions[bot] df5f63f786 867179c430 2026-03-22 20:02:57 +00:00
github-actions[bot] fc56123a20 2e5e362818 2026-03-20 20:36:32 +00:00
github-actions[bot] e745ab21f2 64286ebb30 2026-03-20 20:27:35 +00:00
github-actions[bot] 00ddd44543 6fb9d563e6 2026-03-19 19:11:28 +00:00
github-actions[bot] 4d233d2006 e054d7124b 2026-03-17 19:29:32 +00:00
github-actions[bot] f9bb69ce3a 075f87c782 2026-03-16 20:11:19 +00:00
github-actions[bot] aaf8191ef1 9f49d0ec67 2026-03-16 20:08:13 +00:00
github-actions[bot] 84299bc015 69641d5467 2026-03-13 14:10:09 +00:00
github-actions[bot] 158b3fbb22 6fca3744c9 2026-03-13 13:21:54 +00:00
github-actions[bot] 5f3ee38ef9 f60db2d7a6 2026-03-12 06:59:39 +00:00
github-actions[bot] e83a758321 9143924482 2026-03-09 06:11:49 +00:00
github-actions[bot] 7990235d21 0f781ee9c0 2026-03-09 06:05:46 +00:00
github-actions[bot] 0110694375 9f1eb764a6 2026-03-09 05:38:40 +00:00
github-actions[bot] b8c8883c01 05946b5955 2026-03-07 06:24:42 +00:00
github-actions[bot] 713d57ff0f 4a8369295c 2026-03-07 05:31:37 +00:00
github-actions[bot] af94609b7d 1747618afa 2026-03-03 19:47:45 +00:00
github-actions[bot] d796c5788b 284d86e93b 2026-03-03 06:17:16 +00:00
github-actions[bot] 3e1a7d11a6 d6323825e4 2026-03-03 06:03:02 +00:00
github-actions[bot] a2a149bbf8 fc3a1968f6 2026-03-02 11:56:10 +00:00
github-actions[bot] c5eaac9a4b c56fbca457 2026-03-02 11:36:58 +00:00
github-actions[bot] 8747fc3e19 85875aee27 2026-03-02 11:23:45 +00:00
github-actions[bot] 3c80793a2e 7f0a9aa2a3 2026-03-02 11:20:51 +00:00
github-actions[bot] 45835fdd14 ff528567e6 2026-03-01 14:18:52 +00:00
github-actions[bot] 71c0acfb84 3473aa3f40 2026-03-01 14:07:42 +00:00
github-actions[bot] 714a325377 8ee5b1f03b 2026-03-01 13:56:37 +00:00
github-actions[bot] b305b18d49 a9a6ebe007 2026-02-28 20:14:32 +00:00
github-actions[bot] 51d093dacf c7d54ec360 2026-02-28 19:52:38 +00:00
github-actions[bot] 59748a1aed c880d36f29 2026-02-25 21:06:23 +00:00
github-actions[bot] 60befc7258 e1e856d7da 2026-02-24 19:57:14 +00:00
github-actions[bot] 133c9f5775 b9d9e5e75c 2026-02-24 19:41:05 +00:00
github-actions[bot] b51947ef77 a77f48f5c4 2026-02-24 19:34:16 +00:00
github-actions[bot] fe8777c1e9 f8385b8899 2026-02-24 19:33:48 +00:00
github-actions[bot] 74e6ffaff2 79bcf276f5 2026-02-24 19:17:11 +00:00
github-actions[bot] c9b5837a4a 93dc9a3664 2026-02-23 21:14:26 +00:00
github-actions[bot] d0db680b28 8ecf353dd6 2026-02-23 20:39:31 +00:00
github-actions[bot] 1456a724e3 8560c11e06 2026-02-22 20:39:16 +00:00
github-actions[bot] d308937631 4d287eed0c 2026-02-21 20:30:51 +00:00
github-actions[bot] 1b0f14ff0d 8d1240eba1 2026-02-21 20:18:21 +00:00
github-actions[bot] 7aafa09f93 0c43c98306 2026-02-21 20:16:50 +00:00
github-actions[bot] 6e094d8fc0 396eb38e4b 2026-02-19 19:53:47 +00:00
github-actions[bot] 363959f96f 5957085fcc 2026-02-19 19:46:40 +00:00
github-actions[bot] 492d19a3f8 9d566f4c01 2026-02-17 20:25:46 +00:00
github-actions[bot] 955d215162 909d2b32b7 2026-02-15 19:44:50 +00:00
github-actions[bot] ff05bfd345 061262ff97 2026-02-13 20:59:42 +00:00
github-actions[bot] c127931473 142754b71c 2026-02-11 20:53:01 +00:00
github-actions[bot] d649480881 c599e19bf2 2026-02-10 19:57:47 +00:00
github-actions[bot] 481b569749 4e360d0bf2 2026-02-09 21:16:12 +00:00
github-actions[bot] 185d257fd3 15e385bac6 2026-02-09 20:09:04 +00:00
github-actions[bot] 8edf459ad8 c7dae39799 2026-02-09 19:51:55 +00:00
github-actions[bot] 5056ae80cd b585e31304 2026-02-08 20:47:56 +00:00
github-actions[bot] 666557a8da bf888de478 2026-02-08 20:17:56 +00:00
github-actions[bot] 2365d74d71 f1156db227 2026-02-06 21:25:57 +00:00
github-actions[bot] 68280d00b9 b71461e03c 2026-02-05 20:39:18 +00:00
github-actions[bot] 421ec1c811 30d311e849 2026-02-05 20:25:06 +00:00
github-actions[bot] 0670fd43be 402ed6094e 2026-02-03 19:41:16 +00:00
github-actions[bot] 57b31c81ee 8d8d37e388 2026-02-02 19:22:55 +00:00
github-actions[bot] 30d73e3a8d 09d010ea06 2026-02-01 20:14:25 +00:00
github-actions[bot] 3dba2c0d84 ede1dc5951 2026-02-01 19:47:11 +00:00
github-actions[bot] fbcfc27036 b0b02c30b2 2026-02-01 19:29:21 +00:00
github-actions[bot] 02b0fc44e2 49b752da35 2026-01-31 13:44:45 +00:00
github-actions[bot] b8a84b4604 788b0d3993 2026-01-31 12:58:16 +00:00
github-actions[bot] 997e961343 f68834049c 2026-01-30 20:35:31 +00:00
github-actions[bot] b977a9badf 4afbce62eb 2026-01-29 19:17:40 +00:00
github-actions[bot] 417b99c367 5a4d6b56ad 2026-01-28 21:10:48 +00:00
github-actions[bot] 310a95a431 26a0fd4de0 2026-01-28 20:56:27 +00:00
github-actions[bot] f3b8023ca8 99e06a8d3e 2026-01-27 19:56:18 +00:00
github-actions[bot] a6ff8dc1b5 476efaa6e1 2026-01-27 19:47:24 +00:00
github-actions[bot] 426ed8e125 5de47a0d93 2026-01-27 19:09:55 +00:00
github-actions[bot] 2c2653e0db 999df2913f 2026-01-25 21:05:03 +00:00
github-actions[bot] 42314cfe2d 036ee471dd 2026-01-24 20:40:42 +00:00
github-actions[bot] e00d5a106d dd1c449796 2026-01-24 20:37:33 +00:00
github-actions[bot] e3328b3660 6d5e7e334a 2026-01-24 20:31:45 +00:00
github-actions[bot] 40d21e4634 8e682956e5 2026-01-24 20:13:08 +00:00
github-actions[bot] f5052bc411 971ddaa3cb 2026-01-24 19:54:43 +00:00
github-actions[bot] f1a9a17bcf ad51d12a2d 2026-01-23 19:58:55 +00:00
github-actions[bot] 420a4db6f2 2bb44f7a8b 2026-01-21 21:04:00 +00:00
github-actions[bot] 042b0bc5aa 20af50201e 2026-01-20 19:55:07 +00:00
github-actions[bot] bbd69d96a9 2e36084852 2026-01-20 19:44:41 +00:00
github-actions[bot] c4fb905100 9d266bda9a 2026-01-20 19:40:24 +00:00
github-actions[bot] 46741f103e ee6afaf1c6 2026-01-18 20:58:04 +00:00
github-actions[bot] 7d89775e45 4815d5149d 2026-01-18 19:39:28 +00:00
github-actions[bot] f62f8b7469 6f0b02e009 2026-01-17 14:35:33 +00:00
github-actions[bot] 74d246479e 5e1b7d4830 2026-01-16 20:14:31 +00:00
github-actions[bot] 546f246e35 535f75e90c 2026-01-15 21:18:29 +00:00
github-actions[bot] 6352481c92 d44cdbde4f 2026-01-13 20:28:43 +00:00
github-actions[bot] 980130aa2f 9a41ec2a39 2026-01-13 20:13:31 +00:00
github-actions[bot] 1ebbc79913 29c757145d 2026-01-11 20:56:51 +00:00
github-actions[bot] 37a9a55892 e68403d8d3 2026-01-08 20:19:18 +00:00
github-actions[bot] 752671a228 a32c8eec36 2026-01-08 20:05:01 +00:00
github-actions[bot] a68de9179e d4522c53ca 2026-01-07 19:48:48 +00:00
github-actions[bot] 8ebe5705db 57245e5234 2026-01-06 20:54:27 +00:00
github-actions[bot] c824f33f63 4313baca09 2026-01-05 21:10:43 +00:00
github-actions[bot] ec65341356 a2b81ab894 2026-01-04 20:36:59 +00:00
github-actions[bot] 870ccbe69c 3e60f915ff 2026-01-04 19:12:10 +00:00
github-actions[bot] bdc72c40cc 3adf7d5d8e 2026-01-04 19:01:38 +00:00
github-actions[bot] 4566485bc2 1147cf16dd 2026-01-03 21:09:36 +00:00
github-actions[bot] 23f2fe2c83 97a9b15240 2026-01-01 14:03:59 +00:00
github-actions[bot] 7968aa3bd5 3a49c95786 2026-01-01 13:50:53 +00:00
github-actions[bot] 6116237e17 0eba0c953d 2026-01-01 13:33:19 +00:00
github-actions[bot] d391bbbf07 3727f078ec 2025-12-30 14:39:19 +00:00
github-actions[bot] f161eb1496 2721b0ea78 2025-12-28 21:08:25 +00:00
github-actions[bot] 4122a972cb 4c48e9cfbc 2025-12-27 20:51:52 +00:00
github-actions[bot] af63a6e5c1 7cb5c58dc0 2025-12-26 14:47:18 +00:00
github-actions[bot] 37ec03f458 c61f67f061 2025-12-23 21:08:56 +00:00
github-actions[bot] 9a68b075ef 58d98c7263 2025-12-23 16:54:43 +00:00
github-actions[bot] a7828b3f34 c28a024664 2025-12-21 21:39:05 +00:00
github-actions[bot] e293ceaf59 8549b37228 2025-12-21 19:54:12 +00:00
github-actions[bot] 3c90538049 4c02e3da8f 2025-12-19 21:11:59 +00:00
github-actions[bot] ef3e2deef3 ab0894715a 2025-12-18 21:46:09 +00:00
github-actions[bot] 27e9cf2924 1688a3b532 2025-12-16 17:44:09 +00:00
github-actions[bot] 96f4acd316 b39b8d478e 2025-12-16 16:54:34 +00:00
github-actions[bot] a05c48615a 01304cfc66 2025-12-14 20:50:14 +00:00
github-actions[bot] 1a6e18395a 3818c50b8a 2025-12-13 20:44:17 +00:00
github-actions[bot] 92f75387d5 7f5f6a5849 2025-12-13 19:49:47 +00:00
github-actions[bot] 6dffe4c406 0025ef87c5 2025-12-13 19:47:42 +00:00
github-actions[bot] 5f679d2599 3460f157df 2025-12-10 21:25:01 +00:00
github-actions[bot] a8158b58eb ecb0af4057 2025-12-10 21:21:12 +00:00
github-actions[bot] b7a74443c5 5db6ae0a19 2025-12-09 20:25:52 +00:00
github-actions[bot] 16a424a387 4574ffc71a 2025-12-09 18:56:21 +00:00
github-actions[bot] 4828eb6f2d c18d1329c8 2025-12-07 20:05:49 +00:00
github-actions[bot] 5acb0150af 95c38810a8 2025-12-06 20:49:04 +00:00
github-actions[bot] 3193b80e76 6d30fa156c 2025-12-06 20:23:37 +00:00
github-actions[bot] e74883a503 9b6035387b 2025-12-06 20:15:57 +00:00
github-actions[bot] dcd69a2ede 9ca85dfac8 2025-12-06 19:55:18 +00:00
github-actions[bot] 9783436db2 334fa2a60d 2025-12-06 13:31:48 +00:00
github-actions[bot] 4e9281c2a8 a7f1345a91 2025-12-04 21:04:33 +00:00
github-actions[bot] afccea07e8 bae9bb8812 2025-12-04 20:11:49 +00:00
github-actions[bot] 9ebb6dac6a 740edd8b58 2025-12-03 19:38:40 +00:00
github-actions[bot] c237b1af71 fd4282b98d 2025-12-02 20:57:31 +00:00
github-actions[bot] 554ba562c1 5f474e03b8 2025-12-01 20:46:37 +00:00
github-actions[bot] 984e4523b5 110149fa20 2025-12-01 20:31:26 +00:00
github-actions[bot] 1f7c6ba765 445890a071 2025-12-01 20:27:12 +00:00
github-actions[bot] ba9ea4b685 d411fc5c69 2025-11-30 14:15:50 +00:00
github-actions[bot] 00afb66382 631c4f6a57 2025-11-29 12:52:09 +00:00
github-actions[bot] 1a29da2413 49b4876768 2025-11-27 19:26:04 +00:00
github-actions[bot] 6d0f686b96 802271ed37 2025-11-27 19:09:04 +00:00
github-actions[bot] d80898b932 42fc6e03a7 2025-11-27 18:55:34 +00:00
github-actions[bot] da3efe1a66 35d8a5da7f 2025-11-26 20:09:43 +00:00
github-actions[bot] bedd9e4de7 72d862f4a0 2025-11-25 20:06:29 +00:00
github-actions[bot] beb91a7254 ad0696856a 2025-11-25 19:27:01 +00:00
github-actions[bot] cd259a4c9d a61646d584 2025-11-24 21:06:52 +00:00
github-actions[bot] 398ffec4ad 854df498bd 2025-11-24 21:03:44 +00:00
github-actions[bot] 0cd359eb05 f26ade4f93 2025-11-23 20:59:07 +00:00
github-actions[bot] 6255dc1734 ba77ce7c8d 2025-11-22 20:56:44 +00:00
github-actions[bot] d67d2d3058 be774a4d0d 2025-11-21 19:57:39 +00:00
github-actions[bot] aaac9503bb 7b7b988960 2025-11-20 21:09:07 +00:00
github-actions[bot] d14140238b d6bf5174be 2025-11-19 21:06:56 +00:00
github-actions[bot] 23ee97e14f 73225e2436 2025-11-17 21:21:27 +00:00
github-actions[bot] 5a119a3451 53b7eaabf0 2025-11-17 20:58:27 +00:00
github-actions[bot] 7e85c083af 16d0e56968 2025-11-17 20:20:27 +00:00
github-actions[bot] f9643ac8e9 564e9ab9eb 2025-11-12 20:01:22 +00:00
github-actions[bot] 221cdb9017 61c6ec6111 2025-11-12 06:31:59 +00:00
github-actions[bot] eb8b6b9198 4794b3c81f 2025-11-10 17:26:32 +00:00
github-actions[bot] 63dabce636 940fff244c 2025-11-09 21:02:05 +00:00
github-actions[bot] c5a7438111 e788c520a9 2025-11-07 20:52:52 +00:00
github-actions[bot] 751d3a50a7 8822aedb5e 2025-11-07 20:51:07 +00:00
github-actions[bot] 31625c34c0 39c5bc8c04 2025-11-06 22:03:32 +00:00
github-actions[bot] a86e33d640 5c4e43fd10 2025-11-06 19:33:03 +00:00
github-actions[bot] b0b0ff031b 5a6a9cf4d2 2025-11-05 20:34:22 +00:00
github-actions[bot] 90b7d3f3e5 ea1c5a8f4e 2025-11-04 20:18:28 +00:00
github-actions[bot] 3a7a3aa2eb eeed56ef2c 2025-11-02 20:23:33 +00:00
github-actions[bot] 94a629249d e9b4a6221b 2025-11-01 21:13:38 +00:00
github-actions[bot] b25d168bc4 6e001b48ec 2025-11-01 20:55:12 +00:00
github-actions[bot] db8d0128c2 40bf14b93c 2025-11-01 20:35:49 +00:00
github-actions[bot] 6179bab315 faa65f78a2 2025-10-30 19:57:35 +00:00
github-actions[bot] 6f8c921aca c30630091d 2025-10-30 19:32:19 +00:00
github-actions[bot] cf83ece432 61d99b7ece 2025-10-28 20:32:39 +00:00
github-actions[bot] 35891e67cb e037a2c21c 2025-10-28 20:28:49 +00:00
github-actions[bot] 7213913cff 592c256f96 2025-10-27 20:59:18 +00:00
github-actions[bot] 9f1a5849a7 003c81b745 2025-10-26 21:38:02 +00:00
github-actions[bot] 2a08c97208 6c48498e0d 2025-10-25 18:48:53 +00:00
github-actions[bot] 6657c03078 8ac2f55d87 2025-10-25 18:24:19 +00:00
github-actions[bot] e0fa35a096 d719c1f368 2025-10-24 21:20:03 +00:00
github-actions[bot] 5a55c8aae1 05382a9692 2025-10-23 18:16:19 +00:00
github-actions[bot] bafa20d1ce ef15924260 2025-10-23 18:07:23 +00:00
github-actions[bot] 8b49159954 c0190c18ed 2025-10-22 18:04:03 +00:00
github-actions[bot] 6acc0dd837 238ea7c4c8 2025-10-21 19:37:47 +00:00
github-actions[bot] 2b0f2cb98d 174ba64449 2025-10-21 18:39:25 +00:00
github-actions[bot] f508917a4e 408052282d 2025-10-20 19:16:12 +00:00
github-actions[bot] 96a3e1c781 df70f11a15 2025-10-19 19:27:33 +00:00
github-actions[bot] d19056be38 3ecb0c5e41 2025-10-18 12:56:22 +00:00
github-actions[bot] 939c1fe3d1 52d250b72f 2025-10-18 12:47:44 +00:00
github-actions[bot] 3b6aa7a981 feac6aa677 2025-10-18 12:40:10 +00:00
github-actions[bot] 574f90d9f8 1d69715a5a 2025-10-17 18:19:37 +00:00
github-actions[bot] a33888d86f eaaed1fec7 2025-10-16 20:50:08 +00:00
github-actions[bot] ec3b908ec2 03a81c6ab1 2025-10-16 19:09:41 +00:00
github-actions[bot] a271ab5efb 354d06aebc 2025-10-15 19:58:53 +00:00
github-actions[bot] a3b52c6ae5 ad9b114b1a 2025-10-15 19:29:57 +00:00
github-actions[bot] e966b56235 bafc8e4284 2025-10-12 19:35:20 +00:00
github-actions[bot] ad2ac2354c 9c19aa9494 2025-10-11 12:57:44 +00:00
github-actions[bot] 7c54e2f63f 8b1f5a555c 2025-10-08 19:16:40 +00:00
github-actions[bot] 0fc733cab9 79a27e3b06 2025-10-07 20:40:21 +00:00
github-actions[bot] 7a29fb0d9e 5f08c3e83b 2025-10-06 18:58:05 +00:00
github-actions[bot] 5964edb25e 74335fbb68 2025-10-06 18:15:47 +00:00
github-actions[bot] 388dad7cf6 8b4a4be2a4 2025-10-05 20:05:25 +00:00
github-actions[bot] 0eca48bf1c 548f646f2f 2025-10-05 19:37:39 +00:00
github-actions[bot] b26aa39428 a75a40b042 2025-10-04 12:51:37 +00:00
github-actions[bot] 2c6688e794 09fd675d0f 2025-10-04 12:16:27 +00:00
github-actions[bot] 62d2146dfd 1d38da6ac5 2025-10-03 19:28:22 +00:00
github-actions[bot] d68da013e2 c66008b36b 2025-10-03 19:14:25 +00:00
github-actions[bot] d06014eeb3 d1ce146542 2025-10-02 19:43:47 +00:00
github-actions[bot] c9abc09f21 ca489daad8 2025-10-01 18:37:06 +00:00
github-actions[bot] 0729ed18aa 16f3f4d649 2025-10-01 18:10:13 +00:00
github-actions[bot] eaf93fee7f 4d247f3ae1 2025-10-01 17:56:15 +00:00
github-actions[bot] 4fbb0f8d02 1283859a12 2025-09-30 19:45:37 +00:00
github-actions[bot] cdcefbaa70 a0d91cc063 2025-09-30 19:03:03 +00:00
github-actions[bot] c377df9dc8 f6c0ce735f 2025-09-29 19:39:33 +00:00
github-actions[bot] 260eb96419 508318de57 2025-09-29 19:15:43 +00:00
github-actions[bot] 9f6b7e57b4 26c74b5778 2025-09-28 19:50:29 +00:00
github-actions[bot] c4c43eb78b 87c474d2f5 2025-09-26 19:11:53 +00:00
github-actions[bot] f977c25c32 a310627e19 2025-09-24 19:22:18 +00:00
github-actions[bot] dd7ed404c9 77926bc1c3 2025-09-23 20:02:45 +00:00
github-actions[bot] 89638a79b9 892f92448e 2025-09-23 19:53:55 +00:00
github-actions[bot] 6cad5a6c49 79c0c0933a 2025-09-21 13:34:25 +00:00
github-actions[bot] bbd6546242 a5e1e8c0c3 2025-09-21 13:03:49 +00:00
github-actions[bot] 20c2c12ede 382d37e839 2025-09-18 18:55:59 +00:00
github-actions[bot] 8dda33ee0f 2cb7dcc12a 2025-09-14 18:38:53 +00:00
github-actions[bot] e5f2656098 b2f74607cc 2025-09-13 20:05:25 +00:00
github-actions[bot] 73fce708db 2edf85f6e1 2025-09-12 19:21:25 +00:00
github-actions[bot] d657fc48b8 09f33b31a9 2025-09-11 19:03:05 +00:00
github-actions[bot] 970ba6eba9 3f258342d8 2025-09-11 18:50:45 +00:00
github-actions[bot] 10f039a7df c28ca79d8a 2025-09-11 18:32:37 +00:00
github-actions[bot] 029967e096 5f6fae0df7 2025-09-10 19:08:03 +00:00
github-actions[bot] 5ade60e6d3 15e00ea8a4 2025-09-09 19:19:29 +00:00
github-actions[bot] eb601c8d8f 01d5863487 2025-09-09 19:06:51 +00:00
github-actions[bot] ec88247f36 fefae9957c 2025-09-09 18:16:05 +00:00
github-actions[bot] c904a45750 a297b9255b 2025-09-08 19:12:34 +00:00
github-actions[bot] 39d1f95f65 5f2630c93b 2025-09-07 20:28:28 +00:00
github-actions[bot] 642775254b e8e4977327 2025-09-06 18:54:36 +00:00
github-actions[bot] 983e123b87 54d729e37a 2025-09-05 18:44:11 +00:00
github-actions[bot] 211d637a0c 3018e40dae 2025-09-04 19:01:51 +00:00
github-actions[bot] 4802490604 3f27f79d7d 2025-09-02 19:07:24 +00:00
github-actions[bot] 591e010392 06862c7259 2025-09-02 18:09:51 +00:00
github-actions[bot] f580266b86 0482d8b4e9 2025-09-01 19:22:59 +00:00
github-actions[bot] e89a52e221 e9889e5d20 2025-09-01 19:06:39 +00:00
github-actions[bot] 1b5e88f8ac 77886530fe 2025-09-01 19:02:00 +00:00
github-actions[bot] 761e86f10c bf22ddac46 2025-09-01 18:27:32 +00:00
github-actions[bot] 18388717a1 203019aa26 2025-08-31 13:23:15 +00:00
github-actions[bot] 32e2b534ec bdeab61001 2025-08-30 12:12:56 +00:00
github-actions[bot] 6fa01b10a7 c07fce936f 2025-08-28 18:41:11 +00:00
github-actions[bot] b1679b9097 264440ebcc 2025-08-28 18:28:58 +00:00
github-actions[bot] e4c893fcd6 32d82651e2 2025-08-27 18:38:58 +00:00
github-actions[bot] c563bc386c 0147441c93 2025-08-25 19:02:53 +00:00
github-actions[bot] c8e5d856a2 8e6ba7975b 2025-08-24 19:35:41 +00:00
github-actions[bot] 61b460a376 7bd7bce69c 2025-08-22 14:48:29 +00:00
github-actions[bot] ecbf648b63 4bd0c04bdc 2025-08-20 19:02:09 +00:00
github-actions[bot] 3126d5da4e 23f831a1fe 2025-08-19 18:46:58 +00:00
github-actions[bot] 0feca99c5a 384bd309a6 2025-08-18 19:45:44 +00:00
github-actions[bot] 40f41d49a4 6e7cc30da7 2025-08-18 19:33:15 +00:00
github-actions[bot] 15f8f910d0 4c9784255b 2025-08-15 10:56:23 +00:00
github-actions[bot] af44408dbb 1dd6cc3da5 2025-08-14 19:04:35 +00:00
github-actions[bot] 09ccd0e47f d04ab53f1d 2025-08-14 11:04:55 +00:00
github-actions[bot] fdf3f6c18d f4cfcbacde 2025-08-13 23:03:21 +00:00
github-actions[bot] 05f1a73af6 2b1780879a 2025-08-13 19:50:44 +00:00
github-actions[bot] 51525422e8 800b85c812 2025-08-12 18:21:20 +00:00
github-actions[bot] d9f74e3ff3 5286570bd6 2025-08-11 18:44:55 +00:00
github-actions[bot] 155d3b5ef0 bd1be88602 2025-08-11 18:37:23 +00:00
github-actions[bot] 0308b23da5 a102fac2c8 2025-08-09 12:51:42 +00:00
github-actions[bot] 1ee8f4bac3 63a4207061 2025-08-08 17:48:57 +00:00
github-actions[bot] ea9498659d 092c95b716 2025-08-08 11:07:45 +00:00
github-actions[bot] ce6218cfc7 09f046c72d 2025-08-07 18:40:54 +00:00
github-actions[bot] 66e7717751 b7cbd9b5d8 2025-08-07 17:40:24 +00:00
github-actions[bot] 7f17909fd8 2056b89bac 2025-08-05 19:16:45 +00:00
github-actions[bot] b1b7b50a6e b41e3e781e 2025-08-04 19:52:40 +00:00
github-actions[bot] 56658f8492 449b99b0c0 2025-08-01 16:06:11 +00:00
github-actions[bot] dc1b8d9bd2 0bdc3fd1f7 2025-08-01 15:49:48 +00:00
github-actions[bot] 81ca6af7ff 376554943d 2025-08-01 15:35:54 +00:00
github-actions[bot] d25dd93262 9fcc41b199 2025-08-01 15:16:52 +00:00
github-actions[bot] 9d040afd26 fe5639ce40 2025-08-01 15:09:18 +00:00
github-actions[bot] fdf4983211 0182c4b32e 2025-07-31 18:38:24 +00:00
github-actions[bot] d1b434eac1 31d3e19f38 2025-07-30 19:20:02 +00:00
github-actions[bot] 37b39deadb ee1c884031 2025-07-30 19:09:23 +00:00
github-actions[bot] 1109d979b8 e5f677bdd1 2025-07-30 19:01:18 +00:00
github-actions[bot] bdb6b44bea 6dd812f71c 2025-07-29 19:02:50 +00:00
github-actions[bot] 6c1a40ce8c e9f2a3f532 2025-07-29 18:46:29 +00:00
github-actions[bot] 29d76a4848 29e56adc15 2025-07-26 17:12:25 +00:00
github-actions[bot] 5ba6189341 caf91cd7ff 2025-07-26 16:50:18 +00:00
github-actions[bot] 8b1d07dd26 6432571c61 2025-07-26 11:26:16 +00:00
github-actions[bot] 71d4ba4594 9a215efe26 2025-07-25 18:38:42 +00:00
github-actions[bot] 0700a4b56d 65eef1b690 2025-07-25 17:35:09 +00:00
github-actions[bot] 143e27e56d 81bafa5520 2025-07-24 18:49:34 +00:00
github-actions[bot] d1a543a145 d322dc2047 2025-07-23 19:49:22 +00:00
github-actions[bot] 3c90c3d7bb 5f9019a95f 2025-07-23 18:24:56 +00:00
github-actions[bot] 84238187b0 4bc6a59ff3 2025-07-22 18:39:56 +00:00
github-actions[bot] bf79a825bc bc74d0b11b 2025-07-21 18:36:17 +00:00
github-actions[bot] 43c6caf744 cc6f7b02bc 2025-07-21 18:30:42 +00:00
github-actions[bot] cc877f5057 74e9357a59 2025-07-18 20:26:13 +00:00
github-actions[bot] 49de52fb53 8b876823da 2025-07-18 20:17:53 +00:00
github-actions[bot] ae7ea4b734 db20369447 2025-07-18 19:47:35 +00:00
github-actions[bot] b1ff5f5405 0e0a5618af 2025-07-18 18:41:54 +00:00
github-actions[bot] d1c5338a1a 21fa5cbded 2025-07-17 12:37:59 +00:00
github-actions[bot] 0496e1ff93 e2b7df9f84 2025-07-15 12:05:24 +00:00
github-actions[bot] 0ce8d2a41f ef07505b31 2025-07-15 11:39:34 +00:00
github-actions[bot] 357389f270 435a6cceb9 2025-07-15 11:24:41 +00:00
github-actions[bot] 0f05179586 a51216e3c7 2025-07-15 11:05:22 +00:00
github-actions[bot] ac3fe3ff9e 6ede403688 2025-07-14 11:58:52 +00:00
github-actions[bot] f147e6a18a ecadda45e7 2025-07-12 16:46:12 +00:00
github-actions[bot] b7a71db800 a837702b2c 2025-07-12 12:49:24 +00:00
github-actions[bot] 64fa5f88f9 0215e76118 2025-07-12 07:42:36 +00:00
github-actions[bot] 20b297d6e9 c465ef8352 2025-07-10 13:16:56 +00:00
github-actions[bot] 105176d4b7 1b37baefd3 2025-07-09 22:46:22 +00:00
github-actions[bot] 149b4a38fc b4a9424d60 2025-07-09 12:58:10 +00:00
github-actions[bot] 61220097f4 93c1824b1d 2025-07-08 11:37:08 +00:00
github-actions[bot] 2f91655617 eb82973067 2025-07-06 19:32:26 +00:00
github-actions[bot] c132af6454 a3e7f69b3f 2025-07-06 19:25:30 +00:00
github-actions[bot] d4df8c22c8 e04732462c 2025-07-06 19:11:09 +00:00
github-actions[bot] 7784aa45f9 e663e86e09 2025-07-04 18:46:31 +00:00
github-actions[bot] 05544273ab 163a15d664 2025-07-04 18:44:00 +00:00
github-actions[bot] 45d97b262f 4afdd4e892 2025-07-04 11:56:31 +00:00
github-actions[bot] 4c1c74faab 190cfe99ac 2025-07-03 14:41:16 +00:00
github-actions[bot] 490b662690 c9284f6b33 2025-07-02 19:57:28 +00:00
github-actions[bot] 2eb0d3f52a 4dd7dabf08 2025-07-02 19:46:59 +00:00
github-actions[bot] 67890dced6 917d8527a5 2025-07-02 19:37:54 +00:00
github-actions[bot] 9cff3a9f4c cd5202c2c5976ab5cad4cc48d362ee9c61017ef0 2025-07-02 19:29:00 +00:00
github-actions[bot] d0f0b1b0d9 917d8527a5 2025-07-02 19:25:35 +00:00
github-actions[bot] b3feb13bc2 f307467e37 2025-07-01 18:47:59 +00:00
github-actions[bot] 9135b68e12 dfd2c0eb218c47fbccdeeed453fc2d992372a32c 2025-07-01 18:20:52 +00:00
github-actions[bot] 8f037e771c 5285b7b95e 2025-07-01 18:03:57 +00:00
github-actions[bot] af416a9d26 50c7d2d6ad 2025-06-30 18:49:45 +00:00
github-actions[bot] ab954842e3 3ccbaf21d2 2025-06-30 18:45:24 +00:00
github-actions[bot] 0744b67280 6930fa6f3f 2025-06-29 19:16:21 +00:00
github-actions[bot] ed96d85801 16faef1511 2025-06-28 08:33:34 +00:00
github-actions[bot] 871142b427 c87d4524d5 2025-06-28 08:30:04 +00:00
github-actions[bot] 9cfe41b627 33234d9ce4 2025-06-27 18:59:09 +00:00
github-actions[bot] 8e1de2b8d4 4190ba43b4 2025-06-24 20:12:43 +00:00
github-actions[bot] 8bc79bf9ef b7d9c78309 2025-06-23 19:02:23 +00:00
github-actions[bot] 3cd45a7226 15f3eaf966 2025-06-22 20:23:35 +00:00
github-actions[bot] 3a85596ef7 0d5de750ff 2025-06-22 19:41:49 +00:00
github-actions[bot] 48fadba8ec 7109900bcf 2025-06-22 19:35:30 +00:00
github-actions[bot] ce64ba47ce 281e10c15f 2025-06-19 18:32:29 +00:00
github-actions[bot] 924c602da3 cdad6ccd75 2025-06-19 17:59:17 +00:00
github-actions[bot] 110eb9abc4 b537f9a93a 2025-06-18 20:06:40 +00:00
github-actions[bot] 6b06817470 Update 2025-06-17 18:34:57 +00:00
github-actions[bot] ce49db85a7 Update 2025-06-17 18:30:15 +00:00
github-actions[bot] bb855f8f94 Update 2025-06-16 19:00:59 +00:00
Koen Kanters 423f2229da Initial 2025-06-16 20:30:42 +02:00
181 changed files with 3179 additions and 44680 deletions
-17
View File
@@ -1,17 +0,0 @@
.eslintignore
.eslintrc.js
.git
.github
.gitignore
.idea
.npmrc
.travis*
.travis.yml
README.md
docker/Dockerfile*
images
node_modules
scripts
test
coverage
update.sh
-2
View File
@@ -1,2 +0,0 @@
node_modules/*
test/
-45
View File
@@ -1,45 +0,0 @@
module.exports = {
'env': {
'jest/globals': true,
'es6': true,
'node': true,
},
'extends': ['eslint:recommended', 'google', 'plugin:jest/recommended', 'plugin:jest/style'],
'parserOptions': {
'ecmaVersion': 2018,
'sourceType': 'module',
},
'rules': {
'require-jsdoc': 'off',
'indent': ['error', 4],
'max-len': ['error', {'code': 120}],
'no-prototype-builtins': 'off',
},
'plugins': [
'jest',
],
'overrides': [{
files: ['*.ts'],
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint'],
extends: ['plugin:@typescript-eslint/recommended'],
parserOptions: {
project: './tsconfig.json',
},
rules: {
'@typescript-eslint/await-thenable': 'error',
'@typescript-eslint/ban-ts-comment': 'off',
'@typescript-eslint/explicit-function-return-type': 'error',
'@typescript-eslint/no-empty-function': 'off',
'@typescript-eslint/no-explicit-any': 'error',
'@typescript-eslint/no-unused-vars': 'error',
'@typescript-eslint/semi': ['error'],
'array-bracket-spacing': ['error', 'never'],
'indent': ['error', 4],
'max-len': ['error', {'code': 120}],
'no-return-await': 'error',
'object-curly-spacing': ['error', 'never'],
},
}],
};
-4
View File
@@ -1,4 +0,0 @@
github: [koenkk]
custom:
- https://www.paypal.me/koenkk
- https://www.buymeacoffee.com/koenkk
-46
View File
@@ -1,46 +0,0 @@
<!--
Before submitting an issue make sure you've searched for a similar issue and read the documentation: https://www.zigbee2mqtt.io/.
Rules (don't ignore these, your issue will be closed without further notice):
- English only
- Make sure you are on the latest Zigbee2MQTT version
- Provide a clear description of the problem
- DON'T copy logs directly here, post a link to https://hastebin.com/ or https://pastebin.com/.
- Make sure you are running the latest firmware https://github.com/koenkk/z-stack-firmware.
Did you read the FAQ?
- https://www.zigbee2mqtt.io/information/FAQ.html
Zigbee2MQTT fails to start?
- https://www.zigbee2mqtt.io/information/FAQ.html#help-zigbee2mqtt-fails-to-start
Having issues when using a CC2531?
- Make sure the CC2531 is connected through a USB extension cable
- Try the source routing firmware: https://github.com/Koenkk/Z-Stack-firmware/tree/master/coordinator/Z-Stack_Home_1.2/bin/source_routing
- With larger networks (30/40+) devices, your CC2531 might not be powerful enough. This will cause weird issues, in this case it's advised to use a more powerful adapter: https://www.zigbee2mqtt.io/information/supported_adapters.html#texas-instruments-cc26x2r1
Unsupported device?
- https://www.zigbee2mqtt.io/how_tos/how_to_support_new_devices.html
Device does not pair or interview fails?
- https://www.zigbee2mqtt.io/information/FAQ.html#why-does-my-device-not-or-fail-to-pair
Bug report?
- If applicable, provide steps how to reproduce the problem.
- Provide the herdsman debug logging: https://www.zigbee2mqtt.io/information/debug.html#zigbee-herdsman-debug-logging
-->
<!--Start your bug report below this line-->
# Bug Report
## What happened
## What did you expect to happen
## How to reproduce it (minimal and precise)
## Debug Info
Zigbee2MQTT version:
Adapter hardware: CC2531, CC2530, CC26X2R1 or CC1352P-2
Adapter firmware version:
-17
View File
@@ -1,17 +0,0 @@
blank_issues_enabled: false
contact_links:
- name: Questions/discussion
url: https://github.com/Koenkk/zigbee2mqtt/discussions/new
about: Ask questions, discuss about devices or show things you made
- name: Frontend issues
url: https://github.com/nurikk/z2m-frontend/issues
about: Issues related to the frontend.
- name: Home Assistant addon issues
url: https://github.com/zigbee2mqtt/hassio-zigbee2mqtt/issues
about: Issues related to the Home Assistant addon.
- name: FAQ
url: https://www.zigbee2mqtt.io/information/FAQ.html
about: Frequently asked questions.
- name: Support Chat
url: https://discord.gg/NyseBeK
about: Chat for feedback, questions and troubleshooting.
-20
View File
@@ -1,20 +0,0 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: feature request
assignees: ''
---
## Is your feature request related to a problem? Please describe
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
## Describe the solution you'd like
A clear and concise description of what you want to happen.
## Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
## Additional context
Add any other context or screenshots about the feature request here.
@@ -1,21 +0,0 @@
---
name: New device support request
about: Request support for a new device
title: ''
labels: new device support
assignees: ''
---
<!--
VERY IMPORTANT: Before submitting a request, first (try to) follow: https://www.zigbee2mqtt.io/how_tos/how_to_support_new_devices.html
Dumping just the info about this device without actually attemping adding support yourself will likely lead into this issue being ignored.
Clearly indicate what you tried and where you got stuck.
-->
## Information about the device + link
..
## data/database.db entry of the device
..
-54
View File
@@ -1,54 +0,0 @@
---
name: Problem report
about: Create a report to help us improve
title: ''
labels: problem
assignees: ''
---
<!--
Before submitting an issue make sure you've searched for a similar issue and read the documentation: https://www.zigbee2mqtt.io/.
Rules (don't ignore these, your issue will be closed without further notice):
- English only
- Make sure you are on the latest Zigbee2MQTT version
- Provide a clear description of the problem
- DON'T copy logs directly here, post a link to https://hastebin.com/ or https://pastebin.com/.
- Make sure you are running the latest firmware https://github.com/koenkk/z-stack-firmware.
Did you read the FAQ?
- https://www.zigbee2mqtt.io/information/FAQ.html
Zigbee2MQTT fails to start?
- https://www.zigbee2mqtt.io/information/FAQ.html#help-zigbee2mqtt-fails-to-start
Having issues when using a CC2531?
- Make sure the CC2531 is connected through a USB extension cable
- Try the source routing firmware: https://github.com/Koenkk/Z-Stack-firmware/tree/master/coordinator/Z-Stack_Home_1.2/bin/source_routing
- With larger networks (30/40+) devices, your CC2531 might not be powerful enough. This will cause weird issues, in this case it's advised to use a more powerful adapter: https://www.zigbee2mqtt.io/information/supported_adapters.html#texas-instruments-cc26x2r1
Unsupported device?
- https://www.zigbee2mqtt.io/how_tos/how_to_support_new_devices.html
Device does not pair or interview fails?
- https://www.zigbee2mqtt.io/information/FAQ.html#why-does-my-device-not-or-fail-to-pair
Bug report?
- If applicable, provide steps how to reproduce the problem.
- Provide the herdsman debug logging: https://www.zigbee2mqtt.io/information/debug.html#zigbee-herdsman-debug-logging
-->
<!--Start your bug report below this line-->
## What happened
## What did you expect to happen
## How to reproduce it (minimal and precise)
## Debug info
Zigbee2MQTT version:
Adapter hardware: CC2531, CC2530, CC26X2R1, CC1352P-2, Conbee II
Adapter firmware version:
-1
View File
@@ -1 +0,0 @@
preferredBranch: dev
-84
View File
@@ -1,84 +0,0 @@
name: CI
on: [push, pull_request]
jobs:
ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2-beta
with:
node-version: 14
registry-url: https://registry.npmjs.org/
- name: Get NodeJS Version
id: nodeversion
run: |
echo "::set-output name=version::$(node --version)"
- name: Restore node_modules cache
id: cache-node-modules
uses: actions/cache@v2
with:
path: node_modules
key: ${{ runner.os }}-${{ steps.nodeversion.outputs.version }}-${{ hashFiles('npm-shrinkwrap.json') }}
- name: Install dependencies
if: steps.cache-node-modules.outputs.cache-hit != 'true'
run: npm ci
- name: Build
run: npm run build
- name: Test
run: npm run test-with-coverage
- name: Lint
run: npm run eslint
- name: Docker login
if: (github.ref == 'refs/heads/dev' || startsWith(github.ref, 'refs/tags/')) && github.event_name == 'push'
run: echo ${{ secrets.DOCKER_KEY }} | docker login -u koenkk --password-stdin
- name: Docker login ghcr.io
if: (github.ref == 'refs/heads/dev' || startsWith(github.ref, 'refs/tags/')) && github.event_name == 'push'
run: echo ${{ secrets.CR_PAT }} | docker login ghcr.io -u koenkk --password-stdin
- name: Docker setup - QEMU
if: (github.ref == 'refs/heads/dev' || startsWith(github.ref, 'refs/tags/')) && github.event_name == 'push'
uses: docker/setup-qemu-action@v1
with:
platforms: all
- name: Docker setup - Buildx
if: (github.ref == 'refs/heads/dev' || startsWith(github.ref, 'refs/tags/')) && github.event_name == 'push'
id: buildx
uses: docker/setup-buildx-action@v1
with:
version: latest
- name: Docker build dev
if: github.ref == 'refs/heads/dev' && github.event_name == 'push'
run: |
docker buildx build \
--build-arg COMMIT=$(git rev-parse --short HEAD) \
--platform linux/arm64/v8,linux/amd64,linux/arm/v6,linux/arm/v7 \
-f docker/Dockerfile \
--push \
-t koenkk/zigbee2mqtt:latest-dev -t ghcr.io/koenkk/zigbee2mqtt:latest-dev \
.
- name: Docker build release
if: startsWith(github.ref, 'refs/tags/') && github.event_name == 'push'
run: |
TAG="$(git describe --tags)"
docker buildx build \
--build-arg COMMIT=$(git rev-parse --short HEAD) \
--platform linux/arm64/v8,linux/amd64,linux/arm/v6,linux/arm/v7 \
-f docker/Dockerfile \
--push \
-t koenkk/zigbee2mqtt:latest -t "koenkk/zigbee2mqtt:$TAG" -t ghcr.io/koenkk/zigbee2mqtt:latest -t "ghcr.io/koenkk/zigbee2mqtt:$TAG" \
.
- name: Publish to npm
if: startsWith(github.ref, 'refs/tags/') && github.event_name == 'push'
run: npm publish
env:
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN }}
- name: Trigger zigbee2mqtt/hassio-zigbee2mqtt build
if: github.ref == 'refs/heads/dev' && github.event_name == 'push'
run: |
curl -s \
--request POST \
--header "Content-Type: application/json" \
--data '{"definition": {"id": 9}}' \
-u ${{ secrets.HASSIO_TRIGGER_SECRET }} \
"https://dev.azure.com/zigbee2mqtt/Zigbee2mqtt%20Add-on/_apis/build/builds?api-version=5.1"
-19
View File
@@ -1,19 +0,0 @@
name: "Close stale issues/pull requests"
on:
schedule:
- cron: "0 0 * * *"
workflow_dispatch:
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v3
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 7 days'
stale-pr-message: 'This pull request is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 7 days'
days-before-stale: 30
days-before-close: 7
operations-per-run: 500
exempt-issue-labels: 'breaking change'
-25
View File
@@ -1,25 +0,0 @@
name: Update dependencies
on:
workflow_dispatch:
schedule:
- cron: "0 0 * * 0"
jobs:
update_deps:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: dev
ssh-key: ${{ secrets.SSH_PRIVATE_KEY }}
- uses: actions/setup-node@v2-beta
with:
node-version: 14
- run: rm -rf npm-shrinkwrap.json
- run: npx npm-check-updates -u
- run: npm install && npm shrinkwrap --dev
- uses: peter-evans/create-pull-request@v3
with:
commit-message: Update dependencies
branch: "update_deps"
title: Update dependencies
-22
View File
@@ -1,22 +0,0 @@
name: Update zigbee-frontend
on:
repository_dispatch:
types: update_frontend
jobs:
update_frontend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: dev
ssh-key: ${{ secrets.SSH_PRIVATE_KEY }}
- uses: actions/setup-node@v2-beta
with:
node-version: 14
- run: npm install zigbee2mqtt-frontend@${{ github.event.client_payload.version }} --save-exact
- uses: peter-evans/create-pull-request@v3
with:
commit-message: Update zigbee2mqtt-frontend to ${{ github.event.client_payload.version }}
branch: "update_frontend"
title: Update zigbee-frontend to ${{ github.event.client_payload.version }}
-22
View File
@@ -1,22 +0,0 @@
name: Update zigbee-herdsman
on:
repository_dispatch:
types: update_zh
jobs:
update_zh:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: dev
ssh-key: ${{ secrets.SSH_PRIVATE_KEY }}
- uses: actions/setup-node@v2-beta
with:
node-version: 14
- run: npm install zigbee-herdsman@${{ github.event.client_payload.version }} --save-exact
- uses: peter-evans/create-pull-request@v3
with:
commit-message: Update zigbee-herdsman to ${{ github.event.client_payload.version }}
branch: "update_zh"
title: Update zigbee-herdsman to ${{ github.event.client_payload.version }}
-22
View File
@@ -1,22 +0,0 @@
name: Update zigbee-herdsman-converters
on:
repository_dispatch:
types: update_zhc
jobs:
update_zhc:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: dev
ssh-key: ${{ secrets.SSH_PRIVATE_KEY }}
- uses: actions/setup-node@v2-beta
with:
node-version: 14
- run: npm install zigbee-herdsman-converters@${{ github.event.client_payload.version }} --save-exact
- uses: peter-evans/create-pull-request@v3
with:
commit-message: Update zigbee-herdsman-converters to ${{ github.event.client_payload.version }}
branch: "update_zhc"
title: Update zigbee-herdsman-converters to ${{ github.event.client_payload.version }}
-82
View File
@@ -1,82 +0,0 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Compiled source
dist/*
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Typescript v1 declaration files
typings/
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
# data
data/database.db
data/config.json
data/log*.txt
data/state.json
data/log
data-backup/
data/coordinator_backup.json
data/.storage
data/database.db.backup
data/extension
# MacOS indexing file
.DS_Store
# IDE specific folders
.idea
# Ignore config
data/*.yaml
-27
View File
@@ -1,27 +0,0 @@
#tests
test
coverage
#build tools
.travis.yml
.jenkins.yml
.codeclimate.yml
.github
babel.config.js
#linters
.jscsrc
.jshintrc
.eslintrc*
.dockerignore
.eslintignore
.gitignore
#editor settings
.vscode
#src
lib
docs
docker
images
-2
View File
@@ -1,2 +0,0 @@
tag-version-prefix=""
-132
View File
@@ -1,132 +0,0 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available
at [https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations
-8
View File
@@ -1,8 +0,0 @@
# Contributing to Zigbee2MQTT
Everybody is invited and welcome to contribute to Zigbee2MQTT. Zigbee2MQTT is writen in JavaScript and is based upon [zigbee-herdsman](https://github.com/koenkk/zigbee-herdsman) and [zigbee-herdsman-converters](https://github.com/koenkk/zigbee-herdsman-converters). Zigbee-herdsman-converters contains all device definition, zigbee-herdsman is responsible for handling all communication with the adapter.
- Pull requests are always created against the [**dev**](https://github.com/Koenkk/zigbee2mqtt/tree/dev) branch.
- Easiest way to start developing Zigbee2MQTT is by setting up a development environment (aka bare-metal installation). You can follow this [guide](https://www.zigbee2mqtt.io/getting_started/running_zigbee2mqtt.html#running-zigbee2mqtt) to do this.
- You can run the tests locally by executing `npm test`. Zigbee2MQTT enforces 100% code coverage, in case you add new code check if you code is covered by running `npm run test-with-coverage`. The coverage report can be found under `coverage/lcov-report/index.html`. Linting is also enforced and can be run with `npm run eslint`.
- When you want to add support for a new devices no changes to Zigbee2MQTT have to be made, only to zigbee-herdsman-converters. You can find a guide for it [here](https://www.zigbee2mqtt.io/how_tos/how_to_support_new_devices.html).
-81
View File
@@ -1,81 +0,0 @@
<div align="center">
<a href="https://github.com/koenkk/zigbee2mqtt">
<img width="150" height="150" src="images/logo.png">
</a>
<br>
<br>
<div style="display: flex;">
<a href="https://github.com/Koenkk/zigbee2mqtt/actions?query=workflow%3ACI">
<img src="https://github.com/koenkk/zigbee2mqtt/workflows/CI/badge.svg">
</a>
<a href="https://github.com/Koenkk/zigbee2mqtt/releases">
<img src="https://img.shields.io/github/release/koenkk/zigbee2mqtt.svg">
</a>
<a href="https://github.com/Koenkk/zigbee2mqtt/stargazers">
<img src="https://img.shields.io/github/stars/koenkk/zigbee2mqtt.svg">
</a>
<a href="https://www.paypal.me/koenkk">
<img src="https://img.shields.io/badge/donate-PayPal-blue.svg">
</a>
<a href="https://discord.gg/dadfWYE">
<img src="https://img.shields.io/discord/556563650429583360.svg">
</a>
<a href="http://zigbee2mqtt.discourse.group/">
<img src="https://img.shields.io/discourse/https/zigbee2mqtt.discourse.group/status.svg">
</a>
<a>
<img src="https://img.shields.io/badge/Coverage-100%25-brightgreen.svg">
</a>
<a href="https://www.codacy.com/manual/Koenkk/zigbee2mqtt?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=Koenkk/zigbee2mqtt&amp;utm_campaign=Badge_Grade">
<img src="https://api.codacy.com/project/badge/Grade/24f1e0fe39f04daa810e8a1416693d3f">
</a>
<a href="https://www.npmjs.com/package/zigbee2mqtt">
<img src="https://img.shields.io/npm/v/zigbee2mqtt">
</a>
</div>
<h1>Zigbee2MQTT 🌉 🐝</h1>
<p>
Allows you to use your Zigbee devices <b>without</b> the vendors bridge or gateway.
</p>
<p>
It bridges events and allows you to control your Zigbee devices via MQTT. In this way you can integrate your Zigbee devices with whatever smart home infrastructure you are using.
</p>
</div>
## [Getting started](https://www.zigbee2mqtt.io/#getting-started)
The [documentation](https://www.zigbee2mqtt.io/) provides you all the information needed to get up and running! Make sure you don't skip sections if this is your first visit, as there might be important details in there for you.
If you aren't familiar with **Zigbee** terminology make sure you [read this](https://www.zigbee2mqtt.io/information/zigbee_network.html) to help you out.
## [Integrations](https://www.zigbee2mqtt.io/#integration)
Zigbee2MQTT integrates well with (almost) every home automation solution because it uses MQTT. However the following integrations are worth mentioning:
<img align="left" height="100px" width="100px" src="https://user-images.githubusercontent.com/7738048/40914297-49e6e560-6800-11e8-8904-36cce896e5a8.png">
### [Home Assistant](https://www.home-assistant.io/)
- [Home Assistant](https://www.home-assistant.io/hassio/): Using [the official addon](https://github.com/zigbee2mqtt/hassio-zigbee2mqtt)
- Generic install or Hassbian: Using instructions [here](https://www.zigbee2mqtt.io/integration/home_assistant.html)
<img align="left" height="100px" width="100px" src="https://user-images.githubusercontent.com/2734836/47615848-b8dd8700-dabd-11e8-9d77-175002dd8987.png">
### [Domoticz](https://www.domoticz.com/)
- Integration implemented in [domoticz-zigbee2mqtt-plugin](https://github.com/stas-demydiuk/domoticz-zigbee2mqtt-plugin)
<br>
## Architecture
![Architecture](images/architecture.png)
### Internal Architecture
Zigbee2MQTT is made up of three modules, each developed in its own Github project. Starting from the hardware (adapter) and moving up; [zigbee-herdsman](https://github.com/koenkk/zigbee-herdsman) connects to your Zigbee adapter an makes an API available to the higher levels of the stack. For e.g. Texas Instruments hardware, zigbee-herdsman uses the [TI zStack monitoring and test API](https://github.com/koenkk/zigbee-herdsman/raw/master/docs/Z-Stack%20Monitor%20and%20Test%20API.pdf) to communicate with the adapter. Zigbee-herdsman handles the core Zigbee communication. The module [zigbee-herdsman-converters](https://github.com/koenkk/zigbee-herdsman-converters) handles the mapping from individual device models to the Zigbee clusters they support. [Zigbee clusters](https://github.com/Koenkk/zigbee-herdsman/raw/master/docs/Zigbee%20Cluster%20Library%20Specification%20v7.pdf) are the layers of the Zigbee protocol on top of the base protocol that define things like how lights, sensors and switches talk to each other over the Zigbee network. Finally, the Zigbee2MQTT module drives zigbee-herdsman and maps the zigbee messages to MQTT messages. Zigbee2MQTT also keeps track of the state of the system. It uses a `database.db` file to store this state; a text file with a JSON database of connected devices and their capabilities.
### Developing
Zigbee2MQTT uses TypeScript (partially for now). Therefore after making changes to files in the `lib/` directory you need to recompile Zigbee2MQTT. This can be done by executing `npm run build`. For faster development instead of running `npm run build` you can run `npm run build-watch` in another terminal session, this will recompile as you change files.
## Supported devices
See [Supported devices](https://www.zigbee2mqtt.io/information/supported_devices.html) to check whether your device is supported. There is quite an extensive list, including devices from vendors like Xiaomi, Ikea, Philips, OSRAM and more.
If it's not listed in [Supported devices](https://www.zigbee2mqtt.io/information/supported_devices.html), support can be added (fairly) easy, see [How to support new devices](https://www.zigbee2mqtt.io/how_tos/how_to_support_new_devices.html).
## Support & help
If you need assistance you can check [opened issues](https://github.com/Koenkk/zigbee2mqtt/issues). Feel free to help with Pull Requests when you were able to fix things or add new devices or just share the love on social media.
-11
View File
@@ -1,11 +0,0 @@
module.exports = {
presets: [
['@babel/preset-env', {targets: {node: 'current'}}],
'@babel/preset-typescript',
],
assumptions: {setPublicClassFields: true},
plugins: [
['@babel/plugin-proposal-decorators', {'legacy': true}],
['@babel/plugin-proposal-class-properties'],
],
};
-4
View File
@@ -1,4 +0,0 @@
#!/usr/bin/env node
const path = require('path');
process.env['ZIGBEE2MQTT_DATA'] = process.env['ZIGBEE2MQTT_DATA'] || path.join(process.env['HOME'], '.z2m');
require('./index');
-20
View File
@@ -1,20 +0,0 @@
# Home Assistant integration (MQTT discovery)
homeassistant: false
# allow new devices to join
permit_join: true
# MQTT settings
mqtt:
# MQTT base topic for zigbee2mqtt MQTT messages
base_topic: zigbee2mqtt
# MQTT server URL
server: 'mqtt://localhost'
# MQTT server authentication, uncomment if required:
# user: my_user
# password: my_password
# Serial settings
serial:
# Location of CC2531 USB sniffer
port: /dev/ttyACM0
+30
View File
@@ -0,0 +1,30 @@
import EventBus from "./eventBus";
import type Extension from "./extension/extension";
import Mqtt, { type MqttPublishOptions } from "./mqtt";
import State from "./state";
import Zigbee from "./zigbee";
export declare class Controller {
#private;
readonly eventBus: EventBus;
readonly zigbee: Zigbee;
readonly state: State;
readonly mqtt: Mqtt;
private restartCallback;
private exitCallback;
readonly extensions: Set<Extension>;
readonly extensionArgs: ConstructorParameters<typeof Extension>;
private sdNotify;
constructor(restartCallback: () => Promise<void>, exitCallback: (code: number, restart: boolean) => Promise<void>);
start(): Promise<void>;
enableDisableExtension(enable: boolean, name: string): Promise<void>;
getExtension(name: string): Extension | undefined;
addExtension(extension: Extension): Promise<void>;
removeExtension(extension: Extension): Promise<void>;
private startExtension;
private stopExtension;
stop(restart?: boolean, code?: number, signal?: NodeJS.Signals | undefined): Promise<void>;
exit(code: number, restart?: boolean): Promise<void>;
publishEntityState(entity: Group | Device, payload: KeyValue, stateChangeReason?: StateChangeReason): Promise<void>;
iteratePayloadAttributeOutput(topicRoot: string, payload: KeyValue, options: Partial<MqttPublishOptions>): Promise<void>;
}
//# sourceMappingURL=controller.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../lib/controller.ts"],"names":[],"mappings":"AAGA,OAAO,QAAQ,MAAM,YAAY,CAAC;AAMlC,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAC;AAUnD,OAAO,IAAI,EAAE,EAAC,KAAK,kBAAkB,EAAC,MAAM,QAAQ,CAAC;AACrD,OAAO,KAAK,MAAM,SAAS,CAAC;AAO5B,OAAO,MAAM,MAAM,UAAU,CAAC;AAE9B,qBAAa,UAAU;;IAGnB,SAAgB,QAAQ,EAAE,QAAQ,CAAC;IACnC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,KAAK,EAAE,KAAK,CAAC;IAC7B,SAAgB,IAAI,EAAE,IAAI,CAAC;IAC3B,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,YAAY,CAAoD;IACxE,SAAgB,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;IAC3C,SAAgB,aAAa,EAAE,qBAAqB,CAAC,OAAO,SAAS,CAAC,CAAC;IACvE,OAAO,CAAC,QAAQ,CAA2C;IAE3D,YAAY,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,EA4ChH;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CA+H3B;IAEW,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkF/E;IAEM,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAMvD;IAEW,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAS5D;IAEK,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzD;YAEa,cAAc;YAQd,aAAa;IAQrB,IAAI,CAAC,OAAO,UAAQ,EAAE,IAAI,SAAI,EAAE,MAAM,GAAE,MAAM,CAAC,OAAO,GAAG,SAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCnG;IAEK,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvD;IAEW,kBAAkB,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8E9H;IAEK,6BAA6B,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B7H;CACJ"}
+69
View File
@@ -0,0 +1,69 @@
type ListenerKey = object;
type Stats = {
devices: Map<string, // IEEE address
{
lastSeenChanges?: {
messages: number;
first: number;
};
leaveCounts: number;
networkAddressChanges: number;
}>;
mqtt: {
published: number;
received: number;
};
};
export default class EventBus {
private callbacksByExtension;
private emitter;
readonly stats: Stats;
constructor();
emitAdapterDisconnected(): void;
onAdapterDisconnected(key: ListenerKey, callback: () => Promise<void>): void;
emitPermitJoinChanged(data: eventdata.PermitJoinChanged): void;
onPermitJoinChanged(key: ListenerKey, callback: (data: eventdata.PermitJoinChanged) => void): void;
emitEntityRenamed(data: eventdata.EntityRenamed): void;
onEntityRenamed(key: ListenerKey, callback: (data: eventdata.EntityRenamed) => void): void;
emitEntityRemoved(data: eventdata.EntityRemoved): void;
onEntityRemoved(key: ListenerKey, callback: (data: eventdata.EntityRemoved) => void): void;
emitLastSeenChanged(data: eventdata.LastSeenChanged): void;
onLastSeenChanged(key: ListenerKey, callback: (data: eventdata.LastSeenChanged) => void): void;
emitDeviceNetworkAddressChanged(data: eventdata.DeviceNetworkAddressChanged): void;
onDeviceNetworkAddressChanged(key: ListenerKey, callback: (data: eventdata.DeviceNetworkAddressChanged) => void): void;
emitDeviceAnnounce(data: eventdata.DeviceAnnounce): void;
onDeviceAnnounce(key: ListenerKey, callback: (data: eventdata.DeviceAnnounce) => void): void;
emitDeviceInterview(data: eventdata.DeviceInterview): void;
onDeviceInterview(key: ListenerKey, callback: (data: eventdata.DeviceInterview) => void): void;
emitDeviceJoined(data: eventdata.DeviceJoined): void;
onDeviceJoined(key: ListenerKey, callback: (data: eventdata.DeviceJoined) => void): void;
emitEntityOptionsChanged(data: eventdata.EntityOptionsChanged): void;
onEntityOptionsChanged(key: ListenerKey, callback: (data: eventdata.EntityOptionsChanged) => void): void;
emitExposesChanged(data: eventdata.ExposesChanged): void;
onExposesChanged(key: ListenerKey, callback: (data: eventdata.ExposesChanged) => void): void;
emitDeviceLeave(data: eventdata.DeviceLeave): void;
onDeviceLeave(key: ListenerKey, callback: (data: eventdata.DeviceLeave) => void): void;
emitDeviceMessage(data: eventdata.DeviceMessage): void;
onDeviceMessage(key: ListenerKey, callback: (data: eventdata.DeviceMessage) => void): void;
emitMQTTMessage(data: eventdata.MQTTMessage): void;
onMQTTMessage(key: ListenerKey, callback: (data: eventdata.MQTTMessage) => void): void;
emitMQTTMessagePublished(data: eventdata.MQTTMessagePublished): void;
onMQTTMessagePublished(key: ListenerKey, callback: (data: eventdata.MQTTMessagePublished) => void): void;
emitPublishEntityState(data: eventdata.PublishEntityState): void;
onPublishEntityState(key: ListenerKey, callback: (data: eventdata.PublishEntityState) => void): void;
emitGroupMembersChanged(data: eventdata.GroupMembersChanged): void;
onGroupMembersChanged(key: ListenerKey, callback: (data: eventdata.GroupMembersChanged) => void): void;
emitDevicesChanged(): void;
onDevicesChanged(key: ListenerKey, callback: () => void): void;
emitScenesChanged(data: eventdata.ScenesChanged): void;
onScenesChanged(key: ListenerKey, callback: (data: eventdata.ScenesChanged) => void): void;
emitReconfigure(data: eventdata.Reconfigure): void;
onReconfigure(key: ListenerKey, callback: (data: eventdata.Reconfigure) => void): void;
emitStateChange(data: eventdata.StateChange): void;
onStateChange(key: ListenerKey, callback: (data: eventdata.StateChange) => void): void;
emitExposesAndDevicesChanged(device: Device): void;
private on;
removeListeners(key: ListenerKey): void;
}
export {};
//# sourceMappingURL=eventBus.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"eventBus.d.ts","sourceRoot":"","sources":["../lib/eventBus.ts"],"names":[],"mappings":"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"}
+34
View File
@@ -0,0 +1,34 @@
import Extension from "./extension";
export default class Availability extends Extension {
/** Mapped by IEEE address */
private readonly timers;
/** Mapped by IEEE address or Group ID */
private readonly lastPublishedAvailabilities;
/** Mapped by IEEE address */
private readonly pingBackoffs;
/** IEEE addresses, waiting for last seen changes to take them out of "availability sleep" */
private readonly backoffPausedDevices;
/** Mapped by IEEE address */
private readonly retrieveStateDebouncers;
private pingQueue;
private pingQueueExecuting;
private stopped;
private getTimeout;
private getMaxJitter;
private getBackoff;
private getPauseOnBackoffGt;
private isActiveDevice;
private isAvailable;
private resetTimer;
private clearTimer;
private addToPingQueue;
private removeFromPingQueue;
private pingQueueExecuteNext;
start(): Promise<void>;
private publishAvailabilityForAllEntities;
private publishAvailability;
private onLastSeenChanged;
stop(): Promise<void>;
private retrieveState;
}
//# sourceMappingURL=availability.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"availability.d.ts","sourceRoot":"","sources":["../../lib/extension/availability.ts"],"names":[],"mappings":"AASA,OAAO,SAAS,MAAM,aAAa,CAAC;AAcpC,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,SAAS;IAC/C,6BAA6B;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;IAC5D,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAuC;IACnF,6BAA6B;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D,6FAA6F;IAC7F,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAqB;IAC1D,6BAA6B;IAC7B,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAiC;IACzE,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,UAAU;IAqClB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,mBAAmB;YAOb,oBAAoB;IA4DnB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CA+BpC;YAEa,iCAAiC;YAQjC,mBAAmB;YAoCb,iBAAiB;IAStB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CASnC;IAED,OAAO,CAAC,aAAa;CAoDxB"}
+15
View File
@@ -0,0 +1,15 @@
import Extension from "./extension";
export default class Bind extends Extension {
#private;
private pollDebouncers;
start(): Promise<void>;
private parseMQTTMessage;
private onMQTTMessage;
private publishResponse;
onGroupMembersChanged(data: eventdata.GroupMembersChanged): Promise<void>;
getSetupReportingEndpoints(bind: zh.Bind, coordinatorEp: zh.Endpoint): zh.Endpoint[];
setupReporting(binds: zh.Bind[]): Promise<void>;
disableUnnecessaryReportings(target: zh.Group | zh.Endpoint): Promise<void>;
poll(data: eventdata.DeviceMessage): Promise<void>;
}
//# sourceMappingURL=bind.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"bind.d.ts","sourceRoot":"","sources":["../../lib/extension/bind.ts"],"names":[],"mappings":"AAaA,OAAO,SAAS,MAAM,aAAa,CAAC;AA4KpC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,SAAS;;IAEvC,OAAO,CAAC,cAAc,CAAiC;IAGxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAIpC;IAED,OAAO,CAAC,gBAAgB;YAiFJ,aAAa;YA+InB,eAAe;IAcjB,qBAAqB,CAAC,IAAI,EAAE,SAAS,CAAC,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBpF;IAED,0BAA0B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAkBnF;IAEK,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCpD;IAEK,4BAA4B,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDhF;IAEW,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAwE7D;CACJ"}
+59
View File
@@ -0,0 +1,59 @@
import Device from "../model/device";
import type Group from "../model/group";
import type { Zigbee2MQTTDevice, Zigbee2MQTTResponse } from "../types/api";
import Extension from "./extension";
export default class Bridge extends Extension {
#private;
private zigbee2mqttVersion;
private zigbeeHerdsmanVersion;
private zigbeeHerdsmanConvertersVersion;
private coordinatorVersion;
private restartRequired;
private lastJoinedDeviceIeeeAddr?;
private lastBridgeLoggingPayload?;
private logTransport;
private requestLookup;
start(): Promise<void>;
stop(): Promise<void>;
onMQTTMessage(data: eventdata.MQTTMessage): Promise<void>;
/**
* Requests
*/
deviceOptions(message: KeyValue | string): Promise<Zigbee2MQTTResponse<"bridge/response/device/options">>;
groupOptions(message: KeyValue | string): Promise<Zigbee2MQTTResponse<"bridge/response/group/options">>;
bridgeOptions(message: KeyValue | string): Promise<Zigbee2MQTTResponse<"bridge/response/options">>;
deviceRemove(message: string | KeyValue): Promise<Zigbee2MQTTResponse<"bridge/response/device/remove">>;
groupRemove(message: string | KeyValue): Promise<Zigbee2MQTTResponse<"bridge/response/group/remove">>;
healthCheck(message: string | KeyValue): Promise<Zigbee2MQTTResponse<"bridge/response/health_check">>;
coordinatorCheck(message: string | KeyValue): Promise<Zigbee2MQTTResponse<"bridge/response/coordinator_check">>;
groupAdd(message: string | KeyValue): Promise<Zigbee2MQTTResponse<"bridge/response/group/add">>;
deviceRename(message: string | KeyValue): Promise<Zigbee2MQTTResponse<"bridge/response/device/rename">>;
groupRename(message: string | KeyValue): Promise<Zigbee2MQTTResponse<"bridge/response/group/rename">>;
restart(message: string | KeyValue): Promise<Zigbee2MQTTResponse<"bridge/response/restart">>;
backup(message: string | KeyValue): Promise<Zigbee2MQTTResponse<"bridge/response/backup">>;
installCodeAdd(message: KeyValue | string): Promise<Zigbee2MQTTResponse<"bridge/response/install_code/add">>;
permitJoin(message: KeyValue | string): Promise<Zigbee2MQTTResponse<"bridge/response/permit_join">>;
touchlinkIdentify(message: KeyValue | string): Promise<Zigbee2MQTTResponse<"bridge/response/touchlink/identify">>;
touchlinkFactoryReset(message: KeyValue | string): Promise<Zigbee2MQTTResponse<"bridge/response/touchlink/factory_reset">>;
touchlinkScan(message: KeyValue | string): Promise<Zigbee2MQTTResponse<"bridge/response/touchlink/scan">>;
/**
* Utils
*/
changeEntityOptions<T extends "device" | "group">(entityType: T, message: KeyValue | string): Promise<Zigbee2MQTTResponse<T extends "device" ? "bridge/response/device/options" : "bridge/response/group/options">>;
deviceReportingConfigure(message: string | KeyValue): Promise<Zigbee2MQTTResponse<"bridge/response/device/reporting/configure">>;
deviceReportingRead(message: string | KeyValue): Promise<Zigbee2MQTTResponse<"bridge/response/device/reporting/read">>;
deviceInterview(message: string | KeyValue): Promise<Zigbee2MQTTResponse<"bridge/response/device/interview">>;
deviceGenerateExternalDefinition(message: string | KeyValue): Promise<Zigbee2MQTTResponse<"bridge/response/device/generate_external_definition">>;
action(message: string | KeyValue): Promise<Zigbee2MQTTResponse<"bridge/response/action">>;
renameEntity<T extends "device" | "group">(entityType: T, message: string | KeyValue): Promise<Zigbee2MQTTResponse<T extends "device" ? "bridge/response/device/rename" : "bridge/response/group/rename">>;
removeEntity<T extends "device" | "group">(entityType: T, message: string | KeyValue): Promise<Zigbee2MQTTResponse<T extends "device" ? "bridge/response/device/remove" : "bridge/response/group/remove">>;
getEntity(type: "group", id: string): Group;
getEntity(type: "device", id: string): Device;
getEntity(type: "group" | "device", id: string): Device | Group;
publishInfo(): Promise<void>;
publishDevices(): Promise<void>;
publishGroups(): Promise<void>;
publishDefinitions(): Promise<void>;
getDefinitionPayload(device: Device): Zigbee2MQTTDevice["definition"] | undefined;
}
//# sourceMappingURL=bridge.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../lib/extension/bridge.ts"],"names":[],"mappings":"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"}
+14
View File
@@ -0,0 +1,14 @@
import Extension from "./extension";
/**
* This extension calls the zigbee-herdsman-converters definition configure() method
*/
export default class Configure extends Extension {
private configuring;
private attempts;
private topic;
private onReconfigure;
private onMQTTMessage;
start(): Promise<void>;
private configure;
}
//# sourceMappingURL=configure.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../../lib/extension/configure.ts"],"names":[],"mappings":"AAOA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,SAAS;IAC5C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,KAAK,CAAuE;YAEhE,aAAa;YAUb,aAAa;IA8BxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CA0B9B;YAEa,SAAS;CAqE1B"}
+34
View File
@@ -0,0 +1,34 @@
declare abstract class Extension {
protected zigbee: Zigbee;
protected mqtt: Mqtt;
protected state: State;
protected publishEntityState: PublishEntityState;
protected eventBus: EventBus;
protected enableDisableExtension: (enable: boolean, name: string) => Promise<void>;
protected restartCallback: () => Promise<void>;
protected addExtension: (extension: Extension) => Promise<void>;
/**
* Besides initializing variables, the constructor should do nothing!
*
* @param {Zigbee} zigbee Zigbee controller
* @param {Mqtt} mqtt MQTT controller
* @param {State} state State controller
* @param {Function} publishEntityState Method to publish device state to MQTT.
* @param {EventBus} eventBus The event bus
* @param {enableDisableExtension} enableDisableExtension Enable/disable extension method
* @param {restartCallback} restartCallback Restart Zigbee2MQTT
* @param {addExtension} addExtension Add an extension
*/
constructor(zigbee: Zigbee, mqtt: Mqtt, state: State, publishEntityState: PublishEntityState, eventBus: EventBus, enableDisableExtension: (enable: boolean, name: string) => Promise<void>, restartCallback: () => Promise<void>, addExtension: (extension: Extension) => Promise<void>);
/**
* Is called once the extension has to start
*/
start(): Promise<void>;
/**
* Is called once the extension has to stop
*/
stop(): Promise<void>;
adjustMessageBeforePublish(_entity: Group | Device, _message: KeyValue): void;
}
export default Extension;
//# sourceMappingURL=extension.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../lib/extension/extension.ts"],"names":[],"mappings":"AAAA,uBAAe,SAAS;IACpB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;IACrB,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;IACvB,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IACjD,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,SAAS,CAAC,sBAAsB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnF,SAAS,CAAC,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,SAAS,CAAC,YAAY,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE;;;;;;;;;;;OAWG;IACH,YACI,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,kBAAkB,EAAE,kBAAkB,EACtC,QAAQ,EAAE,QAAQ,EAClB,sBAAsB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EACxE,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACpC,YAAY,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,EAUxD;IAED;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAG;IAE/B;;OAEG;IAGG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1B;IAEM,0BAA0B,CAAC,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAG;CAC1F;eAEc,SAAS"}
+10
View File
@@ -0,0 +1,10 @@
import type { ExternalDefinitionWithExtend } from "zigbee-herdsman-converters";
import ExternalJSExtension from "./externalJS";
type TModule = ExternalDefinitionWithExtend | ExternalDefinitionWithExtend[];
export default class ExternalConverters extends ExternalJSExtension<TModule> {
constructor(zigbee: Zigbee, mqtt: Mqtt, state: State, publishEntityState: PublishEntityState, eventBus: EventBus, enableDisableExtension: (enable: boolean, name: string) => Promise<void>, restartCallback: () => Promise<void>, addExtension: (extension: Extension) => Promise<void>);
protected removeJS(name: string, _mod: TModule): Promise<void>;
protected loadJS(name: string, mod: TModule, newName?: string): Promise<void>;
}
export {};
//# sourceMappingURL=externalConverters.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"externalConverters.d.ts","sourceRoot":"","sources":["../../lib/extension/externalConverters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,4BAA4B,EAAC,MAAM,4BAA4B,CAAC;AAK7E,OAAO,mBAAmB,MAAM,cAAc,CAAC;AAE/C,KAAK,OAAO,GAAG,4BAA4B,GAAG,4BAA4B,EAAE,CAAC;AAE7E,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,mBAAmB,CAAC,OAAO,CAAC;IACxE,YACI,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,kBAAkB,EAAE,kBAAkB,EACtC,QAAQ,EAAE,QAAQ,EAClB,sBAAsB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EACxE,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACpC,YAAY,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,EAcxD;IAED,UAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAInE;IAED,UAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBlF;CACJ"}
+10
View File
@@ -0,0 +1,10 @@
import type Extension from "./extension";
import ExternalJSExtension from "./externalJS";
type TModule = new (...args: ConstructorParameters<typeof Extension>) => Extension;
export default class ExternalExtensions extends ExternalJSExtension<TModule> {
constructor(zigbee: Zigbee, mqtt: Mqtt, state: State, publishEntityState: PublishEntityState, eventBus: EventBus, enableDisableExtension: (enable: boolean, name: string) => Promise<void>, restartCallback: () => Promise<void>, addExtension: (extension: Extension) => Promise<void>);
protected removeJS(_name: string, mod: TModule): Promise<void>;
protected loadJS(name: string, mod: TModule, newName?: string): Promise<void>;
}
export {};
//# sourceMappingURL=externalExtensions.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"externalExtensions.d.ts","sourceRoot":"","sources":["../../lib/extension/externalExtensions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,mBAAmB,MAAM,cAAc,CAAC;AAE/C,KAAK,OAAO,GAAG,KAAK,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,SAAS,CAAC,KAAK,SAAS,CAAC;AAEnF,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,mBAAmB,CAAC,OAAO,CAAC;IACxE,YACI,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,kBAAkB,EAAE,kBAAkB,EACtC,QAAQ,EAAE,QAAQ,EAClB,sBAAsB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EACxE,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACpC,YAAY,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,EAcxD;IAED,UAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnE;IAED,UAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BlF;CACJ"}
+33
View File
@@ -0,0 +1,33 @@
import Extension from "./extension";
export default abstract class ExternalJSExtension<M> extends Extension {
protected folderName: string;
protected mqttTopic: string;
protected requestRegex: RegExp;
protected basePath: string;
protected nodeModulesSymlinked: boolean;
constructor(zigbee: Zigbee, mqtt: Mqtt, state: State, publishEntityState: PublishEntityState, eventBus: EventBus, enableDisableExtension: (enable: boolean, name: string) => Promise<void>, restartCallback: () => Promise<void>, addExtension: (extension: Extension) => Promise<void>, mqttTopic: string, folderName: string);
/**
* In case the external JS is not in the Z2M install dir (e.g. when `ZIGBEE2MQTT_DATA` is used), the external
* JS cannot import from `node_modules`.
* To workaround this create a symlink to `node_modules` in the external JS dir.
* https://nodejs.org/api/esm.html#no-node_path
*/
private symlinkNodeModulesIfNecessary;
start(): Promise<void>;
stop(): Promise<void>;
private getFilePath;
protected getFileCode(name: string): string;
protected getFiles(): Generator<{
name: string;
code: string;
}>;
onMQTTMessage(data: eventdata.MQTTMessage): Promise<void>;
protected abstract removeJS(name: string, mod: M): Promise<void>;
protected abstract loadJS(name: string, mod: M, newName?: string): Promise<void>;
private remove;
private save;
private loadFiles;
private publishExternalJS;
private importFile;
}
//# sourceMappingURL=externalJS.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"externalJS.d.ts","sourceRoot":"","sources":["../../lib/extension/externalJS.ts"],"names":[],"mappings":"AAUA,OAAO,SAAS,MAAM,aAAa,CAAC;AAKpC,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,mBAAmB,CAAC,CAAC,CAAE,SAAQ,SAAS;IAClE,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,oBAAoB,UAAS;IAEvC,YACI,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,kBAAkB,EAAE,kBAAkB,EACtC,QAAQ,EAAE,QAAQ,EAClB,sBAAsB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EACxE,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACpC,YAAY,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,EACrD,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAQrB;IAED;;;;;OAKG;IACH,OAAO,CAAC,6BAA6B;IAuBtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAKpC;IAEc,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CASnC;IAED,OAAO,CAAC,WAAW;IAQnB,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1C;IAED,SAAS,CAAE,QAAQ,IAAI,SAAS,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,CAAC,CAQ7D;IAEW,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BpE;IAED,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjE,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAE7D,MAAM;YAwBN,IAAI;YA+BV,SAAS;YAqBT,iBAAiB;YAQjB,UAAU;CAc3B"}
+18
View File
@@ -0,0 +1,18 @@
import Extension from "./extension";
/**
* This extension servers the frontend
*/
export declare class Frontend extends Extension {
private mqttBaseTopic;
private server;
private wss;
private baseUrl;
constructor(zigbee: Zigbee, mqtt: Mqtt, state: State, publishEntityState: PublishEntityState, eventBus: EventBus, enableDisableExtension: (enable: boolean, name: string) => Promise<void>, restartCallback: () => Promise<void>, addExtension: (extension: Extension) => Promise<void>);
start(): Promise<void>;
stop(): Promise<void>;
private onUpgrade;
private onWebSocketConnection;
private onMQTTPublishMessageOrEntityState;
}
export default Frontend;
//# sourceMappingURL=frontend.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"frontend.d.ts","sourceRoot":"","sources":["../../lib/extension/frontend.ts"],"names":[],"mappings":"AAeA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC;;GAEG;AACH,qBAAa,QAAS,SAAQ,SAAS;IACnC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,GAAG,CAAoB;IAC/B,OAAO,CAAC,OAAO,CAAS;IAExB,YACI,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,kBAAkB,EAAE,kBAAkB,EACtC,QAAQ,EAAE,QAAQ,EAClB,sBAAsB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EACxE,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACpC,YAAY,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,EAQxD;IAEc,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAqFpC;IAEc,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAanC;IAEK,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,qBAAqB;IAsC7B,OAAO,CAAC,iCAAiC;CA4BlD;eAEc,QAAQ"}
+13
View File
@@ -0,0 +1,13 @@
import Extension from "./extension";
export default class Groups extends Extension {
#private;
private lastOptimisticState;
start(): Promise<void>;
onStateChange(data: eventdata.StateChange): Promise<void>;
private shouldPublishPayloadForGroup;
private areAllMembersOffOrClosed;
private parseMQTTMessage;
private onMQTTMessage;
private publishResponse;
}
//# sourceMappingURL=groups.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../lib/extension/groups.ts"],"names":[],"mappings":"AAWA,OAAO,SAAS,MAAM,aAAa,CAAC;AA0BpC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,SAAS;;IAEzC,OAAO,CAAC,mBAAmB,CAA+B;IAG3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAGpC;IAEW,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAoGpE;IAED,OAAO,CAAC,4BAA4B;IASpC,OAAO,CAAC,wBAAwB;IAyBhC,OAAO,CAAC,gBAAgB;YAsEJ,aAAa;YA6DnB,eAAe;CAahC"}
+8
View File
@@ -0,0 +1,8 @@
import Extension from "./extension";
export default class Health extends Extension {
#private;
start(): Promise<void>;
stop(): Promise<void>;
clearStats(): void;
}
//# sourceMappingURL=health.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../lib/extension/health.ts"],"names":[],"mappings":"AAKA,OAAO,SAAS,MAAM,aAAa,CAAC;AAOpC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,SAAS;;IAG1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAIpC;IAEc,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAGnC;IAED,UAAU,IAAI,IAAI,CAIjB;CA+CJ"}
+86
View File
@@ -0,0 +1,86 @@
import type { Zh } from "zigbee-herdsman-converters/lib/types";
import Extension from "./extension";
interface MockProperty {
property: string;
value: KeyValue | string | null;
}
interface DiscoveryEntry {
mockProperties: MockProperty[];
type: string;
object_id: string;
discovery_payload: KeyValue;
endpoint?: Zh.Endpoint;
}
interface ActionData {
action: string;
button?: string;
scene?: string;
region?: string;
}
/**
* This class handles the bridge entity configuration for Home Assistant Discovery.
*/
declare class Bridge {
private coordinatorIeeeAddress;
private coordinatorType;
private coordinatorFirmwareVersion;
private discoveryEntries;
readonly options: {
ID?: string;
homeassistant?: KeyValue;
};
get ID(): string;
get name(): string;
get hardwareVersion(): string;
get firmwareVersion(): string;
get configs(): DiscoveryEntry[];
constructor(ieeeAdress: string, version: zh.CoordinatorVersion, discovery: DiscoveryEntry[]);
isDevice(): this is Device;
isGroup(): this is Group;
}
/**
* This extensions handles integration with HomeAssistant
*/
export declare class HomeAssistant extends Extension {
private discovered;
private discoveryTopic;
private discoveryRegex;
private discoveryRegexWoTopic;
private groupMemberLookup;
private statusTopic;
private legacyActionSensor;
private experimentalEventEntities;
private zigbee2MQTTVersion;
private discoveryOrigin;
private bridge;
private bridgeIdentifier;
private actionValueTemplate;
constructor(zigbee: Zigbee, mqtt: Mqtt, state: State, publishEntityState: PublishEntityState, eventBus: EventBus, enableDisableExtension: (enable: boolean, name: string) => Promise<void>, restartCallback: () => Promise<void>, addExtension: (extension: Extension) => Promise<void>);
start(): Promise<void>;
private getDiscovered;
private exposeToConfig;
onEntityRemoved(data: eventdata.EntityRemoved): Promise<void>;
onGroupMembersChanged(data: eventdata.GroupMembersChanged): Promise<void>;
onPublishEntityState(data: eventdata.PublishEntityState): Promise<void>;
onEntityRenamed(data: eventdata.EntityRenamed): Promise<void>;
private getConfigs;
private discover;
private onMQTTMessage;
onZigbeeEvent(data: {
device: Device;
}): Promise<void>;
onScenesChanged(data: eventdata.ScenesChanged): Promise<void>;
private getDevicePayload;
adjustMessageBeforePublish(entity: Device | Group | Bridge, message: KeyValue): void;
private getEncodedBaseTopic;
private getDiscoveryTopic;
private publishDeviceTriggerDiscover;
private getBridgeEntity;
parseActionValue(action: string): ActionData;
private buildAction;
private prepareActionEventTypes;
private parseGroupsFromRegex;
private getActionValueTemplate;
}
export default HomeAssistant;
//# sourceMappingURL=homeassistant.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"homeassistant.d.ts","sourceRoot":"","sources":["../../lib/extension/homeassistant.ts"],"names":[],"mappings":"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"}
+15
View File
@@ -0,0 +1,15 @@
import type { Zigbee2MQTTNetworkMap } from "../types/api";
import Extension from "./extension";
/**
* This extension creates a network map
*/
export default class NetworkMap extends Extension {
#private;
start(): Promise<void>;
onMQTTMessage(data: eventdata.MQTTMessage): Promise<void>;
raw(topology: Zigbee2MQTTNetworkMap): Zigbee2MQTTNetworkMap;
graphviz(topology: Zigbee2MQTTNetworkMap): string;
plantuml(topology: Zigbee2MQTTNetworkMap): string;
networkScan(includeRoutes: boolean): Promise<Zigbee2MQTTNetworkMap>;
}
//# sourceMappingURL=networkMap.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"networkMap.d.ts","sourceRoot":"","sources":["../../lib/extension/networkMap.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAiB,qBAAqB,EAAC,MAAM,cAAc,CAAC;AAKxE,OAAO,SAAS,MAAM,aAAa,CAAC;AAIpC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,SAAS;;IAI9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpC;IAEW,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCpE;IAED,GAAG,CAAC,QAAQ,EAAE,qBAAqB,GAAG,qBAAqB,CAE1D;IAED,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,CAqEhD;IAED,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,CAmDhD;IAEK,WAAW,CAAC,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA8IxE;CACJ"}
+11
View File
@@ -0,0 +1,11 @@
import Extension from "./extension";
/**
* This extension calls the zigbee-herdsman-converters onEvent.
*/
export default class OnEvent extends Extension {
#private;
start(): Promise<void>;
stop(): Promise<void>;
private callOnEvent;
}
//# sourceMappingURL=onEvent.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"onEvent.d.ts","sourceRoot":"","sources":["../../lib/extension/onEvent.ts"],"names":[],"mappings":"AAGA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,SAAS;;IAW3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAuCpC;IAEc,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CASnC;YAEa,WAAW;CAmB5B"}
+22
View File
@@ -0,0 +1,22 @@
import Extension from "./extension";
type UpdateState = "updating" | "idle" | "available" | "scheduled";
export interface UpdatePayload {
update: {
progress?: number;
remaining?: number;
state: UpdateState;
installed_version: number | null;
latest_version: number | null;
latest_source: string | null;
latest_release_notes: string | null;
};
}
export default class OTAUpdate extends Extension {
#private;
start(): Promise<void>;
clearState(): void;
private onZigbeeEvent;
onMQTTMessage(data: eventdata.MQTTMessage): Promise<void>;
}
export {};
//# sourceMappingURL=otaUpdate.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"otaUpdate.d.ts","sourceRoot":"","sources":["../../lib/extension/otaUpdate.ts"],"names":[],"mappings":"AAaA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,KAAK,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE;QACJ,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,WAAW,CAAC;QACnB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;KACvC,CAAC;CACL;AAuBD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,SAAS;;IAS7B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAepC;IAGD,UAAU,IAAI,IAAI,CAGjB;YAWmB,aAAa;IAmJrB,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAsPpE;CAwDJ"}
+18
View File
@@ -0,0 +1,18 @@
import Extension from "./extension";
export declare const loadTopicGetSetRegex: () => void;
interface ParsedTopic {
ID: string;
endpoint: string | undefined;
attribute: string;
type: "get" | "set";
}
export default class Publish extends Extension {
start(): Promise<void>;
parseTopic(topic: string): ParsedTopic | undefined;
parseMessage(parsedTopic: ParsedTopic, data: eventdata.MQTTMessage): KeyValue | undefined;
updateMessageHomeAssistant(message: KeyValue, entityState: KeyValue): void;
onMQTTMessage(data: eventdata.MQTTMessage): Promise<void>;
private getDefinitionConverters;
}
export {};
//# sourceMappingURL=publish.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../lib/extension/publish.ts"],"names":[],"mappings":"AAQA,OAAO,SAAS,MAAM,aAAa,CAAC;AAKpC,eAAO,MAAM,oBAAoB,QAAO,IAEvC,CAAC;AAKF,UAAU,WAAW;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;CACvB;AAED,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,SAAS;IAE3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAGpC;IAED,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAsBjD;IAED,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,WAAW,GAAG,QAAQ,GAAG,SAAS,CAcxF;IAED,0BAA0B,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,GAAG,IAAI,CAezE;IAEW,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAqNpE;IAED,OAAO,CAAC,uBAAuB;CAOlC"}
+13
View File
@@ -0,0 +1,13 @@
import Extension from "./extension";
export default class Receive extends Extension {
private elapsed;
private debouncers;
private throttlers;
start(): Promise<void>;
onPublishEntityState(data: eventdata.PublishEntityState): void;
publishDebounce(device: Device, payload: KeyValue, time: number, debounceIgnore: string[] | undefined): void;
publishThrottle(device: Device, payload: KeyValue, time: number): Promise<void>;
isPayloadConflicted(newPayload: KeyValue, oldPayload: KeyValue, debounceIgnore: string[] | undefined): boolean;
onDeviceMessage(data: eventdata.DeviceMessage): Promise<void>;
}
//# sourceMappingURL=receive.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"receive.d.ts","sourceRoot":"","sources":["../../lib/extension/receive.ts"],"names":[],"mappings":"AASA,OAAO,SAAS,MAAM,aAAa,CAAC;AAIpC,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,SAAS;IAE1C,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,UAAU,CAAqE;IACvF,OAAO,CAAC,UAAU,CAAoD;IAGvD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAGpC;IAEK,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC,kBAAkB,GAAG,IAAI,CAgBnE;IAED,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,CA0B3G;IAEK,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYpF;IAMD,mBAAmB,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,OAAO,CAU7G;IAEW,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAuFxE;CACJ"}
+28
View File
@@ -0,0 +1,28 @@
import type { OtaExtraMetas } from "zigbee-herdsman/dist/controller/tstype";
import type { CustomClusters } from "zigbee-herdsman/dist/zspec/zcl/definition/tstype";
import * as zhc from "zigbee-herdsman-converters";
export default class Device {
#private;
zh: zh.Device;
definition?: zhc.Definition;
private _definitionModelID?;
get ieeeAddr(): string;
get ID(): string;
get options(): DeviceOptionsWithId;
get name(): string;
get isSupported(): boolean;
get customClusters(): CustomClusters;
get otaExtraMetas(): OtaExtraMetas;
get interviewed(): boolean;
constructor(device: zh.Device);
exposes(): zhc.Expose[];
resolveDefinition(ignoreCache?: boolean): Promise<void>;
reInterview(eventBus: EventBus): Promise<void>;
ensureInSettings(): void;
endpoint(key?: string | number): zh.Endpoint | undefined;
endpointName(endpoint: zh.Endpoint): string | undefined;
getEndpointNames(): string[];
isDevice(): this is Device;
isGroup(): this is Group;
}
//# sourceMappingURL=device.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../lib/model/device.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,wCAAwC,CAAC;AAC1E,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,kDAAkD,CAAC;AACrF,OAAO,KAAK,GAAG,MAAM,4BAA4B,CAAC;AAYlD,MAAM,CAAC,OAAO,OAAO,MAAM;;IAChB,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC;IACnC,OAAO,CAAC,kBAAkB,CAAC,CAAS;IAGpC,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,EAAE,IAAI,MAAM,CAEf;IACD,IAAI,OAAO,IAAI,mBAAmB,CAGjC;IACD,IAAI,IAAI,IAAI,MAAM,CAEjB;IACD,IAAI,WAAW,IAAI,OAAO,CAEzB;IACD,IAAI,cAAc,IAAI,cAAc,CAEnC;IACD,IAAI,aAAa,IAAI,aAAa,CAEjC;IACD,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,YAAY,MAAM,EAAE,EAAE,CAAC,MAAM,EAE5B;IAED,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,CAWtB;IAEK,iBAAiB,CAAC,WAAW,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAO1D;IAEK,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAenD;IAED,gBAAgB,IAAI,IAAI,CAIvB;IAED,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,QAAQ,GAAG,SAAS,CAgBvD;IAED,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,GAAG,MAAM,GAAG,SAAS,CAgBtD;IAED,gBAAgB,IAAI,MAAM,EAAE,CAY3B;IAED,QAAQ,IAAI,IAAI,IAAI,MAAM,CAEzB;IAED,OAAO,IAAI,IAAI,IAAI,KAAK,CAEvB;CACJ"}
+16
View File
@@ -0,0 +1,16 @@
import type * as zhc from "zigbee-herdsman-converters";
export default class Group {
zh: zh.Group;
private resolveDevice;
get ID(): number;
get options(): GroupOptions;
get name(): string;
constructor(group: zh.Group, resolveDevice: (ieeeAddr: string) => Device | undefined);
ensureInSettings(): void;
hasMember(device: Device): boolean;
membersDevices(): Generator<Device>;
membersDefinitions(): zhc.Definition[];
isDevice(): this is Device;
isGroup(): this is Group;
}
//# sourceMappingURL=group.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"group.d.ts","sourceRoot":"","sources":["../../lib/model/group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,4BAA4B,CAAC;AAIvD,MAAM,CAAC,OAAO,OAAO,KAAK;IACf,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC;IACpB,OAAO,CAAC,aAAa,CAA2C;IAGhE,IAAI,EAAE,IAAI,MAAM,CAEf;IACD,IAAI,OAAO,IAAI,YAAY,CAG1B;IACD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,YAAY,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,EAGnF;IAED,gBAAgB,IAAI,IAAI,CAIvB;IAED,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEjC;IAEA,cAAc,IAAI,SAAS,CAAC,MAAM,CAAC,CAQnC;IAED,kBAAkB,IAAI,GAAG,CAAC,UAAU,EAAE,CAUrC;IAED,QAAQ,IAAI,IAAI,IAAI,MAAM,CAEzB;IACD,OAAO,IAAI,IAAI,IAAI,KAAK,CAEvB;CACJ"}
+43
View File
@@ -0,0 +1,43 @@
import type { IClientPublishOptions } from "mqtt";
export interface MqttPublishOptions {
clientOptions: IClientPublishOptions;
baseTopic: string;
skipLog: boolean;
skipReceive: boolean;
meta: {
isEntityState?: boolean;
};
}
export default class Mqtt {
private publishedTopics;
private connectionTimer?;
private client;
private eventBus;
private republishRetainedTimer?;
private defaultPublishOptions;
retainedMessages: {
[s: string]: {
topic: string;
payload: string;
options: MqttPublishOptions;
};
};
get info(): {
version: 3 | 4 | 5 | undefined;
server: string;
};
get stats(): {
connected: boolean;
queued: number;
};
constructor(eventBus: EventBus);
connect(): Promise<void>;
disconnect(): Promise<void>;
subscribe(topic: string): Promise<void>;
unsubscribe(topic: string): Promise<void>;
private onConnect;
onMessage(topic: string, message: Buffer): void;
isConnected(): boolean;
publish(topic: string, payload: string, options?: Partial<MqttPublishOptions>): Promise<void>;
}
//# sourceMappingURL=mqtt.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"mqtt.d.ts","sourceRoot":"","sources":["../lib/mqtt.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,qBAAqB,EAAa,MAAM,MAAM,CAAC;AAU5E,MAAM,WAAW,kBAAkB;IAC/B,aAAa,EAAE,qBAAqB,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAC,CAAC;CACnC;AAED,MAAM,CAAC,OAAO,OAAO,IAAI;IACrB,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,sBAAsB,CAAC,CAAiB;IAChD,OAAO,CAAC,qBAAqB,CAAqB;IAC3C,gBAAgB,EAAE;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,kBAAkB,CAAA;SAAC,CAAA;KAAC,CAAM;IAE3G,IAAI,IAAI;QAEA,OAAO;QACP,MAAM;MAEb;IAED,IAAI,KAAK;QAED,SAAS;QACT,MAAM;MAEb;IAED,YAAY,QAAQ,EAAE,QAAQ,EAS7B;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAiG7B;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAchC;IAEK,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5C;IAEK,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9C;YAEmB,SAAS;IAShB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAY3D;IAED,WAAW,IAAI,OAAO,CAErB;IAEK,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,CAAC,kBAAkB,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkDtG;CACJ"}
+19
View File
@@ -0,0 +1,19 @@
declare class State {
private readonly eventBus;
private readonly zigbee;
private readonly state;
private readonly file;
private timer?;
constructor(eventBus: EventBus, zigbee: Zigbee);
start(): void;
stop(): void;
clear(): void;
private load;
private save;
exists(entity: Device | Group): boolean;
get(entity: Group | Device): KeyValue;
set(entity: Group | Device, update: KeyValue, reason?: string): KeyValue;
remove(id: string | number): boolean;
}
export default State;
//# sourceMappingURL=state.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../lib/state.ts"],"names":[],"mappings":"AA8BA,cAAM,KAAK;IAMH,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAN3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwC;IAC9D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA+B;IACpD,OAAO,CAAC,KAAK,CAAC,CAAiB;IAE/B,YACqB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EAIlC;IAED,KAAK,IAAI,IAAI,CAKZ;IAED,IAAI,IAAI,IAAI,CAcX;IAED,KAAK,IAAI,IAAI,CAEZ;IAED,OAAO,CAAC,IAAI;IAoBZ,OAAO,CAAC,IAAI;IAgBZ,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,CAEtC;IAED,GAAG,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAEpC;IAED,GAAG,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAWvE;IAED,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAEnC;CACJ;eAEc,KAAK"}
+942
View File
@@ -0,0 +1,942 @@
import type * as zigbeeHerdsman from "zigbee-herdsman/dist";
import type { ZclPayload } from "zigbee-herdsman/dist/adapter/events";
import type { Eui64 } from "zigbee-herdsman/dist/zspec/tstypes";
import type { Cluster, ClusterName, CustomClusters } from "zigbee-herdsman/dist/zspec/zcl/definition/tstype";
import type { GenericZdoResponse, RoutingTableEntry } from "zigbee-herdsman/dist/zspec/zdo/definition/tstypes";
import type * as zigbeeHerdsmanConverter from "zigbee-herdsman-converters";
import type { Base } from "zigbee-herdsman-converters/lib/exposes";
export type * as ZSpec from "zigbee-herdsman/dist/zspec";
export type * as Zcl from "zigbee-herdsman/dist/zspec/zcl";
export type * as Zdo from "zigbee-herdsman/dist/zspec/zdo";
export type Zigbee2MQTTFeatures = {
base: Base;
switch: zigbeeHerdsmanConverter.Switch;
lock: zigbeeHerdsmanConverter.Lock;
binary: zigbeeHerdsmanConverter.Binary;
list: zigbeeHerdsmanConverter.List;
numeric: zigbeeHerdsmanConverter.Numeric;
enum: zigbeeHerdsmanConverter.Enum;
text: zigbeeHerdsmanConverter.Text;
composite: zigbeeHerdsmanConverter.Composite;
light: zigbeeHerdsmanConverter.Light;
cover: zigbeeHerdsmanConverter.Cover;
fan: zigbeeHerdsmanConverter.Fan;
climate: zigbeeHerdsmanConverter.Climate;
};
import type { UpdatePayload } from "../extension/otaUpdate";
import type { LogLevel, schemaJson } from "../util/settings";
type KeyValue = Record<string, any>;
export interface OnboardInitData {
page: "form";
settings: Zigbee2MQTTSettings;
settingsSchema: typeof schemaJson;
devices: {
name: string;
path: Zigbee2MQTTSettings["serial"]["port"];
adapter?: Zigbee2MQTTSettings["serial"]["adapter"];
baudRate?: Zigbee2MQTTSettings["serial"]["baudrate"];
rtscts?: Zigbee2MQTTSettings["serial"]["rtscts"];
}[];
}
export interface OnboardDoneData {
page: "done";
frontendUrl: string | null;
}
export interface OnboardFailureData {
page: "failure";
errors: string[];
}
export type OnboardData = OnboardInitData | OnboardDoneData | OnboardFailureData;
export type OnboardSubmitResponse = {
success: true;
frontendUrl: string | null;
} | {
success: false;
error: string;
};
export type Zigbee2MQTTDeviceOptions = {
disabled?: boolean;
retention?: number;
availability?: boolean | {
timeout: number;
max_jitter?: number;
backoff?: boolean;
pause_on_backoff_gt?: number;
};
optimistic?: boolean;
debounce?: number;
debounce_ignore?: string[];
throttle?: number;
filtered_attributes?: string[];
filtered_cache?: string[];
filtered_optimistic?: string[];
icon?: string;
homeassistant?: KeyValue;
friendly_name: string;
description?: string;
qos?: 0 | 1 | 2;
disable_automatic_update_check?: boolean;
};
export type Zigbee2MQTTGroupOptions = {
ID: number;
optimistic?: boolean;
off_state?: "all_members_off" | "last_member_state";
filtered_attributes?: string[];
filtered_cache?: string[];
filtered_optimistic?: string[];
homeassistant?: KeyValue;
friendly_name: string;
description?: string;
qos?: 0 | 1 | 2;
};
export type Zigbee2MQTTSettings = {
version?: number;
/** only used internally during startup, removed on successful Z2M start */
onboarding?: true;
homeassistant: {
enabled: boolean;
discovery_topic: string;
status_topic: string;
experimental_event_entities: boolean;
legacy_action_sensor: boolean;
};
availability: {
enabled: boolean;
active: {
timeout: number;
max_jitter: number;
backoff: boolean;
pause_on_backoff_gt: number;
};
passive: {
timeout: number;
};
};
mqtt: {
base_topic: string;
include_device_information: boolean;
force_disable_retain: boolean;
version?: 3 | 4 | 5;
user?: string;
password?: string;
server: string;
ca?: string;
keepalive?: number;
key?: string;
cert?: string;
client_id?: string;
reject_unauthorized?: boolean;
server_name?: string;
maximum_packet_size: number;
};
serial: {
disable_led: boolean;
port?: string;
adapter?: "deconz" | "zstack" | "ezsp" | "zigate" | "ember" | "zboss" | "zoh";
baudrate?: number;
rtscts?: boolean;
};
passlist: string[];
blocklist: string[];
map_options: {
graphviz: {
colors: {
fill: {
enddevice: string;
coordinator: string;
router: string;
};
font: {
coordinator: string;
router: string;
enddevice: string;
};
line: {
active: string;
inactive: string;
};
};
};
};
ota: {
update_check_interval: number;
disable_automatic_update_check: boolean;
zigbee_ota_override_index_location?: string;
image_block_request_timeout?: number;
image_block_response_delay?: number;
default_maximum_data_size?: number;
};
frontend: {
enabled: boolean;
package: "zigbee2mqtt-frontend" | "zigbee2mqtt-windfront";
auth_token?: string;
host?: string;
port: number;
base_url: string;
url?: string;
ssl_cert?: string;
ssl_key?: string;
notification_filter?: string[];
disable_ui_serving?: boolean;
};
devices: {
[s: string]: Zigbee2MQTTDeviceOptions;
};
groups: {
[s: string]: Omit<Zigbee2MQTTGroupOptions, "ID">;
};
device_options: KeyValue;
advanced: {
log_rotation: boolean;
log_console_json: boolean;
log_symlink_current: boolean;
log_output: ("console" | "file" | "syslog")[];
log_directory: string;
log_file: string;
log_level: LogLevel;
log_namespaced_levels: Record<string, LogLevel>;
log_syslog: KeyValue;
log_debug_to_mqtt_frontend: boolean;
log_debug_namespace_ignore: string;
log_directories_to_keep: number;
pan_id: number | "GENERATE";
ext_pan_id: number[] | "GENERATE";
channel: number;
adapter_concurrent?: number;
adapter_delay?: number;
cache_state: boolean;
cache_state_persistent: boolean;
cache_state_send_on_startup: boolean;
last_seen: "disable" | "ISO_8601" | "ISO_8601_local" | "epoch";
elapsed: boolean;
network_key: number[] | "GENERATE";
timestamp_format: string;
output: "json" | "attribute" | "attribute_and_json";
transmit_power?: number;
/** 3.0: default to false (JSON schema & settings `defaults`) */
enable_external_js: boolean;
};
health: {
/** in minutes */
interval: number;
reset_on_check: boolean;
};
};
export interface Zigbee2MQTTScene {
id: number;
name: string;
}
export interface Zigbee2MQTTDeviceEndpoint {
name?: string;
bindings: Zigbee2MQTTDeviceEndpointBinding[];
configured_reportings: Zigbee2MQTTDeviceEndpointConfiguredReporting[];
clusters: {
input: string[];
output: string[];
};
scenes: Zigbee2MQTTScene[];
}
export interface Zigbee2MQTTDeviceEndpointBinding {
cluster: string;
target: Zigbee2MQTTDeviceEndpointBindingTarget;
}
export type Zigbee2MQTTDeviceEndpointBindingTarget = {
type: "endpoint";
ieee_address: string;
endpoint: number;
} | {
type: "group";
id: number;
};
export interface Zigbee2MQTTDeviceEndpointConfiguredReporting {
cluster: string;
attribute: string | number;
minimum_report_interval: number;
maximum_report_interval: number;
reportable_change: number;
}
export interface Zigbee2MQTTDeviceDefinition {
source: "native" | "generated" | "external";
model: string;
vendor: string;
description: string;
exposes: zigbeeHerdsmanConverter.Expose[];
supports_ota: boolean;
options: zigbeeHerdsmanConverter.Option[];
version: `0.0.${number}`;
icon: string;
}
export interface Zigbee2MQTTDevice {
ieee_address: zigbeeHerdsman.Models.Device["ieeeAddr"];
type: zigbeeHerdsman.Models.Device["type"];
network_address: zigbeeHerdsman.Models.Device["networkAddress"];
supported: boolean;
friendly_name: string;
disabled: boolean;
description?: string;
definition?: Zigbee2MQTTDeviceDefinition;
power_source: zigbeeHerdsman.Models.Device["powerSource"];
software_build_id: zigbeeHerdsman.Models.Device["softwareBuildID"];
date_code: zigbeeHerdsman.Models.Device["dateCode"];
model_id: zigbeeHerdsman.Models.Device["modelID"];
interviewing: boolean;
interview_completed: boolean;
interview_state: zigbeeHerdsman.Models.Device["interviewState"];
manufacturer: zigbeeHerdsman.Models.Device["manufacturerName"];
endpoints: Record<number, Zigbee2MQTTDeviceEndpoint>;
}
export interface Zigbee2MQTTGroupMember {
ieee_address: zigbeeHerdsman.Models.Device["ieeeAddr"];
endpoint: number;
}
export interface Zigbee2MQTTGroup {
id: number;
friendly_name: "default_bind_group" | string;
description?: string;
scenes: Zigbee2MQTTScene[];
members: Zigbee2MQTTGroupMember[];
}
export interface Zigbee2MQTTNetworkMap {
nodes: {
ieeeAddr: string;
friendlyName: string;
type: string;
networkAddress: number;
manufacturerName?: string;
modelID?: string;
failed?: string[];
lastSeen?: number;
definition?: {
model: string;
vendor: string;
supports: string;
description: string;
};
}[];
links: {
source: {
ieeeAddr: string;
networkAddress: number;
};
target: {
ieeeAddr: string;
networkAddress: number;
};
deviceType: number;
rxOnWhenIdle: number;
relationship: number;
permitJoining: number;
depth: number;
lqi: number;
routes: RoutingTableEntry[];
/** @deprecated 3.0 */
linkquality: number;
/** @deprecated 3.0 */
sourceIeeeAddr: string;
/** @deprecated 3.0 */
targetIeeeAddr: string;
/** @deprecated 3.0 */
sourceNwkAddr: number;
}[];
}
/**
* Zigbee2MQTT state/request/response API endpoints
*/
export interface Zigbee2MQTTAPI {
"bridge/logging": {
message: string;
level: LogLevel;
namespace: string;
};
"bridge/state": {
state: "online" | "offline";
};
"bridge/definitions": {
clusters: Readonly<Record<ClusterName, Cluster>>;
custom_clusters: Record<string, CustomClusters>;
actions: string[];
};
"bridge/event": {
type: "device_leave" | "device_joined" | "device_announce";
data: {
friendly_name: string;
ieee_address: string;
};
} | {
type: "device_interview";
data: {
friendly_name: string;
ieee_address: string;
status: "started" | "failed";
} | {
friendly_name: string;
ieee_address: string;
status: "successful";
supported: boolean;
definition: Zigbee2MQTTDeviceDefinition | undefined;
};
};
"bridge/info": {
os: {
version: string;
node_version: string;
cpus: string;
memory_mb: number;
};
mqtt: {
version: number | undefined;
server: string;
};
version: string;
commit: string | undefined;
zigbee_herdsman_converters: {
version: string;
};
zigbee_herdsman: {
version: string;
};
coordinator: {
ieee_address: string;
type: string;
meta: {
[s: string]: number | string;
};
};
network: {
pan_id: number;
/** `0x${string}` 8-len */
extended_pan_id: string;
channel: number;
};
log_level: "debug" | "info" | "warning" | "error";
permit_join: boolean;
permit_join_end: number | undefined;
restart_required: boolean;
config: Zigbee2MQTTSettings;
config_schema: typeof schemaJson;
};
"bridge/health": {
/** time of message, msec from epoch, UTC */
response_time: number;
os: {
load_average: number[];
memory_used_mb: number;
memory_percent: number;
};
process: {
uptime_sec: number;
memory_used_mb: number;
memory_percent: number;
};
mqtt: {
connected: boolean;
queued: number;
received: number;
published: number;
};
devices: Record<string, {
messages: number;
messages_per_sec: number;
leave_count: number;
network_address_changes: number;
}>;
};
"bridge/devices": Zigbee2MQTTDevice[];
"bridge/groups": Zigbee2MQTTGroup[];
"bridge/converters": {
name: string;
code: string;
}[];
"bridge/extensions": {
name: string;
code: string;
}[];
"bridge/request/permit_join": {
/** [0-254], 0 meaning disable */
time: number;
device?: string;
} | `${number}`;
"bridge/response/permit_join": {
/** [0-254], 0 meaning disable */
time: number;
device?: string;
};
"bridge/request/health_check": "";
"bridge/response/health_check": {
/** XXX: currently always returns true */
healthy: boolean;
};
"bridge/request/coordinator_check": "";
"bridge/response/coordinator_check": {
missing_routers: {
ieee_address: string;
friendly_name: string;
}[];
};
"bridge/request/restart": "";
"bridge/response/restart": Record<string, never>;
"bridge/request/networkmap": {
type: "raw" | "graphviz" | "plantuml";
routes: boolean;
} | "raw" | "graphviz" | "plantuml";
"bridge/response/networkmap": {
type: "raw";
routes: boolean;
value: Zigbee2MQTTNetworkMap;
} | {
type: "graphviz" | "plantuml";
routes: boolean;
value: string;
};
"bridge/request/extension/save": {
name: string;
code: string;
};
"bridge/response/extension/save": Record<string, never>;
"bridge/request/extension/remove": {
name: string;
};
"bridge/response/extension/remove": Record<string, never>;
"bridge/request/converter/save": {
name: string;
code: string;
};
"bridge/response/converter/save": Record<string, never>;
"bridge/request/converter/remove": {
name: string;
};
"bridge/response/converter/remove": Record<string, never>;
"bridge/request/backup": "";
"bridge/response/backup": {
/** base64 encoded ZIP archive */
zip: string;
};
"bridge/request/install_code/add": {
value: string;
};
"bridge/response/install_code/add": {
value: string;
};
/**
* Applied on-the-fly:
* - newSettings.homeassistant
* - newSettings.advanced?.log_level
* - newSettings.advanced?.log_namespaced_levels
* - newSettings.advanced?.log_debug_namespace_ignore
*/
"bridge/request/options": {
options: Record<string, unknown>;
};
"bridge/response/options": {
restart_required: boolean;
};
"bridge/request/device/bind": {
from: string;
from_endpoint: string | number | "default";
to: string | number;
to_endpoint?: string | number;
clusters?: string[];
skip_disable_reporting?: boolean;
};
"bridge/response/device/bind": {
from: string;
from_endpoint: string | number;
to: string | number;
to_endpoint: string | number | undefined;
clusters: string[];
failed: string[];
};
"bridge/request/device/unbind": {
from: string;
from_endpoint: string | number | "default";
to: string | number;
to_endpoint?: string | number;
clusters?: string[];
skip_disable_reporting?: boolean;
};
"bridge/response/device/unbind": {
from: string;
from_endpoint: string | number;
to: string | number;
to_endpoint: string | number | undefined;
clusters: string[];
failed: string[];
};
"bridge/request/device/binds/clear": {
target: string;
ieee_list?: Eui64[];
};
"bridge/response/device/binds/clear": {
target: string;
ieee_list?: Eui64[];
};
"bridge/request/device/configure": {
id: string | number;
} | string;
"bridge/response/device/configure": {
id: string | number;
};
"bridge/request/device/remove": {
id: string;
block?: boolean;
force?: boolean;
keep_config?: boolean;
clear_cache?: boolean;
};
"bridge/response/device/remove": {
id: string;
block: boolean;
force: boolean;
keep_config: boolean;
clear_cache: boolean;
};
"bridge/request/device/ota_update/check": {
id: string;
/** expected to point to an index json if provided */
url?: string | null;
};
"bridge/request/device/ota_update/check/downgrade": {
id: string;
/** expected to point to an index json if provided */
url?: string | null;
};
"bridge/response/device/ota_update/check": {
id: string;
update_available: boolean;
downgrade?: boolean;
source?: string;
release_notes?: string;
};
"bridge/request/device/ota_update/update": {
id: string;
url?: string | null;
/**
* Full firmware file in hex form (expected compatible with `Buffer.from(hex, "hex")`)
* If file name supplied, will be used instead of <ieee_utc> to store firmware in data dir.
*/
hex?: {
data: string;
file_name?: string;
} | null;
image_block_request_timeout?: number | null;
image_block_response_delay?: number | null;
/** may be overridden internally to match specific device needs */
default_maximum_data_size?: number | null;
};
"bridge/request/device/ota_update/update/downgrade": {
id: string;
url?: string | null;
/**
* Full firmware file in hex form (expected compatible with `Buffer.from(hex, "hex")`)
* If file name supplied, will be used instead of <ieee_utc> to store firmware in data dir.
*/
hex?: {
data: string;
file_name?: string;
} | null;
image_block_request_timeout?: number | null;
image_block_response_delay?: number | null;
/** may be overridden internally to match specific device needs */
default_maximum_data_size?: number | null;
};
"bridge/request/device/ota_update/update/abort": {
id: string;
};
"bridge/response/device/ota_update/update/abort": {
id: string;
};
"bridge/response/device/ota_update/update": {
id: string;
from: {
file_version: number;
software_build_id?: string;
date_code?: string;
} | undefined;
to: {
file_version: number;
software_build_id?: string;
date_code?: string;
} | undefined;
};
"bridge/request/device/ota_update/schedule": {
id: string;
url?: string | null;
/**
* Full firmware file in hex form (expected compatible with `Buffer.from(hex, "hex")`)
* If file name supplied, will be used instead of <ieee_utc> to store firmware in data dir.
*/
hex?: {
data: string;
file_name?: string;
} | null;
};
"bridge/request/device/ota_update/schedule/downgrade": {
id: string;
url?: string | null;
/**
* Full firmware file in hex form (expected compatible with `Buffer.from(hex, "hex")`)
* If file name supplied, will be used instead of <ieee_utc> to store firmware in data dir.
*/
hex?: {
data: string;
file_name?: string;
} | null;
};
"bridge/response/device/ota_update/schedule": {
id: string;
url?: string;
};
"bridge/request/device/ota_update/unschedule": {
id: string;
};
"bridge/response/device/ota_update/unschedule": {
id: string;
};
"bridge/request/device/interview": {
id: string | number;
};
"bridge/response/device/interview": {
id: string | number;
};
"bridge/request/device/generate_external_definition": {
id: string | number;
};
"bridge/response/device/generate_external_definition": {
id: string | number;
source: string;
};
"bridge/request/device/options": {
id: string;
options: Record<string, unknown>;
};
"bridge/response/device/options": {
id: string;
from: Record<string, unknown>;
to: Record<string, unknown>;
restart_required: boolean;
};
"bridge/request/device/rename": {
last: true;
from?: string;
to: string;
homeassistant_rename?: boolean;
} | {
last: false | undefined;
from: string;
to: string;
homeassistant_rename?: boolean;
};
"bridge/response/device/rename": {
from: string;
to: string;
homeassistant_rename: boolean;
};
"bridge/request/device/reporting/configure": {
id: string;
endpoint: string | number;
cluster: string | number;
attribute: string | number | {
ID: number;
type: number;
};
minimum_report_interval: number;
maximum_report_interval: number;
reportable_change?: number;
option: Record<string, unknown>;
};
"bridge/response/device/reporting/configure": {
id: string;
endpoint: string | number;
cluster: string | number;
attribute: string | number | {
ID: number;
type: number;
};
minimum_report_interval: number;
maximum_report_interval: number;
reportable_change?: number;
};
"bridge/request/device/reporting/read": {
id: string;
endpoint: string | number;
cluster: string | number;
configs: {
direction?: number;
attribute: string | number | {
ID: number;
type: number;
};
}[];
manufacturer_code?: number;
};
"bridge/response/device/reporting/read": {
id: string;
endpoint: string | number;
cluster: string | number;
configs: zigbeeHerdsman.Zcl.ClustersTypes.TFoundation["readReportConfigRsp"];
manufacturer_code?: number;
};
"bridge/request/group/remove": {
id: string;
force?: boolean;
};
"bridge/response/group/remove": {
id: string;
force: boolean;
};
"bridge/request/group/add": {
friendly_name: string;
id?: string;
};
"bridge/response/group/add": {
friendly_name: string;
id: number;
};
"bridge/request/group/rename": {
from: string;
to: string;
homeassistant_rename?: boolean;
};
"bridge/response/group/rename": {
from: string;
to: string;
homeassistant_rename: boolean;
};
"bridge/request/group/options": {
id: string;
options: Record<string, unknown>;
};
"bridge/response/group/options": {
id: string;
from: Record<string, unknown>;
to: Record<string, unknown>;
restart_required: boolean;
};
"bridge/request/group/members/add": {
device: string;
group: string;
endpoint: string | number | "default";
skip_disable_reporting?: boolean;
};
"bridge/response/group/members/add": {
device: string;
group: string;
endpoint: string | number | "default";
};
"bridge/request/group/members/remove": {
device: string;
group: string;
endpoint: string | number | "default";
skip_disable_reporting?: boolean;
};
"bridge/response/group/members/remove": {
device: string;
group: string;
endpoint: string | number | "default";
};
"bridge/request/group/members/remove_all": {
device: string;
endpoint: string | number | "default";
skip_disable_reporting?: boolean;
};
"bridge/response/group/members/remove_all": {
device: string;
endpoint: string | number | "default";
};
"bridge/request/touchlink/factory_reset": {
ieee_address: string;
channel: number;
} | "";
"bridge/response/touchlink/factory_reset": {
ieee_address: string;
channel: number;
} | Record<string, never>;
"bridge/request/touchlink/scan": "";
"bridge/response/touchlink/scan": {
found: {
ieee_address: string;
channel: number;
}[];
};
"bridge/request/touchlink/identify": {
ieee_address: string;
channel: number;
};
"bridge/response/touchlink/identify": {
ieee_address: string;
channel: number;
};
"bridge/request/action": {
action: string;
params?: Record<string, unknown>;
};
"bridge/response/action": GenericZdoResponse | ZclPayload | undefined;
/**
* entity state response
*/
"{friendlyName}": {
[key: string]: unknown;
update?: UpdatePayload["update"];
};
"{friendlyName}/availability": {
state: "online" | "offline";
};
/** entity set request (tries to match endpoint to definition, else uses "default") */
"{friendlyNameOrId}/set": {
[attribute: string]: {
[key: string]: unknown;
} | string | boolean;
};
/** entity set request (tries to match endpoint to definition, else uses "default") */
"{friendlyNameOrId}/set/{attribute}": {
[key: string]: unknown;
};
/** entity set request */
"{friendlyNameOrId}/{endpoint}/set": {
[attribute: string]: {
[key: string]: unknown;
} | string | boolean;
};
/** entity set request */
"{friendlyNameOrId}/{endpoint}/set/{attribute}": {
[key: string]: unknown;
};
/** entity get request (tries to match endpoint to definition, else uses "default") */
"{friendlyNameOrId}/get": {
[attribute: string]: {
[key: string]: unknown;
} | string | boolean;
};
/** entity get request (tries to match endpoint to definition, else uses "default") */
"{friendlyNameOrId}/get/{attribute}": {
[key: string]: unknown;
};
/** entity get request */
"{friendlyNameOrId}/{endpoint}/get": {
[attribute: string]: {
[key: string]: unknown;
} | string | boolean;
};
/** entity get request */
"{friendlyNameOrId}/{endpoint}/get/{attribute}": {
[key: string]: unknown;
};
}
export type Zigbee2MQTTRequestEndpoints = "bridge/request/permit_join" | "bridge/request/health_check" | "bridge/request/coordinator_check" | "bridge/request/restart" | "bridge/request/networkmap" | "bridge/request/extension/save" | "bridge/request/extension/remove" | "bridge/request/converter/save" | "bridge/request/converter/remove" | "bridge/request/backup" | "bridge/request/install_code/add" | "bridge/request/options" | "bridge/request/device/bind" | "bridge/request/device/unbind" | "bridge/request/device/binds/clear" | "bridge/request/device/configure" | "bridge/request/device/remove" | "bridge/request/device/ota_update/check" | "bridge/request/device/ota_update/check/downgrade" | "bridge/request/device/ota_update/update" | "bridge/request/device/ota_update/update/downgrade" | "bridge/request/device/ota_update/update/abort" | "bridge/request/device/ota_update/schedule" | "bridge/request/device/ota_update/schedule/downgrade" | "bridge/request/device/ota_update/unschedule" | "bridge/request/device/interview" | "bridge/request/device/generate_external_definition" | "bridge/request/device/options" | "bridge/request/device/rename" | "bridge/request/device/reporting/configure" | "bridge/request/device/reporting/read" | "bridge/request/group/remove" | "bridge/request/group/add" | "bridge/request/group/rename" | "bridge/request/group/options" | "bridge/request/group/members/add" | "bridge/request/group/members/remove" | "bridge/request/group/members/remove_all" | "bridge/request/touchlink/factory_reset" | "bridge/request/touchlink/scan" | "bridge/request/touchlink/identify" | "bridge/request/action" | "{friendlyNameOrId}/set" | "{friendlyNameOrId}/set/{attribute}" | "{friendlyNameOrId}/{endpoint}/set" | "{friendlyNameOrId}/{endpoint}/set/{attribute}" | "{friendlyNameOrId}/get" | "{friendlyNameOrId}/get/{attribute}" | "{friendlyNameOrId}/{endpoint}/get" | "{friendlyNameOrId}/{endpoint}/get/{attribute}";
export type Zigbee2MQTTResponseEndpoints = "bridge/response/permit_join" | "bridge/response/health_check" | "bridge/response/coordinator_check" | "bridge/response/restart" | "bridge/response/networkmap" | "bridge/response/extension/save" | "bridge/response/extension/remove" | "bridge/response/converter/save" | "bridge/response/converter/remove" | "bridge/response/backup" | "bridge/response/install_code/add" | "bridge/response/options" | "bridge/response/device/bind" | "bridge/response/device/unbind" | "bridge/response/device/binds/clear" | "bridge/response/device/configure" | "bridge/response/device/remove" | "bridge/response/device/ota_update/check" | "bridge/response/device/ota_update/update" | "bridge/response/device/ota_update/update/abort" | "bridge/response/device/ota_update/schedule" | "bridge/response/device/ota_update/unschedule" | "bridge/response/device/interview" | "bridge/response/device/generate_external_definition" | "bridge/response/device/options" | "bridge/response/device/rename" | "bridge/response/device/reporting/configure" | "bridge/response/device/reporting/read" | "bridge/response/group/remove" | "bridge/response/group/add" | "bridge/response/group/rename" | "bridge/response/group/options" | "bridge/response/group/members/add" | "bridge/response/group/members/remove" | "bridge/response/group/members/remove_all" | "bridge/response/touchlink/factory_reset" | "bridge/response/touchlink/scan" | "bridge/response/touchlink/identify" | "bridge/response/action";
export type Zigbee2MQTTRequest<T extends Zigbee2MQTTRequestEndpoints> = {
transaction?: string;
} & Zigbee2MQTTAPI[T];
export type Zigbee2MQTTResponseOK<T extends Zigbee2MQTTResponseEndpoints> = {
status: "ok";
data: Zigbee2MQTTAPI[T];
transaction?: string;
};
export type Zigbee2MQTTResponseError = {
status: "error";
data: Record<string, never>;
error: string;
transaction?: string;
};
export type Zigbee2MQTTResponse<T extends Zigbee2MQTTResponseEndpoints> = Zigbee2MQTTResponseOK<T> | Zigbee2MQTTResponseError;
//# sourceMappingURL=api.d.ts.map
+1
View File
File diff suppressed because one or more lines are too long
+10
View File
@@ -0,0 +1,10 @@
declare function joinPath(file: string): string;
declare function getPath(): string;
declare function _testReload(): void;
declare const _default: {
joinPath: typeof joinPath;
getPath: typeof getPath;
_testReload: typeof _testReload;
};
export default _default;
//# sourceMappingURL=data.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../lib/util/data.ts"],"names":[],"mappings":"AAQA,iBAAS,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtC;AAED,iBAAS,OAAO,IAAI,MAAM,CAEzB;AAED,iBAAS,WAAW,IAAI,IAAI,CAE3B"}
+34
View File
@@ -0,0 +1,34 @@
import winston from "winston";
import * as settings from "./settings";
declare class Logger {
private level;
private output;
private directory;
private logger;
private fileTransport;
private debugNamespaceIgnoreRegex?;
private namespacedLevels;
private cachedNamespacedLevels;
init(): void;
get winston(): winston.Logger;
addTransport(transport: winston.transport): void;
removeTransport(transport: winston.transport): void;
getDebugNamespaceIgnore(): string;
setDebugNamespaceIgnore(value: string): void;
getLevel(): settings.LogLevel;
setLevel(level: settings.LogLevel): void;
getNamespacedLevels(): Record<string, settings.LogLevel>;
setNamespacedLevels(nsLevels: Record<string, settings.LogLevel>): void;
private resetCachedNamespacedLevels;
private cacheNamespacedLevel;
private log;
error(messageOrLambda: string | (() => string), namespace?: string): void;
warning(messageOrLambda: string | (() => string), namespace?: string): void;
info(messageOrLambda: string | (() => string), namespace?: string): void;
debug(messageOrLambda: string | (() => string), namespace?: string): void;
private cleanup;
end(): Promise<void>;
}
declare const _default: Logger;
export default _default;
//# sourceMappingURL=logger.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../lib/util/logger.ts"],"names":[],"mappings":"AAIA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AAIvC,cAAM,MAAM;IACR,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,aAAa,CAAuD;IAC5E,OAAO,CAAC,yBAAyB,CAAC,CAAS;IAC3C,OAAO,CAAC,gBAAgB,CAAqC;IAC7D,OAAO,CAAC,sBAAsB,CAAqC;IAE5D,IAAI,IAAI,IAAI,CA6GlB;IAED,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,CAE5B;IAEM,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,GAAG,IAAI,CAEtD;IAEM,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,GAAG,IAAI,CAEzD;IAEM,uBAAuB,IAAI,MAAM,CAEvC;IAEM,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAElD;IAEM,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAEnC;IAEM,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAG9C;IAEM,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAE9D;IAEM,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,CAG5E;IAED,OAAO,CAAC,2BAA2B;IAInC,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,GAAG;IASJ,KAAK,CAAC,eAAe,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,EAAE,SAAS,SAAQ,GAAG,IAAI,CAE9E;IAEM,OAAO,CAAC,eAAe,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,EAAE,SAAS,SAAQ,GAAG,IAAI,CAEhF;IAEM,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,EAAE,SAAS,SAAQ,GAAG,IAAI,CAE7E;IAEM,KAAK,CAAC,eAAe,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,EAAE,SAAS,SAAQ,GAAG,IAAI,CAM9E;IAGD,OAAO,CAAC,OAAO;IA0BF,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAoBhC;CAEJ"}
+15
View File
@@ -0,0 +1,15 @@
/** Anything mergeable: a plain-ish object, explicitly not an array or another iterable. */
export type UnknownRecord = Record<string | number, unknown> & {
[Symbol.iterator]?: never;
};
/**
* Merge all sources into `target` recursively.
*
* Key behavior:
* - ignore properties `__proto__`, `constructor` & `prototype`
* - assumes no infinite circular possible (unhandled for perf)
*
* Pass empty object `{}` as `target` to return a new object without modifying any existing objects.
*/
export declare function objectAssignDeep<T extends UnknownRecord, S extends readonly UnknownRecord[]>(target: T, ...sources: S): T & UnionToIntersection<S[number]>;
//# sourceMappingURL=objectAssignDeep.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"objectAssignDeep.d.ts","sourceRoot":"","sources":["../../lib/util/objectAssignDeep.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,GAAG;IAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAA;CAAC,CAAC;AA+B3F;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,aAAa,EAAE,CAAC,SAAS,SAAS,aAAa,EAAE,EACxF,MAAM,EAAE,CAAC,EACT,GAAG,OAAO,EAAE,CAAC,GACd,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAsBpC"}
+2
View File
@@ -0,0 +1,2 @@
export declare function onboard(): Promise<boolean>;
//# sourceMappingURL=onboarding.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../lib/util/onboarding.ts"],"names":[],"mappings":"AAgQA,wBAAsB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAgEhD"}
+10
View File
@@ -0,0 +1,10 @@
/**
* Handle sd_notify protocol, @see https://www.freedesktop.org/software/systemd/man/latest/sd_notify.html
* No-op if running on unsupported platforms or without Type=notify
* Soft-fails if improperly setup (this is not necessary for Zigbee2MQTT to function properly)
*/
export declare function initSdNotify(): Promise<{
notifyStopping: () => void;
stop: () => void;
} | undefined>;
//# sourceMappingURL=sd-notify.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"sd-notify.d.ts","sourceRoot":"","sources":["../../lib/util/sd-notify.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAC,cAAc,EAAE,MAAM,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,IAAI,CAAA;CAAC,GAAG,SAAS,CAAC,CA0DxG"}
+238
View File
@@ -0,0 +1,238 @@
import schemaJson from "./settings.schema.json";
export { schemaJson };
export declare const CURRENT_VERSION = 5;
/** NOTE: by order of priority, lower index is lower level (more important) */
export declare const LOG_LEVELS: readonly string[];
export type LogLevel = "error" | "warning" | "info" | "debug";
export declare const defaults: {
homeassistant: {
enabled: false;
discovery_topic: string;
status_topic: string;
legacy_action_sensor: false;
experimental_event_entities: false;
};
availability: {
enabled: false;
active: {
timeout: number;
max_jitter: number;
backoff: true;
pause_on_backoff_gt: number;
};
passive: {
timeout: number;
};
};
frontend: {
enabled: false;
package: "zigbee2mqtt-windfront";
port: number;
base_url: string;
};
mqtt: {
base_topic: string;
include_device_information: false;
force_disable_retain: false;
maximum_packet_size: number;
keepalive: number;
reject_unauthorized: true;
version: 4;
};
serial: {
disable_led: false;
};
passlist: never[];
blocklist: never[];
map_options: {
graphviz: {
colors: {
fill: {
enddevice: string;
coordinator: string;
router: string;
};
font: {
coordinator: string;
router: string;
enddevice: string;
};
line: {
active: string;
inactive: string;
};
};
};
};
ota: {
update_check_interval: number;
disable_automatic_update_check: false;
image_block_request_timeout: number;
image_block_response_delay: number;
default_maximum_data_size: number;
};
device_options: {};
advanced: {
log_rotation: true;
log_console_json: false;
log_symlink_current: false;
log_output: ("console" | "file")[];
log_directory: string;
log_file: string;
log_level: "debug" | "info";
log_namespaced_levels: {};
log_syslog: {};
log_debug_to_mqtt_frontend: false;
log_debug_namespace_ignore: string;
log_directories_to_keep: number;
pan_id: number;
ext_pan_id: number[];
channel: number;
adapter_concurrent: undefined;
adapter_delay: undefined;
cache_state: true;
cache_state_persistent: true;
cache_state_send_on_startup: true;
last_seen: "disable";
elapsed: false;
network_key: number[];
timestamp_format: string;
output: "json";
enable_external_js: true;
};
health: {
interval: number;
reset_on_check: false;
};
};
export declare function writeMinimalDefaults(): void;
export declare function setOnboarding(value: boolean): void;
export declare function write(): void;
export declare function validate(): string[];
export declare function validateNonRequired(): string[];
/**
* Get the settings actually written in the yaml.
* Env vars are applied on top.
* Defaults merged on startup are not included.
*/
export declare function getPersistedSettings(): Partial<Settings>;
export declare function get(): Settings;
export declare function set(path: string[], value: string | number | boolean | KeyValue): void;
export declare function apply(settings: Record<string, unknown>, throwOnError?: boolean): boolean;
export declare function getGroup(IDorName: string | number): GroupOptions | undefined;
export declare function getDevice(IDorName: string): DeviceOptionsWithId | undefined;
export declare function addDevice(id: string): DeviceOptionsWithId;
export declare function blockDevice(id: string): void;
export declare function removeDevice(IDorName: string): void;
export declare function addGroup(name: string, id?: string): GroupOptions;
export declare function removeGroup(IDorName: string | number): void;
export declare function changeEntityOptions(IDorName: string, newOptions: KeyValue): boolean;
export declare function changeFriendlyName(IDorName: string, newName: string): void;
export declare function reRead(): void;
export declare const testing: {
write: typeof write;
clear: () => void;
defaults: {
homeassistant: {
enabled: false;
discovery_topic: string;
status_topic: string;
legacy_action_sensor: false;
experimental_event_entities: false;
};
availability: {
enabled: false;
active: {
timeout: number;
max_jitter: number;
backoff: true;
pause_on_backoff_gt: number;
};
passive: {
timeout: number;
};
};
frontend: {
enabled: false;
package: "zigbee2mqtt-windfront";
port: number;
base_url: string;
};
mqtt: {
base_topic: string;
include_device_information: false;
force_disable_retain: false;
maximum_packet_size: number;
keepalive: number;
reject_unauthorized: true;
version: 4;
};
serial: {
disable_led: false;
};
passlist: never[];
blocklist: never[];
map_options: {
graphviz: {
colors: {
fill: {
enddevice: string;
coordinator: string;
router: string;
};
font: {
coordinator: string;
router: string;
enddevice: string;
};
line: {
active: string;
inactive: string;
};
};
};
};
ota: {
update_check_interval: number;
disable_automatic_update_check: false;
image_block_request_timeout: number;
image_block_response_delay: number;
default_maximum_data_size: number;
};
device_options: {};
advanced: {
log_rotation: true;
log_console_json: false;
log_symlink_current: false;
log_output: ("console" | "file")[];
log_directory: string;
log_file: string;
log_level: "debug" | "info";
log_namespaced_levels: {};
log_syslog: {};
log_debug_to_mqtt_frontend: false;
log_debug_namespace_ignore: string;
log_directories_to_keep: number;
pan_id: number;
ext_pan_id: number[];
channel: number;
adapter_concurrent: undefined;
adapter_delay: undefined;
cache_state: true;
cache_state_persistent: true;
cache_state_send_on_startup: true;
last_seen: "disable";
elapsed: false;
network_key: number[];
timestamp_format: string;
output: "json";
enable_external_js: true;
};
health: {
interval: number;
reset_on_check: false;
};
};
CURRENT_VERSION: number;
};
//# sourceMappingURL=settings.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../lib/util/settings.ts"],"names":[],"mappings":"AAKA,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAIhD,OAAO,EAAC,UAAU,EAAC,CAAC;AAGpB,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,8EAA8E;AAC9E,eAAO,MAAM,UAAU,EAAE,SAAS,MAAM,EAAmD,CAAC;AAC5F,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAY9D,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;YAWH,OAAO;;;;;;;;;;;;;;;;;;;;;;;;QAwBjB,QAAQ;YACJ,MAAM;gBACF,IAAI;oBACA,SAAS;oBACT,WAAW;oBACX,MAAM;;gBAEV,IAAI;oBACA,WAAW;oBACX,MAAM;oBACN,SAAS;;gBAEb,IAAI;oBACA,MAAM;oBACN,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6CU,CAAC;AAmCvC,wBAAgB,oBAAoB,IAAI,IAAI,CA+B3C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAclD;AAED,wBAAgB,KAAK,IAAI,IAAI,CA0D5B;AAED,wBAAgB,QAAQ,IAAI,MAAM,EAAE,CAoDnC;AAED,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAW9C;AA8GD;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAAC,QAAQ,CAAC,CAMxD;AAED,wBAAgB,GAAG,IAAI,QAAQ,CAO9B;AAED,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,CAkBrF;AAED,wBAAgB,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,UAAO,GAAG,OAAO,CAuBrF;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,CAe5E;AAYD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAe3E;AAWD,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,CAgBzD;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAQ5C;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAKnD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,YAAY,CAiChE;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO3D;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,GAAG,OAAO,CAiCnF;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAwB1E;AAED,wBAAgB,MAAM,IAAI,IAAI,CAK7B;AAED,eAAO,MAAM,OAAO;;iBAEL,IAAI;;;;;;;;;;;;;;;;;;gBA/pBD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;YAwBjB,QAAQ;gBACJ,MAAM;oBACF,IAAI;wBACA,SAAS;wBACT,WAAW;wBACX,MAAM;;oBAEV,IAAI;wBACA,WAAW;wBACX,MAAM;wBACN,SAAS;;oBAEb,IAAI;wBACA,MAAM;wBACN,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+nB3B,CAAC"}
+1019
View File
File diff suppressed because it is too large Load Diff
+11
View File
@@ -0,0 +1,11 @@
/**
* Order of execution:
* - Transfer
* - Change
* - Add
* - Remove
*
* Should allow the most flexibility whenever combination of migrations is necessary (e.g. Transfer + Change)
*/
export declare function migrateIfNecessary(): void;
//# sourceMappingURL=settingsMigration.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"settingsMigration.d.ts","sourceRoot":"","sources":["../../lib/util/settingsMigration.ts"],"names":[],"mappings":"AAshBA;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAoGzC"}
+11
View File
@@ -0,0 +1,11 @@
import type { IncomingMessage, ServerResponse } from "node:http";
export type StaticFileServer = (request: IncomingMessage, response: ServerResponse) => void;
/** Terminal `404` handler for requests no file matched, mirroring the response `finalhandler` used to produce. */
export declare function sendNotFound(request: IncomingMessage, response: ServerResponse): void;
/**
* Serves `dir` on top of a plain `node:http` server, preferring the precompressed `.br`/`.gz` variant of a file when the client accepts it.
*
* Requests that match no file are answered by {@link sendNotFound}.
*/
export declare function createStaticFileServer(dir: string, logError: (message: string) => void): StaticFileServer;
//# sourceMappingURL=staticFileServer.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"staticFileServer.d.ts","sourceRoot":"","sources":["../../lib/util/staticFileServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,eAAe,EAAE,cAAc,EAAC,MAAM,WAAW,CAAC;AAI/D,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;AAI5F,kHAAkH;AAClH,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,CAYrF;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,gBAAgB,CAoCzG"}
+2
View File
@@ -0,0 +1,2 @@
export declare function stringify(value: object): string;
//# sourceMappingURL=stringify.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"stringify.d.ts","sourceRoot":"","sources":["../../lib/util/stringify.ts"],"names":[],"mappings":"AA2JA,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C"}
+96
View File
@@ -0,0 +1,96 @@
import type * as zhc from "zigbee-herdsman-converters";
import type { Zigbee2MQTTAPI, Zigbee2MQTTResponse, Zigbee2MQTTResponseEndpoints, Zigbee2MQTTScene } from "../types/api";
export declare const DEFAULT_BIND_GROUP_ID = 901;
declare function capitalize(s: string): string;
export declare function getZigbee2MQTTVersion(includeCommitHash?: boolean): Promise<{
commitHash?: string;
version: string;
}>;
declare function getDependencyVersion(depend: string): Promise<{
version: string;
}>;
declare function formatDate(time: number, type: "ISO_8601" | "ISO_8601_local" | "epoch" | "relative"): string | number;
declare function objectIsEmpty(object: object): boolean;
declare function objectHasProperties(object: {
[s: string]: unknown;
}, properties: string[]): boolean;
declare function equalsPartial(object: KeyValue, expected: KeyValue): boolean;
declare function getObjectProperty<T>(object: KeyValue, key: string, defaultValue: NoInfer<T>): T;
declare function getResponse<T extends Zigbee2MQTTResponseEndpoints>(request: KeyValue | string, data: Zigbee2MQTTAPI[T], error?: string): Zigbee2MQTTResponse<T>;
declare function parseJSON(value: string, fallback: string): KeyValue | string;
/**
* Delete all keys from passed object that have null/undefined values.
*
* @param {KeyValue} obj Object to process (in-place)
* @param {string[]} [ignoreKeys] Recursively ignore these keys in the object (keep null/undefined values).
*/
declare function removeNullPropertiesFromObject(obj: KeyValue, ignoreKeys?: string[]): void;
declare function toNetworkAddressHex(value: number): string;
declare function getAllFiles(path_: string): string[];
declare function validateFriendlyName(name: string, throwFirstError?: boolean): string[];
declare function sleep(seconds: number): Promise<void>;
declare function sanitizeImageParameter(parameter: string): string;
declare function isAvailabilityEnabledForEntity(entity: Device | Group, settings: Settings): boolean;
declare function isZHEndpoint(obj: unknown): obj is zh.Endpoint;
declare function flatten<Type>(arr: Type[][]): Type[];
declare function arrayUnique<Type>(arr: Type[]): Type[];
declare function isZHGroup(obj: unknown): obj is zh.Group;
export declare const hours: (hours: number) => number;
export declare const minutes: (minutes: number) => number;
export declare const seconds: (seconds: number) => number;
declare function publishLastSeen(data: eventdata.LastSeenChanged, settings: Settings, allowMessageEmitted: boolean, publishEntityState: PublishEntityState): Promise<void>;
declare function filterProperties(filter: string[] | undefined, data: KeyValue): void;
export declare function isNumericExpose(expose: zhc.Expose): expose is zhc.Numeric;
export declare function assertEnumExpose(expose: zhc.Expose): asserts expose is zhc.Enum;
export declare function assertNumericExpose(expose: zhc.Expose): asserts expose is zhc.Numeric;
export declare function assertBinaryExpose(expose: zhc.Expose): asserts expose is zhc.Binary;
export declare function isEnumExpose(expose: zhc.Expose): expose is zhc.Enum;
export declare function isBinaryExpose(expose: zhc.Expose): expose is zhc.Binary;
export declare function isLightExpose(expose: zhc.Expose): expose is zhc.Light;
export declare function assertString(value: unknown, property: string): asserts value is string;
declare function getScenes(entity: zh.Endpoint | zh.Group): Zigbee2MQTTScene[];
declare function deviceNotCoordinator(device: zh.Device): boolean;
declare function matchBase64File(value: string | undefined): {
extension: string;
data: string;
} | false;
declare function saveBase64DeviceIcon(base64Match: {
extension: string;
data: string;
}): string;
declare const noop: () => void;
declare const _default: {
matchBase64File: typeof matchBase64File;
saveBase64DeviceIcon: typeof saveBase64DeviceIcon;
capitalize: typeof capitalize;
getZigbee2MQTTVersion: typeof getZigbee2MQTTVersion;
getDependencyVersion: typeof getDependencyVersion;
formatDate: typeof formatDate;
objectIsEmpty: typeof objectIsEmpty;
objectHasProperties: typeof objectHasProperties;
equalsPartial: typeof equalsPartial;
getObjectProperty: typeof getObjectProperty;
getResponse: typeof getResponse;
parseJSON: typeof parseJSON;
removeNullPropertiesFromObject: typeof removeNullPropertiesFromObject;
toNetworkAddressHex: typeof toNetworkAddressHex;
isZHEndpoint: typeof isZHEndpoint;
isZHGroup: typeof isZHGroup;
hours: typeof hours;
minutes: typeof minutes;
seconds: typeof seconds;
validateFriendlyName: typeof validateFriendlyName;
sleep: typeof sleep;
sanitizeImageParameter: typeof sanitizeImageParameter;
isAvailabilityEnabledForEntity: typeof isAvailabilityEnabledForEntity;
publishLastSeen: typeof publishLastSeen;
getAllFiles: typeof getAllFiles;
filterProperties: typeof filterProperties;
flatten: typeof flatten;
arrayUnique: typeof arrayUnique;
getScenes: typeof getScenes;
deviceNotCoordinator: typeof deviceNotCoordinator;
noop: typeof noop;
};
export default _default;
//# sourceMappingURL=utils.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/util/utils.ts"],"names":[],"mappings":"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"}
+17
View File
@@ -0,0 +1,17 @@
import { YAMLException } from "js-yaml";
export declare class YAMLFileException extends YAMLException {
file: string;
constructor(error: YAMLException, file: string);
}
declare function read(file: string): KeyValue;
declare function readIfExists(file: string, fallback?: KeyValue): KeyValue;
declare function writeIfChanged(file: string, content: KeyValue): void;
declare function updateIfChanged(file: string, key: string, value: KeyValue): void;
declare const _default: {
read: typeof read;
readIfExists: typeof readIfExists;
updateIfChanged: typeof updateIfChanged;
writeIfChanged: typeof writeIfChanged;
};
export default _default;
//# sourceMappingURL=yaml.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../../lib/util/yaml.ts"],"names":[],"mappings":"AAIA,OAAO,EAAa,aAAa,EAAC,MAAM,SAAS,CAAC;AAElD,qBAAa,iBAAkB,SAAQ,aAAa;IAChD,IAAI,EAAE,MAAM,CAAC;IAEb,YAAY,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAQ7C;CACJ;AAED,iBAAS,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAYpC;AAED,iBAAS,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,QAAa,GAAG,QAAQ,CAErE;AAED,iBAAS,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,IAAI,CAM7D;AAED,iBAAS,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,IAAI,CAMzE"}
+57
View File
@@ -0,0 +1,57 @@
import { Controller } from "zigbee-herdsman";
import Device from "./model/device";
import Group from "./model/group";
export default class Zigbee {
#private;
private eventBus;
private groupLookup;
private deviceLookup;
private coordinatorIeeeAddr;
constructor(eventBus: EventBus);
get zhController(): Controller;
start(abortSignal: AbortSignal): Promise<boolean>;
private logDeviceInterview;
private generateNetworkKey;
private generateExtPanID;
private generatePanID;
getCoordinatorVersion(): Promise<zh.CoordinatorVersion>;
isStopping(): boolean;
backup(): Promise<void>;
coordinatorCheck(): Promise<{
missingRouters: Device[];
}>;
getNetworkParameters(): Promise<zh.NetworkParameters>;
stop(): Promise<void>;
getPermitJoin(): boolean;
getPermitJoinEnd(): number | undefined;
permitJoin(time: number, device?: Device): Promise<void>;
resolveDevicesDefinitions(ignoreCache?: boolean, abortSignal?: AbortSignal | undefined): Promise<void>;
private resolveDevice;
private resolveGroup;
resolveEntity(key: string | number | zh.Device): Device | Group | undefined;
resolveEntityAndEndpoint(id: string): {
ID: string;
entity: Device | Group | undefined;
endpointID?: string;
endpoint?: zh.Endpoint;
};
firstCoordinatorEndpoint(): zh.Endpoint;
devicesAndGroupsIterator(devicePredicate?: (value: zh.Device) => boolean, groupPredicate?: (value: zh.Group) => boolean): Generator<Device | Group>;
groupsIterator(predicate?: (value: zh.Group) => boolean): Generator<Group>;
devicesIterator(predicate?: (value: zh.Device) => boolean): Generator<Device>;
private acceptJoiningDeviceHandler;
touchlinkFactoryResetFirst(): Promise<boolean>;
touchlinkFactoryReset(ieeeAddr: string, channel: number): Promise<boolean>;
addInstallCode(installCode: string): Promise<void>;
touchlinkIdentify(ieeeAddr: string, channel: number): Promise<void>;
touchlinkScan(): Promise<{
ieeeAddr: string;
channel: number;
}[]>;
createGroup(id: number): Group;
deviceByNetworkAddress(networkAddress: number): Device | undefined;
groupByID(id: number): Group | undefined;
removeDeviceFromLookup(ieee: string): boolean;
removeGroupFromLookup(id: number): boolean;
}
//# sourceMappingURL=zigbee.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"zigbee.d.ts","sourceRoot":"","sources":["../lib/zigbee.ts"],"names":[],"mappings":"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"}
-37
View File
@@ -1,37 +0,0 @@
FROM node:14-alpine3.12 as base
WORKDIR /app
RUN apk add --no-cache tzdata eudev tini
COPY package.json ./
# Dependencies and build
FROM base as dependencies_and_build
COPY npm-shrinkwrap.json tsconfig.json index.js ./
COPY lib ./lib
RUN apk add --no-cache --virtual .buildtools make gcc g++ python3 linux-headers git && \
npm ci --no-audit --no-optional --no-update-notifier && \
npm run build && \
rm -rf node_modules && \
npm ci --production --no-audit --no-optional --no-update-notifier && \
apk del .buildtools
# Release
FROM base as release
COPY --from=dependencies_and_build /app/node_modules ./node_modules
COPY --from=dependencies_and_build /app/dist ./dist
COPY LICENSE index.js data/configuration.yaml ./
COPY docker/docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
RUN mkdir /app/data
ARG COMMIT
RUN echo "$COMMIT" > dist/.hash
ENTRYPOINT ["docker-entrypoint.sh"]
CMD [ "/sbin/tini", "--", "node", "index.js"]
-14
View File
@@ -1,14 +0,0 @@
version: '3'
services:
zigbee2mqtt:
container_name: zigbee2mqtt
image: koenkk/zigbee2mqtt
volumes:
- ./data:/app/data
devices:
# CC251
#- /dev/ttyUSB_cc2531:/dev/ttyACM0
# CC2530 / GBAN GB2530S
#- /dev/ttyUSB_cc2530:/dev/ttyACM0
restart: always
network_mode: host

Some files were not shown because too many files have changed in this diff Show More